DeforaOS Artwork
#!/bin/sh
#$Id$
#Copyright (c) 2014-2021 Pierre Pronchery <khorben@defora.org>
#This file is part of DeforaOS Artwork
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
#AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
#FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
#SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
#OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#variables
BGCOLOR="black"
FGCOLOR="white"
FONT="FontAwesome"
ICONS="
actions/application-exit
actions/appointment-new
actions/appointment-soon
actions/call-start
actions/contact-new
actions/document-new
actions/document-open
actions/document-open-recent
actions/document-print
actions/document-properties
actions/document-revert
actions/document-save
actions/document-save-as
actions/document-send
actions/edit-clear
actions/edit-copy
actions/edit-cut
actions/edit-delete
actions/edit-find
actions/edit-paste
actions/edit-redo
actions/edit-select-all
actions/edit-undo
actions/format-indent-less
actions/format-indent-more
actions/format-justify-center
actions/format-justify-fill
actions/format-justify-left
actions/format-justify-right
actions/format-text-bold
actions/format-text-italic
actions/format-text-strikethrough
actions/format-text-underline
actions/go-down
actions/go-home
actions/go-next
actions/go-previous
actions/go-up
actions/help-about
actions/help-contents
actions/list-add
actions/list-remove
actions/mail-message-new
actions/media-eject
actions/media-playback-pause
actions/media-playback-start
actions/media-playback-stop
actions/media-record
actions/media-seek-forward
actions/media-seek-backward
actions/media-skip-backward
actions/media-skip-forward
actions/object-flip-horizontal
actions/object-flip-vertical
actions/object-rotate-left
actions/object-rotate-right
actions/process-stop
actions/system-lock-screen
actions/system-log-out
actions/system-run
actions/system-search
actions/system-shutdown
actions/view-fullscreen
actions/view-refresh
actions/view-sort-ascending
actions/view-sort-descending
actions/window-close
actions/zoom-in
actions/zoom-original
actions/zoom-out
apps/accessories-calculator
apps/accessories-text-editor
apps/help-browser
apps/preferences-desktop-accessibility
apps/preferences-desktop-font
apps/preferences-desktop-locale
apps/preferences-system-windows
apps/system-file-manager
apps/system-users
apps/user-info
apps/utilities-system-monitor
apps/utilities-terminal
apps/web-browser
categories/applications-development
categories/applications-engineering
categories/applications-games
categories/applications-graphics
categories/applications-internet
categories/applications-multimedia
categories/applications-office
categories/applications-science
categories/applications-system
categories/preferences-desktop
devices/audio-input-microphone
devices/camera-photo
devices/camera-video
devices/drive-harddisk
devices/input-gaming
devices/input-keyboard
devices/drive-optical
devices/media-optical
devices/media-floppy
devices/modem
devices/network-wireless
devices/phone
devices/printer
devices/video-display
mimetypes/image-x-generic
mimetypes/package-x-generic
mimetypes/x-office-calendar
places/folder
places/folder-download
places/folder-music
places/folder-pictures
places/folder-publicshare
places/folder-videos
places/network-workgroup
places/user-bookmarks
places/user-trash
status/audio-volume-muted
status/changes-allow
status/changes-prevent
status/dialog-error
status/dialog-information
status/dialog-password
status/dialog-question
status/dialog-warning
status/folder-open
status/image-loading
status/mail-attachment
status/network-idle
status/network-receive
status/network-transmit
status/network-transmit-receive
status/network-offline"
PREFIX="/usr/local"
IMGEXT=".png"
PROGNAME="convert.sh"
SYMLINKS="
accessories-calculator apps/calc
accessories-calculator apps/gnome-calculator
accessories-calculator apps/kcalc
accessories-text-editor apps/kedit
accessories-text-editor apps/text-editor
application-exit actions/exit
application-exit actions/gtk-quit
application-exit actions/xfce-system-exit
applications-development categories/gnome-devel
applications-development categories/package_development
applications-development categories/redhat-programming
applications-games categories/gnome-joystick
applications-games categories/package_games
applications-games categories/redhat-games
applications-games categories/xfce-games
applications-graphics categories/gnome-graphics
applications-graphics categories/package_graphics
applications-graphics categories/redhat_graphics
applications-graphics categories/xfce-graphics
applications-internet categories/gnome-globe
applications-internet categories/package_network
applications-internet categories/redhat-internet
applications-internet categories/stock_internet
applications-internet categories/xfce-internet
applications-multimedia categories/gnome-multimedia
applications-multimedia categories/package_multimedia
applications-multimedia categories/redhat-sound_video
applications-multimedia categories/xfce-multimedia
applications-office categories/gnome-applications
applications-office categories/package_office
applications-office categories/redhat-office
applications-office categories/xfce-office
applications-system categories/gnome-system
applications-system categories/package_system
applications-system categories/redhat-system_tools
appointment-new actions/appointment
appointment-new actions/stock_new-appointment
appointment-soon actions/stock_appointment-reminder
audio-input-microphone devices/gnome-stock-mic
audio-input-microphone devices/stock_mic
audio-volume-muted status/stock_volume-mute
camera-photo devices/camera
camera-photo devices/camera_unmount
contact-new actions/stock_new-bcard
dialog-error status/gtk-dialog-error
dialog-error status/stock_dialog-error
dialog-information status/stock_dialog-info
dialog-information status/stock_dialog-info
dialog-password status/gtk-dialog-authentication
dialog-question status/gtk-dialog-question
dialog-question status/stock_dialog-question
dialog-warning status/gtk-dialog-warning
dialog-warning status/stock_dialog-warning
document-new actions/gtk-new
document-open actions/gtk-open
document-open actions/fileopen
document-print actions/fileprint
document-print actions/gtk-print
document-print actions/stock_print
document-properties actions/gtk-properties
document-properties actions/stock_properties
document-revert actions/gtk-revert-to-saved-ltr
document-revert actions/gtk-revert-to-saved-rtl
document-revert actions/revert
document-save actions/filesave
document-save actions/gtk-save
document-save actions/stock_save
document-save-as actions/filesaves
document-save-as actions/gtk-save-as
document-save-as actions/stock_save-as
drive-harddisk devices/gnome-dev-harddisk
drive-harddisk devices/gnome-dev-harddisk-1394
drive-harddisk devices/gnome-dev-harddisk-usb
drive-harddisk devices/gtk-harddisk
drive-harddisk devices/harddrive
drive-harddisk devices/hdd_unmount
drive-harddisk devices/yast_HD
drive-harddisk devices/yast_idetude
drive-optical devices/drive-cdrom
drive-optical devices/gnome-dev-cdrom
drive-optical devices/gnome-dev-dvd
edit-clear actions/editclear
edit-clear actions/gtk-clear
edit-copy actions/editcopy
edit-copy actions/gtk-copy
edit-copy actions/stock_copy
edit-cut actions/editcut
edit-cut actions/gtk-cut
edit-cut actions/stock_cut
edit-delete actions/editdelete
edit-delete actions/gtk-delete
edit-delete actions/stock_delete
edit-find actions/filefind
edit-find actions/find
edit-find actions/gtk-find
edit-find actions/stock_search
edit-paste actions/editpaste
edit-paste actions/gtk-paste
edit-paste actions/stock_paste
edit-redo actions/gtk-redo-ltr
edit-redo actions/redo
edit-redo actions/stock_redo
edit-select-all actions/gtk-select-all
edit-select-all actions/stock_select-all
edit-undo actions/gtk-undo-ltr
edit-undo actions/stock_undo
edit-undo actions/undo
folder places/gtk-directory
folder places/inode-directory
folder places/stock_folder
folder-open status/folder_open
folder-open status/stock_open
format-indent-less actions/gnome-stock-text-unindent
format-indent-less actions/gtk-indent-rtl
format-indent-less actions/gtk-unindent-ltr
format-indent-less actions/stock_text_unindent
format-indent-more actions/gnome-stock-text-indent
format-indent-more actions/gtk-indent-ltr
format-indent-more actions/gtk-unindent-rtl
format-indent-more actions/stock_text_indent
format-justify-center actions/centerjust
format-justify-center actions/gtk-justify-center
format-justify-center actions/stock_text_center
format-justify-fill actions/gtk-justify-fill
format-justify-fill actions/stock_text_justify
format-justify-left actions/gtk-justify-left
format-justify-left actions/leftjust
format-justify-left actions/stock_text_left
format-justify-right actions/gtk-justify-right
format-justify-right actions/rightjust
format-justify-right actions/stock_text_right
format-text-bold actions/gtk-bold
format-text-bold actions/stock_text_bold
format-text-bold actions/text_bold
format-text-italic actions/gtk-italic
format-text-italic actions/stock_text_italic
format-text-italic actions/text_italic
format-text-strikethrough actions/gtk-strikethrough
format-text-strikethrough actions/stock_text_strikethrough
format-text-strikethrough actions/text_strike
format-text-underline actions/gtk-underline
format-text-underline actions/stock_text_underline
format-text-underline actions/text_underline
go-down actions/gtk-go-down
go-down actions/stock_down
go-down actions/down
go-home actions/gohome
go-home actions/gtk-home
go-home actions/kfm_home
go-home actions/redhat-home
go-home actions/stock_home
go-next actions/forward
go-next actions/gtk-go-back-rtl
go-next actions/gtk-go-forward-ltr
go-next actions/next
go-next actions/stock_right
go-previous actions/back
go-previous actions/gtk-go-back-ltr
go-previous actions/gtk-go-forward-rtl
go-previous actions/previous
go-previous actions/stock_left
go-up actions/gtk-go-up
go-up actions/stock_up
go-up actions/up
help-about actions/gtk-about
help-about actions/stock_about
help-browser apps/gnome-help
help-browser apps/khelpcenter
help-browser apps/susehelpcenter
help-contents actions/help
help-contents actions/stock_help
image-loading status/gnome-fs-loading-icon
image-x-generic mimetypes/gnome-mime-image
image-x-generic mimetypes/image
input-gaming devices/joystick
input-gaming devices/yast_joystick
input-keyboard devices/gnome-dev-keyboard
input-keyboard devices/keyboard
input-keyboard devices/kxkb
input-keyboard devices/xfce4-keyboard
list-add actions/add
list-add actions/gtk-add
list-remove actions/remove
list-remove actions/gtk-remove
mail-attachment status/stock_attach
mail-message-new actions/gnome-stock-mail-new
mail-message-new actions/mail_new
mail-message-new actions/stock_mail-compose
media-eject actions/player_eject
media-floppy devices/3floppy_unmount
media-floppy devices/gnome-dev-floppy
media-floppy devices/gtk-floppy
media-floppy devices/system-floppy
media-optical devices/cdrom_unmount
media-optical devices/cdwriter_unmount
media-optical devices/dvd_unmount
media-optical devices/gnome-dev-cdrom-audio
media-optical devices/gnome-dev-disc-cdr
media-optical devices/gnome-dev-disc-cdrw
media-optical devices/gnome-dev-disc-dvdr
media-optical devices/gnome-dev-disc-dvdr-plus
media-optical devices/gnome-dev-disc-dvdram
media-optical devices/gnome-dev-disc-dvdrom
media-optical devices/gnome-dev-disc-dvdrw
media-optical devices/gtk-cdrom
media-optical devices/media-cdrom
media-playback-pause actions/gtk-media-pause
media-playback-pause actions/player_pause
media-playback-pause actions/stock_media-pause
media-playback-start actions/gtk-media-play-ltr
media-playback-start actions/player_play
media-playback-start actions/stock_media-play
media-playback-stop actions/gtk-media-stop
media-playback-stop actions/player_stop
media-record actions/gtk-media-record
media-record actions/player_record
media-record actions/stock_media-rec
media-seek-backward actions/gtk-media-rewind-ltr
media-seek-backward actions/player_rew
media-seek-backward actions/stock_media-rew
media-seek-forward actions/gtk-media-forward-ltr
media-seek-forward actions/player_fwd
media-seek-forward actions/stock_media-fwd
modem devices/gnome-modem
network-idle status/connect_established
network-idle status/gnome-netstatus-idle
network-idle status/nm-adhoc
network-idle status/nm-device-wired
network-idle status/nm-device-wireless
network-receive status/gnome-netstatus-rx
network-transmit status/gnome-netstatus-tx
network-transmit-receive status/connect_creating
network-transmit-receive status/gnome-netstatus-txrx
network-offline status/connect_no
network-offline status/gnome-netstatus-disconn
network-offline status/nm-no-connection
network-wireless devices/gnome-dev-wavelan
network-workgroup places/gnome-fs-network
network-workgroup places/gnome-mime-x-directory-smb-workgroup
network-workgroup places/gtk-network
network-workgroup places/network_local
package-x-generic mimetypes/gnome-package
package-x-generic mimetypes/package
phone devices/stock_cell-phone
preferences-desktop categories/gnome-control-center
preferences-desktop categories/gnome-settings
preferences-desktop categories/gtk-preferences
preferences-desktop categories/kcontrol
preferences-desktop categories/redhat-preferences
preferences-desktop categories/xfce4-settings
preferences-desktop-accessibility apps/access
preferences-desktop-accessibility apps/accessibility-directory
preferences-desktop-accessibility apps/gnome-settings-accessibility-technologies
preferences-desktop-font apps/fonts
preferences-desktop-font apps/gnome-settings-font
preferences-desktop-locale apps/config-language
preferences-desktop-locale apps/locale
preferences-system-windows apps/gnome-window-manager
preferences-system-windows apps/kcmkwm
preferences-system-windows apps/kwin
preferences-system-windows apps/xfwm4
printer devices/gnome-dev-printer
printer devices/printer-remote
printer devices/printer1
printer devices/printmgr
printer devices/stock_printers
printer devices/xfce-printer
printer devices/yast_printer
process-stop actions/gtk-cancel
process-stop actions/gtk-stop
process-stop actions/stock_stop
process-stop actions/stop
system-file-manager apps/file-manager
system-file-manager apps/kfm
system-file-manager apps/redhat-filemanager
system-file-manager apps/xfce-filemanager
system-lock-screen actions/gnome-lockscreen
system-lock-screen actions/lock
system-lock-screen actions/xfce-system-lock
system-log-out actions/gnome-logout
system-run actions/gnome-run
system-run actions/gtk-execute
system-search actions/edit-find
system-search actions/gnome-searchtool
system-search actions/kfind
system-search actions/search
system-shutdown actions/gnome-shutdown
system-users apps/config-users
system-users apps/kuser
system-users apps/system-config-users
user-trash places/emptytrash
user-trash places/gnome-fs-trash-empty
user-trash places/gnome-stock-trash
user-trash places/trashcan_empty
user-trash places/xfce-trash_empty
utilities-system-monitor apps/gnome-monitor
utilities-system-monitor apps/ksysguard
utilities-terminal apps/gnome-terminal
utilities-terminal apps/konsole
utilities-terminal apps/openterm
utilities-terminal apps/terminal
utilities-terminal apps/xfce-terminal
video-display devices/chardevice
video-display devices/display
video-display devices/xfce4-display
view-fullscreen actions/gtk-fullscreen
view-fullscreen actions/stock_fullscreen
view-fullscreen actions/window_fullscreen
view-refresh actions/gtk-refresh
view-refresh actions/stock_refresh
view-sort-ascending actions/gtk-sort-ascending
view-sort-descending actions/gtk-sort-descending
window-close actions/gtk-close
window-close actions/stock_close
x-office-calendar mimetypes/gnome-mime-text-x-vcalendar
x-office-calendar mimetypes/plan
x-office-calendar mimetypes/stock_calendar
x-office-calendar mimetypes/vcalendar
zoom-in actions/gtk-zoom-in
zoom-in actions/stock_zoom-in
zoom-in actions/viewmag+
zoom-original actions/gtk-zoom-100
zoom-original actions/stock_zoom-1
zoom-original actions/viewmag1
zoom-out actions/gtk-zoom-out
zoom-out actions/stock_zoom-out
zoom-out actions/viewmag-"
THEMEEXT=".theme"
[ -f "../config.sh" ] && . "../config.sh"
#executables
CONVERT="gm convert"
DEBUG="_debug"
FIND="find"
INSTALL="install -m 0644"
LN="ln -f"
MKDIR="mkdir -m 0755 -p"
RM="rm -f"
SORT="sort"
#functions
#convert
_convert()
{
theme="$1"
size="${2}x${2}"
folder="$theme/$size"
shift 2
$DEBUG $MKDIR -- "$OBJDIR$folder/places" || return 2
$DEBUG $CONVERT -background none -density 300 \
"../data/DeforaOS-d-${BGCOLOR}.svg" \
-resize "$size" $@ \
"$OBJDIR$folder/places/start-here$IMGEXT" || return 2
#icons
echo "$ICONS" | while read char stock; do
[ -z "$char" ] && continue
dirname="${stock%/*}"
$DEBUG $MKDIR -- "$OBJDIR$folder/$dirname" || return 2
echo "push graphic-context
viewbox 0 0 256 256
push graphic-context
fill '$BGCOLOR'
circle 128,128 127,255
pop graphic-context
push graphic-context
fill '$FGCOLOR'
font-family '$FONT'
font-size 224
gravity Center
text 0,0 '$char'
pop graphic-context
pop graphic-context" | $DEBUG $CONVERT -background none mvg:- \
-resize "$size" $@ \
"$OBJDIR$folder/${stock}$IMGEXT" || return 2
done
[ $? -eq 0 ] || return 2
#symlinks
echo "$SYMLINKS" | while read from to; do
[ -z "$from" ] && continue
$DEBUG $LN -s -- "${from}$IMGEXT" "$OBJDIR$folder/${to}$IMGEXT" \
|| return 2
done
[ $? -eq 0 ] || return 2
}
#clean
_clean()
{
theme="$1"
size="${2}x${2}"
folder="$theme/$size"
$DEBUG $RM -- "$OBJDIR$folder/places/start-here$IMGEXT" || return 2
#icons
echo "$ICONS" | while read char stock; do
[ -z "$char" ] && continue
$DEBUG $RM -- "$OBJDIR$theme/${size}/${stock}$IMGEXT" \
|| return 2
done
#symlinks
echo "$SYMLINKS" | while read from to; do
[ -z "$from" ] && continue
$DEBUG $RM -- "$OBJDIR$theme/${size}/${to}$IMGEXT" \
|| return 2
done
}
#debug
_debug()
{
echo "$@" 1>&2
"$@"
}
#index
_index()
{
theme="$1"
#icon theme
echo "[Icon Theme]"
echo "Name=$theme"
echo "Comment=$theme icon theme"
echo "Example=start-here"
echo -n "Directories="
sep=
$FIND "$OBJDIR$theme" -type d | $SORT | while read folder; do
folder="${folder#$OBJDIR}"
size="${folder#*/}"
size="${size%%/*}"
basename="${folder##*/}"
[ "$size" != "$basename" ] || continue
echo -n "$sep${size}/$basename"
sep=","
done
echo ""
#directories
$FIND "$OBJDIR$theme" -type d | $SORT | while read folder; do
folder="${folder#$OBJDIR}"
size="${folder#*/}"
size="${size%%/*}"
basename="${folder##*/}"
[ "$size" != "$basename" ] || continue
size="${size%x*}"
echo ""
echo "[${size}x${size}/$basename]"
echo "Size=$size"
echo "Context=Places"
echo "Type=Fixed"
done
}
#install
_install()
{
target="$1"
size="$2"
dirname="${target%/*}"
instdir="${target%%/*}"
$DEBUG $MKDIR -- "$PREFIX/$dirname" || return 2
$DEBUG $INSTALL "$OBJDIR$target" "$PREFIX/$target" || return 2
[ -z "$size" ] && return 0
#icons
echo "$ICONS" | while read char stock; do
[ -z "$char" ] && continue
dirname="${stock%/*}"
$DEBUG $MKDIR -- "$PREFIX/$instdir/${size}x${size}/$dirname" \
|| return 2
$DEBUG $INSTALL "$OBJDIR$instdir/${size}x${size}/${stock}$IMGEXT" \
"$PREFIX/$instdir/${size}x${size}/${stock}$IMGEXT" \
|| return 2
done
#symlinks
echo "$SYMLINKS" | while read from to; do
[ -z "$from" ] && continue
$DEBUG $LN -s -- "${from}$IMGEXT" \
"$PREFIX/$instdir/${size}x${size}/${to}$IMGEXT" \
|| return 2
done
}
#uninstall
_uninstall()
{
target="$1"
size="$2"
instdir="${target%%/*}"
$DEBUG $RM -- "$PREFIX/$target" || return 2
[ -z "$size" ] && return 0
#icons
echo "$ICONS" | while read char stock; do
[ -z "$char" ] && continue
$DEBUG $RM -- "$PREFIX/$instdir/${size}x${size}/${stock}$IMGEXT" \
|| return 2
done
#symlinks
echo "$SYMLINKS" | while read from to; do
[ -z "$from" ] && continue
$DEBUG $RM -- "$PREFIX/$instdir/${size}x${size}/${to}$IMGEXT" \
|| return 2
done
}
#usage
_usage()
{
echo "Usage: $PROGNAME [-c|-i|-u][-P prefix] target..." 1>&2
return 1
}
#main
clean=0
install=0
uninstall=0
while getopts "ciuP:" name; do
case "$name" in
c)
clean=1
;;
i)
install=1
uninstall=0
;;
u)
install=0
uninstall=1
;;
P)
PREFIX="$OPTARG"
;;
?)
_usage
exit $?
;;
esac
done
shift $((OPTIND - 1))
if [ $# -eq 0 ]; then
_usage
exit $?
fi
while [ $# -gt 0 ]; do
target="${1#$OBJDIR}"
shift
#determine the argument
theme="${target%%/*}"
index="${target#*/}"
size="${index%%/*}"
size="${size%%x*}"
filename="${target##*/}"
#clean
if [ $clean -ne 0 ]; then
if [ "$filename" = "index$THEMEEXT" ]; then
$DEBUG $RM -- "$theme/index$THEMEEXT" || exit 2
else
_clean "$theme" "$size" || exit 2
fi
continue
fi
#uninstall
if [ $uninstall -eq 1 ]; then
if [ "$filename" = "index$THEMEEXT" ]; then
_uninstall "$target" || exit 2
else
_uninstall "$target" "$size" || exit 2
fi
continue
fi
#install
if [ $install -eq 1 ]; then
if [ "$filename" = "index$THEMEEXT" ]; then
_install "$target" || exit 2
else
_install "$target" "$size" || exit 2
fi
continue
fi
#create
if [ "$filename" = "index$THEMEEXT" ]; then
$DEBUG $MKDIR -- "$OBJDIR$theme" || exit 2
_index "$theme" > "$OBJDIR$theme/index$THEMEEXT"|| exit 2
else
_convert "$theme" "$size" || exit 2
fi
done