| #!/bin/sh |
| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Prepares image resources into output folder. |
| |
| # Composition settings |
| BACKGROUND_COLOR=white |
| |
| # The only file that uses different scaling parameter. |
| BACKGROUND_IMAGE=Background_white.png |
| |
| # Output file name. |
| BMPBLK_OUTPUT="bmpblock.bin" |
| |
| die() { |
| echo "ERROR: $*" >&2 |
| exit 1 |
| } |
| |
| convert_to_bmp3() { |
| local input="$1" |
| local folder="$2" |
| local param="$3" |
| local output="$(basename "$input")" |
| |
| # Always output as .bmp |
| output="${output%.*}.bmp" |
| mkdir -p "$folder" |
| |
| # When input has Alpha channel, we need to fill the background properly |
| # otherwise ImageMagick will fill it with black. The operation (-flatten) is |
| # so slow so we only want to do that if the input source really has |
| # transparency. |
| if [ "$#" -gt 3 ]; then |
| flatten="$4" |
| else |
| # Auto-detect |
| if [ "$(identify -format "%A" "$input")" = "True" ]; then |
| flatten="-background $BACKGROUND_COLOR -flatten" |
| else |
| flatten="" |
| fi |
| fi |
| |
| echo "$input -> $folder/$output $flatten" |
| convert "$input" $flatten \ |
| -compress none -alpha off -colors 256 \ |
| $param "BMP3:$folder/$output" |
| |
| # ImageMagic quantization may choose arbitrary color depth, even if we assign |
| # -depth or -colors; so a single-color background may become 1 bit per pixel |
| # after convertion. To workaround that, we use Python Image Library which |
| # always generates 8bpp BMP file. |
| # TODO(hungte) Find a better way to decide if PIL is required. Unfortunately, |
| # ImageMagic identify "%z" is not always what we're looking for... |
| local fn="$folder/$output" |
| local param="'P', dither=None, palette=Image.ADAPTIVE" |
| python -c "import Image; Image.open('$fn').convert($param).save('$fn')" |
| } |
| |
| main() { |
| local profile="$1" |
| local output="out_$1" |
| local scale_param="" background_scale_param="" replace_files="" |
| local base locale X |
| |
| # TODO(hungte) Derive and calculate profile params automatically. |
| |
| # Currently we use image resources originally designed for 1366x768, and |
| # re-scale to different aspects on demand. |
| case "$profile" in |
| std ) |
| # Standard: profile with all default values. |
| true |
| ;; |
| |
| # Native profiles |
| |
| n1366 ) |
| # "Native 1366x768" resolution. |
| background_scale_param="-scale 1366x768!" |
| ;; |
| |
| n1366usb ) |
| # Similar to n1366, and can only boot recovery by USB. |
| background_scale_param="-scale 1366x768!" |
| replace_files="insert=insert_usb BadSD=dummy RemoveDevices=RemoveUSB" |
| ;; |
| |
| n1366usb2 ) |
| # Similar to n1366, and can only boot recovery by SD card or USB2. |
| background_scale_param="-scale 1366x768!" |
| replace_files="insert=insert_sd_usb2" |
| ;; |
| |
| # Stretched profiles |
| |
| s800 ) |
| # "Streched 800x600". Designed for x86 UEFI BIOS (and coreboot), which |
| # always puts display into VESA 800x600 16-bit mode (0x0114), and is |
| # stretched to fill the entire screen. |
| scale_param="-scale 59%x78%" |
| background_scale_param="-scale 800x600!" |
| ;; |
| |
| s1024 ) |
| # Similar to s800, using VESA graphics mode 1024x768 (0x0117). |
| scale_param="-scale 75%x100%" |
| background_scale_param="-scale 1024x768!" |
| ;; |
| |
| s1024usb ) |
| # Similar to s1024, and can only boot recovery by USB2. (No card reader, |
| # not not able to recover from card reader.) |
| scale_param="-scale 75%x100%" |
| background_scale_param="-scale 1024x768!" |
| replace_files="insert=insert_usb BadSD=dummy RemoveDevices=RemoveUSB" |
| ;; |
| |
| s1024usb2 ) |
| # Similar to s1024, and can only boot recovery by SD card or USB2. |
| scale_param="-scale 75%x100%" |
| background_scale_param="-scale 1024x768!" |
| replace_files="insert=insert_sd_usb2" |
| ;; |
| |
| s1280a8x5 ) |
| # Similar to s1024, using VESA graphics mode 1280x1024 (0x011A), and |
| # adjusted for aspect ratio 8x5 panels. |
| background_scale_param="-scale 1280x1024!" |
| scale_param="-scale 94%x119%" # 119% = 133% * (1.6 / 1.78) |
| ;; |
| |
| s1280x850a8x5 ) |
| # Similar to s1280a8x5, using graphics mode 1280x850. |
| background_scale_param="-scale 1280x850!" |
| scale_param="-scale 94%x99%" # 99% = 110% * (1.6 / 1.78) |
| ;; |
| |
| * ) |
| die "Sorry, unknown profile $profile." |
| esac |
| |
| # Prepare output folder |
| rm -rf "$output" |
| mkdir -p "$output" |
| |
| # Prepare images in current folder |
| # TODO(hungte) Deprecate arrow*.bmp by markup ◀ and ▶, and |
| # Url.bmp by <span foreground="blue">http://</span>. |
| for X in *.png assets/*.png; do |
| if [ "$X" = "$BACKGROUND_IMAGE" ]; then |
| convert_to_bmp3 "$X" "$output" "$background_scale_param" |
| else |
| convert_to_bmp3 "$X" "$output" "$scale_param" |
| fi |
| done |
| |
| # Prepares strings and localized images. All these images were rendered by |
| # pango-view and should not have transparency, so we specify flatten="" to |
| # speed up. |
| echo "Preparing common strings..." |
| base="../strings" |
| for X in $base/*.png; do |
| convert_to_bmp3 "$X" "$output" "$scale_param" "" |
| done |
| |
| echo "Preparing localized messages... $LOCALES" |
| base="../strings/localized_text" |
| if [ -z "$LOCALES" ]; then |
| # Collect all locales |
| for X in $(cd $base; ls); do |
| if [ -d "$base/$X" ]; then |
| LOCALES="${LOCALES}${X} " |
| fi |
| done |
| echo "Found locales: $LOCALES" |
| fi |
| for locale in $LOCALES; do |
| # Prepare all locales. |
| for X in $base/$locale/*.png; do |
| convert_to_bmp3 "$X" "$output/locale/$locale" "$scale_param" "" |
| done |
| done |
| |
| if [ -n "$replace_files" ]; then |
| echo "Replacing files..." |
| echo "$replace_files" | tr ' ' '\n' | while read X; do |
| local Xdest="${X%%=*}" Xsrc="${X##*=}" Xfile="" |
| echo " $Xsrc => $Xdest" |
| for Xfile in $(find "$output" -name "$Xsrc.bmp"); do |
| echo " * $Xfile" |
| mv "$Xfile" "$(dirname "$Xfile")/$Xdest.bmp" |
| done |
| done |
| fi |
| |
| echo "Preparing fonts..." |
| base="../strings/font" |
| for X in $base/*.png; do |
| convert_to_bmp3 "$X" "$output/font" "$scale_param" "" |
| done |
| bmpblk_font --outfile "$output/hwid_fonts.bin" "$output"/font/*.bmp |
| |
| # Create YAML file. |
| (cd "$output" && ../make_default_yaml $LOCALES) |
| |
| # Compile bitmap block file. |
| (cd "$output" && bmpblk_utility -c DEFAULT.yaml $BMPBLK_OUTPUT) |
| ls -l "$output/$BMPBLK_OUTPUT" |
| } |
| |
| set -e |
| main "$@" |
| |