You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
horst3180_arc-icon-theme/src/render_icons.sh

124 lines
3.5 KiB

#!/bin/bash
INKSCAPE="/usr/bin/inkscape"
pushd `dirname $0` > /dev/null
DIR="$( cd "$(dirname "$0")" ; pwd -P )"
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
# 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 ${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
rm -rf $THEMEDIR/actions/{32,32@2x,48,48@2x,64,64@2x,96,96@2x,128,128@2x} # derp
# TODO
cp -ru animations $THEMEDIR/.
cp -ru panel $THEMEDIR/.
# Ensure cache folder exists
mkdir .cache
# Takes in an svg-file and an object-id and formats it
# to an inkscape export shell command that inkscape can
# then execute.
formatInkscapeCmd() {
local CONTEXT=$1
local OBJECT_ID=$2
local SIZE=$(sed -r 's/.*\_([0-9]+).*$/\1/' <<< $OBJECT_ID)
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"
}
# Generates inkscape export commands for the given
# svg-file that can be piped to inkscape.
genInkscapeCmds() {
local CONTEXT=$1
for SIZE in ${SIZES[@]}
do
for OBJECT_ID in `cat <($INKSCAPE -S $CONTEXT.svg | grep -E "_$SIZE" | sed 's/\,.*$//')`
do
echo $OBJECT_ID >> .cache/$CONTEXT.cache.tmp
formatInkscapeCmd $CONTEXT $OBJECT_ID
done
done
mv .cache/$CONTEXT.cache.tmp .cache/$CONTEXT.cache
}
# Generates inkscape export commands that matches
# the provided regex pattern.
genInkscapeCmdsFiltered() {
local CONTEXT=$1
local REGEX=$2
while read -r OBJECT_ID
do
echo "Match: $OBJECT_ID" >&2
formatInkscapeCmd $CONTEXT $OBJECT_ID
done < <(grep -E $REGEX .cache/$CONTEXT.cache)
}
if [[ ! -z $1 ]]
then
echo "Rendering objects with IDs matching regex"
for CONTEXT in ${TYPES[@]}
do
if [[ -f .cache/$CONTEXT.cache ]] || { [[ ! -f .cache/$CONTEXT.cache ]] && ($INKSCAPE -S $CONTEXT.svg | grep -E "_[0-9]+" | sed 's/\,.*$//' > .cache/$CONTEXT.cache.tmp); }
then
mv .cache/$CONTEXT.cache.tmp .cache/$CONTEXT.cache 2> /dev/null
genInkscapeCmdsFiltered $CONTEXT $1 | java SplitJob $INKSCAPE --shell
else
echo "Failed creating creating object-ID cache for $CONTEXT.svg"
fi
done
else
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 .cache/${CONTEXT}_timestamp ]]
then
echo "Rendering icons from $CONTEXT.svg"
genInkscapeCmds $CONTEXT | java SplitJob $INKSCAPE --shell && touch .cache/${CONTEXT}_timestamp
else
echo "No changes to $CONTEXT.svg, skipping..."
fi
done
fi
# Remove all empty directories from the theme folder.
find $THEMEDIR -type d -empty -delete