| 1 | # Makefile for Puzzles icons. |
| 2 | |
| 3 | PUZZLES = blackbox bridges cube dominosa fifteen filling flip galaxies guess \ |
| 4 | inertia lightup loopy map mines net netslide pattern pegs rect \ |
| 5 | samegame sixteen slant solo tents twiddle unequal untangle |
| 6 | |
| 7 | BASE = $(patsubst %,%-base.png,$(PUZZLES)) |
| 8 | WEB = $(patsubst %,%-web.png,$(PUZZLES)) |
| 9 | |
| 10 | IBASE = $(patsubst %,%-ibase.png,$(PUZZLES)) |
| 11 | IBASE4 = $(patsubst %,%-ibase4.png,$(PUZZLES)) |
| 12 | P48D24 = $(patsubst %,%-48d24.png,$(PUZZLES)) |
| 13 | P48D8 = $(patsubst %,%-48d8.png,$(PUZZLES)) |
| 14 | P48D4 = $(patsubst %,%-48d4.png,$(PUZZLES)) |
| 15 | P32D24 = $(patsubst %,%-32d24.png,$(PUZZLES)) |
| 16 | P32D8 = $(patsubst %,%-32d8.png,$(PUZZLES)) |
| 17 | P32D4 = $(patsubst %,%-32d4.png,$(PUZZLES)) |
| 18 | P16D24 = $(patsubst %,%-16d24.png,$(PUZZLES)) |
| 19 | P16D8 = $(patsubst %,%-16d8.png,$(PUZZLES)) |
| 20 | P16D4 = $(patsubst %,%-16d4.png,$(PUZZLES)) |
| 21 | ICONS = $(patsubst %,%.ico,$(PUZZLES)) |
| 22 | CICONS = $(patsubst %,%-icon.c,$(PUZZLES)) |
| 23 | RC = $(patsubst %,%.rc,$(PUZZLES)) |
| 24 | |
| 25 | BIN = ../ |
| 26 | PIC = ./ |
| 27 | |
| 28 | base: $(BASE) |
| 29 | web: $(WEB) |
| 30 | pngicons: $(P48D24) $(P32D24) $(P16D24) |
| 31 | winicons: $(ICONS) $(RC) |
| 32 | gtkicons: $(CICONS) |
| 33 | all: base web pngicons winicons gtkicons |
| 34 | |
| 35 | # Build the base puzzle screenshots from which all the other images |
| 36 | # are derived. Some of them involve showing a move animation |
| 37 | # part-way through. |
| 38 | fifteen-base.png : override REDO=0.3 |
| 39 | flip-base.png : override REDO=0.3 |
| 40 | netslide-base.png : override REDO=0.3 |
| 41 | sixteen-base.png : override REDO=0.3 |
| 42 | twiddle-base.png : override REDO=0.3 |
| 43 | $(BASE): %-base.png: $(BIN)% $(PIC)%.sav |
| 44 | $(PIC)screenshot.sh $(BIN)$* $(PIC)$*.sav $@ $(REDO) |
| 45 | |
| 46 | # Build the screenshots for the web, by scaling the original base |
| 47 | # images to a uniform size. |
| 48 | $(WEB): %-web.png: %-base.png |
| 49 | $(PIC)square.pl 150 5 $^ $@ |
| 50 | |
| 51 | # Build the base _icon_ images, by careful cropping of the base |
| 52 | # images: icons are very small so it's often necessary to zoom in |
| 53 | # on a smaller portion of the screenshot. |
| 54 | blackbox-ibase.png : override CROP=352x352 144x144+0+208 |
| 55 | bridges-ibase.png : override CROP=264x264 107x107+157+157 |
| 56 | dominosa-ibase.png : override CROP=304x272 152x152+152+0 |
| 57 | fifteen-ibase.png : override CROP=240x240 120x120+0+120 |
| 58 | filling-ibase.png : override CROP=256x256 133x133+14+78 |
| 59 | flip-ibase.png : override CROP=288x288 145x145+120+72 |
| 60 | galaxies-ibase.png : override CROP=288x288 165x165+0+0 |
| 61 | guess-ibase.png : override CROP=263x420 178x178+75+17 |
| 62 | inertia-ibase.png : override CROP=321x321 128x128+193+0 |
| 63 | lightup-ibase.png : override CROP=256x256 112x112+144+0 |
| 64 | loopy-ibase.png : override CROP=257x257 113x113+0+0 |
| 65 | mines-ibase.png : override CROP=240x240 110x110+130+130 |
| 66 | net-ibase.png : override CROP=193x193 113x113+0+80 |
| 67 | netslide-ibase.png : override CROP=289x289 144x144+0+0 |
| 68 | pattern-ibase.png : override CROP=384x384 223x223+0+0 |
| 69 | pegs-ibase.png : override CROP=263x263 147x147+116+0 |
| 70 | rect-ibase.png : override CROP=205x205 115x115+90+0 |
| 71 | sixteen-ibase.png : override CROP=288x288 144x144+144+144 |
| 72 | slant-ibase.png : override CROP=321x321 160x160+160+160 |
| 73 | solo-ibase.png : override CROP=321x321 97x97+16+16 |
| 74 | tents-ibase.png : override CROP=320x320 165x165+142+0 |
| 75 | twiddle-ibase.png : override CROP=192x192 102x102+69+21 |
| 76 | unequal-ibase.png : override CROP=208x208 104x104+104+104 |
| 77 | untangle-ibase.png : override CROP=320x320 164x164+3+116 |
| 78 | $(IBASE): %-ibase.png: %-base.png |
| 79 | $(PIC)crop.sh $^ $@ $(CROP) |
| 80 | |
| 81 | # Convert the full-size icon images to 4-bit colour, because that |
| 82 | # seems to work better than reducing it in 24 bits and then |
| 83 | # dithering. |
| 84 | $(IBASE4): %-ibase4.png: %-ibase.png |
| 85 | convert -colors 16 +dither -map $(PIC)win16pal.xpm $^ $@ |
| 86 | |
| 87 | # Build the 24-bit PNGs for the icons, at three sizes. |
| 88 | $(P48D24): %-48d24.png: %-ibase.png |
| 89 | $(PIC)square.pl 48 4 $^ $@ |
| 90 | $(P32D24): %-32d24.png: %-ibase.png |
| 91 | $(PIC)square.pl 32 2 $^ $@ |
| 92 | $(P16D24): %-16d24.png: %-ibase.png |
| 93 | $(PIC)square.pl 16 1 $^ $@ |
| 94 | |
| 95 | # The 8-bit icon PNGs are just custom-paletted quantisations of the |
| 96 | # 24-bit ones. |
| 97 | $(P48D8) $(P32D8) $(P16D8): %d8.png: %d24.png |
| 98 | convert -colors 256 $^ $@ |
| 99 | |
| 100 | # But the depth-4 images work better if we re-shrink from the |
| 101 | # ibase4 versions of the images, and then normalise the colours |
| 102 | # again afterwards. (They're still not very good, but my hope is |
| 103 | # that on most modern Windows machines this won't matter too |
| 104 | # much...) |
| 105 | $(P48D4): %-48d4.png: %-ibase4.png |
| 106 | $(PIC)square.pl 48 1 $^ $@-tmp2.png |
| 107 | convert -colors 16 -map $(PIC)win16pal.xpm $@-tmp2.png $@ |
| 108 | rm -f $@-tmp2.png |
| 109 | $(P32D4): %-32d4.png: %-ibase.png |
| 110 | $(PIC)square.pl 32 1 $^ $@-tmp2.png |
| 111 | convert -colors 16 -map $(PIC)win16pal.xpm $@-tmp2.png $@ |
| 112 | rm -f $@-tmp2.png |
| 113 | $(P16D4): %-16d4.png: %-ibase.png |
| 114 | $(PIC)square.pl 16 1 $^ $@-tmp2.png |
| 115 | convert -colors 16 -map $(PIC)win16pal.xpm $@-tmp2.png $@ |
| 116 | rm -f $@-tmp2.png |
| 117 | |
| 118 | # Build the actual Windows icons themselves, by feeding all those |
| 119 | # PNGs to my icon builder script. |
| 120 | $(ICONS): %.ico: %-48d24.png %-48d8.png %-48d4.png \ |
| 121 | %-32d24.png %-32d8.png %-32d4.png \ |
| 122 | %-16d24.png %-16d8.png %-16d4.png |
| 123 | $(PIC)icon.pl -24 $*-48d24.png $*-32d24.png $*-16d24.png \ |
| 124 | -8 $*-48d8.png $*-32d8.png $*-16d8.png \ |
| 125 | -4 $*-48d4.png $*-32d4.png $*-16d4.png > $@ |
| 126 | |
| 127 | # Build the .RC files which bind the icons into the applications. |
| 128 | $(RC): %.rc: |
| 129 | echo '#include "puzzles.rc2"' > $@ |
| 130 | echo '200 ICON "$*.ico"' >> $@ |
| 131 | |
| 132 | # Build the GTK icon source files. |
| 133 | $(CICONS): %-icon.c: %-16d24.png %-32d24.png %-48d24.png |
| 134 | $(PIC)cicon.pl $^ > $@ |
| 135 | |
| 136 | clean: |
| 137 | rm -f *.png *.ico *.rc *-icon.c |