diff --git a/.gitignore b/.gitignore index 05b994c..f256c54 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ configure install-sh missing *.tmp +*_timestamp diff --git a/src/render_icons.sh b/src/render_icons.sh old mode 100644 new mode 100755 index 9152e8d..3864c08 --- a/src/render_icons.sh +++ b/src/render_icons.sh @@ -1,7 +1,6 @@ #!/bin/bash INKSCAPE="/usr/bin/inkscape" -OPTIPNG="/usr/bin/optipng" pushd `dirname $0` > /dev/null DIR="$( cd "$(dirname "$0")" ; pwd -P )" @@ -9,62 +8,73 @@ popd > /dev/null cd ${DIR} +TYPES=(actions apps categories devices emblems mimetypes places status) +SIZES=(16 22 24 32 48 64 96 128) + THEMEDIR=../Arc -mkdir -p $THEMEDIR +# Set up all the folders in the theme directory. +mkdir -p $THEMEDIR/{actions,apps,categories,devices,emblems,mimetypes,places,status}/{16,22,24,32,48,64,96,128}{,@2x} + +cp -u index.theme $THEMEDIR/index.theme -for CONTEXT in actions apps categories devices emblems mimetypes places status +for CONTEXT in ${TYPES[@]} do + for SIZE in ${SIZES[@]} + do + cp -ru $CONTEXT/symlinks/* $THEMEDIR/$CONTEXT/$SIZE + cp -ru $CONTEXT/symlinks/* $THEMEDIR/$CONTEXT/$SIZE@2x + cp -ru $CONTEXT/symbolic $THEMEDIR/$CONTEXT + done +done - mkdir -p $THEMEDIR/$CONTEXT - mkdir -p $THEMEDIR/$CONTEXT +rm -rf $THEMEDIR/actions/{32,32@2x,48,48@2x,64,64@2x,96,96@2x,128,128@2x} # derp - cp -r $CONTEXT/symbolic $THEMEDIR/$CONTEXT +# TODO +cp -ru animations $THEMEDIR/. +cp -ru panel $THEMEDIR/. - for SIZE in 16 22 24 32 48 64 96 128 - do - $INKSCAPE -S $CONTEXT.svg | grep -E "_$SIZE" | sed 's/\,.*$//' > index.tmp - mkdir -p $THEMEDIR/$CONTEXT/$SIZE - mkdir -p $THEMEDIR/$CONTEXT/$SIZE@2x +# Generates inkscape export commands for the given +# svg-file that can be piped to inkscape. +genInkscapeCmds() { - cp -r $CONTEXT/symlinks/* $THEMEDIR/$CONTEXT/$SIZE - cp -r $CONTEXT/symlinks/* $THEMEDIR/$CONTEXT/$SIZE@2x + local CONTEXT=$1 - for OBJECT_ID in `cat index.tmp` + for SIZE in ${SIZES[@]} + do + echo "Rendering icons $CONTEXT.svg @$SIZE" >&2 + for OBJECT_ID in `cat <($INKSCAPE -S $CONTEXT.svg | grep -E "_$SIZE" | sed 's/\,.*$//')` do - - ICON_NAME=$(sed "s/\_$SIZE.*$//" <<< $OBJECT_ID) - - if [ -f $THEMEDIR/$CONTEXT/$SIZE/$ICON_NAME.png ]; then - echo $THEMEDIR/$CONTEXT/$SIZE/$ICON_NAME.png exists. - else - echo - echo Rendering $THEMEDIR/$CONTEXT/$SIZE/$ICON_NAME.png - $INKSCAPE --export-id=$OBJECT_ID \ - --export-id-only \ - --export-png=$THEMEDIR/$CONTEXT/$SIZE/$ICON_NAME.png $CONTEXT.svg >/dev/null \ - && $OPTIPNG -o7 --quiet $ASSETS_DIR/$i.png - fi - if [ -f $THEMEDIR/$CONTEXT/$SIZE@2x/$ICON_NAME.png ]; then - echo $THEMEDIR/$CONTEXT/$SIZE@2x/$ICON_NAME.png exists. - else - echo - echo Rendering $THEMEDIR/$CONTEXT/$SIZE@2x/$ICON_NAME.png - $INKSCAPE --export-id=$OBJECT_ID \ - --export-dpi=180 \ - --export-id-only \ - --export-png=$THEMEDIR/$CONTEXT/$SIZE@2x/$ICON_NAME.png $CONTEXT.svg >/dev/null \ - && $OPTIPNG -o7 --quiet $ASSETS_DIR/$i@2.png - fi + local ICON_NAME=$(sed "s/\_$SIZE.*$//" <<< $OBJECT_ID) + + echo \ + "--export-id=$OBJECT_ID" \ + "--export-id-only" \ + "--export-png=$THEMEDIR/$CONTEXT/$SIZE/$ICON_NAME.png $CONTEXT.svg" + + echo \ + "--export-id=$OBJECT_ID" \ + "--export-dpi=180" \ + "--export-id-only" \ + "--export-png=$THEMEDIR/$CONTEXT/$SIZE@2x/$ICON_NAME.png $CONTEXT.svg" done done +} + +for CONTEXT in ${TYPES[@]} +do + # Only render out the icons if the svg-file has been modified + # since we finished rendering it out last. + if [[ $CONTEXT.svg -nt .${CONTEXT}_timestamp ]] + then + genInkscapeCmds $CONTEXT | $INKSCAPE --shell > /dev/null && touch .${CONTEXT}_timestamp & + else + echo "No changes to $CONTEXT.svg, skipping..." + fi done -rm index.tmp -cp index.theme $THEMEDIR/index.theme -rm -rf $THEMEDIR/actions/{32,32@2x,48,48@2x,64,64@2x,96,96@2x,128,128@2x} # derp +wait -# TODO -cp -r animations $THEMEDIR/. -cp -r panel $THEMEDIR/. +# Remove all empty directories from the theme folder. +find $THEMEDIR -type d -empty -delete