From 365fe3e5b61b2221ea8eb542fdeb231c92d41e13 Mon Sep 17 00:00:00 2001 From: William Kendrick Date: Mon, 24 Feb 2003 01:46:52 +0000 Subject: [PATCH] Initial revision --- Makefile | 670 ++ data/brushes/round_06.png | Bin 0 -> 163 bytes data/brushes/round_12.png | Bin 0 -> 201 bytes data/brushes/round_24.png | Bin 0 -> 354 bytes data/brushes/round_36.png | Bin 0 -> 436 bytes data/brushes/round_fuzz.png | Bin 0 -> 416 bytes data/brushes/round_seethru.png | Bin 0 -> 407 bytes data/brushes/slash_10_lt.png | Bin 0 -> 292 bytes data/brushes/slash_10_rt.png | Bin 0 -> 286 bytes data/brushes/slash_16_lt.png | Bin 0 -> 374 bytes data/brushes/slash_16_rt.png | Bin 0 -> 349 bytes data/brushes/slash_20_lt.png | Bin 0 -> 468 bytes data/brushes/slash_20_rt.png | Bin 0 -> 408 bytes data/brushes/spray.png | Bin 0 -> 706 bytes data/brushes/x.png | Bin 0 -> 225 bytes data/fonts/default_font.ttf | Bin 0 -> 236968 bytes data/fonts/efont_serif.ttf | Bin 0 -> 54236 bytes data/fonts/efont_serif_b.ttf | Bin 0 -> 55620 bytes data/fonts/efont_serif_bi.ttf | Bin 0 -> 53688 bytes data/fonts/efont_serif_i.ttf | Bin 0 -> 45352 bytes data/images/icon-win32.png | Bin 0 -> 1271 bytes data/images/icon.png | Bin 0 -> 2279 bytes data/images/icon16x16.png | Bin 0 -> 629 bytes data/images/icon32x32.png | Bin 0 -> 1213 bytes data/images/icon32x32.xpm | 49 + data/images/icon48x48.png | Bin 0 -> 1994 bytes data/images/magic/blocks.png | Bin 0 -> 211 bytes data/images/magic/blur.png | Bin 0 -> 303 bytes data/images/magic/chalk.png | Bin 0 -> 786 bytes data/images/magic/drip.png | Bin 0 -> 523 bytes data/images/magic/fade.png | Bin 0 -> 615 bytes data/images/magic/fill.png | Bin 0 -> 593 bytes data/images/magic/flip.png | Bin 0 -> 217 bytes data/images/magic/mirror.png | Bin 0 -> 780 bytes data/images/magic/negative.png | Bin 0 -> 554 bytes data/images/magic/rainbow.png | Bin 0 -> 971 bytes data/images/magic/sparkles.png | Bin 0 -> 970 bytes data/images/magic/thick.png | Bin 0 -> 462 bytes data/images/magic/thin.png | Bin 0 -> 342 bytes data/images/shapes/circle.png | Bin 0 -> 341 bytes data/images/shapes/circle_f.png | Bin 0 -> 317 bytes data/images/shapes/diamond.png | Bin 0 -> 471 bytes data/images/shapes/diamond_f.png | Bin 0 -> 449 bytes data/images/shapes/oval.png | Bin 0 -> 285 bytes data/images/shapes/oval_f.png | Bin 0 -> 252 bytes data/images/shapes/pentagon.png | Bin 0 -> 288 bytes data/images/shapes/pentagon_f.png | Bin 0 -> 247 bytes data/images/shapes/rectangle.png | Bin 0 -> 162 bytes data/images/shapes/rectangle_f.png | Bin 0 -> 151 bytes data/images/shapes/square.png | Bin 0 -> 165 bytes data/images/shapes/square_f.png | Bin 0 -> 154 bytes data/images/shapes/triangle.png | Bin 0 -> 285 bytes data/images/shapes/triangle_f.png | Bin 0 -> 247 bytes data/images/title.png | Bin 0 -> 80284 bytes data/images/tools/brush.png | Bin 0 -> 397 bytes data/images/tools/eraser.png | Bin 0 -> 521 bytes data/images/tools/lines.png | Bin 0 -> 476 bytes data/images/tools/magic.png | Bin 0 -> 691 bytes data/images/tools/new.png | Bin 0 -> 569 bytes data/images/tools/open.png | Bin 0 -> 1158 bytes data/images/tools/print.png | Bin 0 -> 556 bytes data/images/tools/quit.png | Bin 0 -> 475 bytes data/images/tools/redo.png | Bin 0 -> 847 bytes data/images/tools/save.png | Bin 0 -> 908 bytes data/images/tools/shapes.png | Bin 0 -> 294 bytes data/images/tools/stamp.png | Bin 0 -> 482 bytes data/images/tools/text.png | Bin 0 -> 446 bytes data/images/tools/undo.png | Bin 0 -> 1069 bytes data/images/tux/bored.png | Bin 0 -> 2884 bytes data/images/tux/default.png | Bin 0 -> 1684 bytes data/images/tux/great.png | Bin 0 -> 2277 bytes data/images/tux/kiss.png | Bin 0 -> 2596 bytes data/images/tux/oops.png | Bin 0 -> 1372 bytes data/images/tux/wait.png | Bin 0 -> 2687 bytes data/images/ui/back.png | Bin 0 -> 2616 bytes data/images/ui/btn_down.png | Bin 0 -> 2374 bytes data/images/ui/btn_off.png | Bin 0 -> 697 bytes data/images/ui/btn_up.png | Bin 0 -> 1827 bytes data/images/ui/color_btn_down.png | Bin 0 -> 1428 bytes data/images/ui/color_btn_up.png | Bin 0 -> 1698 bytes data/images/ui/cursor_down.png | Bin 0 -> 3523 bytes data/images/ui/cursor_down_large.png | Bin 0 -> 7094 bytes data/images/ui/cursor_up.png | Bin 0 -> 3011 bytes data/images/ui/cursor_up_large.png | Bin 0 -> 3816 bytes data/images/ui/erase.png | Bin 0 -> 3335 bytes data/images/ui/no.png | Bin 0 -> 3094 bytes data/images/ui/no_title.png | Bin 0 -> 1205 bytes data/images/ui/no_title_large.png | Bin 0 -> 1401 bytes data/images/ui/open.png | Bin 0 -> 3503 bytes data/images/ui/paintcan.png | Bin 0 -> 2743 bytes data/images/ui/progress.png | Bin 0 -> 830 bytes data/images/ui/scroll_down.png | Bin 0 -> 2560 bytes data/images/ui/scroll_down_off.png | Bin 0 -> 934 bytes data/images/ui/scroll_up.png | Bin 0 -> 2565 bytes data/images/ui/scroll_up_off.png | Bin 0 -> 921 bytes data/images/ui/sparkles-old.png | Bin 0 -> 2380 bytes data/images/ui/sparkles.png | Bin 0 -> 1504 bytes data/images/ui/title.png | Bin 0 -> 3016 bytes data/images/ui/title_large.png | Bin 0 -> 3537 bytes data/images/ui/yes.png | Bin 0 -> 2728 bytes data/sounds/bleep.wav | Bin 0 -> 1356 bytes data/sounds/blocks.wav | Bin 0 -> 13984 bytes data/sounds/blur.wav | Bin 0 -> 32814 bytes data/sounds/bubble.wav | Bin 0 -> 12302 bytes data/sounds/chalk.wav | Bin 0 -> 14656 bytes data/sounds/click.wav | Bin 0 -> 1063 bytes data/sounds/drip.wav | Bin 0 -> 1484 bytes data/sounds/eraser1.wav | Bin 0 -> 9566 bytes data/sounds/eraser2.wav | Bin 0 -> 8382 bytes data/sounds/fade.wav | Bin 0 -> 14218 bytes data/sounds/flip.wav | Bin 0 -> 976 bytes data/sounds/giggle.wav | Bin 0 -> 15310 bytes data/sounds/harp.wav | Bin 0 -> 25424 bytes data/sounds/keyclick.wav | Bin 0 -> 1774 bytes data/sounds/line_end.wav | Bin 0 -> 8170 bytes data/sounds/line_start.wav | Bin 0 -> 4066 bytes data/sounds/mirror.wav | Bin 0 -> 1910 bytes data/sounds/negative.wav | Bin 0 -> 6778 bytes data/sounds/paint1.wav | Bin 0 -> 3120 bytes data/sounds/paint2.wav | Bin 0 -> 2241 bytes data/sounds/paint3.wav | Bin 0 -> 3339 bytes data/sounds/paint4.wav | Bin 0 -> 6633 bytes data/sounds/prompt.wav | Bin 0 -> 2196 bytes data/sounds/rainbow.wav | Bin 0 -> 17784 bytes data/sounds/return.wav | Bin 0 -> 9094 bytes data/sounds/save.wav | Bin 0 -> 6505 bytes data/sounds/scroll.wav | Bin 0 -> 1604 bytes data/sounds/sparkles1.wav | Bin 0 -> 20270 bytes data/sounds/sparkles2.wav | Bin 0 -> 15466 bytes data/sounds/stamp.wav | Bin 0 -> 7562 bytes data/sounds/thick.wav | Bin 0 -> 14666 bytes data/sounds/thin.wav | Bin 0 -> 10762 bytes docs/AUTHORS.txt | 185 + docs/CHANGES.txt | 1346 +++ docs/COPYING.txt | 340 + docs/ESCAPES.txt | 214 + docs/FAQ.txt | 438 + docs/INSTALL.txt | 299 + docs/PNG.txt | 142 + docs/README.txt | 1431 ++++ docs/TODO.txt | 131 + docs/ca/AUTHORS.txt | 1 + docs/ca/COPYING.txt | 1 + docs/ca/FAQ.txt | 1 + docs/ca/INSTALL.txt | 1 + docs/ca/PNG.txt | 1 + docs/ca/README.txt | 1 + docs/cz/AUTHORS.txt | 1 + docs/cz/COPYING.txt | 1 + docs/cz/FAQ.txt | 1 + docs/cz/INSTALL.txt | 1 + docs/cz/PNG.txt | 1 + docs/cz/README.txt | 1 + docs/da/AUTHORS.txt | 1 + docs/da/COPYING.txt | 1 + docs/da/FAQ.txt | 1 + docs/da/INSTALL.txt | 1 + docs/da/PNG.txt | 1 + docs/da/README.txt | 1 + docs/de/ANBRINGEN.txt | 2 + docs/de/AUTOREN.txt | 2 + docs/de/FAQ.txt | 2 + docs/de/GELESEN_MIR.txt | 1041 +++ docs/de/KOPIE.txt | 507 ++ docs/de/PNG.txt | 2 + docs/es/AUTORES.txt | 152 + docs/es/CONTRIBUYENTES.txt | 100 + docs/es/COPIADO.txt | 427 + docs/es/FAQ.txt | 452 ++ docs/es/INSTALACION.txt | 310 + docs/es/LEEME.txt | 1346 +++ docs/es/PNG.txt | 148 + docs/es/html/LEEME.html | 1376 ++++ docs/fi/AUTHORS.txt | 1 + docs/fi/COPYING.txt | 406 + docs/fi/FAQ.txt | 1 + docs/fi/INSTALL.txt | 1 + docs/fi/PNG.txt | 1 + docs/fi/README.txt | 1 + docs/fr/AUTHORS.txt | 1 + docs/fr/COPIER.txt | 488 ++ docs/fr/FAQ.txt | 1 + docs/fr/INSTALL.txt | 1 + docs/fr/PNG.txt | 1 + docs/fr/README.txt | 1 + docs/html/README.html | 2054 +++++ docs/html/images/brush_edit.png | Bin 0 -> 15229 bytes docs/html/images/canvas.jpg | Bin 0 -> 12005 bytes docs/html/images/colors.jpg | Bin 0 -> 10585 bytes docs/html/images/ex_colorable.png | Bin 0 -> 2610 bytes docs/html/images/ex_lines.png | Bin 0 -> 1446 bytes docs/html/images/ex_paint.png | Bin 0 -> 4163 bytes docs/html/images/ex_shapes.png | Bin 0 -> 2017 bytes docs/html/images/ex_stamps.png | Bin 0 -> 29926 bytes docs/html/images/ex_text.png | Bin 0 -> 8275 bytes docs/html/images/ex_tintable.png | Bin 0 -> 12933 bytes docs/html/images/fontsizes.png | Bin 0 -> 2200 bytes docs/html/images/icon-win32.png | Bin 0 -> 1271 bytes docs/html/images/open_back.png | Bin 0 -> 1966 bytes docs/html/images/open_dialog.jpg | Bin 0 -> 7407 bytes docs/html/images/open_erase.png | Bin 0 -> 2538 bytes docs/html/images/open_open.png | Bin 0 -> 2626 bytes docs/html/images/saveover.png | Bin 0 -> 3348 bytes docs/html/images/selector.jpg | Bin 0 -> 10527 bytes docs/html/images/stamp_edit.png | Bin 0 -> 17139 bytes docs/html/images/tips.jpg | Bin 0 -> 14482 bytes docs/html/images/tool_eraser.png | Bin 0 -> 2197 bytes docs/html/images/tool_lines.png | Bin 0 -> 2442 bytes docs/html/images/tool_magic.png | Bin 0 -> 2777 bytes docs/html/images/tool_new.png | Bin 0 -> 2711 bytes docs/html/images/tool_open.png | Bin 0 -> 3167 bytes docs/html/images/tool_paint.png | Bin 0 -> 1944 bytes docs/html/images/tool_print.png | Bin 0 -> 2250 bytes docs/html/images/tool_quit.png | Bin 0 -> 2418 bytes docs/html/images/tool_redo.png | Bin 0 -> 2530 bytes docs/html/images/tool_save.png | Bin 0 -> 3075 bytes docs/html/images/tool_shapes.png | Bin 0 -> 2164 bytes docs/html/images/tool_stamp.png | Bin 0 -> 2383 bytes docs/html/images/tool_text.png | Bin 0 -> 2474 bytes docs/html/images/tool_undo.png | Bin 0 -> 2431 bytes docs/html/images/tools.jpg | Bin 0 -> 10862 bytes docs/html/images/tuxpaint-title.jpg | Bin 0 -> 16788 bytes docs/html/images/tuxpaint-title.png | Bin 0 -> 3655 bytes docs/hu/AUTHORS.txt | 1 + docs/hu/COPYING.txt | 1 + docs/hu/FAQ.txt | 1 + docs/hu/INSTALL.txt | 1 + docs/hu/PNG.txt | 1 + docs/hu/README.txt | 1 + docs/is/AUTHORS.txt | 1 + docs/is/COPYING.txt | 1 + docs/is/FAQ.txt | 1 + docs/is/INSTALL.txt | 1 + docs/is/PNG.txt | 1 + docs/is/README.txt | 1 + docs/it/AUTHORS.txt | 1 + docs/it/COPIATURA.txt | 403 + docs/it/FAQ.txt | 1 + docs/it/INSTALL.txt | 1 + docs/it/PNG.txt | 1 + docs/it/README.txt | 1 + docs/ko/AUTHORS.txt | 1 + docs/ko/COPYING.txt | 1 + docs/ko/FAQ.txt | 1 + docs/ko/INSTALL.txt | 1 + docs/ko/PNG.txt | 1 + docs/ko/README.txt | 1 + docs/nl/AUTHORS.txt | 1 + docs/nl/COPYING_nl.txt | 340 + docs/nl/FAQ.txt | 422 + docs/nl/INSTALL.txt | 294 + docs/nl/PNG.txt | 142 + docs/nl/README.txt | 1 + docs/nn/AUTHORS.txt | 1 + docs/nn/COPYING.txt | 1 + docs/nn/FAQ.txt | 1 + docs/nn/INSTALLERING.txt | 288 + docs/nn/PNG.txt | 1 + docs/nn/README.txt | 1 + docs/pt_br/AUTORES.txt | 157 + docs/pt_br/COPYING_pt_BR.txt | 379 + docs/pt_br/FAQ.txt | 1 + docs/pt_br/INSTALL.txt | 1 + docs/pt_br/PNG.txt | 1 + docs/pt_br/README.txt | 998 +++ docs/sv/AUTHORS.txt | 1 + docs/sv/COPYING.txt | 1 + docs/sv/FAQ.txt | 1 + docs/sv/INSTALL.txt | 1 + docs/sv/PNG.txt | 1 + docs/sv/README.txt | 1 + docs/tr/AUTHORS.txt | 1 + docs/tr/COPYING_tr.txt | 384 + docs/tr/FAQ.txt | 1 + docs/tr/INSTALL.txt | 1 + docs/tr/PNG.txt | 1 + docs/tr/README.txt | 1 + src/BeOS_print.cpp | 133 + src/BeOS_print.h | 25 + src/Makefile.beos | 239 + src/Makefile.beos-old | 552 ++ src/colors.h | 77 + src/great.h | 26 + src/magic.h | 153 + src/messages/ca.po | 479 ++ src/messages/cs.po | 394 + src/messages/da.po | 438 + src/messages/de.po | 475 ++ src/messages/el.po | 475 ++ src/messages/en_gb.po | 32 + src/messages/es.po | 489 ++ src/messages/fi.po | 450 + src/messages/fr.po | 386 + src/messages/hu.po | 417 + src/messages/id.po | 471 ++ src/messages/is.po | 463 ++ src/messages/it.po | 417 + src/messages/ja.po | 481 ++ src/messages/ko.po | 478 ++ src/messages/nl.po | 398 + src/messages/nn.po | 498 ++ src/messages/pl.po | 399 + src/messages/pt.po | 479 ++ src/messages/pt_br.po | 423 + src/messages/ro.po | 470 ++ src/messages/sk.po | 478 ++ src/messages/sv.po | 400 + src/messages/tr.po | 356 + src/messages/zh_cn.po | 477 ++ src/mouse/arrow-mask.xbm | 15 + src/mouse/arrow.xbm | 15 + src/mouse/brush-mask.xbm | 15 + src/mouse/brush.xbm | 15 + src/mouse/crosshair-mask.xbm | 15 + src/mouse/crosshair.xbm | 15 + src/mouse/down-mask.xbm | 15 + src/mouse/down.xbm | 15 + src/mouse/hand-mask.xbm | 15 + src/mouse/hand.xbm | 15 + src/mouse/insertion-mask.xbm | 10 + src/mouse/insertion.xbm | 10 + src/mouse/rotate-mask.xbm | 15 + src/mouse/rotate.xbm | 15 + src/mouse/tiny-mask.xbm | 5 + src/mouse/tiny.xbm | 5 + src/mouse/up-mask.xbm | 15 + src/mouse/up.xbm | 15 + src/mouse/wand-mask.xbm | 15 + src/mouse/wand.xbm | 15 + src/mouse/watch-mask.xbm | 15 + src/mouse/watch.xbm | 15 + src/shapes.h | 196 + src/sounds.h | 89 + src/tip_tux.h | 42 + src/titles.h | 45 + src/tools.h | 122 + src/tuxpaint-import.1 | 49 + src/tuxpaint-import.sh | 77 + src/tuxpaint.1 | 413 + src/tuxpaint.c | 10802 +++++++++++++++++++++++++ src/tuxpaint.conf | 176 + src/tuxpaint.desktop | 29 + src/tuxpaint.nsi | 114 + src/tuxpaint.sgml | 252 + src/win32_dirent.c | 115 + src/win32_dirent.h | 80 + src/win32_print.c | 449 + src/win32_print.c-old | 301 + src/win32_print.h | 22 + src/win32_print.h-old | 19 + 350 files changed, 43559 insertions(+) create mode 100644 Makefile create mode 100644 data/brushes/round_06.png create mode 100644 data/brushes/round_12.png create mode 100644 data/brushes/round_24.png create mode 100644 data/brushes/round_36.png create mode 100644 data/brushes/round_fuzz.png create mode 100644 data/brushes/round_seethru.png create mode 100644 data/brushes/slash_10_lt.png create mode 100644 data/brushes/slash_10_rt.png create mode 100644 data/brushes/slash_16_lt.png create mode 100644 data/brushes/slash_16_rt.png create mode 100644 data/brushes/slash_20_lt.png create mode 100644 data/brushes/slash_20_rt.png create mode 100644 data/brushes/spray.png create mode 100644 data/brushes/x.png create mode 100644 data/fonts/default_font.ttf create mode 100644 data/fonts/efont_serif.ttf create mode 100644 data/fonts/efont_serif_b.ttf create mode 100644 data/fonts/efont_serif_bi.ttf create mode 100644 data/fonts/efont_serif_i.ttf create mode 100644 data/images/icon-win32.png create mode 100644 data/images/icon.png create mode 100644 data/images/icon16x16.png create mode 100644 data/images/icon32x32.png create mode 100644 data/images/icon32x32.xpm create mode 100644 data/images/icon48x48.png create mode 100644 data/images/magic/blocks.png create mode 100644 data/images/magic/blur.png create mode 100644 data/images/magic/chalk.png create mode 100644 data/images/magic/drip.png create mode 100644 data/images/magic/fade.png create mode 100644 data/images/magic/fill.png create mode 100644 data/images/magic/flip.png create mode 100644 data/images/magic/mirror.png create mode 100644 data/images/magic/negative.png create mode 100644 data/images/magic/rainbow.png create mode 100644 data/images/magic/sparkles.png create mode 100644 data/images/magic/thick.png create mode 100644 data/images/magic/thin.png create mode 100644 data/images/shapes/circle.png create mode 100644 data/images/shapes/circle_f.png create mode 100644 data/images/shapes/diamond.png create mode 100644 data/images/shapes/diamond_f.png create mode 100644 data/images/shapes/oval.png create mode 100644 data/images/shapes/oval_f.png create mode 100644 data/images/shapes/pentagon.png create mode 100644 data/images/shapes/pentagon_f.png create mode 100644 data/images/shapes/rectangle.png create mode 100644 data/images/shapes/rectangle_f.png create mode 100644 data/images/shapes/square.png create mode 100644 data/images/shapes/square_f.png create mode 100644 data/images/shapes/triangle.png create mode 100644 data/images/shapes/triangle_f.png create mode 100644 data/images/title.png create mode 100644 data/images/tools/brush.png create mode 100644 data/images/tools/eraser.png create mode 100644 data/images/tools/lines.png create mode 100644 data/images/tools/magic.png create mode 100644 data/images/tools/new.png create mode 100644 data/images/tools/open.png create mode 100644 data/images/tools/print.png create mode 100644 data/images/tools/quit.png create mode 100644 data/images/tools/redo.png create mode 100644 data/images/tools/save.png create mode 100644 data/images/tools/shapes.png create mode 100644 data/images/tools/stamp.png create mode 100644 data/images/tools/text.png create mode 100644 data/images/tools/undo.png create mode 100644 data/images/tux/bored.png create mode 100644 data/images/tux/default.png create mode 100644 data/images/tux/great.png create mode 100644 data/images/tux/kiss.png create mode 100644 data/images/tux/oops.png create mode 100644 data/images/tux/wait.png create mode 100644 data/images/ui/back.png create mode 100644 data/images/ui/btn_down.png create mode 100644 data/images/ui/btn_off.png create mode 100644 data/images/ui/btn_up.png create mode 100644 data/images/ui/color_btn_down.png create mode 100644 data/images/ui/color_btn_up.png create mode 100644 data/images/ui/cursor_down.png create mode 100644 data/images/ui/cursor_down_large.png create mode 100644 data/images/ui/cursor_up.png create mode 100644 data/images/ui/cursor_up_large.png create mode 100644 data/images/ui/erase.png create mode 100644 data/images/ui/no.png create mode 100644 data/images/ui/no_title.png create mode 100644 data/images/ui/no_title_large.png create mode 100644 data/images/ui/open.png create mode 100644 data/images/ui/paintcan.png create mode 100644 data/images/ui/progress.png create mode 100644 data/images/ui/scroll_down.png create mode 100644 data/images/ui/scroll_down_off.png create mode 100644 data/images/ui/scroll_up.png create mode 100644 data/images/ui/scroll_up_off.png create mode 100644 data/images/ui/sparkles-old.png create mode 100644 data/images/ui/sparkles.png create mode 100644 data/images/ui/title.png create mode 100644 data/images/ui/title_large.png create mode 100644 data/images/ui/yes.png create mode 100644 data/sounds/bleep.wav create mode 100644 data/sounds/blocks.wav create mode 100644 data/sounds/blur.wav create mode 100644 data/sounds/bubble.wav create mode 100644 data/sounds/chalk.wav create mode 100644 data/sounds/click.wav create mode 100644 data/sounds/drip.wav create mode 100644 data/sounds/eraser1.wav create mode 100644 data/sounds/eraser2.wav create mode 100644 data/sounds/fade.wav create mode 100644 data/sounds/flip.wav create mode 100644 data/sounds/giggle.wav create mode 100644 data/sounds/harp.wav create mode 100644 data/sounds/keyclick.wav create mode 100644 data/sounds/line_end.wav create mode 100644 data/sounds/line_start.wav create mode 100644 data/sounds/mirror.wav create mode 100644 data/sounds/negative.wav create mode 100644 data/sounds/paint1.wav create mode 100644 data/sounds/paint2.wav create mode 100644 data/sounds/paint3.wav create mode 100644 data/sounds/paint4.wav create mode 100644 data/sounds/prompt.wav create mode 100644 data/sounds/rainbow.wav create mode 100644 data/sounds/return.wav create mode 100644 data/sounds/save.wav create mode 100644 data/sounds/scroll.wav create mode 100644 data/sounds/sparkles1.wav create mode 100644 data/sounds/sparkles2.wav create mode 100644 data/sounds/stamp.wav create mode 100644 data/sounds/thick.wav create mode 100644 data/sounds/thin.wav create mode 100644 docs/AUTHORS.txt create mode 100644 docs/CHANGES.txt create mode 100644 docs/COPYING.txt create mode 100644 docs/ESCAPES.txt create mode 100644 docs/FAQ.txt create mode 100644 docs/INSTALL.txt create mode 100644 docs/PNG.txt create mode 100644 docs/README.txt create mode 100644 docs/TODO.txt create mode 100644 docs/ca/AUTHORS.txt create mode 100644 docs/ca/COPYING.txt create mode 100644 docs/ca/FAQ.txt create mode 100644 docs/ca/INSTALL.txt create mode 100644 docs/ca/PNG.txt create mode 100644 docs/ca/README.txt create mode 100644 docs/cz/AUTHORS.txt create mode 100644 docs/cz/COPYING.txt create mode 100644 docs/cz/FAQ.txt create mode 100644 docs/cz/INSTALL.txt create mode 100644 docs/cz/PNG.txt create mode 100644 docs/cz/README.txt create mode 100644 docs/da/AUTHORS.txt create mode 100644 docs/da/COPYING.txt create mode 100644 docs/da/FAQ.txt create mode 100644 docs/da/INSTALL.txt create mode 100644 docs/da/PNG.txt create mode 100644 docs/da/README.txt create mode 100644 docs/de/ANBRINGEN.txt create mode 100644 docs/de/AUTOREN.txt create mode 100644 docs/de/FAQ.txt create mode 100644 docs/de/GELESEN_MIR.txt create mode 100644 docs/de/KOPIE.txt create mode 100644 docs/de/PNG.txt create mode 100644 docs/es/AUTORES.txt create mode 100644 docs/es/CONTRIBUYENTES.txt create mode 100644 docs/es/COPIADO.txt create mode 100644 docs/es/FAQ.txt create mode 100644 docs/es/INSTALACION.txt create mode 100644 docs/es/LEEME.txt create mode 100644 docs/es/PNG.txt create mode 100644 docs/es/html/LEEME.html create mode 100644 docs/fi/AUTHORS.txt create mode 100644 docs/fi/COPYING.txt create mode 100644 docs/fi/FAQ.txt create mode 100644 docs/fi/INSTALL.txt create mode 100644 docs/fi/PNG.txt create mode 100644 docs/fi/README.txt create mode 100644 docs/fr/AUTHORS.txt create mode 100644 docs/fr/COPIER.txt create mode 100644 docs/fr/FAQ.txt create mode 100644 docs/fr/INSTALL.txt create mode 100644 docs/fr/PNG.txt create mode 100644 docs/fr/README.txt create mode 100644 docs/html/README.html create mode 100644 docs/html/images/brush_edit.png create mode 100644 docs/html/images/canvas.jpg create mode 100644 docs/html/images/colors.jpg create mode 100644 docs/html/images/ex_colorable.png create mode 100644 docs/html/images/ex_lines.png create mode 100644 docs/html/images/ex_paint.png create mode 100644 docs/html/images/ex_shapes.png create mode 100644 docs/html/images/ex_stamps.png create mode 100644 docs/html/images/ex_text.png create mode 100644 docs/html/images/ex_tintable.png create mode 100644 docs/html/images/fontsizes.png create mode 100644 docs/html/images/icon-win32.png create mode 100644 docs/html/images/open_back.png create mode 100644 docs/html/images/open_dialog.jpg create mode 100644 docs/html/images/open_erase.png create mode 100644 docs/html/images/open_open.png create mode 100644 docs/html/images/saveover.png create mode 100644 docs/html/images/selector.jpg create mode 100644 docs/html/images/stamp_edit.png create mode 100644 docs/html/images/tips.jpg create mode 100644 docs/html/images/tool_eraser.png create mode 100644 docs/html/images/tool_lines.png create mode 100644 docs/html/images/tool_magic.png create mode 100644 docs/html/images/tool_new.png create mode 100644 docs/html/images/tool_open.png create mode 100644 docs/html/images/tool_paint.png create mode 100644 docs/html/images/tool_print.png create mode 100644 docs/html/images/tool_quit.png create mode 100644 docs/html/images/tool_redo.png create mode 100644 docs/html/images/tool_save.png create mode 100644 docs/html/images/tool_shapes.png create mode 100644 docs/html/images/tool_stamp.png create mode 100644 docs/html/images/tool_text.png create mode 100644 docs/html/images/tool_undo.png create mode 100644 docs/html/images/tools.jpg create mode 100644 docs/html/images/tuxpaint-title.jpg create mode 100644 docs/html/images/tuxpaint-title.png create mode 100644 docs/hu/AUTHORS.txt create mode 100644 docs/hu/COPYING.txt create mode 100644 docs/hu/FAQ.txt create mode 100644 docs/hu/INSTALL.txt create mode 100644 docs/hu/PNG.txt create mode 100644 docs/hu/README.txt create mode 100644 docs/is/AUTHORS.txt create mode 100644 docs/is/COPYING.txt create mode 100644 docs/is/FAQ.txt create mode 100644 docs/is/INSTALL.txt create mode 100644 docs/is/PNG.txt create mode 100644 docs/is/README.txt create mode 100644 docs/it/AUTHORS.txt create mode 100644 docs/it/COPIATURA.txt create mode 100644 docs/it/FAQ.txt create mode 100644 docs/it/INSTALL.txt create mode 100644 docs/it/PNG.txt create mode 100644 docs/it/README.txt create mode 100644 docs/ko/AUTHORS.txt create mode 100644 docs/ko/COPYING.txt create mode 100644 docs/ko/FAQ.txt create mode 100644 docs/ko/INSTALL.txt create mode 100644 docs/ko/PNG.txt create mode 100644 docs/ko/README.txt create mode 100644 docs/nl/AUTHORS.txt create mode 100644 docs/nl/COPYING_nl.txt create mode 100644 docs/nl/FAQ.txt create mode 100644 docs/nl/INSTALL.txt create mode 100644 docs/nl/PNG.txt create mode 100644 docs/nl/README.txt create mode 100644 docs/nn/AUTHORS.txt create mode 100644 docs/nn/COPYING.txt create mode 100644 docs/nn/FAQ.txt create mode 100644 docs/nn/INSTALLERING.txt create mode 100644 docs/nn/PNG.txt create mode 100644 docs/nn/README.txt create mode 100644 docs/pt_br/AUTORES.txt create mode 100644 docs/pt_br/COPYING_pt_BR.txt create mode 100644 docs/pt_br/FAQ.txt create mode 100644 docs/pt_br/INSTALL.txt create mode 100644 docs/pt_br/PNG.txt create mode 100644 docs/pt_br/README.txt create mode 100644 docs/sv/AUTHORS.txt create mode 100644 docs/sv/COPYING.txt create mode 100644 docs/sv/FAQ.txt create mode 100644 docs/sv/INSTALL.txt create mode 100644 docs/sv/PNG.txt create mode 100644 docs/sv/README.txt create mode 100644 docs/tr/AUTHORS.txt create mode 100644 docs/tr/COPYING_tr.txt create mode 100644 docs/tr/FAQ.txt create mode 100644 docs/tr/INSTALL.txt create mode 100644 docs/tr/PNG.txt create mode 100644 docs/tr/README.txt create mode 100644 src/BeOS_print.cpp create mode 100644 src/BeOS_print.h create mode 100644 src/Makefile.beos create mode 100644 src/Makefile.beos-old create mode 100644 src/colors.h create mode 100644 src/great.h create mode 100644 src/magic.h create mode 100644 src/messages/ca.po create mode 100644 src/messages/cs.po create mode 100644 src/messages/da.po create mode 100644 src/messages/de.po create mode 100644 src/messages/el.po create mode 100644 src/messages/en_gb.po create mode 100644 src/messages/es.po create mode 100644 src/messages/fi.po create mode 100644 src/messages/fr.po create mode 100644 src/messages/hu.po create mode 100644 src/messages/id.po create mode 100644 src/messages/is.po create mode 100644 src/messages/it.po create mode 100644 src/messages/ja.po create mode 100644 src/messages/ko.po create mode 100644 src/messages/nl.po create mode 100644 src/messages/nn.po create mode 100644 src/messages/pl.po create mode 100644 src/messages/pt.po create mode 100644 src/messages/pt_br.po create mode 100644 src/messages/ro.po create mode 100644 src/messages/sk.po create mode 100644 src/messages/sv.po create mode 100644 src/messages/tr.po create mode 100644 src/messages/zh_cn.po create mode 100644 src/mouse/arrow-mask.xbm create mode 100644 src/mouse/arrow.xbm create mode 100644 src/mouse/brush-mask.xbm create mode 100644 src/mouse/brush.xbm create mode 100644 src/mouse/crosshair-mask.xbm create mode 100644 src/mouse/crosshair.xbm create mode 100644 src/mouse/down-mask.xbm create mode 100644 src/mouse/down.xbm create mode 100644 src/mouse/hand-mask.xbm create mode 100644 src/mouse/hand.xbm create mode 100644 src/mouse/insertion-mask.xbm create mode 100644 src/mouse/insertion.xbm create mode 100644 src/mouse/rotate-mask.xbm create mode 100644 src/mouse/rotate.xbm create mode 100644 src/mouse/tiny-mask.xbm create mode 100644 src/mouse/tiny.xbm create mode 100644 src/mouse/up-mask.xbm create mode 100644 src/mouse/up.xbm create mode 100644 src/mouse/wand-mask.xbm create mode 100644 src/mouse/wand.xbm create mode 100644 src/mouse/watch-mask.xbm create mode 100644 src/mouse/watch.xbm create mode 100644 src/shapes.h create mode 100644 src/sounds.h create mode 100644 src/tip_tux.h create mode 100644 src/titles.h create mode 100644 src/tools.h create mode 100644 src/tuxpaint-import.1 create mode 100755 src/tuxpaint-import.sh create mode 100644 src/tuxpaint.1 create mode 100644 src/tuxpaint.c create mode 100644 src/tuxpaint.conf create mode 100644 src/tuxpaint.desktop create mode 100644 src/tuxpaint.nsi create mode 100644 src/tuxpaint.sgml create mode 100644 src/win32_dirent.c create mode 100644 src/win32_dirent.h create mode 100644 src/win32_print.c create mode 100644 src/win32_print.c-old create mode 100644 src/win32_print.h create mode 100644 src/win32_print.h-old diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..43dc481c8 --- /dev/null +++ b/Makefile @@ -0,0 +1,670 @@ +# Makefile for tuxpaint + +# Tux Paint - A simple drawing program for children. + +# Copyright (c) 2003 by Bill Kendrick +# bill@newbreedsoftware.com +# http://www.newbreedsoftware.com/tuxpaint/ + +# June 14, 2002 - February 18, 2003 + + +# Where to install things: + +PREFIX=/usr/local + + +# Program: + +BIN_PREFIX=$(PREFIX)/bin + + +# Data: + +DATA_PREFIX=$(PREFIX)/share/tuxpaint/ + + +# Docs and man page: + +DOC_PREFIX=$(PREFIX)/share/doc/tuxpaint/ +MAN_PREFIX=$(PREFIX)/share/man/ + + +# 'System-wide' Config file: + +ifeq ($(PREFIX),/usr) + CONFDIR=/etc/tuxpaint +else + CONFDIR=$(PREFIX)/etc/tuxpaint +endif + + +# Commands useful to other arch's (e.g., BeOS) + +RSRC_CMD=echo -n +MIMESET_CMD=echo -n + + +# Icons and launchers: + +ICON_PREFIX=$(PREFIX)/share/pixmaps/ +X11_ICON_PREFIX=$(PREFIX)/X11R6/include/X11/pixmaps/ +GNOME_PREFIX=`gnome-config --prefix` +KDE_PREFIX=`kde-config --install apps --expandvars` +KDE_ICON_PREFIX=`kde-config --install icon --expandvars` + + +# Locale files + +LOCALE_PREFIX=$(PREFIX)/share/locale/ +# LOCALE_PREFIX=/usr/share/locale/ + + +# Built with sound by default (override with "make nosound") + +NOSOUNDFLAG=__SOUND + + +# Libraries, paths, and flags: + +SDL_LIBS=$(shell sdl-config --libs) -lSDL_image -lSDL_ttf $(SDL_MIXER_LIB) +SDL_MIXER_LIB=-lSDL_mixer +SDL_CFLAGS=$(shell sdl-config --cflags) + + +# The entire set of CFLAGS: + +CFLAGS=-O2 -Wall $(SDL_CFLAGS) -DDATA_PREFIX=\"$(DATA_PREFIX)\" \ + -D$(NOSOUNDFLAG) -DDOC_PREFIX=\"$(DOC_PREFIX)\" \ + -DLOCALEDIR=\"$(LOCALE_PREFIX)\" -DCONFDIR=\"$(CONFDIR)\" + + +# "make" with no arguments builds the program and man page from sources: + +all: tuxpaint translations + @echo + @echo "--------------------------------------------------------------" + @echo + @echo "Done compiling." + @echo "Now (probably as 'root' superuser), run 'make install'" + @echo "to install Tux Paint." + @echo + + + +# "make nosound" builds the program with sound disabled, and man page, +# from sources: + +nosound: + @echo + @echo "Building with sound DISABLED" + @echo + make SDL_MIXER_LIB= NOSOUNDFLAG=NOSOUND + + +# "make beos" builds the program for BeOS + +beos: + make \ + PREFIX=/boot/develop/tools/gnupro \ + BIN_PREFIX=./ \ + DATA_PREFIX=./data/ \ + DOC_PREFIX=./docs/ \ + MAN_PREFIX=./src/ \ + CONFDIR=./src/ \ + ICON_PREFIX=./ + X11_ICON_PREFIX=./ \ + LOCALE_PREFIX=/boot/home/config/share/locale/ \ + CFLAGS="-O1 -funroll-loops -fomit-frame-pointer -pipe -Wall \ + $(SDL_FLAGS) -DDATA_PREFIX=\"$(DATA_PREFIX)\" \ + -D$(NOSOUNDFLAG) -DDOC_PREFIX=\"$(DOC_PREFIX)\" \ + -DLOCALEDIR=\"$(LOCALE_PREFIX)\" \ + -DCONFDIR=\"$(CONFDIR)\"" \ + RSRC_CMD="xres -o tuxpaint tuxpaint.rsrc" \ + MIMESET_CMD="mimeset -f tuxpaint" \ + ARCH_LINKS="-lintl -lpng -lz -lbe" \ + ARCH_HEADERS="src/BeOS_Print.h" \ + ARCH_LIBS="obj/BeOS_print.o" + + +# "make install" installs all of the various parts +# (depending on the *PREFIX variables at the top, you probably need +# to do this as superuser ("root")) + +install: install-bin install-data install-man install-doc \ + install-gnome install-kde install-kde-icons \ + install-icon install-gettext install-importscript \ + install-default-config + @echo + @echo "--------------------------------------------------------------" + @echo + @echo "All done! Now (preferably NOT as 'root' superuser)," + @echo "you can type the command 'tuxpaint' to run the program!!!" + @echo + @echo "For more information, see the 'tuxpaint' man page," + @echo "run 'tuxpaint --usage' or see $(DOC_PREFIX)README.txt" + @echo + @echo "Visit Tux Paint's home page for more information, updates" + @echo "and to learn how you can help out!" + @echo + @echo " http://www.newbreedsoftware.com/tuxpaint/" + @echo + @echo "Enjoy!" + @echo + + +# "make install-beos" installs Tux Paint, but using BeOS settings + +install-beos: + make install \ + PREFIX=/boot/develop/tools/gnupro \ + BIN_PREFIX=./ \ + DATA_PREFIX=./data/ \ + DOC_PREFIX=./docs/ \ + MAN_PREFIX=./src/ \ + CONFDIR=./src/ \ + ICON_PREFIX=./ + X11_ICON_PREFIX=./ \ + LOCALE_PREFIX=/boot/home/config/share/locale/ \ + CFLAGS="-O1 -funroll-loops -fomit-frame-pointer -pipe -Wall \ + $(SDL_FLAGS) -DDATA_PREFIX=\"$(DATA_PREFIX)\" \ + -D$(NOSOUNDFLAG) -DDOC_PREFIX=\"$(DOC_PREFIX)\" \ + -DLOCALEDIR=\"$(LOCALE_PREFIX)\" \ + -DCONFDIR=\"$(CONFDIR)\"" \ + RSRC_CMD="xres -o tuxpaint tuxpaint.rsrc" \ + MIMESET_CMD="mimeset -f tuxpaint" \ + ARCH_LINKS="-lintl -lpng -lz -lbe" \ + ARCH_HEADERS="src/BeOS_Print.h" \ + ARCH_LIBS="obj/BeOS_print.o" + + +# "make clean" deletes the program, the compiled objects and the +# built man page (returns to factory archive, pretty much...) + +clean: + @echo + @echo "Cleaning up the build directory! ($(PWD))" + @-rm -f tuxpaint + @-rm -f obj/*.o + @if [ -d obj ]; then rmdir obj; fi + @-rm -f trans/*.mo + @if [ -d trans ]; then rmdir trans; fi + @echo + + +# "make uninstall" should remove the various parts from their +# installation locations. BE SURE the *PREFIX variables at the top +# are the same as they were when you installed, of course!!! + +uninstall: + -if [ "x$(GNOME_PREFIX)" != "x" ]; then \ + rm $(GNOME_PREFIX)/share/gnome/apps/Graphics/tuxpaint.desktop; \ + rm $(GNOME_PREFIX)/share/pixmaps/tuxpaint.png; \ + fi + -if [ "x$(KDE_PREFIX)" != "x" ]; then \ + rm $(KDE_PREFIX)/Graphics/tuxpaint.desktop; \ + fi + -rm $(ICON_PREFIX)tuxpaint.png + -rm $(X11_ICON_PREFIX)tuxpaint.xpm + -rm $(BIN_PREFIX)/tuxpaint + -rm $(BIN_PREFIX)/tuxpaint-import + -rm -r $(DATA_PREFIX) + -rm -r $(DOC_PREFIX) + -rm $(MAN_PREFIX)/man1/tuxpaint.1.gz + -rm $(LOCALE_PREFIX)ca/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)cs/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)da/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)de/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)el/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)en_GB/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)es/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)fi/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)fr/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)hu/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)id/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)is/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)it/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ja/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ko/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)nl/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)nn/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)pl/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)pt/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)pt_BR/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ro/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)sk/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)sv/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)tr/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)zh_CN/LC_MESSAGES/tuxpaint.mo + -rm -f -r $(CONFDIR) + + +# Install default config file: + +install-default-config: + @echo + @echo "...Installing default config file..." + @install -d $(CONFDIR) + @cp src/tuxpaint.conf $(CONFDIR) + @chmod 644 $(CONFDIR)/tuxpaint.conf + + +# Install a launcher icon in the Gnome menu, under "Graphics" + +install-gnome: + @echo + @echo "...Installing launcher icon into GNOME..." + @if [ "x$(GNOME_PREFIX)" != "x" ]; then \ + install -d $(GNOME_PREFIX)/share/pixmaps; \ + cp data/images/icon.png $(GNOME_PREFIX)/share/pixmaps/tuxpaint.png; \ + chmod 644 $(GNOME_PREFIX)/share/pixmaps/tuxpaint.png; \ + install -d $(GNOME_PREFIX)/share/gnome/apps/Graphics; \ + cp src/tuxpaint.desktop $(GNOME_PREFIX)/share/gnome/apps/Graphics/; \ + chmod 644 $(GNOME_PREFIX)/share/gnome/apps/Graphics/tuxpaint.desktop; \ + fi + + +# Install a launcher icon in the KDE menu... + +install-kde: + @echo + @echo "...Installing launcher icon into KDE..." + @if [ "x$(KDE_PREFIX)" != "x" ]; then \ + cp src/tuxpaint.desktop $(KDE_PREFIX)/Graphics/; \ + chmod 644 $(KDE_PREFIX)/Graphics/tuxpaint.desktop; \ + fi + + +install-kde-icons: + @echo "...Installing launcher icon graphics into KDE..." + @if [ "x$(KDE_ICON_PREFIX)" != "x" ]; then \ + cp data/images/icon48x48.png \ + $(KDE_ICON_PREFIX)/hicolor/48x48/apps/tuxpaint.png; \ + cp data/images/icon32x32.png \ + $(KDE_ICON_PREFIX)/hicolor/32x32/apps/tuxpaint.png; \ + cp data/images/icon16x16.png \ + $(KDE_ICON_PREFIX)/hicolor/16x16/apps/tuxpaint.png; \ + fi + + +# Install the PNG icon (for GNOME, KDE, etc.) +# and the 24-color 32x32 XPM (for other Window managers): + +install-icon: + @echo + @echo "...Installing launcher icon graphics..." + @install -d $(ICON_PREFIX) + @cp data/images/icon.png $(ICON_PREFIX)tuxpaint.png + @chmod 644 $(ICON_PREFIX)tuxpaint.png + @install -d $(X11_ICON_PREFIX) + @cp data/images/icon32x32.xpm $(X11_ICON_PREFIX)tuxpaint.xpm + @chmod 644 $(X11_ICON_PREFIX)tuxpaint.xpm + + +# Install the program: + +install-bin: + @echo + @echo "...Installing program itself..." + @cp tuxpaint $(BIN_PREFIX) + @chmod a+rx,g-w,o-w $(BIN_PREFIX)/tuxpaint + + +# Install the import script: + +install-importscript: + @echo + @echo "...Installing 'tuxpaint-import' script..." + @cp src/tuxpaint-import.sh $(BIN_PREFIX)/tuxpaint-import + @chmod a+rx,g-w,o-w $(BIN_PREFIX)/tuxpaint-import + + +# Install the data (sound, graphics, fonts): + +install-data: + @echo + @echo "...Installing data files..." + @install -d $(DATA_PREFIX) + @cp -R data/* $(DATA_PREFIX) + @chmod -R a+rX,g-w,o-w $(DATA_PREFIX) + + +# Install the translated text: + +install-gettext: + @echo + @echo "...Installing translation files..." + @# + @echo " pt_BR ...Brazilian Portuguese..." + @install -d $(LOCALE_PREFIX)pt_BR/LC_MESSAGES + @cp trans/pt_br.mo $(LOCALE_PREFIX)pt_BR/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)pt_BR/LC_MESSAGES/tuxpaint.mo + @# + @echo " en_GB ...British English..." + @install -d $(LOCALE_PREFIX)en_GB/LC_MESSAGES + @cp trans/en_gb.mo $(LOCALE_PREFIX)en_GB/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)en_GB/LC_MESSAGES/tuxpaint.mo + @# + @echo " ca_ES ...Catalan..." + @install -d $(LOCALE_PREFIX)ca/LC_MESSAGES + @cp trans/ca.mo $(LOCALE_PREFIX)ca/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ca/LC_MESSAGES/tuxpaint.mo + @# + @echo " zh_CN ...Chinese (Simplified)..." + @install -d $(LOCALE_PREFIX)zh_CN/LC_MESSAGES + @cp trans/zh_cn.mo $(LOCALE_PREFIX)zh_CN/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)zh_CN/LC_MESSAGES/tuxpaint.mo + @# + @echo " cs_CZ ...Czech..." + @install -d $(LOCALE_PREFIX)cs/LC_MESSAGES + @cp trans/cs.mo $(LOCALE_PREFIX)cs/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)cs/LC_MESSAGES/tuxpaint.mo + @# + @echo " da_DK ...Danish..." + @install -d $(LOCALE_PREFIX)da/LC_MESSAGES + @cp trans/da.mo $(LOCALE_PREFIX)da/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)da/LC_MESSAGES/tuxpaint.mo + @# + @echo " nl_NL ...Dutch..." + @install -d $(LOCALE_PREFIX)nl/LC_MESSAGES + @cp trans/nl.mo $(LOCALE_PREFIX)nl/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)nl/LC_MESSAGES/tuxpaint.mo + @# + @echo " fi_FI ...Finnish..." + @install -d $(LOCALE_PREFIX)fi/LC_MESSAGES + @cp trans/fi.mo $(LOCALE_PREFIX)fi/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)fi/LC_MESSAGES/tuxpaint.mo + @# + @echo " fr_FR ...French..." + @install -d $(LOCALE_PREFIX)fr/LC_MESSAGES + @cp trans/fr.mo $(LOCALE_PREFIX)fr/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)fr/LC_MESSAGES/tuxpaint.mo + @# + @echo " de_DE ...German..." + @install -d $(LOCALE_PREFIX)de/LC_MESSAGES + @cp trans/de.mo $(LOCALE_PREFIX)de/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)de/LC_MESSAGES/tuxpaint.mo + @# + @echo " el_GR ...Greek..." + @install -d $(LOCALE_PREFIX)el/LC_MESSAGES + @cp trans/el.mo $(LOCALE_PREFIX)el/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)el/LC_MESSAGES/tuxpaint.mo + @# + @echo " hu_HU ...Hungarian..." + @install -d $(LOCALE_PREFIX)hu/LC_MESSAGES + @cp trans/hu.mo $(LOCALE_PREFIX)hu/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)hu/LC_MESSAGES/tuxpaint.mo + @# + @echo " is_IS ...Icelandic..." + @install -d $(LOCALE_PREFIX)is/LC_MESSAGES + @cp trans/is.mo $(LOCALE_PREFIX)is/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)is/LC_MESSAGES/tuxpaint.mo + @# + @echo " id_ID ...Indonesian..." + @install -d $(LOCALE_PREFIX)id/LC_MESSAGES + @cp trans/id.mo $(LOCALE_PREFIX)id/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)id/LC_MESSAGES/tuxpaint.mo + @# + @echo " it_IT ...Italian..." + @install -d $(LOCALE_PREFIX)it/LC_MESSAGES + @cp trans/it.mo $(LOCALE_PREFIX)it/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)it/LC_MESSAGES/tuxpaint.mo + @# + @echo " ja_JP ...Japanese..." + @install -d $(LOCALE_PREFIX)ja/LC_MESSAGES + @cp trans/ja.mo $(LOCALE_PREFIX)ja/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ja/LC_MESSAGES/tuxpaint.mo + @# + @echo " ko_KR ...Korean..." + @install -d $(LOCALE_PREFIX)ko/LC_MESSAGES + @cp trans/ko.mo $(LOCALE_PREFIX)ko/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ko/LC_MESSAGES/tuxpaint.mo + @# + @echo " nn_NO ...Norwegian Nynorsk..." + @install -d $(LOCALE_PREFIX)nn/LC_MESSAGES + @cp trans/nn.mo $(LOCALE_PREFIX)nn/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)nn/LC_MESSAGES/tuxpaint.mo + @# + @echo " pl_PL ...Polish..." + @install -d $(LOCALE_PREFIX)pl/LC_MESSAGES + @cp trans/pl.mo $(LOCALE_PREFIX)pl/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)pl/LC_MESSAGES/tuxpaint.mo + @# + @echo " pt_PT ...Portuguese..." + @install -d $(LOCALE_PREFIX)pt/LC_MESSAGES + @cp trans/pt.mo $(LOCALE_PREFIX)pt/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)pt/LC_MESSAGES/tuxpaint.mo + @# + @echo " ro_RO ...Romanian..." + @install -d $(LOCALE_PREFIX)ro/LC_MESSAGES + @cp trans/ro.mo $(LOCALE_PREFIX)ro/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ro/LC_MESSAGES/tuxpaint.mo + @# + @echo " sk_SK ...Slovak..." + @install -d $(LOCALE_PREFIX)sk/LC_MESSAGES + @cp trans/sk.mo $(LOCALE_PREFIX)sk/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)sk/LC_MESSAGES/tuxpaint.mo + @# + @echo " es_ES ...Spanish..." + @install -d $(LOCALE_PREFIX)es/LC_MESSAGES + @cp trans/es.mo $(LOCALE_PREFIX)es/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)es/LC_MESSAGES/tuxpaint.mo + @# + @echo " sv_SE ...Swedish..." + @install -d $(LOCALE_PREFIX)sv/LC_MESSAGES + @cp trans/sv.mo $(LOCALE_PREFIX)sv/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)sv/LC_MESSAGES/tuxpaint.mo + @# + @echo " tr_TR ...Turkish..." + @install -d $(LOCALE_PREFIX)tr/LC_MESSAGES + @cp trans/tr.mo $(LOCALE_PREFIX)tr/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)tr/LC_MESSAGES/tuxpaint.mo + + +# Install the text documentation: + +install-doc: + @echo + @echo "...Installing documentation..." + @install -d $(DOC_PREFIX) + @cp -R docs/* $(DOC_PREFIX) + @chmod a=rX,g=rX,o=rwX $(DOC_PREFIX) + + +# Install the man page: + +install-man: + @echo + @echo "...Installing man pages..." + @# man1 directory... + @install -d $(MAN_PREFIX)/man1/ + @# tuxpaint.1 + @cp src/tuxpaint.1 $(MAN_PREFIX)/man1/ + @gzip -f $(MAN_PREFIX)/man1/tuxpaint.1 + @chmod a+rx,g-w,o-w $(MAN_PREFIX)/man1/tuxpaint.1.gz + @# tuxpaint-import.1 + @cp src/tuxpaint-import.1 $(MAN_PREFIX)/man1/ + @gzip -f $(MAN_PREFIX)/man1/tuxpaint-import.1 + @chmod a+rx,g-w,o-w $(MAN_PREFIX)/man1/tuxpaint-import.1.gz + + +# Build the program! + +tuxpaint: obj/tuxpaint.o $(ARCH_LIBS) + @echo + @echo "...Linking Tux Paint..." + @$(CC) $(CFLAGS) -o tuxpaint obj/tuxpaint.o $(ARCH_LIBS) $(SDL_LIBS) \ + -lm $(ARCH_LINKS) + @$(RSRC_CMD) + @$(MIMESET_CMD) + + +# Build the object for the program! + +obj/tuxpaint.o: src/tuxpaint.c obj \ + src/tools.h src/titles.h src/colors.h src/shapes.h \ + src/magic.h src/sounds.h src/tip_tux.h src/great.h \ + src/mouse/arrow.xbm src/mouse/arrow-mask.xbm \ + src/mouse/hand.xbm src/mouse/hand-mask.xbm \ + src/mouse/insertion.xbm src/mouse/insertion-mask.xbm \ + src/mouse/wand.xbm src/mouse/wand-mask.xbm \ + src/mouse/brush.xbm src/mouse/brush-mask.xbm \ + src/mouse/crosshair.xbm src/mouse/crosshair-mask.xbm \ + src/mouse/rotate.xbm src/mouse/rotate-mask.xbm \ + src/mouse/tiny.xbm src/mouse/tiny-mask.xbm \ + src/mouse/watch.xbm src/mouse/watch-mask.xbm \ + src/mouse/up.xbm src/mouse/up-mask.xbm \ + src/mouse/down.xbm src/mouse/down-mask.xbm \ + $(ARCH_HEADERS) + @echo + @echo "...Compiling Tux Paint from source..." + @$(CC) $(CFLAGS) -c src/tuxpaint.c -o obj/tuxpaint.o + + +obj/BeOS_Print.o: src/BeOS_Print.cpp obj src/BeOS_print.h + @echo + @echo "...Compiling BeOS print support..." + @$(CC) $(CFLAGS) -c src/BeOS_print.cpp -o obj/BeOS_print.o + + +# Build the translation files for gettext + +translations: trans \ + trans/ca.mo \ + trans/cs.mo \ + trans/da.mo \ + trans/de.mo \ + trans/el.mo \ + trans/en_gb.mo \ + trans/es.mo \ + trans/fi.mo \ + trans/fr.mo \ + trans/hu.mo \ + trans/id.mo \ + trans/is.mo \ + trans/it.mo \ + trans/ja.mo \ + trans/ko.mo \ + trans/nl.mo \ + trans/nn.mo \ + trans/pt_br.mo \ + trans/pt.mo \ + trans/pl.mo \ + trans/ro.mo \ + trans/sk.mo \ + trans/sv.mo \ + trans/tr.mo \ + trans/zh_cn.mo + +trans: + @echo + @echo "...Preparing translation files..." + @mkdir trans + +trans/ca.mo: src/messages/ca.po + @echo " ca_ES ...Catalan..." + @msgfmt src/messages/ca.po -o trans/ca.mo + +trans/cs.mo: src/messages/cs.po + @echo " cs_CZ ...Czech..." + @msgfmt src/messages/cs.po -o trans/cs.mo + +trans/da.mo: src/messages/da.po + @echo " da_DK ...Danish..." + @msgfmt src/messages/da.po -o trans/da.mo + +trans/de.mo: src/messages/de.po + @echo " de_DE ...German..." + @msgfmt src/messages/de.po -o trans/de.mo + +trans/el.mo: src/messages/el.po + @echo " el_GR ...Greek..." + @msgfmt src/messages/el.po -o trans/el.mo + +trans/en_gb.mo: src/messages/en_gb.po + @echo " en_GB ...British English..." + @msgfmt src/messages/en_gb.po -o trans/en_gb.mo + +trans/es.mo: src/messages/es.po + @echo " es_ES ...Spanish..." + @msgfmt src/messages/es.po -o trans/es.mo + +trans/fi.mo: src/messages/fi.po + @echo " fi_FI ...Finnish..." + @msgfmt src/messages/fi.po -o trans/fi.mo + +trans/fr.mo: src/messages/fr.po + @echo " fr_FR ...French..." + @msgfmt src/messages/fr.po -o trans/fr.mo + +trans/hu.mo: src/messages/hu.po + @echo " hu_HU ...Hungarian..." + @msgfmt src/messages/hu.po -o trans/hu.mo + +trans/id.mo: src/messages/id.po + @echo " id_ID ...Indonesian..." + @msgfmt src/messages/id.po -o trans/id.mo + +trans/is.mo: src/messages/is.po + @echo " is_IS ...Icelandic..." + @msgfmt src/messages/is.po -o trans/is.mo + +trans/it.mo: src/messages/it.po + @echo " it_IT ...Italian..." + @msgfmt src/messages/it.po -o trans/it.mo + +trans/ja.mo: src/messages/ja.po + @echo " ja_JP ...Japanese..." + @msgfmt src/messages/ja.po -o trans/ja.mo + +trans/ko.mo: src/messages/ko.po + @echo " ko_KR ...Korean..." + @msgfmt src/messages/ko.po -o trans/ko.mo + +trans/nl.mo: src/messages/nl.po + @echo " nl_NL ...Dutch..." + @msgfmt src/messages/nl.po -o trans/nl.mo + +trans/nn.mo: src/messages/nn.po + @echo " nn_NO ...Norwegian..." + @msgfmt src/messages/nn.po -o trans/nn.mo + +trans/pl.mo: src/messages/pl.po + @echo " pl_PL ...Polish..." + @msgfmt src/messages/pl.po -o trans/pl.mo + +trans/pt.mo: src/messages/pt.po + @echo " pt_PT ...Portuguese..." + @msgfmt src/messages/pt.po -o trans/pt.mo + +trans/pt_br.mo: src/messages/pt_br.po + @echo " pt_BR ...Brazilian Portuguese..." + @msgfmt src/messages/pt_br.po -o trans/pt_br.mo + +trans/ro.mo: src/messages/ro.po + @echo " ro_RO ...Romanian..." + @msgfmt src/messages/ro.po -o trans/ro.mo + +trans/sk.mo: src/messages/sk.po + @echo " sk_SK ...Slovak..." + @msgfmt src/messages/sk.po -o trans/sk.mo + +trans/sv.mo: src/messages/sv.po + @echo " sv_SE ...Swedish..." + @msgfmt src/messages/sv.po -o trans/sv.mo + +trans/tr.mo: src/messages/tr.po + @echo " tr_TR ...Turkish..." + @msgfmt src/messages/tr.po -o trans/tr.mo + +trans/zh_cn.mo: src/messages/zh_cn.po + @echo " zh_CN ...Chinese..." + @msgfmt src/messages/zh_cn.po -o trans/zh_cn.mo + + + +# Make the "obj" directory to throw the object(s) into: + +obj: + @mkdir obj + diff --git a/data/brushes/round_06.png b/data/brushes/round_06.png new file mode 100644 index 0000000000000000000000000000000000000000..b00fdf6e5da799c7e1919eb186411a6d50bbc72b GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|R0wleTsvibYOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KR`kD5>H=O_DgL1jFJXFq!>Q}g-kqM978JR_#WTL+h8DY^n&`OI|648 zE}Cv;{f~D+XTY0d%eHicZ7IL~WPS`^+wINOfy+8p+UfrmQuImq@ENF|!PC{xWt~$( F69AypH7x)D literal 0 HcmV?d00001 diff --git a/data/brushes/round_12.png b/data/brushes/round_12.png new file mode 100644 index 0000000000000000000000000000000000000000..aca92b70ec36a84b010c807c5bf67f52ab36d4ac GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KR`kD5>H=O_DgL1jFKvk4qWX43PpLkIEGZrslBjKut7nj`Junm%tMNW z8q*i1NUYg#;PV%k&%5k3{XE)7O>#5*t6Gq|B*9xj;FF&z>%hAr*6`UNOu&H)l!7`!NsgqZUscW}BvA3CU+vGx3&J#A@npZcv!nNEl?^5009Ix}! z^!vAzS)HoWPl*IpEDe%iTlw+rqPrI&qV|^8W9P*Vp0T>M!HnDMbH?Eq&d%H`(mAR&4_-t*dwK3%{Jq*g xdRFEE&&Bp?WO00vnkK$-yM1!nvMu|S?1R_bV_L^#eF*4%22WQ%mvv4FO#nzmlgt1B literal 0 HcmV?d00001 diff --git a/data/brushes/round_36.png b/data/brushes/round_36.png new file mode 100644 index 0000000000000000000000000000000000000000..e23e29370c61ba2a3cc8a302ce5f32396e29eedb GIT binary patch literal 436 zcmV;l0ZaagP)t1W?@Avya+s0-hd}SV#(OZRUUwuflNd&wZa{uRHAXx zfbVY3C)?-vZiFj@fGKklW`sUG-I*tRi#gC>T!eVW2J^2vHRG6 zD;Qy3W-Jy%1cI<;+J7tli79JD2v{=lf+j2pVA1h2Jd0000fNe6_a`s@?PS_Z`_etW9bal?r%5AN! zZ&rh0S*-4$AkI5iy}ZD2#x|lL3f358LDuU=G|pHtcSJ8uZA9aYeX&z|u(Ls@)u^XI zI>QJ?g`G!xdylrbII9F)4YDCx3xYyv@2fYjO4JStWSveJ!6+&`*n9KcyC#|e`a zvQ~9xVJnSOj$k(htJC}uiZq7eGkt%HS$`X|{|@c~e!@%LeTCm7ZkJ2)IUx=UqU&^{KJmK#R4&+I?dnQ@WC9EL~0 ziiQ}bOh2Z&q8fD)Gu-DPHmO3DP5@d{67K)ALIf=0^kg@B-Uo) zxGI~>m{(W|m!AtS?fXzIo<&G}6uW$8XkTp3uFw{*7-P!1{}!VCUIw3Sfi=0Zv52qb zZ{X4@JQr40N>;hqia?#D^{l0yg;Fio-U3d6?00@@AYD46mWgWZ#K*1 zc0{DgBo8s&ZKeqiwV!By)x7kJ!%cCLLPu-Fi&YyY?cXYy$~il8*^J^D)xt7~J=!%3 z4_upfvamP&&I6&fY6gy7f_hFqhKHqB#r}|1^(*L7v{Kx2y;bFt?eWA0yK@B{zh8Xd zKg{O;F||X^Nalgy{1yKaB9i5t#5NXf`Pi_C?=V;Qjpr79a;opj5+mGp&KKAfSagep hyP!?HCZXwed|j&U+jfTCYCy*`c)I$ztaD0e0s!RnYexV8 literal 0 HcmV?d00001 diff --git a/data/brushes/slash_10_rt.png b/data/brushes/slash_10_rt.png new file mode 100644 index 0000000000000000000000000000000000000000..5b416703246e1e92cd2518484a2551577fd00353 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!3HFgJ}hYlQfx`y?k)`fL2$v|<&%LToCO|{ z#XyxpAk28_ZrvZCAbW|YuPgf{HhvB>k(*bZ9Rdoi_H=O!shCrHer;A$q6FK6(?6Sa zIx1LB3A9u)HQm(d$UM1j-T}XZ3O97buG_Sfu0FUbRE9@HQtbaJ=_j9y{rBy7|J<*t zPIJn|W71~-4@&LZa8%@K2v5yH>#B^0J@zt-4LZ4wG0yqW%XaCzL8FkH#e*ixStndp zdrLepKfr1?p;t}J@QB?3RjZ2Le~|~$BWjOw#Xd}y85}Sb4q9e09D*>fB*mh literal 0 HcmV?d00001 diff --git a/data/brushes/slash_16_lt.png b/data/brushes/slash_16_lt.png new file mode 100644 index 0000000000000000000000000000000000000000..bba7160a4fea90b82eae35699fd325325a67fe27 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3HGX7W?Z1DYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oArNM~bhqvgP>{XE)7O>#5*t5ej2?5pEd4$qIr7yq!T;`;89s=4+AWRFT-<#0LXArxt41l? zjHycDILZus|4kX3`jbzMw^jpH+ez}x$?IuB; RzrYY;@O1TaS?83{1OPC+lZgNT literal 0 HcmV?d00001 diff --git a/data/brushes/slash_16_rt.png b/data/brushes/slash_16_rt.png new file mode 100644 index 0000000000000000000000000000000000000000..ef086517504c5bc50184098f19cbbefc720ec0ec GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3HGX7W?Z1DYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oArNM~bhqvgP>{XE)7O>#5*t59R)5PxWYZ7LYn!%BTKzwMDx0%t`lBrzF1ND zdhNee+-FxEVG1*BJ3W!Dppk2K#Buh0(Yy~Ta}szTS9DD_{U&toLz|u4#^#xG*kb2A zGJYT~vmls#+mZu(AEiFT&af{0pD)TN|IqdUdrqR!@tB7<-p`)DvHzykjw43rmYRND zx}=<0@0CbJYz4WuRK@=H)OO1)D?W4Apq_W;_KWM76SaK4JAaUSR&-`V)9MZJ q-t~Lua!;2y%92;m#GRQN`IVWi#N7FdTyGxG*9@MnelF{r5}E*LIER}6 literal 0 HcmV?d00001 diff --git a/data/brushes/slash_20_lt.png b/data/brushes/slash_20_lt.png new file mode 100644 index 0000000000000000000000000000000000000000..7840e73c3121908547be321edc8269883bd7ba56 GIT binary patch literal 468 zcmV;_0W1EAP)Tj5I~@Fl$!;d5Qe^uGvCISVP<><0=?+Ol!Ut^prF8@$IIE>lN71wPF76>(&2LISDaOGTBLT-!cVMWPAq8-2RI%UT0HnJ zp?~oX)9JK^Z-$It^!@+K%iVPN3a?YkMLh}a2TF$xTwz7baw(zB=b(=PiB2|gBjV2_ zd`fJ8V5J5DiTLewyeVe7iUo8GSkzNMVwR1(SWoCmLfbge7ymh+bl6JxqF$wD#8`ej zgbo8FX1XtWx|y)$)J8%p0ZV90JR}=>Go2JwyTE-FAQ8JM#!yd(Z&N!stqLri?uizx zCu~jhbaxaWz4CWO>{+p>&ZxlB>ArZSUg8>`UyK1P&lI*(zx)R{7H0^o8vwun0000< KMNUMnLSTXo!o@29 literal 0 HcmV?d00001 diff --git a/data/brushes/slash_20_rt.png b/data/brushes/slash_20_rt.png new file mode 100644 index 0000000000000000000000000000000000000000..8692e01bb27ecafe0667e96a3f2bd69e28a3efa1 GIT binary patch literal 408 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%0DIfWI?v?0(k8_=gzEeC{Qo5Gi@ zDMF4Ad{=-XKrx^M5C~}rtwue)N9KNxC^(wlF-sK&bTCp(gyzngWq=DESeo&E=%%$YN(TkE_p*hfxP;FE95W*TxE8NvT@|}RRwf#jq2yepN_4Gk#whkzsiF~ePCQfqHl?Lq>U|Doi~c!sQ2Jv0 zSB$a~_FVeUD|fOwac}x&wmE$dyCz+_?Z%({gqM%MG0v*lru4m}S2oSm@_qz^=w+O# zE>>O8f87A+!%7jv{;U>4eRvm?LGS^30d>sp|lA z0=f{fqu2}OeItcLH9>dI(xa(raaM(nGicDdzduHIm%Wx*z9`(Ia|!s^q>ws5gON;Ob5EFH+PO3O%eQI zO&<@Lt4$$88(*9ouvnLUq^^-Yvd_H!m8Fq7iJB!mG}eS>33X_e07~GU2f(e#x3J8} zDyMR#Q|LWFHlh={pza>TYMrnH0Rzv=>OzqIJGgnK6@j=(tJ8VAW63+Uu}EO|S!4ML zSbg?TXn$xUc?hdga9XQ!iX&k%7X?{^Nx!7Yf!P6VCLti{Bf6dAiSJq6{d$U+%2TLI zHQ14x+D@vuI@?6PwCW+&d0Z5NwUI4~?W(tTfcufN)a(KOjri&8a0fUuMPqYVtUm%> zQ9k&r?-yH;!fs@5XN+ErZ15mtz^1Ss-G+jo&uD%z!6#j-v;yoX;wclI!~a(NLFn(^}ERm z15*+)mYT|a^@ba;whM6AjAuvh^Fl3cxTUXkv1x{ri=v}p54_l#n;}{!B4)jI@nTkT z-!dEx!OmN9R{G_sPd`#&y%z!XPk)L{EMyB0vhfSbezd8JO{8bOUXx(2R$2bE5R}0? z8Ax{`JFHx|NMCn7<$%(+G@TPs_l$Q}>zb(dZYP~6;|);l(0@oL@&mGTqPNlqA$ELq zDbpTd{qYqgPEDDv316P0DM?xf1yDbAP-qm+eoH+RlsY7=f~5aRofIT&-#6=~a0PAd zQ|hR|inxZ)J4n2Z`Pcsw=TC;jn{<=l4Cz$oPujmW|A#pKn@~>CJ6~Z;AL}Nj&w}ujWOMw8GRVknhP(j-HNr=zxf-e0w zy0jP^>e%W2Ow;U-KiS80U7z!QhJFnnu2Dj2_50}j zX`YQ{^j#yqM9sYvAD0|P!yDCBj`$kD0mvQ~VdX%h}1+1pV)z7)Aw>jPAtBV2(~pIR}eHgt;4g!a^WaM}hy zBY@ft7D2r6nj-3-P7UgLiwB%Jz%uS2BdTpw70xEO@jPEd!?U{}sAWi;Z_euCKQE~s zPJ6AyA-mrd6@?nL*_1DkaS|r=@+8U^h_Xi8L{+}X+5(Z~rH+Y~-c9>k%lDk?HE(Pk z@%eLtYBX)OD_np8ghmG9Sln;MsS zny>wo@UwS>%P33Y%CM{~m6a7TQu)>OaB*z_Oi{LWTp5#<<+3^m3vUQ830MhO1z1fM z-@i0#I)RhvG!W=KzUg@S2(6uGO=_5ZQkNgggs;6bxE)fW&@`4Ll#zronotL!tPKN} z0+x}|b|UoUxiW!y<^N%Su8iV$8YsJsRKwFpP_<^knsmwj-yAb*agx)I-xSiEW5aYRqOv}r>;Tg6&JbWNg+u?<5%wnW+0&6(=NvzXd-|vy zJ2v8r(6AQqm8j=|G>V=F{rnVLCA$;1(VmuCcu{6XFQ5<54_Jm$E0c@2+Mym&V}Rv= z6*$JMkXL8mxEp@@CqLqJB^c}~Ks}ONc$_s;A&Jvzvdj34GA?yJDb!TqrXOyjw_+GZ zq3Ke<2w;?2C{!7hGANYdwd7ezEXk&3s*^Udt|+}0d4*&t(0?JOwdbm$gGKROo)1IO zhaMJ&_DtUrU!5%6+Sq+L%W%v}YA-H9f)oJIR88qme-Bj?xq7Utvxwm8J0NF!t0V?Mj3gxQ^} zaM`Gpy6KHCc8JRhd^UUQeukD`JGbZOGiOu2n{^kMqg7?MPu2T*$FDNvep0u&KC)E| zQ`CreQ~oFV>X6Z;rK%y|-4TY*63_*h?Os?5OycA*I_XAj1|$G7t$c-1l$XRpw*pcC z=;Ct@s-zY|CyRQ+1j!0}V?lY;TW@5cm8Ie%w9v-d6Eab|5?p8(DYvxCmg}>nDvZ?9 zvi8b#cBXf-v&`#rXI-B_tUKXG?rD+9Tr(T&9(0uS-cqLZxEs*A-}O-UyLVlZ3_`!t zy1xB}cYUitAE~$7_f3t$Kt#emWt@P@Ku`vS^73Yl`m)-;QAX1#wSc=27Q{)~z_DvI z8{r=^9~_`{%JU&r{Zv}oeFnPu$>)>7&PyCS_3spR-qLI|CHPb(bf%{Do@`Fnl3r`l zY3@m#<{FSy|8}WPi78%e_v!?^yGlJu8KLpi0BQjZr1@l*#N|=Q_!OyAcb1_nV|e3E6h(^06t&kw6XxSRXJG}fI6XN0q}u*QTGgL{lI>Uvk5wcOS1cX&*T4U z1Y_f!;?!y|_!>Y5&Zx7+Rf`B(%1TXD(ePib1JnZ=0F96lNu>_7$WKOA+HhfcOLJbhb&1g#C_Zr0pV3Wv*0-ua#no6N0R!<7}&n=ZJOIzxzhPPC&TN{VV zYN7e!ME?idN_MiA1x2x#8C}FiOQUA3jo9{vShYV??}|56)hwd3gV~O={om**Ik;dI zQ~OyYuX+b{7Q3$5!;IEq@NH@x-=0Pud=s4oq@@VV@3(kt&o?C)*Q-UfmCHIgn~vGj z&ce}iDb*MZ%4$Fjpq30v_)h;J{o+tbY&3|-PSiZMjT~z^zRh=n_HyFWb1XVZ?=|-u zUTYVlDArr(Hm6o%(}OF|rei?k%p#e0vgsU8ML1F8xqgcAoV@uQE7atywwK<3qStwAsGIu}htP-ZFOoX|v_>`h*i+smF`nWX^t#b8EAHn$NmJ zce=xQ%e4tb!BK zO798y!^xLYn3=;TOgbe!sq=|C;ZtvIRjYV32#Ek%sdgpwn;4)PfSiJpFI=vR`oOAQ z0O?2g9xP0*BH^pbJJi$?C5k*1@`NO~kjL;&zG_D`Z;XUqQvyz({F$yhpw5r?i!pKq zF=pdTVyy%k^*EGffo#ILS%mtrL3%FXY~CQ%sF^Wfsw?CNRz~TtPUpbD{rI&XWgDon zp82)thNW4A%)tiQ`BwBrM6U)UA?OEf^Zxgl9@v!lQ3W#+%{8e(7j^dmHP2N*YoQTj zDGfMsxfY}5M=tZsL%f~UP!s_$tw|4;WTZP7mQ>0rk%2{lF|#LQNs8{C`ZH5YcXYAt z^8ThXQzP5^IySsg*8|lc{rgvI7BReFGlNTZGi3k`TNVe02hU-j8K~^*dm#PiCQ=Cc zzrgZjMz0n@AJF;@{^r>HglrvPe#b#I0FhP-7H=5m=#=|TH6DzC#~r8n;HwZ`$8A7p z=*hfqqBf5`*)i}pok#Gr=b;AQq={mT#M7~j6u$()bb`5LF!Iu|`3e8PnVhs0q^|!T zXCgD2z&Y+*bo)S~uP62F1f1fXb#@wDYG}=#DXGrxX{iKx>BT8!D9oWen~NN4CvSXd zoKt=BSsSeGSo|F(CU@LPe_gjlv~H2VL7jWNwu|3KH?C^o1H5-3wI~F4<32~@OkLxUS>D@!UdL>Hj)Tz!iWnVP zvfy=EF`Lo$RPURw7Q$*ndr>v3xE(#u=&&~4_d`1YfzGQiPJB?&Vh;@tsiAO+y2fZh ze)4i2zoqa*YP%#})LnPnroz(4W|oP&mYj96uELVu!}Cdwm4Gmm)#>m=eLRt$K}X0V zKSMjci=?X`Py|5I3^{R+i!zT9>^L6UO1O+X7H_K!xv13=9@MMET8&DjlhhI#HDam* zqB5U%3z;nmBRM#)mWm1KSLPH>t*1^GMhyO|dgSWU?@V;Wh+C$byI-*YfoNDTvD2tQO#TTF(-gAa$ z3dcuUG1eS_4NwRH#`DvZ06G{#cL)NO0!9F%fFyi-DE3duY8@t14`=|O`Qlv1-e3j7 zuz)2MXqrGx*!56cR6k=yYxGOy=31#fPn^(lDzx^9%1Sga#q;Q7vaFU?N{>rzgA{BB zbO1U5U4U-A)r-}OU{Lmwp$Ia{TX$+|Kb?D(>|t3A)yP)}(Rh+$uZjlEL(vkn0IKU2 zH|7t2SRXvc)q_a)aF2*LM^0o`;{Hp`=&%X+`i;{*8Z@bi3YPHxGj?!sZ z+hcSZRtaOi!cm6s-C*=2hhc%z__^80%Z$MPy7qKV&Q>bpC`Ww<&d(;L`_0bK{xLMC zlboad9nzq*Gp~NbXM}$7r+MlX_x_Q8D8r>r_wXw!;CzzAh@h-K)6+S1lP6sejnGN3h?V!&%BiR{I1OBm!J~)!C;8;;KcYiaI__}7xoP;Wx$!})R1)UIIOD8FuE?rP0 z73VqC$T+V19iWbwHp@35koW16JTZ-YnkET3zZT--gQys#bL7i~X>LJi4S3)5BzYby zK)-l&e9o8)Z~s*Jls3WR94`Nq?)E(PjQRIyo=)nEeLbWgo&45{j!LsOD11GqeD<4m zth(A#4k-g@Ek}bA*POP^T7vjL{6ILI8^oI~B@?k^gq`ekxIb-c@)qT^iz%wLeA8p% zSnke|^1SFI`lpHLANK#Rnp&cf2GB?es+1nc_5;#+rd0W5R4cilVQ_sx4d5zO3nPgh zO%|yMgJc|4EucdX1E3Y4S_CM@W-q}uC%s(OkE@{rQ*cfoWyq`LfG~oK9$v|$op`NP z6~_`3_tyNu)Uw&=nhsl=EKigN;0%vU{|p%o(Ua5$Tb8mCPqf^6_DWCB@W9p!7BsGH z8^ftQcilDd(#o2WMU_pHG5=7xcysdT1D)gBm+ocnUm71}?@o@SUt7_L=+UxY#KW!Fagl#U^ zWF{ZP$OM_|fPae_Ag6?{r>0Matv%EOiV5pr!Q2EMQik(jGeNFw`-R#r@&kGJ(a5vC zM$o!YKTclf6b5f$TE}LijEPEy)DX&svTT<5CWwX`YR{f+XTa!B8T~A&+hZ)vBGuQNu|;s25J}W8eP~|ZL_hO9MRrjlU-g`Rc80+oU?Ef z`^aeXSaF%uUaOs6+Dwu(yQ|9NTiuiS)N4j}2b0~d{{514PJi3f;7*O@nPL397sO84}# zbJ!J=o*{90*97y9ixsmTLv6i(fjCGHYK$J3?Nm*zk>BpgxXKWZuA(SnIHC4~u^2}f z^a2@ubnZC1+RyEC_0KszckVi$#$memby`=>x?@k{XkC`CI|4KNfoyo%4_3BB_%OHO zHQbO5ukD2;!gbt+uTQ@yK8{SmxX_7DW=(@~Pjl1h)QEr4 zw$1`SOsG>K`}D${Yl?HY1tn>GMr!7Czm#Hd*)74}Hr@Afy6;P!PiZ3^gqb8m|0bzTP^ZYuUuYZ^PS~LF# zs@co@`cm!s%u~W6(AN0pp{+TDDI?Ni=cjaNkruN1tN_g+t|f&~vqkiv;0@nIsA6V- z1?m{Gd?5;~2_+{%-2!d6YzO4o_~{NfA_9HA!+?kwOW%l7LoS?}Vk2od=F^X}&Z9BX z9VstUI|X~cp*zmc%6!L9!Bztf8X%ey>y;z$GoR*B*jVSkVg^kT@tAtP&LcB_5I)WvS z=$hZ*F`zt+goo6h$+|nb(ks{ab#TLiRJDd7kVUm3T&F<{7ZKXEU_% zjQ37_{BPPZ-72@xX8w-Z)k%9G=$;vQ<^jy(obnJ z4rhW3Poi4E+a&$qA^#kL44?8>k)AVw7L3&w6=88f``bGV$dOuE< zKX!aP!B8I`?KG^CJ~Dp#UWQ~dhe>81VxK*-%z^eF(ML7+VEe!SmoX@YY6Jme%0p%M$ zZj7Bk?9PYi8=acjFwe&1J*&u)(fUu$>3K$BR{q;D;jM9^;khY5ja#!#r=4G4gDr@ENEXgz#C+VghqXzbM>?=S%4NidCY`0-=J3n*l@)kPC!{SwhX8 z6IzD>u)LH)ipTH&opbK!%1dGspndNL z;!~{AXzp3R{ri7};>Zu?z4PX!$6$W)DRU;Q*jCyLK1&~Q`DKWu+KhNAkLtl=y&xav zPN9TTZp|3edHeYcKd$rY(?;pM_N%a4;47G+2Wa>juM#s8Jtof|LbGI$>^(VkV2^-a*bYgU^=s~WDbZA&+ zkP~A>Rw{2#AX}wz0S~^+*@QsUL=P|S7)HYfZ{4`r?Js8RED^8~=>N7=!WZ=R)js^aGmE!nu<4>-; z`5Dc^xp0olv^v$LG_GQotd80@b&s&dlhk~NRueqoR_v4=(K&Q^(jYrE6eKB8#Mz}Q zDw5!^eWW0r)$)q&0OI~Ou}K@h(ck0dTI;#SEM&?L;rWaL(HA`qawS71r^mlXs#ir%t^aH0 z^cMP7bNwfzz9CNg_jwHZrDt*46F4c!ifCE>`#bYYI9pF%Y(ORQz6Pf|`desv!sZhv z>#{SSn>HN=zqx{}Tqv+Xh$+gy4TB=+H`U5Jw~3}?cD&XC0((=PAkE}M)-6vh3J1Y_ zBq9KremCpOa;-Ros0{)=Ay` z+f_-a?O2Hdt;8Ropp37=>8i&r!1SNL=IN&*o-5FN$y3ByrSV{XLWjHKAvbP^anXPl()y%<8-HIZF3=> z{|vDZUjfRL{fY6P;GK^npXo29CM~PhWN=FDLV#+S#sM;QN% zfV}uo)P}U-Cm`ReX+po(XRKtQjORe@pboe_O}r~TI&g}F72bwVbIYj_yeUdv734&K zgIKK1B$X-j13?ubeVM&^9YTt7F*~QRdBv6HS8hG`(CWjX>n7QI8g;g|v1{yx3x_I| zp#wLvHUBZUez&swzz5l*7p}Ikg^hF1%)NnKcC5;eGK@M1d79>7y$tUXFoA&5BxtGrkN0|{vOl#8q~Qgvq`0--W2XZQ zP)pGC`fBWbZ1eiR(8TDu7Ma0j^Fj7%fCM}|6}@=D zZJdjy1Rf8&cTb^;=IE~}`Ohn@V6X49o8BrQd9bQ`psYUtt0%>KeO;r;d)^*~jEXkW zw&=*H8e@|FA9IBcquLEB;!uJk^)A`hI3v_NB@HU#K(#}gc|w#5)eB|S>W32qWCykQ z$r%D&CDSYwB6J1%(pmxMp^j-#3Pt#ltho>GVO!tTFSL(J`K#&Oc(kPwmRdT9Xs~LTOHy4S+?R*uW4=v9H%qs1Z$_9;MK6c zHgMh(G{ED?(=b%&djq_O86F+9knrIu`Gu{8o)N9kx?CXH5tI}*sk>o9RQ)tm2?wcX z8C;{@91VN*rqR(>S9)#AXdIh=6LCoA-aRg(@f;RZl;WkV@iQ`>uqUvc9)SKuds3sU z4AJQh$?rX|O?qLQ2&GJJQoRR@%NsMD!9F1&I4?1xNd3pd*=eUb7)t^ zv#VZs<5YhOv6GW;pRnkb?c2LFTkga=$gMb0`EV&X<1pmSC3@VMELfhFIXZ~pRVye> zQT1t2Bc=K%jv1+F6#*L8j2+5WGW9}9s4BeeOaOc`2nunzNH=;vH^CG`*(oA$372^Sv8Cpju_Mc^jFcHkBW_wpf=C|_-466%`#!p^14%6 zr6H_Y4Qv#}ynU5=siImSNv$9o$c}8;bg7=HNbDKPruBflARqUuwPHDT+{!S$bTu?34Svt~ZgGK9v)*3B5g6)XY1}E z4=L4PTxxs|^!*`j2h18CG<+7Xi`Amsq#fK2nBDw+*u5q6fV&hoV5i~!Gr+@x8rD`; zyU_csoBF?j#;}m0{pl(!>uS&}DJ+z9M45H||5gN~%WD_mhfkB=wX!tuohWZdaaCM5Z(jx@%wX8N;qx)+sPj!-KPCE9B(=k^FYzh0- zjnf^6=kiUuomtkMkD!mJML5cSa)2jn2X%mkapXrT_0ftth5eA=lT1i(btMk*D$r`s zEDrkfwBl(@^{M{B_UVXYYec&5}SNOb_0lT4PkTq|R)$*+CL_-#XV zl-1yB#(-2aRtnlbWo8;dCJ+*cIF226m809Qtmp>3i~&4T_KoB*Ae3=rg4&e#@A;WB z{*2u3+m2nQ+%`AI)gi^;f;?SeOe2FNN7Z#LIP*Nz-^{`wT~^@A!nkKJUa8fc2joSz zDWz>=6uOKL*%nvJ5HP_|k?v&ZM+iF0WDQa&1~5icmIOt}wa9oRw6P-;iMk8P^Bio= zn(ftQtkAit@n?C9(KKsa>0x)Ry8CVx&?1N6n|%FXx#;q8PQ7|3rVLo%EJiv9zS%9( zZOm7W@g-B_THy&;CqqMdE7l1y8y?&zj2d03E?4?bw@_*zghvGNP2%*bh7Rl($Of`^ zz{kGS4&?Mp2%HF>aB=E&T)uS5Nh^j^DY^$yPSr5i6E+$?PdQZ*wTE)57Py|U@iNM( z67PN$$6C2cSLH@MYMadvDTsy+R;?APR@3^xsBySb+sKuwOF{nKwjH9%n9e;Htv&oV z>pIz~~1x^lmfW?lkJ@O>%L9wGB!t8sINAgzv{7<{5?Yy^7 zM;Q&p)B@7D20>MTktgee!v60o*GoJPJ&xZbK)nP;{yZE1qFesF5Rmvu=i(!$h6z92 zS^4(KAmCctXQMnpzmRKqzkUt%aq<%}uHcL!jOiD%j>`@jfQewsJwGtf^B=btSjAHu z#V?(D8BcjUe{k{|YC!7RITT&YvWCm_Yk1moh(2cUvdEzK^PH|1*G)<~*H30GPm*QE z!waWjFkj~0bbdY*LfEAaZCOGqJ~JM}G0>3cn5xv%P>ggF)Ni}mhIs6Y*>pL-Q*7=} zwF#bbJ0Ih-W8fea<<*e1y~r?>+6NMti@5bY;^wPPs1RHl@GyWD9q>a;plvL-ui3JC zGo2Gc-}^~*AO*A&)CKAW6_F0AaNuSh7?3UDIS!txizL8m)B%Wa-^Bz&u5>^ciM4+5 z6WM^grcK$|AE&ytG1o}XJJ)q;l4MWW-9HVykv9{tNR174*;@~eY-Ng}Vc61@-;(KJ z{NM8{1AP-cYzP{{3RJY&kv>;8+#_?r5LsK6i>oEWwqb?%Hf!@zdoaIV5Gh+7l{#QU z$~XgAi7Stn)I1ca0;m)FuTPxS07GK<>o`_O@B5+pUP{-5x0rN7AopVtsO1%M>zmP& z3i9o-7UE~IPO>YOmwk84ZR~AvuyCw3;@;QRvRh#+G`v0#y`;;(eJmJf=i~#FoSGdB zAuG70*Jv4ncYC6ru~VKQ@>IagHU1^fNJSnap+c}>juv5o2K*_7JQb*K<7g2d=V%e4 zKO0qEjmy{H!{09u(dhli+C_wO_8h{Y7Vmx|@8;&Aj7{$E)N<}cKR2Pg@!o4H`a$z9 z-YD@Tv`d~cw=Abr=+dImn+D+4Z1(nc0^ZVhdlOCNpgAQln>8}0tE6R&p+1u<@>B^x zS`)N(R9x|*0Gp=Q6JlGCQGknOsubl@RyQ`X4;=ef_JPJhmLsp(H|CFhVQx;T&hg%I zDYy;(1>AKHcB; zf(11M2G|@SP#8q190V#VDhG67M7}aPBXR#McwVl?owqeV1_taTN@23XOXX(lD>rTM z_fjmB0-n6mkb8$+Jn%5<)$Ege`BcCtrj8!tIj8Zx%bd(OAn*xP0=+S=3a z-{QMz7H6j)(KPb14ucON@-kDZudLKpRn!p#h(gH?)fE?&}Qo=@Ke12`5FZfzHD7U+3PrKd7@wpWJ;`0f3)t5y`V~ zIW@ZYqVa6;AWj|pPVj{Ik^94|5vVDUYQvJD8>keBr*@8TCq&b!grWk`pcH>Cy-Q$c zh?tXSNq;niucYz!+J;M~i9TBDLZ-a%o@5O-8wA3?8pe`o6&ej8-n+;T0iWqQq0S2{+L% zN@K2)%=i0(=lbz?W$o`2@GPn(LwQAoGhqIALUMdr{+-PBbSvkuaq#L^>b;@Wf;RcI z2_8D>n&BzV{PEy*O|(Y$vLbBd@g~Y2GrUAOVEEt4BhaVPng&H>PDYa7Qai$rj2fd5 z7WV(XNO^?I=`G4i!*S&o1|R+o8K{~GqdH+3L_skSd<4+qqp*YlZsX^vK51mH<2MWh z!ciu?W(LVpHw@%7)+}lLJY@O6iMFfFo^%=$Hsu$m zH&n5!BgZSujzWU~Vgk*)z-DzFGs;0* zs^QwMl*`|Q%b0G*^UcbIY)bh8o{!oOzW7udASAF4d+Y}V;EA=CWX6^OsQ3)j3UYzm zK*-0v)pxc)eh{L&l`=CgL#cO!yUm42ba}H1<@mRh&1^R`Osd#PHcvKB;FjlGR07fY z7MW=inkA`xPg;#fl(j6ad=a1FYo4e)PE?+c&6=yR^u_CElrP?XJ7sfjU=Okz`MaqH z%npNUfer%YUCdf5uxWBMUge|U5Ebx=1souL@OaK4qTY3L-G*ah!I^=J+zM(naZfLv zN>bknVmDqnJF{c=?howVt$gv$I~$K5IB)>tz`iU0pgf9yIk5gCQV$dBEbC32oml=( zu+=B(OCwNQFcJqwqK5n>Du|^C<_a9-(oZo&e< zTwX4SYQb=pP2Zd?_~xK*R#Y9Mg9W~M`NHwp zXxJ~XR6ap7dEc=gE0)Fry9+fL4=JC+9EOxf<{zJbmd0+yrUvEMU$Sf!RYMo{4AcU0 zfLtJV7lz6UbSc3c=}tVw33E`EHkbC%2GY_R%ylc@tCTNe=dDX!!R2ytZ5*OU6yj)y%HCWX zKc4b1p77k_qVi=dL_f_O6}-PN#ue&KkTwh~iy>&evio5J3UgI^P+m60&^uC=m(7Me zV2z+|P!ZGv>h(Nb&+uygY`H#wwLrF;8I%I0L6zo6d2)v^{gKW=h@rff5aqyyf>z!X zTLx^wEQUTvtM<(z>)W<%=i!Z8QmK}fMYi|e3$IEiGpYS;ZNp=$FIcz!&Wn%SseBc8 z=TWf{^>SOpW9V*iNo8rvJ+U2Od1%Gc$yo9|K{!LSZA zzR3F7TOS*pyoui{DtCO2@ARPIA?<7mtDy~dI|ZtM2I-CiuN^d zkLt#oJRol;hR1t8sqqBd;fbf46+YzFDc}QesQn;4(m5(EwDZ)B9R&4(N}ztwU^jAO zJ*wS>6#zLvPEadoXlXMuRoE}+;3&E=CYcqXHY77z)9_SWpq3J z-PgBj)se$f(@Hn%KDY6!_nwzWfO6N)JMLLr?CjcGCx&>ee`|i@hKrf);N0ddn~yTv zfwgQ?=hlt2Rc!WZrrdbwq5}tB&8}a$dWh#!|BCG}F7UhKfDaT%6jl`lzFI-zCa7Utd6_5NWc&4Sxz3^Qn*5(?8q$2-m`(=x zxeJVLLDN~tc3_Q!Som^Z&qO?AvF&bYiG{<)1t}zsT^-EC{DE%9UfKBIcsSn5d51xH z2hOtJQhBoBnBcf@9#>+j*F~o{)07Viq=WJfy=3s&tl`a?NT?OsNFo>s zVMRHF=TO#m4ZXI-0U}%jDnYD(20>Mvtp0ihD?L!Im&MT1c_0;M>g{+PTq1`I zeY{uJ_Gs5jOU*80y($o-qGeYnVT|I+L0JR&L2%$woqjimY7$_{2B`H6Bx~B#5pMr? zpxzbi2C{?aCx?R)qn{X#k+Yj33sNps%}+n&^7JEqQVv=C5Io5j%c*p z5!}dL?g?aavv zBp>EP#pN1G!+M&m;{$Q!ulN--t=W zNo!Qzeel?4p%lF3twJfd7f5N39J`&}EA)ZJZj6^|We?($9fnIaPmL!0ZFTA~KvxP+ zLE$%UnuXsqt!`hsYnuF1(*g`lnQucd9F9qRGn(^c zdB;A-E-$7Um%|%>w3~f)fqkx)nxAiY25Bc(;OSTJl>y4EFjut0ZNY~D00iI6Mw%9V zGbs4R@J%FEXmVXE6qbrc9s7@gD>QKG7(@m!=^kQHGCJi#xk6JcbSj0>(0lw@Hv^KP6L`2f@D>RfwhSm%wc$j1 zgzQ)Q@ZS=sA9}!ay%(PaRG+C{d{!?7ZKv=8lC~$x^+`+v`TzsPK?%?*ah3xv#u5Fw zPC#z4rAEL~FMvcL)quWuJ6cj1c-WveRJCHClyB^O>%N5z%GUmYXr!-qYG&QkOQpSDpFf@M>mFk3YPED~GpaMTvV)hub7wotZ`*t`+qG)Vz(6b( z4E6S|UAKo#jtu2Hf-DdSftW?`QiPPvB`bJdLD;0}&DVG>+mRPaz2eBf2z$8vq#} z;^3oMk^&Ert-yY=mxMsWhCjzAP2-b(f`57_4_%BK9t7BD-0oLxa^%peRS%7RneK#h zZRY2ipJ)#j#>W>1C)$`ZlEUmyDK&pZ`N{4t?s#%ZX?J~r+nkF=M>9u<8pTQTCl>9a_xNM`uWDe zc?`@@#*KdhH$I9?i<@-!y^Kp-0S$txAW_``AGTH`rB%Ev4+6V!rMo~nRUgg6yD%Zq zwpu^|Y8N_!%Nzxb>n^m^@%8sv-e$_CrMnzF`7$d{;38kWX;XVH8tW-d%&c43ys12} zKNhPE&9Pd4ZziR`!^5c*zrNM#+&K&Eyw&SVxV?qW?b~i)8&=PBb_V=~j$t;wa@ozr z$suWW3wF{<*>AeLC;7J&WGCFbCQs&Pml!ol%(*JXO}&hA3vptlzbTD3<0+TpDSp^s zz&a2PnFS_t;tn=*Z@B$ zD>s4GxJVWX^q)!_lSUR^fzDGIsw$U9qvKP1A6jIt%^hrHt=qGIE;jklhtWQzlQkv> z29n9f@*ZGdg!zGY?aGmAe_hWV~ti<^YpJA6J^ z4emJf>E`Ft#tBFashP>o6@1vPvjmmT4G3gCd_L?P)Pv-JJaV&8 z%z2a@X1=~)u?xJZ8&m}Kz=W~#`v?2QTdw=c_4YEQ_ms-oN;l2CBvybDH=>-`;=T%< zo7f!#g+UR}fIKHuasj_8QY1O#EagZ-VGb5ZDfXheZ>VafV7|PpN_`ufyJ7pww$E+f z{<3W^+rE9*aBatq8ml#abWV*8*J?Z1`8RB0o7b(|yzxeM!?vw+b6dAxXF7MdW^bHl zA7P_Azs?@853%7LY}e?h9qUc&@poA7fFYyZ#--3X0WYCc9KJ0n?~DaEWR$UzQii6K zic$HyYu=x3wYcAZB?~=!`73f^w<~`4MZaN&{-7iD9J_|?cxa%I@OJ!TJ3v?2`N4>8M)m8WOQ#$ z`9Npqbb5VcF|t10olXV(JKdgKdOEfvHl1mAxp%V5cMT4C?DyPbcf{g7-II*%QyTBB zW-=ZRd#Vxkc+;6d#^w~PPB(VqVR$D7Dcgqo#OgeQMm52PG=p-WcG!|yM!(vJ7fPUh z@_ePzZ-Q3oEAAvc2ob12Md6{VulSob8p$ z!EKv&;x2<%u(WZv)CmqXbpmJ~@Gt6Ri>kmtHG-t)L6a^^9zCdgVD5I*S4!3*J&vRz zkO4q?q%Z)ObR?7SkEOXIc{kL`U%`+3o4>|Q;^R{8m*esqF3@s_4Wy6MO=b8&UT8d; zs}uYhw^1Z%OUq4jP029@ZKR26V>0VFA^RF18@ox*5NVWmFK3EI+{^!?tl>WRA}p4> zba&IQ#oJq3kd6eR%H?hl(6-f4&=@EMkA0fbz33pS1E4Z_(CR5%Gjf#Yv3hX+FRKgE z6e4L53BQ@z;e^ctDuAXtG|#;#N}Es$V1vXivqnlQz*l9c0-054VNe<>+(@A- zT4irWq=Ds%9a)c?nJvKrE0mvPUT-Ree+^t#v8`21Zin-(JjgrOXUfp#FH2S)%8A}XkdoYw`p z;isk3v3FrP|GH(Udhw-$)p)$Wl!%8|xK!M1KQLHvY&7+BO^kG8nI#ch)z`N&p0Koc z43BsBnD~l5v^kq?Z(qj-lWi_n5)EJn(k$(EE7|Pkyx$-2_p+W~Xe=1&=?Mhb&EHQv5LyhDH`E2sCcfds-Bv-Jh9h&|!Drwm-aume~)ASE&Y=8X;~Y8HESLc9-pA<~w>3nA+X44qek)(3(3kN2ZX zs9FWpoXtsVK|pvX!AkV;5a9{d`8G(zfy2M2=@({Jo6XHyOS$v*=1Q#|n{B~n4fuS~ z9LvOfzJS%X(DW5I`f9m!MDZj7frKZT$qg|!-T3Z`ERMd}W;457ZJ8B}wPCOOIq&sB zuO9^(iP%!g3gD?-R6%YBht=avRPpl=i25Eh*@fDJMeYSbC0MQ%^+SOg0F^=T6N|c6 zH46rt1GR(3v$Q%Lf-5XBS=8*Dn#*c22gwzx${NXEovu#s*MD`f;E4?O&Mu9=UKO|6 zG}h|#g0cQQQ(d{7vwm#ljK)}R%8w1*^3fT`i_!|CBcONFbPpea)Y437{r-;{j zK)oP=RD#-Wl@j&`K~>NYvS)ej-ckmF+5-L10dj(dK_j41&=_<^U8Ze)rlLmi5n2*% zJ6g~2TrW+-&*GZpK(kzBl74XLktGISkyz3p&M`P}18GR4>=%_Pi7c*Fi9nnmzY>Zj z`&A^=KQJ{|$mQ6MfG?a#W&1`uFJ$I&D89bCduO4vft9;gWz*SA|5#U?xwGlXT&B(E z`|N0WAdz&rI@ohceP@3*9Bpy>dT(Io6#aHrU*9&irY*O=GY`ul(bg5eNNK#QGZb>U z)0Bh>q~B4+q4-d5H3;k=a9w0LTd|@xkR8;5RVM=toK+fSSS$q;=Eee}Hn!yD#%u}* zHj;FSGsW@I9e0QAxJIoOPpkx1f6d(pCdYp81GYHY$}F=+li3#-MBwfw+WC&-KSPi8 zN0AjeikiA5PB;MBc7ksO4w3=ze9>zcaKdWDiL0RJiLm0-UQi#X1dEQR)~k^Lcuxl8 z#gJvS5@4~}Vo7*bmbQ|cYNUcxQjD9<#5VXgF8NA>lz**IfCJXPHy#_V?L53{MKF|Z zE9T=~?^oFC8vp0-h65WH-0mD}AMMSy`+dsZa6(CxLb-tJx!t4ViNvazm$CKbN+RxY zFyo)DU3+s^XwxmMud^%4;*m%vVy&;s+C1@EFN_D+=3D~_0C)d3oezrHz#TzDpc-fx zsze|6JEM{Zcuhs<9X+64Pz2j7N{-PZGl@56K{*g|EH!{lo|uWlu+*(r6gCuIY*7;dt59K#zU9E*3 zyV<4{E027e9k^!Ow!Ta()lqb2y{Ycn`H9tOmT|R?v-0KaRYza4dhPhiE3dqXt?!K6 zfG}XPc~d+>B6KLfAxmi8JRM&3Vv|MjB64Z9-KH9IGBPb7E2Omnlh-s%J#YfG;f8Kc zX*LLuAg?P44IeUA%4fBmb3OAJC`-S1K1JyR&#xo#7z_I`Jg#k!oI^_%Gxw{jC9tP{ z&;VFeSG|O>c9-izWi^GJCEJ2ZO+v`N6aAEQ!f;7R#0sf~3ic0_1hrM3uDf9ugTEo1 zsun<ak6grdRm%7r6=O91M%rm+mc?adkPUJwkw%6=S; z4zT`pY$V^6NV?tOP
rU7E2^U37a)o_>l8&5kOZRx>s8%yWiDnbw&DJo}Ww) zxdtL0Z{w?qEzlVZxvT*Hm~*x`5{Z zS3unI=#?3 z(QIGL=?Vv93kyzXBGK8INZaiu(~ikbSHPq=9l75qkACyoT!%jx3dED`nMw9I=0iT5 zA7MT%6f+mQftUb~m4jU|RP1p71_D%wPO&NGXFvMX+^2S5?sa>;S1J~Y$uvG!saAX0 zI6ln-ZvG)~^I5}(mU2?b9-4v-n+C0b@GJAUs5HKP;1r+%A2a~YDS+N4e7h)tmC}z( z0u7?=#2(Eu!8tdG)f#-d9xI`}v{s4$UMj60O+lAdkOsh#nxxnCdxsVxv+}8a>+ae^$hYIV{3iJC${4*D)QYMEpUY!_h&xXTo z2iR5bh(}|s?p=|Axuf01d@LG`0s(D(s@)eTOe`k0MO|%HdwX~1YF17pVkNtkLOI2J z&NDk32&7U;wlQIw_WCkyMb?{WbGBM7(RdO1S{89I3v|W+I$B()JD;6k#$BLpkZ6L* zyKg5+Mbo4VGSIo++zw{a0m?%~3)XXB-l1~62T}&Fk)zfR3V`~ST$0>&k;{YG%Scxt zua8<2XH_hzw%X{bnc?A7X4T5Ctz5OU#S!o)W9wr{zu)2L?wnoK-OWrpCMHwqWZT5V zPIlX>l`B`>%KEeI@tCW%)fJ28I|24KP^q9l8#7do|3*2i*iiquPm3{$9-Ul0LP7&9 zaGW@)Ci9tUC{6G>*fBTZbwE5+fe@7dM8tYkw->%{4}D9xxhmymJV=1RiPet;BEkir z%?7(U+?A<$eLq=5ft}JhZ87^@Cac-iYECA`8Qa>JRM@9xXB+Qpb2v<9BX()z_^^^x z0*HYW4X@C7s`A*K0*H3Y4<$jA+K@U#t=adLlDXZX@o1)QxBZt4b2D`}&G&N}c)m!Yo^}|LDq}T+c$fY| zi6Gbds6nk^x&qBekFiBn2mNTWMkShrFx7&XtOMi(wIbyrr{Q^1C^iHNgS2q$82&x( z=c)l6TLm;Jj%*J0-m)vpl>sP#6qYU2hNg^zC53XLmT3%_IQx%X?fDtx35P?j*agUF z-k3-`{Jx!TtJ!8|`BD{Sn%R-QWFp%>Ji7M$sVTNv12lAHkuuwSdE2p zL)|Q$^R`BPwt&rKW;T0QYP7PBZ66&^wvCMLBioDa@@CxS2;?N{I5bPDX<7H-l!UQt zktIc!kUz7aCg!D@#(~MuE!Ws5=~V?RMJGsx*l2Eq1T}Gsmo#Li%zI|GM*Dp!=neDGmb=yC>?I2rz;Z2QSp6$3;KE*!K_*%j4bTZQxtI^|*y8WZ9yb7n9d*m>} zF2ng6M`}T64U#Acl4-6S{uvP>YLtFLfi}h_U5vni4q#jIWx#17T*kG0nnD+-$OlaZ z@fmv2o_HbG*{9FUVTN5Kn`w zmFvR*xWMt!j$t#hxZHcDg(IbIU$^rf%PnQGDoxe16H77-8Uf4e=lKChz?>>mVwYBz z-G^gR0?jm6j`9PRg%}4(%7wuH}*Rvy|`SySO$6&A{J22SG z1`iaAu~qrX;D9pFU5rH8Cky#WHomr8=#H>h<4>cpu0jcC%7yC82_=T=%z~z)@vI{X zr;^5~=Abna>KpX6e1h~fGv>x!UQm;vFXwaC>XgFg;;$IF?l{GiiD=B0Nyj4RKXlQL z-_+XTh(z4(ST+>)zw*!aee#tSmo@71eAXEY6#p4*n=fLfu+?VTjPyvCEB!1>G~V)G zE@z8EI&n8n#1WkNwBc6G@4;i(Y5*)M2#SEBumwdL0c9vR!6h_!9}ZZ910fyebqg=E zKtMoTWfNv;21$bexpgMo4FQO%DJE(Bxk&$@i_whgYmQ}vjlIGhSrS_2KkeLT$_M=Q$pnR0z4Z=9(e@XdI~7SJ}`0hcm;nV)^IhUhW=&kwrLU@Kg~ zg&85veHg2xMVD*12M~P9!%k-;+>z}c?8pW~nU29ywh)RsoE~p9n%vq6zh+A`I@acJ z`V#XApVN^XkK!eG$hIbwkNzM6RVVGkxpDJ^%P^_{=SJCqBF+hPr-7I@u-v)8J>TklZ+9t zfG9`?+#wDkSjRJs`Jzn?ugjrY79{5(nTM;pBoMXeji&kr@fy+{;D@182tSMf(T2#; zLe=D_YU4Yh)jf%vcb@USWSRdL4-x-sU(ZNJAMiPXDDkn0lZ|x5wuO8V)iMKw8_aQx zNvb0?LG1wLK?UwXBCIIU{NtqXyXf^M5cgzW0(o1dX|DxzWW*D5LHHfm&jQP{4){n3 z2)GNZh0Zuq#UL7c=ik>lu=qiQ~^i26Y#E2sXGZJNz;(9 zmn3cV@$xfOnKV^N)2gM)MD-4&QR-Eu=QEDjy+_v0d|R(HoyI_-AZBB5xz2Q2BZ<0y zBSy%pp?WD7f@@7=>!oo{GN3F7sVyf)Gqo%i3f<@~7W{d1skl8sRv`sz&7fXTX(?EH z=7-<`%=&L%@B}=D5a=^!b^sK~rRk1rH@su1SEImsBlH65#)>6`&dL zX?gDRGI4^?kYr19wH+*$d{jN4UJ&#OC^bba30G?BBV~0IFOPx7@vBul(O`ACK3lG@ zDc3h+!SEX@Ntgp|2c6SgG;V)r=SBN3gf~SyejA=0z{;|=7sa?K^xR1O&bT))X+%f$ zHvvlqp+#Udu0)qawfXuRJq7sH-f#E}&>Hc3Xq!MAG9attsv^`?WNWT!gi3Q_Pn|Vl}boOB@BC>iVAb6S+jxIHi3&& zh9C=Zu!~fGf}nwss-1qaKrqe8&O|SSj<+dNO4?0^H z#wG{~^4RCI4B_ZndyWu#Xf;+Eu^Q~1d^N77o(Iq~2xItfP^V6aJ35djnh`-$qU#!j z8x={wNv5gV%}6U*gh{+>SuY4pOb|XnM-@_{ia9NXIBOLp!`&NjkE6DL=b=#K5Ue~C ze4TCo@cK(D7E{QvFVpys*UnvhaPA)VOmVL}U)pKCX(H5OWk=Y?x34K|ve~=WG@d-? z(uddwFWdFZhFp(wd7<1h*ThX$zK@*+ZZhV60Q>t1pmtiQ`zn66LBaAF@1hfM{Ktlm zH(y6zP4+JSKJ?YZ+Q5CTyb346V_2u<>G5EFv++qQ_8k08Mt_zZTq=Xx0QE#zI%@gr zDQn^$o0|z(6>#b*R3Bp%+pFXo&l&x%2}I_CcE&!jsNDAWP~*d0mc=jZWra?({aqS| z1E_!8!z7EQMc$kG;(HL&u;7l-+7IU&uR;6aYf$2#Z$GTZ;{^JV;9RGMoM-|HK%OJZ z4j(U)fP*IhaAGge`%ifzKbL;V^u~D` zP_eN_$FJiEW_*pvugnz^^p2!u*()3b z0twliJrHN9$LbzDDPFE8%BlmeJ3+)ktTfiH*=L5yg-^getp;rv-%sZNXuig?|_fiS(eqWA=ID2Swn4yuK>Sjk?&Ev;bdY5Q3V+t7H<@|kn|7Tncc zTaP`o6_{P$d*+hDSJzzn?PFJb>9*Uxq;cB|`AU&&VbmYh_4j5o{f z;W8bY(m)xlrwA`2Gl()&DJfJM4E+P>^=e0HAr7OTx5GtSw9hxbdlWcd-?{dgJA9dV~#fy1#J;y+&i==ZsebxXBtEeL8jKu&^+CofY)?S_6DmnGV0i#ZGQtPyrm^in;MZ2V0l+?GMM_Fce?RbcMp~NN@4t=<>z|1Kqp_JLgQ; zOFLnAhy)}|&XC9=>DUbCnSKreutLA!B0a~IYEhXs5X zZVLP?bvXQtWLo?zakKF=P|C4ZTxR0DSb@u7z< zdzO8_@oM%m*fj`#88_l@Glo7y>z^{nb{gW;iO@O0boPLHL4BYSs2?-}Y0^w`V@*%u(v7OoH5gH?SrX4b6F^F8C$jvzK;57sK(Gw;PH-zxw1e0# zug0nOl~q4je*lyMr9o6iI|fkz1TDOOuuPsW4YewY&q8@SL??7q-V3Ex9XfaeAZ?Dh9=x{}q)>suV~Un+`!?`x*t2q!)p*}HddVbN#$ z6aV&o^S--HA3@UX_+oMTLFLgdCxfaLDt|=zc2Dc#N7?zz5j)2pW`7gF-@ncN76-$g z0%23RgYWs6IA_pzzKwlxK(m*=6eHxM338Hq3;97KZGu5QqJKEgs>ri*%}y z2|Zgr7olXb#Q=MB(onTR60AP@l}i(pYV5@r#rI%NId*IZM*0bCrWh#KUa$BPj+bE@ z?)m~B?{B5A3J^(6;eIjtDwHknN&2dBLFlVLWUEf4uHH7+__SVM1@D5KG`3?tMsCyJ zp=n-1%@U}Sr?c!e6P^@8lIsxayf#M`=xf@e&YpK-Uz+wjxityC1T3tsaM!I-cx;>2 zkWs4UI6fyT=EnBLbH!BmoG?-1|DgZm>iG%N#r|pbMk_e}k>&P=rrg5rs7H9fL!{42 z13Th9SQ_6|2D9$)>@7a?rn!R`&%L(sADMlQP}jlu z%cl!$nHU{VtG_yqkyb0C2`s9EGE$s8rM19?hC-hZ>FT<_|b3p@7} zYlru)JpbiuNB7TY&VzTKxAJ9p+mK z(pW08l|86aJ*wSQfmDfA5!O81YjLbV0z_V?=K4@X556|dO{ak&V0O!}gWMcx(8KF` zk;^KhFx;4;5GElhjgcQD3YZMU6?mHN7-Mg5{QFVneOsl~OqY_a+tW0YsY4wby*1N` z`*^ItM%gA9%QZG6JZ|0atc8_0w6Il>*yJmIiZzT@`bborU0Bo1#QtzG5ePU`^qrGkY0(Ln_MbZRm(L9?f_|R#(ri-KA-EN56jo-9z8d z=K*&H;sY`Ro#4_r=$j949aW@N=^{;aWZ>Z1_jB|!A0i2U5J38LOJ>H@GoUOe=LH84 z_sIv}H&qvtLmdS&&7~4;pqdVMpm-tb)U5K>GCjCaD`1eC_*}?>h0e@l_BbVOM#d;^ z3*59w>0#A@!D@|46lD;f)(%x+MK=4>b%oAVY`a70>RR{r*HoerBaqjvk-=;3?F)xm zoT>c1inG0Alx@qf^s4w|PYDk87+4p?wLFRK#+t_92 zGzK5K_S%P>?5a=fs6kUkXJ3W!d$*Qr%E&u4R`}^UweJO^hfhu@1yUQtx-I!$FiL{Z zlEBx{{LJKg3Bx9+kr54~bN13k;}8P*KfC0K?N3|+K&$>kjmGxJ9%D9UdIJAz{HF1% z#~ve%P;~B#!!P}Mz0XCv{e8IW2Ht?R%Cp!R)>Ce#E=^D8b5W^U7s%Pm6Su?Q3Hm@9 zj4+K4P;OfrV#+BHWiezxC}Zj$s4W#GktJi*ye;Blan zJ!o8Dmt}jduf|4f+l{)0i08zt`9%A-HrCv3;7^#9`In|!)^!Z9HSOk(twv+B5n|cp zWgYRLJlQ|Qj-Bjb!CoQKyxhZry+L0poreW4;Ar8DlXncV&6t~=|M&gd|NR2R*|>nc z?bx&IZH)`aPNp05L*-lWuY3W%Wb{)%%JB42y!uN#oqJc7`FAwl3@b*%4AF8TB)7mr zo2SD2+NHCgIJHxN57y1l1)W=Z^o0)zj$W>d$zHPvE|_ozP_Dr*vuMDf-5X<_Kz>Yc z&50#IuLDXS^^+@~ZVQhwRPSNi=O1L@j)P+^Gj(-f4}WRT8@E2V_A_!EN;`(+q&~%B zuA&58K7VPYp@q<6G&C|J_h<2xRxQp*3l0|oUvMLM%lv)!&CkE0{0cA_bRekV$-5iR zF-zmG<@|}`b8o%yE%B=-?NjZ{%TaLV!WRJkd~LE4)~+r_f?9iI@F2NXE)ESQ2#5`Y z&yb!oJOA7~{;xQ{{`F(eKJ^ssJ(tFuO8_HIw<9O{Z6r_CZv$XuPPYfz@)K|U%lTj9 zk+kBCX*_Z0cpg=Dqz@pjgr8H;2foFB#yP|Y#__F=HL)V!?UejntJrClMPNU4%-owB zXII@le>dmn>|s1XbklI+iM#Oxqak)YZ@gUjE3Sde8vfm&I-p;REaqnUKbQ%J;nyoA z6L@VBL_H`KTmqquH3QW;O-0peR?#|?b9wY$Edj7%c_xxfpi@V|r^cYWc)182b)o9r{>JTv$m&eb zd{=x;uCZ&rJ3iZ9n(K_L$*_-Yb}5&wImF(wp|puLe#%1IkF46y{&Lg6s@V7cb$(zq zyKykKrLvmcT#aojuVL2@#kZALu~$|i*g-^;*f$i~LHPXWltM-i^LqoY506lDnQVhh zhRnk4fY|38L+X({*re$};F6>O)J+_iONXE(ip5Cy+HF`YC^nk6pgM~)yloaYcp9e| zau#Et?&fq(UF3NZ4kP_NRc#~q98k;1(=Zt|`K9Aux*L23w->r;iLIXhgBLi` zGCxw}@4*ZFjxF=|yz0v=m|Df|uqH2m-jPXv zk9cl<$=`G0P&MpD>^u2;Y`7=1c_;aMUV7|NjP%X(TeV#jJ4qJF2)?}$<84KJ63AIv z#)Im@qDkcr!ATdEMg%7{woJTGvPDA5ZYAj?Dju}0r7H`NpSq8W2>}Qn1apSAVF6i5 zfJedo~73UG=xaNyCsL73Ae~>vyJ$5Rn=^zF98|)3Oq#8fmxGNS8 zu`U-=%mHCVC~v}Sj9C99<%jZ>l>7~XRO0xOf?ALBkSp&vrLTqLvl86R4G}L~cG!N- z?uq>%OBk?Vl#0ibMG`WeZ@}G;4{lM}ZQmrL`{GwJ6^; z4k5>{g0^$CYps}>OiB@>cZ(S5sdkHIi5=rXWWhvFoXT6Sd0)zU@-)7|4n^A7 ziIc#+mC_H97;udupe0i(iYdiFWEzC9YhmmfZ@1lq9|O9y8o{mw zJ!)bMM-$WrN{u1dT2El*w0!=07u>}VwOS@6>Uwc7x!}{>UfclyMG4;i4k`7-l9271 z187eB)UCqwf6GYp*7L)QA=_5e0V)Bh$d-8rOk{v?%*p7r>f!2JQ9ZZIDT)0=xtR# zMJxXOU*lZ>Ed?(BGsp9WKjZJ(Bs3?yi)>1l0aeh#+xp@yE=}7%17l10YyKN;p5MzU z6t*&*!v7^s;mYq}M}%EXuaaF&nV0t-r`Lr&Lfva&kC45+{Yi`pIxYA9ot(J^K0rF0 z8SD?rn?R!=p}v&41r`X)Tg%+CLFmHWw3NApUqek=%G@HomW|H77q;NF*9yJu*t5j5 z^^p^3Li#B4?=y0uCYmJ_lIyL3sQl1~*T`gilxes1+Q{Y)?ckQ9H zw0-ZRQwe@?sdBaWeBq%G*@DUhK6C| zC%A?GpBm{>mK`v&h4wGB3lU5>%Pc$9-%15;FFMtZBOgc)^r^=M{&p4~XgRLm+6}GG z{CkVu3;jPN^AD{Q>3jq2kyP^kS?Paz5B@#+wfk@P;H$%c&HbO`#s}vhsrp9nxE5f@ zOCBwBt~1C}RGl2|6kP6wlNJ9kKKnn;hQlvX?${sq=Jy&M(&|pQPgB?`B09qLoMwKA zlxO@(oh}~)auC)Y4~^6vWet%;ZAIfZuvm%|J%7=M)GCDC0uSr&BUYofq7e=0Nv99k z@ERDC3B070dQb{|kB5b%?yu$c>C+6gLW*X*1SeP4n^OL19czZQK~3#a^B2kqakK)7 z#Yx}X4jPxP4Gd}*lvgc^>KOJ!;}$K&g^eMI#C1mHBix^=b?*^zaczuH7s(&JtnXpd zfhsZ(rDoQ|nGjlx$WUq9b_BJMl3Isa?Je&G6se*EsufGKmhUO0K^w1yWp--sN%Peg(0j$r|@|L zV)Ay09B5!eiK=J8p?-%s(DJIYGfafWsFvb%do{i-a(aLgBjW)SpEDp-$3P~Kc|;hq zBF{hz<{;93nmC>6Ie~LOU$9Pap+Bw@xu4H;olr%um$;A-LV?y&+R4M=M0zsCbVLM> zoE%!`H%K!GIg06s+z71#l2Yp%|Ay51cO$jF@eX!g;{gcX zWhV;f{1h@+$~S^$7c#CXc_FzdjHcz(=_D@?mC25b6H&mfGywo zj^cbW1FXaQN^S@u~wUOdsI-6N+o_GvY$1 zuAzLY2l&tA5x$T=8#TAQGF;`)794?|jR+lo{l4S$^uqBUp)=s?JZlVVl}D8;-@WmD zKg6pV|8V2gF2(dPJ&C{5nDiW4dMBb9hYkO1m}~yUeV&r`7Z}mut7*i7k6?a`^AW>g zwu8@4@Da>U@DY5{vE%f9UXg30_diG@#p@67_lpP^z5fwfJ;ULxUj)}#s^9&i7w_zf zc>n0dJL6mtf`Jzl3MpT%(b6(4K9o6fL!_hG}Q z`56}PrZX(wefTAG;(7Hfop|K1ixdBE{M{lu6Yr)DzI5V`Hs7t)+TyR5<#3+$r*R9C z-?mT4XE*q>g(XQN{jPZS06jZ~Rk(z&0>_;&Tn^j`S_Ki)#43oGrs48=S_ScLS_Sd$ z!-hZSpDo@^^WqUu!{HrEpZ%xWyV)jS3H^QZvp=W3n{C?t1H4M|xtovsqjKE$@y{0e zK8^cvG46Bev!R<9+xfd67Vl;u{%-6CtWkRRx8;pnTHz8!2B$@Jxy}dmb zjrSD2ZiTTgHA-wTo|u|Gz%H7ainf?d7PfxdZKXaX66xtW|DAj8W%pk-HQk;obWUeN zest8uwxOczxbj2HF@vtis`Tfm>B*4uc~!8em_jW{?Gi&%OA? z6Q~8FriQX4gZkEMWgAswv<(4sPDH`86?B`cw^sx_1Qp42Rsi!*pRUwbpdJhFm95|P zbp=$1CNXf-OcMZgrHFPzv4;hOG(XDhL>dxL$D;mTp_CG|hAV{$W1-4_EmqRaQYQLs zrB+pbc*)+cuO3l~ZGM+M5}96c=t5xrCYcq9p-egYFGvOS6?;Z=@knaYX;l=n#qR57 zJ)`fx^|srxEIE+s*?DAYsu4nQB0V;yqwgs(8iP@^1 z;`*S7ihn`Lq%VRnBpnK*zC_nLc6`Z@YKTJNNX`mX>Jh*wwb<&ncf#o-`~PK4TE=q}0k3s_mwpM!U%+ z^ug2gW2&d?RV>1J<@(ODdM?tW7C-`t2DUgbp(rQUf^4-7ppBqSpv|bt>j9J5S*q`< z)OT0vdn)xs^sk!6uRsf+^QHk>PiQD=KQ7h)Xb?mfayw`qmvW|5U&)&g#cjBGAnM)H zMw!2UIuP_VWgKHE1<6_Tg>{pOj#ya%pAtqFA_B94zZfgZ^C4>hZ53-yX{j7k(Hca% zgJ7mm1^$h_#bNh^GldC%IOz#S{i%4;n@@XM0}ivr+#2fc8hTkQmX1c1?W-H-?c8~@ zx3e#=l(U6E3mTy*W^2mbGf{PUlapO37rgi%ZTtWQp^ujOqJd~8m<0YNkP<9rrzH{f zxrX{9LDm<~rB+re32RF-Gs0%HabS$1C7>PHWQMP$J z5jXaA9*6k7%9l_(v?y}`R07{eZ!Pq7C07X5h~NcE9W}!Lp_=eb!>iJmBsE^Q;}R<1 zpDVyWSMYyYX5hg9Ie0T&)P0f19pBmJ=k`7K+?FlMm!8_xct6Il9!&aXa17qLLCPTH zUlJ5fvlj{4v1mmk#5|U;nf0RQB#{Hwp;F6eJ;xB88p<%%A91QA#m_j_VgfXY&FZR8;P0An zkrwc04J5(C^ZNxdNVzP#F>0_NLHzw@&=$~E&^FMVA17lwzJc$8-@1)lM@gZ{Q?*7J z>-1GLQG*c9rZ_JiV-Ws;^UhJ`Biw0&yq=bC0Mcy1pxI~2k+9upQcNb7vn^ZvQ)REk z;*1Pex7pD;#P1Cy`(ugLR)3(kXUqGGtb6kBTin;sTZlE1^d>Q>?AwI8+6;P#z3~X12#83cKT2Lva8bH`1F(CKCgt z3fr(5I>bu!M!5<7GvcVYeftt}WwUn!bykyw6I$aSl|YBhpc8roa9~q|f)!)<#<(s; zS`g)e&zSFl8z zB(bz9BbC@7`={L(?2E>#<@qf`)mStVtyQL?bXN)ByK}C7=;SI+P z)xO@gq|%ls^$xL{Dt)C?LfL?}eerWI8BZo1Hk&n_oWRY7MXy|ejxu?}MFtM7j{x#K)p0Qm7;x+_U#X$|J|#$mrt?Gsm9=*Z2x7JRopr)zlQoY!-G=QI`yg z3Y=isE`?XYL12o6Jx!m~v{(_^Zq|I!q0#tunBVs%8b=(zN`S}&8I1EwO&7EhMD+=m zl0pnlnIIBzz^M4$Vg=BTR6`0?)_P>`-p@nBD2@;KOwLfC#e~Xj+}_q!Zy=qBv0(p& zQ`3o7t65ie*DfoJADsy=HT;Qv5gV)BFr zD`=ytHL7ajdv|gThGRn1CjqsCJ<#0n)3S?Zz9f*`IToqtA&M(U3PXXGW{MhHRVaE8 zMjH#p&nI*Z{D}258dg{m@ta!n!yRluxp4oTx9{6m=@?>N_H9EQ8B}pAme36Q^ICh< z^{SQd2OiqEVcnYj7jD|1+&Y!9D-iYLY|9n5?%H+!1$VGr+eSK3WxxW#Tx(ar7WX*4 zjdvW`#L)EoFx$6ojk10XowW7P)Nkav>j5opg2DlPQ)~%bM~4{8qem*$lv#jAh}1!q zI(_6tR}W3!*KTL?W`QYHWk&ew5H&9;rqo)!VUNAV+UjU&{G8pAHd({T zTH{uBRVW)xM1x*sug9er6^qf);%Gcne|snv%SPYD9!hu}RvX!#mE&InO2A|A4jdw6 z`g}=PglYmObth;SXg5ymc&Wa>Qoo>5KTxS(SkZb#s}-C~5z*RMsc)*(H$(qLxCkX= zRKLXi2_ofzkT~UyF5|!FfOde+1=E?~dK@t6SC#7=?^t85O^f6(m)w4i-zD^06nXNS zE`@i>WW}=Z%_}L?g{D^K8gt4>q5~U8W<0T6t_pK75MzL&!ccQ2-l^t2d%f;7OZSHp zZHevUMigeayHD+0+7LPk!c6Y>Yx4HrewC@aflkrr_ z=?_NZ(I5-7_xKWlkgX*i&oIBs#@?sQbmj{{fe5u&%de%hjq5u*-1ZiizcU*T zCz7ou7K=wi-sudKeVfs2v^)LwmSAf#J+tB*hQ7X;pwDh+W~0xQW$6LdxHjs|~m-f&^PnVe``1JW&bGAraINUJHZJSz+nMXnk?WmL-K$X4_)ZG(HPg z581YqtYTP&PX&pN2}q}*#TCL#Z^(j~Bw_F=cRpO~9A(*bEEd@tjnrzJH`RusvGWx( zsWUcfDmBU;`Et2bO0^~1N>FDS({wINTrz(Z$fOm*!{GCw&WvPTRxl0;p(1j#4Xa^U zgE~M}ZhCeJM+7z>K8YF^s$tIQD(KQ;vGT(c6g~;fzoT4n>>r0hp=6@h9uCLG-RJ=4 zvjo#XTpnUGsdbf4CF%~G+I zuJ%M|X2(TuxNq<3xec|h?)K`+4HsODUFyZWKF4hdpyFupd#d!+d9Ty}LcrkinF`cz z4FPtU9;T9#8v=!~6e;-a=*^ny#gX4q*r!?S5vZNF31(I=$wFok{XLW>f8%MnLjYq_ zK6i0EHqE9kgzsuP(qgxefiYezdVQZ!ZeWdnBF7bgbvmchUESPaw;vWp`2RBZ=3$au z)tzA67yG`w7ccgG-`9*>BG<~LGP9PfJ!?@dQk4)ANJ0Wsk`WRz2rLR4(SWg#L3p>P z+hoi~Gk8Isw%gwagY7mL7-JiOKQ!2;8_Zyv&92D#o%`O)j1m%dxBnSRC#j0cs(SC< zbI(2JcYf!bV6}RYeHd@n!qlNM^zWqZk>0!sAtnp$*>o(y3CKxh8CE(wtDT)S1S|N? zaqJS6c6>&Z+O6;<4NHfoxf9{fXc!ESw3RS>?5D87xP-YK!H_3vtfO3woYP#Ws03#m zhK2x_11l|k^s*$i+ehbW)hK3=C1XLm90-TvvFT7gpHIc4U?UL`nZt0~%%E5p%&;z| zNB!;Jv`a;y6_zB~=W=5#R8*)Ii-kzoY+MI;9f_fSCc7VVsj=xC$0-;S%z16dC?!wbpt$!BQS!5uOc>CqxBay^uV?0E~; zA8Ssq_EsApL*|Zp2w{fZ&IEjfYGbEHeSwr_N<%xG0tdtiaY5X05P~~)`0%`+ z8Wl>X+qW3O$tXFText;9nXo&&VnPoWsSlMHe?_`*w4kPNf&I!u&OkF5Y8LYGL^17l z)+hVIWsfJBY`14-TJ>BCBS3NEgl-65yK*AJn9*qUPEWmxonI~&-F5*M^gLTwEfli3 zB>Y@|CRr}#*&FX%TnvY-ajb*lEqw|0|B_C#Ab}1IVNjb}&>nL`is@H0NN2wR)sMv} zRLjpX3Ux@1V)B*ng(73RV_zPbP{Hs$RD%8dJ}Pm?k3bT5i>2M~2y3t+^E8E!7swI> zQN!plY@#}h5HGBe(5A~v&Vp8Gge0$iz_I4pX$OL4uOB-p- z^<*B{YhHpHd?NfbE0`?39J~#sj~sTIhpcYB%>H(C?@vljG1F_7@`+@gWnywZn}`XQ zyslKTMSjF$gS8S#AG7HVC`mPo=|&~r`B~SiPvrz$7GZgE;v745AeVDm40c;KePDqd zgqx5~$nX+GF`X)~u-or{Jq9%<`w18TB*ORic}n-2y5U~uW(o;(YrwW3Q)}dTp;O2B zjC5E;t)(P#JUmF{E^!e{QG%2q6-X6QgVZ4nNE6b6v>`8D!ahEmgiPVoq~R;_Nq?=9oT)^4AjgP3~)ZN=Ow zt$P~{yGM$RsrTYEW~cyNpk__#%*?&mWq1;R%qhre$QcK4V0Fb*hnIX?)tRj@GaG|` z>33!s8J&ia7ME-FzlI&N$Xq$ zodnHG-h)VtO1h0uNdbhi(tlpM&?a;K48-TnK&BIuZc88%i(%Y7a#iNeOzK zXe%vx#&7juhQAXUKPlMU9&Ew~Q1R)rM-n1GF33OkBT@dftGCAZ|8n!mi+INx_Ul!+%eJWl z=F!H^R%hoJ=09Mcw6A?3WGT-gvHOJwD{MA_ zVcJ46HMg*FWpSbCv)jIInMkE%X2rpGdt!)^)1k1(6m>WpwrJiLlp_5atI=@djxT2w zeRlI=E-fVEHC71XQz=>#qmjr&w;PE?Bh%4zA~Sw7CUs|jj0g1Z^L=j3%luFIKKbiE z_IwMv0rX`G`mzDf9P`=su+?$o@Zio2G-jO-@Y})_aSU=CgQrL*$h@g7!GU29H*vij zf?P(LQNeXic6Ls6c20M8&U6U8*6@{`g$8o}J4+p;B578`UOxPG9y$68P$R-gsG}-w z8GaKfUJ&CT49633vqM{uFQFej9vgKOghf%o29UM=V1TmU4dxbH?4x(P;%RRn5f|K^ z4x70A$mE0|njB6`EZ`PJuqxuwX*PXqp~jktl-niTmPzGUT9k9SWGWWVrX~Ab#egrH zO7+W?Xf)Fho$mM&YqP41sgsHLTDDwDuvDvcx*2ymQJG{j2gG7-W~SRtu(-z;ix*Q( zHkpXJErQjWOf9h4blPeb*l%T`KEERzo?-P+$Ydsmt%);D@ZBY#-)8(w?dqnrEjCk% z!$e=kk|!{2C?)?9tQ*w~W#I4-D^G_IA(QG%4qf`#$MDyGe{1vx>hOkmO?VMFVGccJ z*L2r)%8>G*c>~z^2FwKhcC=aHWDaiQ3b1uu_`oJ0$ebn48$GGi5Um5W7X9|H(`zs% z1KtUGwoS0{SZaf7$GU>NabFExcO-1-EfF#NIP5nPXFXZD8UnJ?OCQdN@`GNcOj;<)i<*@udT=deWRfdU^KGNz5F=KM?$emBI;zH1yHqZ-_tl{1>LOfzi9WU!i-S*)oAHtwHGJuO6tpqG$&dY)!^%) ztLLx*X~G}ujZIV;^ZC@a;tFwq#)u)~!aEdbdq7Y|2{LZhn|vQIf0m~-Z#jq#7qrSr zU-p%3o~NyOr(=u*A_4#?0A8F=?)WM0q8hCz2M-aN0#$G)CC1o;i-o*{Jvw^gwlik{ zESikwP_MT&TP?*S9%T9>k#6TN!%{Y#Wsk9Dt&X3C!^|(qo_8F1_~9dLIUID@ovwO3 z=JO;X#hgz(HaQWE{9!g8@;HB9I3AA*c6%(QaGaX3ZC}QHFJp4~t95&R$t?|_)gcy0 zQjN9J)|4D^tbkBMo6(I>Whc%D3UViAXvOc@AX-3QA4r?X)M5 z;3f4{QgO}87k}=`){$ySs8&uKz3tl3!`0&Dm9@L>dCF{YN2jJ&uWlSBsiNYV&U6@!>K#qT6N!ycZf z4gf(T7AihfraAEVdN>7pGY!G`jUnak&rd-`>rL`O7!q=d1EPTMIV|~%zTeA`ui?hX za|1UjGXhvEbc?_fQ5?>UnWta?5TS`9H#QwF@HY0bdOeUxMq`n1B0l;|K2r6VjV6Df z6izd1)N3;88KB$p0=rb7u2+%~FEltDoah{XTckeS&)NMJ{cVELU@7L-YCb8=hNJgb zt?ASv>#t<8Hrvx>pM$-JIefL(yJIeoPg+PO?Y1v@y~$W1?-Nf?v|5>jz&zffGZT0F zA|A6p;A8hQW-#Jb=&`@keGs>T6Inkp%ILAoHW4Chf~A5hnVV^CCTZ{3moVJFd9zH!dC>%ofqd$RO>HPhUIk;WAOE~nz6Zn^9 zVV%{5zd#4By}l{H`IUrx49S=vuq}uS;)Vo*cp}fxEur}q#4B-k8%Q`FhVKjA^{^pe z98u5wc_#62y~17}^}1XRi_u|`Ss;-1mqgj`ak(s#H$3AP9<$lJ-iF0)buv2>Y*x3c z=C(L20(oT>VNLfn;ZO1GJ}oaHvOri6&wb#8-So@p1EN#l?NB#9?3P`E&&sjT?G2C+-pT{x`ZC99AcUQ`=ZJB-8;9>oDzj)etIeCC3< zof< zZS>J;Trd7S%dIiy#9D3a*4W<*UU0GC4RLz!P{W)$K03Iop34V4c7yQA+t<;WNAfd&F0uNbFaMeFrNi4^Pc%?X zH{qdVb{j%V@ZsiY>pr4+C`b|2u<>v8}RPqdGVqP zjt8U+sUR@m!8YG-JzkV%@fXM2islDwnc5vv2P@+JW#I=>em%VW?h{LHg--e=Sh=l z4QNM_k?RQ#!?<0@aJ!Jo^iNkl!1x1Huwx|MGCv@)jquz=A1G5zNrjp7&yOP`R6 zh0ap77`0g85_u!BLeMMAbLq70_#OY*?T#l(%c+#d8+VIdnI&Qo(f3*AP6eb~c0Q6$ zN7!szm`J5@#~2YTP29Yn{q#(|9tuxQonqZ;J>)p(CaCr1vc%u2;CVLT6*qd6KWf}@cJ$iUda z(WRqhwLE(0f*^bz7TX&Mmbt}V-pwHQZPN8n5Bd51JA62g z?ga~wMe1O{WA%PV$wUv`(BLkl2QBWyBZG*U8{^78frsov4nUS6J(%{P zj=rpNJqbgECj!;dIUY8+)U*+7pm1P zE3Ta|R1*{7NLzB)Ey6M3h%I3eB{|utmO^2NvvvQag5M#8!s&D%{Dt|Y%7lmxj<~Bg;BIUa2~Q?ykOm8kT`?_qckLgb&P`aj0MX>3XmkQG1z=MAL9e>i7|?M zRkJWEIinBLi4Pe>fT&YC$c*N2n);AQoTwaXL|}BXla%$*GRYOjX~_tOs39w+xlhap z1jI-x<%Zi?7+JVn0(%jmRixcK;PN@#5xct;W>Fca$_l%2_V!Oa(ul_ZsU+g-k*MtT zm`wuvoxe*1M{UJ0d9WEdgw!g((evb#xZUYS9j{|$rYFDJ`GMCl9v&OsK*l>#VPFNJ*sbU$;kCed*}+4 z;Z%|(ZEq+aY=5A(eU zif4cD3IV(VTwm1-9_A!9Q0I1fpXZXcWm}hC_7myZ6BR{Z6jY0 zMGKPJ?Ekp=kp6@JW%T>qa0FOwHg%1$=*=H&oD@8`&T{EU2q&N>e z>zp`#2O;Z_4WJl`g+y|+4GYwP$*f=lG=>URakz+gTY?;bEaTett87Jz1#3lI=a2?m z9+Wh8J3GA&GA`QqLT&8!@HlS)!>HLY(ZW<5TXkOGx*ExGRnYEvCUfg0cg+0qP_A*+ zkyXPSyzg;pz-0H9_xngY%GV!#s&2q#%*1_Zy-dmeQ-0(Q5@ zIiJq~k9H39rZPnl2WYJsvI2_E3RlZ>3_Ps}k|7OGA_NUwLzMI_-1cE$Pm0>m;HdGA`B-c6`mn%z zi9`o9#0h~DxL>HE4I&30hI@a+zE!&18p-G9P)%V!?4x`W255e3d-l?FsU-T?b}TYc zfUWdw{~7qcD?&gjmk!Ysl>@Q3-=E8(S2sV2OE@^1UHR863MtUP->wj~{eQ)-AiMcv z%*u<<_u}q%*q;kuMK$Lo%Ht^fSTL8Dpyvl5m!Rv4$B8VBUBDfWd4DWsv3S#SiCn6}5;;%Q;&oY@?U|6lU@)7!ED{bm9dVP@WYOyl=CB~8 z9a;BcvRtlyd4fgqHe)dAuBLNTQ)96A*u*+JJ=Mp#C?J*)5g}&OtTSeKq+x3^ur*3` zEKZ3^jwSkrRzXWsLut~c)1!I6LkI3_We-7;O~4$hkpoS%(V_>s%yU|pfPunTGl3fO zbR>?C?1zH5(>j9qTgN)_IAF`u$3qSuqJc=h5RQ65`c)!9St?}x(&%s44^AXJZtx~h z#ixXWH@``761n;REc_*I<`!mNkqt!6VhZY}0>%6y)<7Z5DHz(1fcpkIazi}W%CyQ?C5kci!(cLaTfu;MQWhOJH{KYFx;^a4(R1~HC`wtEl>1Cn3dB>PNS0;%ev^qU zGlRixby&TvP%N2aquVD@Rk{1Q-8%4OGy1z==Dns9d?tq;Rt4h)_!tsg4qC-9<&*6$ z=nKRN@$>YGxgX$IpFl57VQ}3WafMw}y}cbuu9rW(Y4+Js6Dp)`e))19gWd_F`7Zk$ zYTc)F_o%TvwZH<(IjIuYs1X5Tc|<*7NCc4&O+>+?;IbDxphfdiBPub~mXDm)+zK z$widMdJ|q|HzGHXsU2M0$R-?SJxEy=yUQ91gnXjgPPf1Q%!#eG~0+^e=D3ep{ z*F*Vsx;*PgdO8puy)WSQSnY_(1%uIUb;rCuyN7kKCcWJT`zba;z0jL=`)qC*uOEbr zEyXa3Uu$3%TqAhSyrObvwmm)*LS?xU;5(Ec5R?i4 z2IrZ69>Br0yTNA%Xoqncef$TkD%~*fY#A6NMvYg32=C!aGM6b8ONC&l7)=)!{XxS8 zhs|oW-}TtRgxg`W+4YhWIke2lav|q%xuig}Q)Abs3qCL0fl{H#7G}!L$@8$+$U3lj zJqjQ7g5KgE&|cLkY2mLUJ8L3e?y`h~YKcfZK86ezVOX`g~cx4>ZG?|5R6GMmCZ3`Ft#pytvx-VW%0R zyIL-&arDHDiINZcOtoPdd z;bI|^^0+CvRW27Lo5L=k8pY;!8t#8R(334TwkI>oag75y?<~Qs}zfp-)dmnMoT1GD5cUa z_x7PP%;yV{IcH0wuO0?84EHO8cVmH@KfpU6{uY*jl10^8yeLveIB7J;TYDpIBHs{0 zmU*TcFQV0h4efXlH5^wj2#Jb*0U7}p-zyVEZ^rJIvjo6icj*r-9TU zl#6cShHiCs+AqQKwPq9A-te?zxdB~Ove3gi6te-(uI$koK2gdFbMW}wP%lMUd??<2 zwpJTMsdY;PVS3PpM z(Cx(P=o>#qGxk%w(2x}%G>R8&4>S0Lkjg%yik~ zvQ?Y~Uyua@jp(W6!-rnGKEIGoZ_JP8AL_K@afItqB35Nnuc|j1joaC!W~=Eduq0aL zDZJ7I`vH(>#O^B4i8x%NDg84^+axD@hid#Tw`=E6O5Z zUH3A%REYIPpE-T?>M?VgrKjeTDW5ME$}+!*M3UEIwK^TCgkXwA2BBOj!!E3nBzL85A|HaMk0*dY=8XrKvu z&VCRUB?JjW)M0brU|aC36eJDFkiAiEE#B9LlL7)TH#wM_D6fs#<4CE)U^)CzuyMCm zvn2sFNe2(2r%+0{3#<50?X6U)*t&apB_5ydufF!cfpb+bpexmCd1_+OXP~qzXf+vgML;}D)!4+*>v$;>!9lip1Cpbv zYAf55LA9YDWK^gwz9UoUk%OyrieW*E%WMod9BzNDP(1RSG&9)`1?!?LhtAC|)GD&o zYzl>2?b+IyGr2{~7=73EHt6YYmmDOJ!e~n-XV?b2mt``CSUVB-6Akq%snldJ6-%6& znocCyp9()YdQX@2PO^_K|GdXrVhPD-GQl#hq82d)%bcR#L*&o$220>P*kKSHNI27) zQksKD{+j*eEF2tt1|i0g2GH%56xjiA;2H#EO}>)jIAStLhGV;$j)KXrN6lJK@#)nh z4wg^fc^2s7CWx-5*%tf7pxf_@$c3oriANkxcKU;L32@E)dq!VdX2%nLrxQgzW`oZ! z2O~_lOc*qJHtU{;@2*FE#4@jsz`-*n(GDm{dO$pSG)7|hKuGSLK*hVq2SdH`okKJJ zA3+;MkVtjwA?L1My~=*!+O^TetHktj=zfLenHiIzb%eYE)njP#fFJEX%cqL5W~th! z`)%n+s?hulTAc_s`yq$fZ5Hqc82Ze91r_5SL|w6$_7nxAA89Z|MAUgDX9i1|{(8i# z=1gC0ZV43#!@4j{y3gEvioJ$5uAwPbU9uhWG>K3;$rWUSH|Hdr85U(Riogr z$!QKQy|c)}SCb9qG|87X}9A{LF!3$!tM(=2rwE($Z&G z`v;+%Lp=Q5N;1XPXJT%zH`_t=&hbB(E;am#Pd2ck@!c;m9q=W;uAn`sVrY<3!h}q1 z-pJ68pG(U6pMCHBusu5@iz#uB9$+DC+23)q$IbIEq=svt(Kc+p0L;N&XrEj z16>c2hBtQqiglqcm|%lH(Etz($U&(Q$m77Vt~HdK5CXnVR}9J?B)>ehm8Dm)cV?^M zY-MZyzSpcs0Ed4jn!yKuSuXDZK?&1MN5YruBH)Hg;{sq?{~xG{LON z9E%?QHO9=zf{|JTc*|Y0^GCAe2)C<{r&YxR7_>QN~Wm4z-t$GxybpA_Y<)(F;8tWBYVPd7KU0(MvJi1_qeF!3DTrF%T*HA%2hI1f5=u8Z_ z;l=XvFi9adVpEa#o2QPxai#zyI3=Wq_`ykDND`905M-+`)t~9bgRwaH&31>+AMpiK z`G7;NnH=HiN+p#7L}ayk?2<1KOU09VAzSXuR4VM9$>yaqCxe*1Y%%%e{Gr1ad->Kx zvVHb5sWP~t;bfweN~I%StJPtXET&6Rn3xWt?g@tSb?VSf2_EuS6&R}lhz@51ufYty zTzeq-!jeI64VI5O1w%7cT1^UUy4yJ5i>JDUh|>y)I#Tfprg>p+_CUlS$o1(2D*%c#%TE>dJksdQ=B(vl-!@l4V`}AP!cMD~~=tT}k_!niqI?MZRV*`*=9mJ#wGe`@L3^kWThT zU$Pj>-}mEIi^pfa>c)-61k2@#N;%Hn9ZiReD{IShPV-VQk5v6)yJ^lQ5+z26C|Vsc zoqqR4_FmyX>FV&&$Ky{z0E&2t5~Pe50rZ7S941cHIy3Z(KN*Ti^YHc5hB5PKjwrxb z@ya0f-bAckndsfuo^G=FR8laR49QOJrhSrxGg{;#m ztU5jOuFO5o)95N{u!rmn*SYc4NjW6TxoiOqg+3{{T_zCG<56UoTQkQtJdYn??Ej1v zP|btdl^pG63Z7F~kdZZB&~94LvS<{L#zq6KSHv3w<>Xhe(o0iimro-^o`DR^$Th-m zOHmR4KDlzEDRu!d^$Q zTCADo&3czJQHgKf2JIBOl(q`%gkqh`@7e6Ek}+ z3kL#|ia89MII#JhI`n^E?eUN=X~MtPk%Eo@()t|JAe>MmIf7EZci_=>2l~#x@FX;8 zHNPj#$~{vN{KWpGyGJP2YRgLpm^+{Fy6p|C*Bx(9f_-PTvx>!(mZfWwV6pgr-u8xp z!C?%_5M8wz2}rY3(oD+jHsa{}vO39^4tpG*ZK(rA?M!KX~oZV0=-%{~Av z&%paZ#+7bLio$q51_1%D%8}rGr&W8(lczYe^n)xHU5tDO$eSc}W^eJDBBABk&6Q)> z&7&-a)}uDdWI9*z3s3aSi1DY6G5jV8H--L zLeG}nEwX39G_UI}kfQMDkSynZu^Z{54}OV8JELw`I#~WPqyiZ$4khlGMhZ6|$~Quq z3Mfb3OP?!qAy1h*@`ugzR=_^!0@FflI+2pho{ePzuNhf5fNEKWezo$##8l2IL{Q?9 z^1!{xmYQWBktEr>%BgtN&z|-+0{#Qc1TI%173gkM=EZoeh}M=Fu#E$uggfAm`+ejN z(vGkX;`G(QuUDVBygUvgpQ#B0JFMa~)F5?8ljpv3gm0zh8GL57;FtCZ zw+NnHeI?{6Ii`qD*n6xdb8_^{kr0cSgg~a6AK1JgON(NxIpLEG$y6fdnryebPBTd7 z*ZdyKWTje~IC6-gL!->x;GKuOe%E@+>&wixI?<>*9w~bqQ=8~(h{zS#`Lpm>;<_5` zpA8SM#Qr>cLbo;5rw|k+LxOap^D6r3qwN*h1>*Vog&g8G++Wx0OLjupkkwml&wIBc#_{kyN=lCxhYol)lVM{ z2fg8VKG|&@V6suLIGv`R7uT^%WP$iZ_zeYg_&8ar9p4N@q;jLQv^+P>+Ah)W&w4G( zsVED@n5&Uy+0<+jmMOB^6fjZ(_j46q{XQW`%?jL-N&-X+YqDovC~V?Kku!T09}L@{ zlHux*cI&z0BOtD=R;K$KmfUKyiO#7;t2sV;%o}3ilo4T81${t$qj!sWR+Q>cUG}pl z53Wy5#$$f}Nk=AKEBET6#PUg&iKZPOLWgg@&?_+Z+p`^Z%tI^f-Tfl_FjhKB_otS& zB;*IT=-5mavZQ2q$>J-HCB+sI2({{ttEQfwn?ej!VpRCckwPma)9k}$p9?+Y3|>!9 z_?8_k8@=B9j`SKX#gtV>iemo%S_1$ql;iQF2M&WE&P`py^QCsbiCLT;_`5m<6$YwC zo`0V_>4dU^z|deCpnEc}4R+&FhBY8Fr+}Zm0)7^dgh@m##|G%~E0uy)&!WZQHlxj{ zU$TO?co;{_s4r#bn9CB=w*erd9u`UCWG2F{zVq%^JDe8`hSTp}kB3h=LiyV9Ykr@@ zhsO>V8z<0?V9`;|)=F(QQxjr|R4N>dvvirAbY$zt&hSXY=Iu+1LOtGPr(DO59-AsH#RFC;D5v7?IE{hTiD-gi0LzFf ztmc43ys#5!6YNIWC16}C{H;y5KJ?xD zu+4DR@#}mKp{dC18I+>2)%?O#U34!rx&d#VeX(G*2AzJEw^@nQT7Q@1JCpA}*(;*w z{nQ=Ec2RlzUEsdi@Uw)j1gv{Tw|AFO*+k|9_6CwWfq;A`1D^x!{5uS%87r+l{8_W!yc%H4KJ*@2(GhGj3?U#P= z{2TA}h;y!D`mRUVFEt{bsu&bpVz`6i?puF#-Ts6xe9R?Iybu1e0haYDF2xb5?#P>H z5TijUN{1Iz!h@F~6+C=)r-TB=EUzCx*|_dIYn+z4*)r@#Av`Z`6S7 zDk4910fy!iyr3Q@R(Wx34S;Ti&rrzgU*Yo`$6}#)a{YKL7)x%n-L8l~)pfZdV(Jw> zXB*v0sY>$xLN@Ft8NKyKKEkH%{tqbOdxdSpeSMzMG<9|uFRtbjV}?4MsT@C3oXV1Z zVJ8Fi#D{uFLB~5^%NcJ0H#PQ1_HliiP=5(iBLgTf%idH$cujHZ`k^bAjvPyg2Od7M zvf#8Q_4QIJ%=Goi_DP@K+#ETI!uH_ii@*EUn=C zHSy78_7MBcf%@e7B%ZuZtQ=&CkY_8t(;$V$4 zPoxBl4kVdCX0S0#qborU<1=1B$T&3M&lvG%;J)Ak@EG{43%)RQ{FdT~r3&7{kFEkg zcRby(w+ty{w&jfQr-MT2jfZdNtFid-k+lW4Ggn7T$;xE+w9{a1(Na8KyjtAa0J-Jn zi@)|Pt;l!9(btc3I*lu5&df{xXsE?fVkp-7m13Qi1pmWU^8JkJ13)%sDci;kB!5^D z4=X_e5XywAbLh`PHmR?=u(O6e zrlAm6AV!M>!RGS?v!eXNMhzc^B79ags-rR~GSjF;W>_RQ!~^j{d{{8}j-1TP8J{QN z@t#C>xj}5Nxz2E2Kt>O;C{Pw@xPhJ-P-CT{Rx=j|vA~Cw1*XN!yv!>5VIBKaGJ+$> z*SJAW0m^#2ElRe*&d@r?RL4q&tzo~ZtZ(t9%Wf01-ICN>E#7{ z9+Gl(Hke1XY+QctFR@ar9r`v=x@my#BrM z_L#QGS%b`B_2$(f zazr2PV&!^}39KGq^Z{0{=@~Y$V$+Zr$N(~n)#C(H?KqH6tdPYtJFtpnTZ61Cs@kFf zVmR%ze98hAdZdIh)~c^v5`C_+Nc3h3z;=Nv?XP42b$_jZ#J*81j$XK@X*DemN~bQK zydE(z(Y8{b+73GmqV4R=(rVIXnCp0ajIDmU$i8|m{I;KIIjp`5a`r=}4`spj9(=pL z>~#LZ+b(7b)5pJ2?=tbZ*B$mA`sA_m;^=#q=JKUS@|ESV#mrW}J(#lVvsQa3$Lbb= znOA~I?w{ey8~OcM*1duJf+0HvrxM~lr79J9WON;pu`oj{5IaN%J;Fc`M86ugsBnKx z>i3~D!Y~8LLg%BHk4B zsZqunaJ$c`REk9!YBy|Eu^%u8(0vYk#K#_DFJ4jO)Y1e?D%784)|1A`Xd;N_X zvZapTucX6+6PHdqtdClm=qyVW*UXvOnXM@Mgjo*f%dE&!b#`vTZd|?jt@EXt@lTWD z8@yJ#ArP8jzweIZ@e=eV!m^&?33TTMWZ!|ILt#l{XPPt-%~EivEf6bY0*4z;LV*TM z4kb_$0+4CQ3{}!`j*Y9WIP(fQWKTQiprH%e-4Er%e@cOZByzx`$LFDFX48xvG zG!OQHN7o7&_Kjy2EtZ_qXPzp}caLGHgU~9t^iQw)Cbriy5wAT|j(AN|as6m+rD^r~ z4yP!g=JQf#-tNYI z5{1MdaY&*-;3&B@`-c+0$Q0=90%m;3IV=Qgz}(Tht1fZ_<$6LZaCqUwcE%G=49KbC<6ijHNpO??UV?w;h;dY$;yBB&~=y&`H~c zgwNMrIn>Ge!YmoCuHaAJ$fOS5_D3_~=;>>--Tda61vLD^OiivEzXshnNqzWTYM4g4 zaS(62cVH21>+yE<#zu&#fZG)#w4g6CqzmaOx-;B@{uI)w0qRuG|AqT$%jv~AG z!@0N240p1bd)9yJa%Z zA-xgG79|R=M+fC2ZoqriT73S#d`fRf zdE!O(MIo9f$7Y!!9)CigSvts`x%p!J#61J?Ua!xC(ZCLhZ-JBP*bjuWx+a(uKxg}W zWDI~p+&+}OifIQ)^Px2NcM1=U%%(EuRq^{_xNmh*XZf{EwxwV~{S4_^fB-5uAbK)C zy>_984FT^Q<6V1)k}FfClNV1t9J7e_`_@k#&c_UkuU<{&L^c=gR#R3`MOgi;EOwdR z;tQ~kKPAK}OV2)eDPNvC_U+{(O#J?}<)D0O{`gv9^(jXq>@LnnWyy$eRydon3WG3n zN@iv)tGl#|U9y1-2b@Mhrxa9FwH7>sy&vt9`$#@0?8lA~38WWrp1ky8^ip^&@~F5) zHN&wai*fI@?R$L2**Eun&fabJV$9RKE?@V!a@dz|lt%Zlua54Cubx`BxDyk;+4X?z z4BvR&;fMh(!~Rai9d>tw0-n$eUlBYEI^rFbiUUlRbcUyZlq?F`fNA?fb^(qP5|z~6 z3Rq1fKqan3X~u)fKx13#6H0jK7C#tGx(<{?SBo6TLjK)TK76emDJi5{|c9?B25W7>%AWd&fH0|*_ zm&J!S+=EEDubsKr0CbSpL(g+FqNAQKABWi#Fyyt@KhIHxalgPYaF>fyE5hz8Mlab|HL zWV@R7%dQ(m;f;ulTYWm;zy&J@GVgd-d(yihVfAhGdf;GJH}rSpLzdDVbJ;YxE8hyik}ka z9$gFY80FNu0~P_qG~qg)J)k?HJFn&Cr#m|{ogGv|y5YO`AWM)n$hv)AYqv^i*&JC8 za$r_qKUxi{uUJtm9H9hB$SMS}GmM1^J}x%~@b?JoB5)eYr*5rkyZ4-XF!IT{hw)IN zfL0HG7`e~JXU+YvM+pOh6O+dV z6DQS8@=T6zo#qJ@qipcnZEOe=E2oRROLl-$zTRXH` z_6`51I{54H zPrx$l^K7QM#)oL_$GoiBRN|hpNP*7S3s*!3!P$j5fSkO-mnpRmiydE0M z*60jvczZJ84hVTjbBb4#3Al;vj35ijM+>0XmJHWU6aNU^dIMxy@(F=%D~g{x@(+ts zOMvobZ6@>D#(X5z2^oJvFC08@e7c2L#89uB%;6^nzsTgUgXQk477qrcf=iNrn1EF| zgg;od+K~@t2b;w!4_#@dE`Hz*7f!KG=Z=oPQ0UKG9T;K9guC>{0a$YJw$JMwaQpc~ zA&Rq^0ZT=-Dhfe^Gzq4Yw>DDDCYem4z$G9#C2Dvnh_rt{!*;qEAxG>V;lf_X1nlb* zh2s}aJ)E$Lj{7!FZ{~x=V};e{DWUM~Vp zA2<{o2lnGR^OV<8te?`ZpPm!GI_GW>l!LC|_(YFS%)BL zbMoPmdp9roLhfTxR{UI5B2@385SK^wn7hS`J+!nbl8D^vRu5ALN;B@0%KUf%y|}(C z2Q%3Xn{DcKmOJ5!e&A3U460N+Bgzpp2r$?WA31u$&e%1}z1#}h$Rvm%4w~hLPG@=P|jH%oJPl>gKQQj{VM$UccLte%Y5h3XW*s+- z(Q5}_#e2hfgCXZKA5CKb zZqVUI;}^54_w2u8Cn8{#sCv)KmG-PMjVe*<5j5Kmbd!8Z3NtZu8V^gZzbN-97A;^) z%=fZKOQUizK3Ki2U7lco*$&n`iT3FSU2cXUYgqUf)=u3W{?dc`1%Zh--q){R4gLq8 zIJVkGXfk3Ep8n@(Dl}N5ctKf^-!ryV=KZ*VRI=a->Tg*`1O#l#Hm6z~_i9Z&#* z?8gH?TzPAgJ@_D&@xqh8B>q|Fby0h?nRj>xdT+*ocsRbe!B}(YDwZ#@@tQU95l>}B zEV&)&dPV?0MzI%&SGK`tu5-UoDf$LIM6ELfNT{an_i}DZJ2qfoq`An^bKe1;I6W<5 zTj=!0sYf>xu4X+|$s5gEr^IA$t4N8O=;-JE#BZMtCt2O&4n$`xR{uNG(|3>#Q$*y) zmlZrq6et6jfCiokHFap9N#-nNmZ*uL%8lT$n~GB+ir7DCL$e4>5Rws*=Hr9B#kMkC zaj3Ppsc@wwU^bs=5gx-Koen0nsD`3oq<~LxdSLLbM-r{HNNh9x2jtMg+ofy8tyyvO zoxciC+_99DoET3kemfW~M+M1Zb_stSH$D}34r@MOC&kZwyBzBt${nzUk~zt%T4=&j zx?uahY;*yVjWTU;&r2Z>jyx3AXYl58`Bq^pB$W}hwy^pHs-W;pbsli$pvfw#!k#%Z z`fJZvlnTh?=Kt;~iYr&1f7SWPmj_tbCq@S^?%4L@)qBCw#J*4*eb?U%ZOk-A-*(hGSK31K=8HeEU^NV? z$zIoPM-xbYC=j&U9D#s;FnBh%n5-b=dqz&>SAk6LqcV2I5-O1=nt$_q77)<^bc3?x~_D-;^SwYUE+~3OYn~xV($n_4$9F^txo|}<@q)2}~n2(F1J9J5E3AtLkkm$6LCKp}m zfgNlvS*Lm#hdYa@L~8;#(9vo}oM{hkA z?B2+2FrXizDACI?sz{)Xg`;+U&0Gjt4P z7nHi8u*=T3&aWMdf=E2B!4?8KW$Ay3>H&Gg`D^+VP%EI=cy`6|VLY%FS7@jy{5ez- z(MIs*Ld0<8$rSS9g33Qt=oFNbnBm?R*u|tPVsT4+2QC!=p=c3t|zEfr~Z% z`JVr9*?u@9`H#oBGJF;34F`B6pThH0b-%%%hjrA~)*?xbJ4SY+45>h>SO%?gHtwdO z_Z%_<5I-b#?wj<`IXruEtg1v)@G*x}C8<%Es=B5`Qd9Ft@M5(UDUJQhs#&7<1lplQ zgTUo^0$Kt~DuCM#SiMRpAo^41Q(FV9faQt%f9hVZaPhrA#Riw_zxY!@X1wyy(;uA) z;j*KH@zue_N*2Awn9&eof_09i&?b+89&UB8W-R9moXgcw=>ScHwsO+RBCTG= z=}Kgey5hb;(v)a<2S!Xj&=*3!7@DXZVu^GxYR}c>C3hiVhd$||yN57&M~5h24{1Tm z+u#LG?4dSJ*awiz^cRq{gBT$uNL+m`C=T^n=);85vt$Y;)s^daKJ3pmSvZ=V!61L^76m9~V|$h#5_B1B%d0v5={i4VB86KZT{C4vKf{{u7?bsB_UtfwzW! z>;y8%$P>xt%!Bgrzt;Y{a8K)cR<**II4Oy`I_j9ScnfV5e@v#>lO379eJ7hJb3O?p^E`R!VS}4Kzk-JLa3EB2W{hRfE`j_Is3SKU$fW|H z7CMFJS6wr0hq3Ptw_MW4iZ`lHO5(4sdeDh4VYN8yzi~dc%-C-Lp?biBGve^FJ6-77 zV|Q1DLH}cqJ=_qB@mMNgvU?&&zO`|Wz$i-P_U`-KrWUB;UTKS}MDof6cwU{!w`t7C zYH_f0o{; z34P;Frxu$korqs@ZSXfrW9zk4u?zUQ#-h@i>1ypEDbY7c2iHUNTh6_}?hixI0Oh*l zHg|Nnoiy$P5cS9vbnr+VM_ecyX#dhhA(+4oJOnbByZ(dv<8S(0VR`;NiH5HMzk z8wW@NB;bVnfn3s+hio?l4EzuhNC@{5z&Bt5f8ZJ}CO9D^1gqzNzf)B`J+g7gbFbyM zXQryU>eM;kIp^EI2dAfo1W%~ePU|*Wf+;^kX5ih&uv&Z;BM_yGyjWnQefY&XoZKj^ z=xD_7z&gr;#365&LQ$w5q-l&dUQdSIL zyY7z>sZh2dg-zfTab3hn0e@4XAgsmUim)dsY|(HNTI`oJi>LFS1?$92khDw!n<;d^ z6dzp=O1AI^V+N1q_EoZlYherjNZ|tUR>;Xrp(O#c0~v$=Y~qJ3RhqcY4j%MLc5tZU zF|+XYq>Z;jJAAA3_U>mpMXqp%L%-Ak4;`JDO;*e@MBMqQ5KrhR>pMz$zy)LadKy+Pg&L6IcCDQ5EvQddxan0ltAN(!bWS9v~V z) z1tkX$X{Rkl=F9#gDI4;6zmJim{kTrPzFv0#H7dG5(S`I2+lmfh;kC7i^Kbl>{i4!! zg7^QH^$D|Uq)&)!+&0@UIH|dJ8hP7lk+ra@x?cqgqNs;okpb|-w@4EDpwA>`kz^=^ zoh1JP(wiZfD%|Tap(Ry4FO}FM48_*g>n5I-0YN(ok6Y*5hQw$5C){plIWxlU{tumR zC0++B;?M1Z%Q?;4xesnyb%e45LLT7joa~fn!-_vp5nFJ~g?);g__ExJ-Dt?p?Msc$ zasx#v$b(fJI?gYfM>c>R_%8ubU}R@6v;+A|#rT7lD(V==|A-KeZ+u*Dh`cJLlrqa zI*l$U#ImTsk}Ig=zFU4?N8mTv%qV|MzBm@atI>GOW^GJu^+kMotrc|})LD!1ga3J7 z;S0OBt3Ha|CqvR39}&@xfdHRP&fb{{?_MXmHioYC$f6tR;gxPpp=)#dyABMV0(E_w4D)v6Udr^%Kc^3lL zfzl+R6G*_ZI=~b71?!zqUDV^40Wj()GO)oT0F~H4yfHkaX}VMx4-@qJzILVEaJtru zBe%30F8pk54GnnQ%Wj{2djJU+7lZfS`i3`8rKQi!ofDUDO<|ipd*YTWDGO;(&^q$y zPpjtT*k;iSvyTsEA0&4mO`xRzbDu>kNtG+t#nNN08vr9<0wfbXlCtKAVu^d$3tdE$ zLCK2ye&KB5wRiaqU%iL~4*ue#S?|7_vK$CrhP%G7P+SU}JKT0T*`$?w{E0)YfrCp2DiMu3 zf9z0e@W9f6wlG#I*ISiRb4vcjV2fIu%$jR?uMH0zc*OAkL)C zTLd4vICnOuxB2F~JmyMxgk|*R%UOqhsUYMm7LVh1Z%Cz=D#_1$VeAC^(a~R8nM!+# z3-?UNM}2iqanxxswZi{v!%zrizVz{C9ivVz3o3Y=W*}$Ks1wzJ4B-l*Fd;cf#-^@9 zr^K)GD(yL}=dq6ceNd|nI#HWi9Uof@E{zqo&m4OY4y1idvk>tIeRfksr_=6n%41v4 z&99TgsKO{yqtHKWM>vL`akAeVB)4i<$W3*rR$qrRxIHF`bZ(L{MfPQr8tivMTZVW+ zXOp!1yjxlFzs|8z&@-}m(&2y;ys?7Ru0yM>WG1H34>MQt1e@AkNmSNt?m(j3RGaEp zBonV&^*Nejd7XBUT1QDiJ|Y}PuN75QGT)OgfizwF)O_5M)u&IC4GxHNLh?{XR%ST* zIHj)j4!3ngr6?7JA84u_^AEOk_7Q!FHa}K9z4f+8E~M4?{qYmNSKsN@c0VGv9L#q5 zwt!$@e|`#qVmDtpJ*cmerub)@!DR=F7qp5O%Ay9dixd>0*ux)v0(QagC@p@WVZ8f( zrNw;L^dSGiX=F5YD;YsB_+XkOV>r!wSjF%Rq^J6?x0IX(@A!SOB=jR6KXS}ttGyu( zWrk#7{NL&{V(kwoZzw4i;7`Wm0Tin)?rrGN7rZYeZw@6UL@_$TJXftbTVRmL69-d* zp3i46Tmy-m$Qz(JOw;5c1Oyc>WZyBe7$s1UEp!-iV!*ed-_aAx9 zw$O^e(!#GFM0=>CQZ%-ZWey` z%%G*<8N86Mr^*9bmQDCP=9Jm;8xw_(9zEenwC;&)Rk26qjU}5kz-JvSwnviYz|;Nh`w!OIznNFZbfh6vx&mdlA8!M4$i!IR~+6f1Oskl zrGpMM7Y{mE&WB|6(eOxXbs=UE3eN4t#iiKi%0n>}n`CU*V)og+LdBwPHR}~!VZ3!J zo$$Q%!j?uuIdie+t6(d_?jPaCH;Ld;0Z-A2YNgEv`aI8sZ~`U^B+tb6h)a4qcB!-~ zPU{j)6fC*0u#-BB`vl-8bdI#s^EKWBUwU{RDIQ$DJr6FVSG`yX+6}OK2x{ZR;!b0* zC8S}RUMV``_2c(g9d04AXw+eyg+)MPd~tuSFf&Pe)Mwc%*q2of>;p}O8%6;Ndkjn` z;0FST6?O8$&@Qg4*W;K0Fvf@@ZtvrW!D#g*%xLC5duJsVN!;KK+)>F#^j35I#8S`~ ziA*jBy^-i=7uypHcJ=(ogwtj&eRH@pFbJ>#zIS%euJ3`0qtG?bzE18?lFCS`vaY=m z3=^OS41lca<3>cD(up=rtmKpcQ8Fp!ny)Sn#Qm&TNch?9&Ep5>Svh`Wa^+wl%6_xz zu!r19R<+xL?!@w^2D4{o@A;FXQ~uzkwad_Xy_+3UZ3zPUDXF?$iRMOXIhfJJ7!Zd! z&BODINPD{FJd_`R?L62yNi8DnHCkL80D?dW2;+-Rp6wo;n}itx#~9!Mq^j_4w4OLU zE|GITC~hr~z0@dDb8E;S8V*`Zo?t!{&L+&3gk2XiThd4s`#ZI;ZO9vB!$C_ZkjIg@ z*}{_efzem*eiggU7lkyavZY!f?FIT-vZl^^Q5+UnMAn0RXC7>-l$g zV3kiM8opi!a5WbNCGv19F4@p_O(}DE3RMKRVztNghuc5}Ib$VXKI*0B7bnB1m6WTH zG+Pq`td%Hi#0?r@-4M@}ha8@&-yjTHVnJ(`Wm(RU$knWlVVCZKt)y)0 z4hai6-?S5HyV=sZx;BA|$zwia$>Gv!ausX9Ya1Ns{%yI=1~kQ1mQ6aeRR>Ldm1_4I z`%7dWJ*@h^vbVr=x`G})03f%7co03!>3gq`L@zl-XB1j-ToVLBKoUp+XES#&b^%xfmM~1QP8P#NUNpEkii_PmbuxT| zB>gM5lXMQEXd})~0F%HJu4A2Xd=V*E*6W>(x>Ul759?vv`3N66lnlfW^ahXOY$e50 zI%Q|xG)%zs3(Ue^1YPH(VTH|)=ji0h1$>)ZK5>M;iK2pkS79&--(_c&fxw zMw8!eDrp>vtVI)v&IiE`2O>jJA&Tgokfp?Y?=P~kT7xZ)PO$RfhTk+kFvboypzbz> zvsqTPsqK#CMN=^A&selbh~*B9M(trC+6+e6NP)Sx62nMKAIc9Qxbz&>CXA)f#8|3T z+sxRPEqD#1u?}nihm_Hj=Tj4-B&8ZrLSLY#5hJ)V3dDdckOT67fUCh*9Bp*AQPUA4 zJ4z!f#lN7w$N&al5E#ZFaE@KFP>IXv_Z8p(u!@mQ@q|do2$aCZNnGsbvS>i|9PP~4 zI}0>!;xx|B0JFdxuG4m=F|vq-JY4T=)jLP(oui0|#9g;>S0&SqsKV81;J7^0>W2FN z`fv-wL#%Z5|7^$w*R>z~9}hcL%WJ#O3qFkdit4!PW(J8)+K%#a&~PuzMogUq{R2mV zZTR@+9bys7c@4M#Tm&v**$;M#=;bwK{+zCNZm4&5>fAlUgKNBi55N{7MgZDtra&1y zMF{P_q6si#yhx)yiu?geRFxISZ2;}!BRF42k^x!aES|+(&H*<9=h2E%=PX)rqTV@K z@7!D$L(n)PnU=T-9ERp`rn8CD2kM>GdgoZZbG$Cbp_51eNg#EOYkGRVT+m~Ke#CiT z0ayfX;bIBGPb94qU!};nGS@8mcrRg@;J=l~)Xb*81MAM^`{X=j%M@Hfc?V zD+#|LPVyXGf^Xzt*10ut*Byqa|V0!1X?95+3%OtzMfsVl=0W?4HHakZ{{{b!7NJDIK<_P>9ax_N@6M z>`a*H)gCYEZ)fWaIs)hL9J??#GPC*!n`_v8y2+q%B3+5uXClRv6FIlpgja{$unctc zZ^#Wxbo9F_p8TPKs-k?~i(`rZcyk{Dn*#_lSb^W^oUsG235GIi|VK2#W zntSuW@uPo>okY|e)8}#2$5}91_~ByA7j|V$*9(P_wX9Whv^ef|Z%wf&hhr{Q3u|@5 z(ad7f>DAB0A4#Q#kUnnmV5zLpHIAYh*sbfQh91bSIrv((z6@R${r+3f4+d3>s*|c`RC1!H zA+YY~xGmraa1a8z1WNH@&SIi%P{@=r&tgdhk!5; zf#z1(lF8`1?!yKF90E3d&vuqN>v$MgB0dAfG!AEgERe(LzO?z`IBquqOafE5EyOd< zQz{{OILv?rU=cXYm*p(Y8b6${>M;0Jc<~nOw8Sc5&S0yhImjoUPT8eNklLG+JdDyy zrB3DVD7F2X?8kMZak#x?-e8&R&?p-_c(BYR=P24>Cut za+qD3ADx~$!va~Gn+4(teJN-eba~luz&xna*}1m?`IkS7te{cU`H@#=Un)kcVPk#{fcTn};`#5b6hDuTKEA?r_ zEEp<`>yF1L}F?5}u7(2eg`OJT`_X|4I;Lr^8SoS_0Nk zEY3!f?lzL(4JC8N%z3O4T@2JS7^5k8LH!%qx5*=0>Ks_)N)2rC;z6tvYrr~sSlc;> z>6@zWt*X52lf+taX4s7(^Z>MGV7(9n04>g=7(l*Zi$?rq0?Yx7B~ra`K2fydhz+m< z4nSU_#X5d(VBJ9`uq8BN8CU@hpfQ6~`BBW{uL1xr5iCXl&6D!AT_GveD zN!%GS99)P!P!#1U2fH%o`FbF&6+#-B7gAi-0t3&-e3D|gltsf!iPM$u`MBW4p3!QD zbSq1usKr~Q{MT^a-qijeCYOmeMN}1S-N2~S+4$mLId3B@v^dPbhI&=vO%Amv9 z((O0dT=kvFMx!yqD#)c1j}G{P>|>o_ZNOpuNYl0E3wbTsQvT+-_R{KY56_y|pu@?A zJ%&ImNMnk5_eG59JS_A->8rH32|7OvY=Oq5-8O+#f6JWVS*e5P5d%0YFXlbbn6lN& zE3i0?^D<{Y*XYcnK&PC|X-^EJHQ$NLT!0(Ebmvj+4JtDXvz~YmSOeC94V+Z8(lonA zaBLJ91F-sc5}eu~OM`7+gusRYQ$%L44&cnG<_!cgPJ^8KNZ8w!`Ew_f_Oc$KN$PnB zR>X!WI{+U_jAE^y?W+5gnLLd!GDXT(*e&+OG7|k944`0jJHE}58DBKAoN?EZh2=uP zDTM7qN9Im=JbGIxX|d!BiSm<0hpXl{mL2YC3w!k}Yh!-;{VZa4HO{gjES&Z+RFRk+ zij1a` zz?;hyEst&hqnqkXpo<#y4r-`1>wIE4aiI$+U_$blE^6_Y4$uQ-9IZ4MPZZan1VKmy zZ^Uqz05gW9w`8|*@dz*qjA1YWoi?7touTAvZG9`f=*L%C$0H4wT1kXT5>*A5S4K>p zN|H{4Yd2}HRz|9yJ%)?r^`iqr%oj=rS}R+_xtQJ`E!w4_S;=~hVQXP_c4w?Lc{(4c$tD-1GMVN41QejFv% z{;K5grt)FEg*mVljb{C*26mL48Qx!p>CO zm-2c8Iu{EX9HnrQ6$kZ>@KxcS(aeFl?m3o;*x1nY&{!c9cBQg@=WvS+IM5m=JG|*~ z2D5xc+!f52GgZ}`>Q9ti4q=SDQ!v{S)q=V{eRXwacEsikOef~EKGsSWX7YhS|Lp0_ z?K?LPeH?j1F-7v6dqwKE^q8}-WLTcs7#?2OESdG=Hccy@7v{76239YhcjEN9#qssE z%kNJ5{CSs$74con65;@V%q5U@)%R3;0vt(vNr3Vim&xr1#b2ZZo>WYB5NC#fBF;iR z%Zpc&lZ6*lNg8@$0#-2~2OFI=EKRsl<|QbP3hOLY6#p{xn>;AAA$6uJdxE7bsEAQq z6T><9sKI}oD>jHL5t{%6NIprCsZd(i*6N}G$4UUiNN_?n9OwD7dgFyXjdK(7DDkA? zeDCnL8eXy!$QubI6Ov~TcnZuOt`n3OI?@32M$yN9Y^fR5GczaI$&o=w?&+#A0!{-rpbHOoPN6%v@=ReNNFLnBMkt1qKJ}Yyfrn;KYyvH;YO9c9s!B%J>sSer z93-}n7a&f77xri#3)wH7!U^%SUu-E zV|W|Rb?~aYxRL?jfW;f-xyaMQW9dTyJq)ZYUhZ)huu1p!EpQkLx9CqPyae}2%B9=T z=D)~B_6(*Zo6fR?@RlU%pKwlNJ|EED=es|Y$#8CC`|RXa-l0*4Jb|I%fGObj*b|QG z|Ma+W6~C$I@QgS#>=Uzvzz{1mnMHH61BKNjo}--{Kvms(xfTdYd`I|(yGOGQjTON& z{%FbVXNf>y&|=ASA4&TC1DMgHUVY2v?wtfK@L$1U9b+&0|sCSsCxUBTBLMT zI1yTdMJpZ`hvk&g0b#486}VqzKn!bVm^-(DiCp9rl!*r=!jXAhY=dUB7TX}Wl3Kk} zm*fLT9O8;J(rH?7<@x|rLrl`+_4pD#U5O4bZ8>krIg>q|gQPzIYf>H@KEX~y!M-5G zT%(%VoUfJ0uceS6+|9mTTRZ?;ck z7q2dk&MaKKeQ}f_NdE{`@oOI085v;at4EKX*|@}RJ#^%TgBKY)wYYeE@(??#LPt~lrDk?;;GFcB9e_w(KTXU>CM4`}BRNG@ zI-%@*Pvpd=z-!5p_~KP;%Zq9iM<*wTn~N+R_C(BjP1&^|40=r1Q3o2pFwn$2W}SvKQF#QNB;<1oGRBJrSn5^D0w-7QfD((i)866> zc2(h?r0zy=A(snzRaA&}PgOkb)*L%BQfFFS*2&_>r?w8wd1I&@HnOzcs%5gCTq+Pp z<(R?*n;02d^V_o3;s|l7HYZC>-8?o>v?jK?Z}>{CoUNCqSTkVt2`LTvHWX61a+<8r z*RZwTgMK9m?kw{t7BwCjLKRg|f%z1=@-%P*umjUt&rVIN;sh`WOaXE9w-l;P^O;m3 z{YsK7&SJ+#e*d8cHq8AQbysn5ziLOy9W7Z+k`RI)TVv+D3_A%H=7JX>XaOxF9|q zt~ZOcn%9kUgF;>R46DLDgTZJC9_m$}V|bB9+p=iW9FxYnETpZLden((em+EcO z>0p~1NahLwHkurOfyBDW4$q%pH?M9lyc^pUj3YUhWE|1lzrDyF8;Q2s3z9{Ia&j!^ zeUeF}y2(u9fEyaQ4al#B;K}7^K+-9Z*J#s{lqSWHVD_Na)Gn zhtR^-H9*nVVjfo)u$?7gCMQk0Vsh)}7&_|>aT(Vs4OzwShZMUqdKinK#F8o+O>hov zB))~;EE=T5(Vea7RmvU@DmT#lWZTm2&;nFzVu7JE=AFiY&$ zpD=r4zxCS`hRw85_Qbo#eQs}vy?QcxZtHe7Ff^pYi2W4Y1z9JTRbNucS`)5gkrJi$ zlq-8aK`2qv&%0kI!;5nmENM^b(+7}W*4|+Cj}q4jNYO(WLPgbJ-~U0hp~!m&Qdzhl@lCoEybgI-N3I>MDTe4u3G0F4p0EBe7_6~=_CJGo=fb%WJo zS-kAWZf)5=J$-tuHI=Yqx;R5#cP_|AP$i^cuy~y|qdZ2;WOLX}wUei(PhH*EVCiDj z@ zs-G%jgVhH`NfhI75aT;yF6eMcV z$2x#=y-9u^`^^Y$u*x353zHpoFh%tMrL{;CqR)^ZS&>8|7CRGQ1}s?gY@Jm!Z-%Se zB%hurZWjaMKmxZ#jy7C@9c;4RnZi(F10?0dF?r*n3|zg@)5C@*Ibv|8V{c7FDPmkF zFN+kji$NB+db(PZ1V>z}h=JcLh5XY?MXzCS*7s`roJGjE+(?C*54MwoO9ekO#@#ix z=?xk*$<);PiaJ_)5_&jR4w&<9f7x$h_hfw&8JmM;-O212Yq$pj=G+Jh87}4mB-h8o zMoV&po%HHhvsj!_M~-!GtcEN@9v>D=xJ)7pLIcl$YwT|^_acxDYv4lP-{+&J!TZD8 zP4SVEmDFC08qX?7-m&Cc#pOqZzYpVV1bl{~kQN6pK7)WVjrz1Qiork}$6SGS9AiLb z>@WsWezYi0kp}lXa+oBGk7689I6>k7o9OcExq1@O{ZP6novo#UA3PvK>U{RM<(PkY zW4)SkGvWB5*<-}mm&?l|vuq@G_I1%{#^pjzNbB40$>=qyRC|5uNYpmefX*zQg=2AY zH*QMEd)v1nfkN&RKaslI_>z zk4S8?>`cLpqYiW){QM|bSP~ceJVensBwh02g&jD|x}|O*Nn48YNv5-V%0g__Tp=$J ztt3TK^f3GVO7|VN4+R%jXO13%t4^ijayB*&4ma9~bkKPu{udWdm~8ot3nMkW-_dS} zjTXIg)!Ili;dYKC--*}3di^8zBq(M<^+!A#SpmD}B?xvv4p;#8?Dl;NFi#-dbKU7v zl=JmhG5%6Lvg?%Lif)!~kHo5wDksAodQkCDa?X|A2eBaM&`Des%NJx^P1aG9^ytvi3{@rdAO>X?$z0SFBOuv}gqz`p zcr&&&@N@!f1(=I!Kyt)yr`3%axDaXtHL@t>gxTFc5k8E&;M~w{R{#qGN+P16=Z1YQ`v(knD#c zONL7I2zCz2m@2gvTurZ`AX>6C>iKXq(oUG%A1Utyo?xG!N?lb6-EVZ8sz-Ozu&Gs5 zza-~dr3nL57q=3UW3TcO+?D!z-ISA87YBLdWNi#sF42u|djQxE$nk^R>iZ)sWK%;= ztuKj6sI*BsNW}-a9-!0|ly#1@S+ZhRkwif=$Xn8=Ph(@J{^P1b5LBc7sJ;;P<|p)O z`{4L=*jfxmVy&UMkXk@yT&MPn(SjCncMjcHz57Hc8u{2w z;i!SdEEZNn?-sk0sxR#N5FhZEl5fr^ImyNGezIOqq6%X6V^H4VIC(jfZh%~)`&}h` zoj4|q9~~4z2ZcaSJU~OvNz%6lk;$Fcnrcw=vvwb_Odjo_LV!a+~>cPApjxWCL$nKu^; z_$SmExShkde;69lQRa4oqStm+yCb{bLImpFdlb#RM*Z;bM4-W*fjWtBgcOiIPhP|O zwVGzUffH~6ZUAr9v!qkzFeNG>i<{i4|1ZvsojaNZYOZy=j}K98@bfv&1>)}W!Q}~m*sNBk_m>)xz^;Yc4Xv$4t1{! zOue4H2dgV~QqcULBStW&I;Oh9;;K%of)W?BSKNfRx&U0noIcgL33SYziTm~X+#ykB zKR~S5qR=mkjm{F~pHR$?6m-G&U64n=eK3pbbATeNja6i+1WsjVz+9dM&H*=q$!vDc z;Q7b7L*p&=&Xu}Y!I>&h1L{Bn7{--YeH48GC_wZ=UYKv%fsMPLs-lw=kzChwXx3X+Wu~=CB_xr{E^YDz+Z@$JEF{i_N zm)p&J79^k7xP2bBdQ;Ck@R-iqx-LtuQc=PT%H`doT?qH{9XQyX&*xC7o zg?ZA-2Y0{EE(#UAQ%iME-&>VIPO`rM^g?COq_PY4CN`XVd8Mm92S;%b#5n{ML7?f* zAif4u2G=NwDja4&5=a3foX#YF93E=s_cZvbfGshnEdR6sDt-sD9ixiGMNM{bVxT=y zWx7K149lm+r`)F17&F(ZD~IZ-RwJC8PPppi+K8m=kE0y!5X(#*o?wA=V#H}Zem7$S z1$MYvnHXs5rxVUbI5iGGXvV@xS|@X6ulgG2HzKq z2C;5mN)%Ge^=q-?oVkRLOqmzjR>HUxKQw8vB-ac$(9)#CzrJ09tEZJoq}X+u?3Po( z$cB0#>{(hZTJ+&me!G!bD2-ky`YVliZXx4tB=eJS%=m@Z-ychk2;qXhK6w<;R<`Nl zDBCEUR|0i*ExxPc9|4Q4C_$>`7{{yof^p z{EB)SD6+YVH2|`^?B>#Qzd(Sb6j9EDc;dJy0U$uDW91Bmt==E0L9Y9dVT|Z`Zeis@ z9cjkeoR*S2Te2i!JJX7^?FH)uXG~bed96J}O35;{v~D4LMIZ%Qo|O7~}d?n1C3)B=_}iVw6C zHE`jRPDG?roYTLue-|3aT`;4%WiN*&ug@b3tK?w^gJ7SeD_f_;7N%btkX;x%W$rdo zsduEbdjd|8QOg9F0os}7OvFM_=@9O8-gDwn6ytC^ZKj&&2U6^j?g*qst^y?2lEk8@ z6#l(16dMn@2ZlA3%HoMiY}{;0O$6s5VR(i!4q^V-4Reg?Eye?*?)*qg7!D`r6AmG= zIuxm(lJe-7ajjTd7#f+MFdISx-tl47_6<(B)rW_Qw=jz*+`U>GafeE+76g{rgmWa4 zh7Ic{=rD^=!Wwiyb&`Cl6y{MpiqYK$j-jWNeY2nWWWDK0Qph3n!zOST*uwJURoD}5 z&zD`P;QY^BPi6ZMN zQH}=LM$R{pEV6pl;*Vw%(ZtbIES*vdY-KPsmM*f%q7~*x)I2dT?YPfS_J!Coa!|mB zaiaU(*;XY(J@ALcO(XJU#2^|0T(Sx$QDnXly>`rrpZVYtLcox!@TyeKcY7Q&%ydU)|4vzM87RGk;8pe^)X)6m0My(*hl-rjyjIc0%#T$aIpK1*E{ZLucBs(5${FL~hNirS&@eb~3N4<#L@68igNP2PRrv_%=+pY5HshhTKi^uC% z)4}=jI zlwXb+Y+cHU4cE&!a(#CHdRfqP)qbP`mb*^0oh} z`l0%}FLkZ@yU*LCYgM!C>#Fw(pGID4CEJ2%Qeg{J_2e$zRE&hE(x7($JzxOL8p;j< zBMFGDfwEzZ_wKCe4QOSRef{F?E|eh9AHjRiu;*0o5uU;m$|_NXq^d|xp*(_=PZ(gy zX9e*E47U{kHNQ1HlR?d`_HZ*jvvb%|QdfniF5Ybya=JN?3+}x8i0Zwn%gC;U*jKK> zMh$gzA=i}U=5X2LN7ijVDzXqCNIM+TF^iz-~znY511c= zH_d41-mDBA#?ZNM1TSMK)ijcVs)m-9(Nc>l0G{;XeZiAx&`V^bh^~e{WRFI@OJXLXUP02TG2+i zt;jP1Dw5jSO!u1EOjq`|l3K=7G^oDX;t%7R1%5D+UW3U*Z(aM4u)Xz#FVIS^JkzbZPqB#^dC3kno~4nVCtC1KY!x6e2sPF^rUGx0 z9j7U)q8q1aSEjM&b&91BCrKKU^7<$Z)1hH{zy-LK2BO2THlvYy4gDlFRcdVaueSc? zZ?;&28qAPC^J^%w_GQ?bRBnY!?Wrh#Z!YUYsh63Ye>lm$j07O?DE1HI2ae#oOY(Oi z`MCZ1rSE))efi;sv47kHC$;-P-)dCPHB-K4iGHM2RO$_)A~m1^^nd}tn%>)K@Fy*k zI=)gM;()26L9ZdjEq%eL!ico-s!17tcbWYG{V)Hg!t;&0-&226_!izTjZC4V zh$TIvx|2c1&!J2zWtEl#2YBj;&as9_MLOqzd0+uJ4%`e}25v!C-a+m~IL5gwND#>5 zakkz$SMS_e@72Df+RSUfI&cPGQ6kiM*_OUc#k8$Tx;mH(D6bJ!hM+{)8SFyv+3m?h zl;oSTK=;?IKxH=6Y;>SEcu5~A2uG=Nrxfq#aF0|uKyn0km;|PPXZ~?f8%Z_wzz>TifJGa(5x79nh z*Tq9Pvk4pqws@kZ7tj}Jz;im~xR{a}ec zDX)(&gir8^!*kvH=Gd!Wa5`A$r#JRau)Op|>5TBzi9&;|l;abHI$JHpCk7E#iSN*l z;gEIdnu!g)_!T^*P{=y5?<|WcH;_-GLJR0sdjRz6g6+43*f3BlG*XYM-o^e=sk?*3 zG?M!}0$=WFbnb0*9&U7A+35U&R2N7|t42BEs{n>soCS!e9|7J9ybX9eMor+p>+U)g zwvs%MC8-xVHXf*VURUotR`0wEixVy<+N5$1Ss(|rfct>^fk$zx?Fwd3=XgUrfdl;$ z=1`?`w$VA)=-k=hGhzehF)PHoK;(CW$WK-}ry8Bpjm`~?7p1JDot^6_tB0IJYMhoa=r78y7(Z@ybO2q=p+i9uW@%{Lw$Oc8I;-zu5zszx15hKc$o@$*j_pLJm82ZQl)) zD}Me-i=D2<{!sNT;q#FDY{V>pdl&VLmzVX!%-w$T_Q-Z7BYeJa|AWrA5YLS3VL71d z%_6fcK)RKh?j$@W-wC-S`|m~DgB^EtTj`FB-z(2Q zrTemT{EolIKiShSyuJL8mwZ2D9ImiO+u7`PTlo9~Z*e|&|9|v;yk8i7PvBo>C;7Ku z*?*6Me5ar9{dkY@JF+alrSyq_woGPwgcbOY?(gv*awDY&$d6&F)2b_~f5sT6*k$Wtr_uXpAswRmR(W3id!qbuwD5K)EVBssEo_HAgC{FPKuB&1X6Ij-U-p`A(= zG+MBKVDHPfp@%|V7zzVB?>FduP+$1%ezWFp@ta?-_nXzsXZSjtbNH{)6<_k1wKz%_ z`wUAceo=8yG$`x{^0cjPF$ z!hZ-)bwB)#Z?LUvZ@qk3xNGlsaHi{clWW4axwfMQDP7`GxtvIR>0WV_#Fb~oNTU`-hKb>J-tC2+qgtyHAH`Nr z4Z4_f`y=^Rj<8t69h)}kP8p4-Y^!Vv%(0NSrCDm4{SU8jgt5{jTN?L=$HI0$tF)8e zBh0dEotuI8bPS!ey9L|WCZs4e?4W%*FLL)m+Ltu*jddr+gil|~gFeu!!t>}=qK^?o z{rt5;A5!8Dg+4~n!xKIF=ut)vx_BKu zDiK#bGRtzc5>-Q&dps>$$6suGkmXHyo)cvE{ih<%wBTE1lPsFuid{EC{q%aaUC;WG z%tHgQ6tj)J=y1K|@?~jOs@-z052N2dr}TQO0e=Tk>GdXheB_0_oA+8B{kuL939RG~&mREs)==FB&|59gTuc$(+V8R;c0cS4j3(1WRh0a6= z;08Q^%i;LE=%f!TR2rfUAKZC{Jm+xQiCRtEjZC!QFH}pTs4WfR4z+*|&;vdlzNvEK z!-EefGi3$29eFxQ4MG2^|4vz4n7O(>vo$j+Jau^P26lCUnF^ZjntJv5KUA-RLQd~~ zSNjUIxs82mM|G8*QK2N%v^*htu~_nq6BD3;NnpkVziEd!1wHPx<=M_=1$i?m-Wt-! zA(>o1L)H@gJ;xRWwb>IYW(v6&C z6*5wcWU&$eGr(;2+0J4`^4~#PCOQ6p4AeUgOaSY^1}Hheo%nes5>ZjG7@%M=+Q|!m z0=u~v08+w<&OP0W=)v!|@o{3xYT)sYgKy#HB`(iaSOb5^jCnpiiqg&fCZ;U3OW@q= zZ7;Va)@1#S7UP^$c!(iJsmZwUq?(2UmGPuUG9Za;*&HMfOQ^TvDw6PO9S91Ai z#MEM;jR)dJjrwS9;q7Ttw|>kQ2-@?}lV-NOeB|1FJFN7+igS8wi+%f(mtv+vES&x% zd*~=qxgrqQ;EpUI?BZN8^nPc>ldjm^tn4N9u7-5%EqG#`S3R#nVX|pyQ5GX00eQJc zZ8-AmU+2WLhU7EQjKW`QyFq%H;~(bGAN5VP=d7S)3TEUQdo9kodmiPl6I-*Hv{omE?Z4%4KQD{fq?l6@~Sf$oF*Zh z%DF;Z2LnlpLdox4(vM484lh)P1x#hYQ~-5AHbbpBtluGwR2Ybm7S-KsLuXDd6Lr~b zF^vpfc9zs9^(Zr$#uO&I1Sv}K5Bl{(!Xe+Zy|MJj`7?>_QG<~&wfbt&&LaNqKMCx| zfiLHNv9&a~e)8&^&0KUH@v+h1!1&pN7w0#p_3Vu!46?zQUa5Il^W0hdbnSanw6`Kp~)r|iIm5@yoYSQ!xGH2 zr0k%cv(`lu4w!Mk4bu?q#iA1jTv}3d)6N35Dod;JTO-V%N_Mj7!mqLiSZnEJ^JiZ3 zi>K#>_jg~-UfFKrbG!Q?_6OZ}uq)kzYG2ZZ?%wzgSVUpdPT z%-kK&9o@Kxo!MN=ZLSS3A3(1iLa+T7;VFj>mPi%;hE861v-(f)_oKWQFW~c&pa?Z| zgNnQYs!&6TCXX-{H!@=>IrY=dPo5E;x|YXxP%jGu@m2n9JtB7cb@H5xfhil&o%-wV z)u)1|8v{m-#Ft@D0#SVO47*o;27iv4o+JD~e$LO*{_|E#&m&8V8BgWWDT*!7kl*FZP&xAL%A&C%&)V;eE&3DcMbU(5*5?k{OU2QLZ0#ORq;Dl~G&OJ7>DD z-+KhefZ9pzr8$|{eNO#hwhN6$phrzuNNiY0Fczr8N!G3;{FU@M3gm!>K>gw8zg>Tj zr7yhm9T!;oWp(BmslJn?A9&l_?q}(D)^Ja9gBw@Bg=Hz8XEU@oZ>Ia|y_P)mA-hticG!UH; zH4~GoTq!v`$gl^$jtJ_KQ4hP5od2Uv;Jz{30W>M??(i(5l?WaGMzwIFZ1t+McP=d6 zdW+F%$}WyMBF}f}AQPmc860D-8>UIge!#Xv{1f9iXlTAjh&%Qs9l z_MWvPe5|kGYIO{aEMA*CQO@o)nrP9!`$OTBa35;<)MXt5ZD^taUHnt{=f&|SaaXCFC4w|j-$A940Q7$fx(_Kpi?W}Y z0)%}WaNz)^y+bB@J&MLAvGrpFpjGkf)gQVRIDA-m=Gw~ozzt`nU$y9q4y?0RHa9n$ z=aYAzns{h4lu4e)^YSV|Xsh3fJ-bDZqiplNZCKjFobuCb9Vh2dL<y z>BLKBFwXGWL|h*!<1r{0jhHkA`76sWjhHeT_dFl@CQUyz^^5*FVPvgv`-0OesH1mm zxpRfJYoDb9(Lr_x>YOwS4+?KTdi2^IN7=(?Q?HqIdITYS@tnVuI!k||9>&FUOc171 z-A^4mb_^|!quIYBd;;8^sYjV8V24s?w5AbTCof8*hk;_*qUDO^hCkVc(oG#^@zLY# zwxgrnzZ-w```;~m;&Y$7HqAcXeI0ul^@nfwIaJU10r-e1)$98_kw;HLA_vA#KHI5w zM$s)&#;X2UHPp*Mmj!s2k%&t%Luvr!4EEfXp;QygV7!KbCeQ-f5P_8Jo)n*=123-! z41m!@Ty>tyGF%njXWb<(JKmRQ+XJ~6|LfhdN{#y|gDJaIm|A+^;L?!UGI#e4BZIRV zZGELxt(t4P+)6qJ@%N{>`MF|t(rRBFG<${j4o7aj@onr?FN^u^Umjj!XIHh_dMv$C zV0Ww;h7qURearNL@k8u(zxGT7nNb-kGLm2Gr(mkLmxi=^alobnUe$-(X&BQ4N(WNPGFf*g6Aj4%VDJUBt!K@o zbRO4*6v6ueQPXmEE6RlD!ZmKd19DU}jtl@#5_B`V38#EmxaOZ(&`PTA7S@(KgIs&0R497abYBV`sO#XU%GnPz)qjfp1=5d>GzXF z`%pLtf5v$z9Y&O95!}$U&<5xL25wAfV8v^&hLNe0CYHOv2D%^k68mk=9bLZmJ)#8g zG3+PoOQ_ujO6a+7fDl9-z-28YuaY(o96;Bgm=Q@;T$?F6aZK*f{Z1UJCYk`~0R!L$ zJb+y54eS;rlJfQ(aQN@!y3Bskz13Ez%{=?;U8|YQ>Rr!1J6#nDHl}SYWy`HAwGFmW zztSoS*(K0QarZOGG&2NCRUWkpZ&9?t@Mj`PQGSb#QkFzcD?)Uf0FXpq%;SAx{CyyS z_w*TltknS^2t)wnLZEd%gw?6cbBmzidb#;D;LvSh@5H}xtm%358^XQ01de1<6ufpv@TrM`#kCBO!uc)K%QpDRs(9a z$Dz^d0ug(>)=dti*vam1kB$h>{rW+#v-{p|$0?{Cs5WMFSZ{e5Giun|*{68*)q?8N z0?II8y!Je14OnVX&y;iCO(D@WF!Rz9-fl+qDEnQZ0BVFcm1O-0bCs!*n({Ebf&Pi*`gh z*#cw2|Fs*GAtvW<;UbDG!9Rq+;}m_(o30{k5XDPH1kF=QpSz&n_+}HCl~Ue{im)*Oy8&$2P4@Q=LArQU=Y9 z%^WB<)$19xdO7c5LM4%|$zj|quur-b)qul;Eo-}K{~%j`4wCM0jnS|}hT?F;uSk!#18A;b&I zvtRkjEDNwR-S^{qNxv`$k9e)hNkX;aio%r&?sgatj1|B0onrR~?8#{N_3VLYcLv`o z;CWwT*U;jdl;=slq!P=5x@vvfzg*LnEcVx@!-1DC-}9h#K4A%K7IVIyN;h??VYoa`QC8pMg#lUZHLy@Hg01d`^dxRZZfd5r(bR~ zA;bu+-u*|k`um`xQ++#FKa)aT$60xJ!SsA3MLRYy2Y^kuqvBN<{dG8TLr>h38%b#z zmSsooB+WIsa4v?+w5057H-+D7@64X6)_Eh9X0z|3l?x#oTIuPL9DQ+pBf=W`siUNM7fecUuT0k2Z<&AQq>uQ+LG&k~1zT{#drFy8m zTs)r%wAjkihb9HJ+xsz)x7lS$23?R34_)LG#-JOoDqk~Z`D}z z?3u52?#uh^2A$CyW*N5?KRQufdLJZr421Y$pE%(16RN*BJP3cfb`e%9j*O`NXXSw{}Yfv_ewSJ~3VZfmnfAnLJ1 zLymmZ9Am+xI;+*h1#@Z&&uQ*{URV}dkcN@xg6rRi4K7B}bwD|~=ao!#Gi*3!2OKz_ z<5kwAWVA^fO95#d_wan>5`!DWu@Df(aau%_64GKVPGV}7=950%=BZ4$(1&^_;Qi=V zB+Y5)VLw5hf4YcIH(@#Sy5aTZ)>g>Rma>I`SA>$;>8OwYT3#|Pw+<(K%ke_!b&+&- zKJHzPf8+7S@Bfu!)BYOkPJwin;=N*sRb_N}!g-PuGFG0h;0}rJ|WyOUt4S3v2OygeN&rnwqM7mPDH3V~71X4Y$E zUcuM(v+s8AXKxrm!i&b@7Y@DeH_0II(sx0?f^-+=)iz74Dc{A<-q5|D?(?8>AGK;| z_c`I~!V{2ga4AN32)otS!3{{g zdu2}s5z}bA+*_SeCygGI5&_6PPAV{E_lhIN6;~&LI)Ktss3l9vt3q9t(vZqd^Z_J` zHMwt?yX}|V1fjWlkvDC>NRNCX|L%7y|9Agdc~|9Ub6=ORf5^Y*-MM$;|M%qIecgLo z_IC^I+IEoan}qj+BR<%pcqIq6&u@;5^+Ma4Dq9 zi-SJE4+QYNSjUU+DQ@PX8izH27SI7XNo}M!g!GgJFARW4|6wccEQez4n6na$p(01Y z=`Hz91*CazRYEA{6?axbF*X`^1`4S4RSuX2V5F}iZ#>@cU8)bNXVhoFHIAZ>!Lt(& zM>|su0B3?p)vV!gmQFR4li0v|0tyMwE#WV$S%)1mgFdhs53LWGjV9yZN-${aK55U` zEDTP<%n&{qjvY(7=o~8_gA)pKsGUtnXvVrfuq7^xJ+R==>K&^eVN;K973(&gni;D; z-^PdAlP@broLGR^I=G+l$JrvR8wS;l>a_52Xg|PTOB!$&`pu25g-txom&{h1p zE3H%CdgX_H?vHL;@TG-!YMJ3etv|<#&Vxy*%L*tV?TP?m76>o;mpp1Ue7~UF1XdgsgnKuNn9~cJjzozwg$a9f$h(kt=T3)pO^(+PZN5^n;1SD{i|I zF$m{QJdn+>hi9U#fJ ziTP#!KX2~=9_Ll%jn94WJH7Ybn?`LkGnyIIDU#KTB};Pead&Jdwqqww?=k5;g!F_E z0wGc$5JJf2PiP6S3k%CGePO>3^05oc!oq&Ac=&$zzB7^n-d*;Y-;jr@^s9jHaL}<+6KAS?b3*~IWRaiCymJdY=nXQSCmO4E%Iy3 zM?(UahlRPX$E_tLmY|n_@;PdaQY-&VAI-k@TK2VU_EVqAeu}sQG#nHd5LkATP02x4>8B8&R**&T3n%&?JoLqHAQrp2SfL)hEZ>{CGUv%)a^FtJt< z4VxJ#9=;a3wMeDeSs28dQwA}Nb`!OapnHNwbP&JV4(a_}{?+fFWZ!iYx?gK14vh!h zBxSGv;opQbR_q0Ke;MSv#8&LVMrYP^#z+^@#F zZS22zC5>aoTt;rLnj39ol4vN;yLphmbPN^J@3t6dNN?Oow>KMT#Qpn+ z`7(VDx89)@!4a>?vh?HibK6(1_g#{01(mke&G01wUr~J3ut%2^ctN=p_nzhAAtLal z9N$L<6siF^OEq55;04NG5VP#fODa5i=ueo0Idd)#R2VB)75*msz!%-WdtlE5U6*z5 z`Ta+jbkBm9TIt6*mtsvTzlE(y>%pDV4Ue1ukjX zn!pIGAQ_p=s1jwVIrGF9vk$l**yE-*{Qe^od+55~kIM+?B;#~q_1jXEb4hj~sB|I7 zfCJOzz|?$JCKF(o7%IH>yKR2j*5=wsRl@J+JD)vn{EJuiy`V6P?AA*=d@fk@A zG=5tB?pd)QrlR0uC$qo%-Mq)x+Ung(-}$}kgKIlK@w#y0bND&r`9J)-@EiJDMACWY z9yvp{7(`Y%YE7De$A<}li(Gizc-kHO213T7vtJ>Dh$^7sY|RjDPBW8o3dHib<`&TS z^V3Q>^e%*$T=;R&Cl>{a!|+Y=<$zjYjuGRcLV+uxPzZlPTVEebSjba$LoG52N>7bCbMb~ zlaYFwA`pWQ1!{B9>6OL6nTjpuI>{GBZN6MOVv+mpqYkw~IjJnHA0<6LwRb4k9z$cP#i4=HR`R!d zhYY6NWY~cgkK(X`?4v?ep!ce;S9r?-WiCaWnrTc}3sm>^v{xcj)RcoUOZ#xz>(<>h zo6xRPsq&76Z7pGs1KowG>;~CpdI^0$EOa}%50vXw>PwqIKdE=A3%ztDf-ZUSBA_bW zAnL~S;wFir2~abMr^(Ndf{>25LkapWLV~v&bVP@@Rg`220oIj35k)Y7k*!WjM$Dvw ze*tQ;2v;Y0O*D;+lacEk@}rFrI8Vy^)|{X_nHoPS~PW zcI%B>_T^I~;Aw+Q{Y%*`G$cF^A1ES=GiAf(DI>1&Rgn^hiYYCU;*4R}Ju_{{3L$&M6twfCZg57Q5p&p$mZx#Z{^*P7D zHE6L<$rZ)y=G)DWPCF-elF?jn>L|T;s&&g_Oy0j=_ADKvKAd@*tdAWuemDannUEXB za?ZCzEncq|CoCE8@3etQ@%oYrO23>hnJ=2h>KPy4*4UNYv@B+XyK~cSl@n3Os$dd` zb*i?eoTd<7>0lG-?r0e*82nUBO?Gk7CXhRNM0xk#XUs3oIcyuRBJ)E+ zaNRA0KCw0)Iq)Le%dcc5YN0A%tC}&rdL`QjPzTa@l4xKA$6^_iadFGjDH61%kcW^! zZ#3NAB09@DKx=$WRQ6L7f3>k+DY`CF6)sX(4|I-(w8YRXbX*;a48((zF_ODbej;tm zkeBB*QSL{5MYf*y(3`*$?a19T zV`RCBC+Htz-UxsZY?-V*?D9IfOesLBMiaO%R;-jQl--aY+OFC5Px}CWaG$mfUM*Tr z7esL(t`$wKMA>zJbJP44TLTLnUDwKQ>{G~l1VyPu=iSu3&2Brk!O)r{rFewW;-uX+ zk|D|rk!zaCa8H{?r>Sb-DCw#2feFHRB9IELtPBM4YBrO3 zsTVKy;YB8VSEC9XkP=QjE<7w`SWz&wh`nHQ5DP}`RoWeyjtn+$$82jHhaD+I9vsA8 zAs(2lP$prRGXgjnYkfz3ygGVE`16=>-IZ+f6O~>hDyksF*p@x1y(Y6SV5CIQ2HUF7 zwvhMTx86VA)_E{~7 z=Q*OLkX_2*g-*QC0a}HD0%QP=<)R@wzS)d#hD}RWD5_>WJ*#O(l#EewtZyc>AwZFO z9F>uZ@eU&utZceWtwr^X6YHJ})&9A4FqOrYiOPu7tIjl>yF+_l*U6BX3Suzl9{)@W z`N_6vVLIg7mag1G9v&$Q$17HVYWi#cyRAu$0qsQZ?=_8>UBp#!5BRrc(E-rVdRK=0 z)_@zX>uJ%MKr6Ez8s-*R6WuHP0#Q$&Y$rodNWLrhg(+l;XH{I8D`%(^#%8^s39{Rm z{{=H;ClE#;#~jFk|Gx}$VVY+i&jS7nteSXkDS>yu0G(#$A>X&1@d@a_=mR_gNCxV_ zl}s=u%EHkH6?06$;?A)T&SU&)F##r-0u21mQ{GCBOXJ_g&k-I9_W2!YA(t7gedJ=F zC~8_&N#w=h)hu(aPB1P9}{EM zNS+{%${l65c=ce+KW=x^yGv3@bG2HK$lIYQipps zOyqDj3$i}?Fg*$!ksFmb8yeEHDaTs%1wd~wF~8s;%(BCA0K3OKDAki$yK;;_mu5k7 z$pS;jk|hY%;hDpUz?d9cJ_mMNd3Q=iWa$u+R(1%>M}R=vsxyEwg*zXCn5&y(>fSmcA_lX42FzxFkkW*6uMEHW5*M12^G=XM>E}hZl_-3BYig$;nkkF zH_(&na@uR(t}IyX8jDC(rkrCpu@gD5R4lKPPszO%pW?BZ=Fp7Cw|TC^i?~up%R0Ad z(h4Yo+#4Eciu5P6%3xY=zPlyV=Q6?Qi)JzRW}&Z@X|vO^%jm7Z;u_IUC(5SWvdjwW z_1psTbBkdnDWy4;+CzullD_@1d7 z;Y8c!h)&zw-ubxUidZyJJ1}=bdBdOzmsoLnjawHSP-+q`Z>+sKvW12RZH}aM+(k?o zmC{?%+7m}@#qFVX;hFTNcC&f#0aA=sd>3{1+YP3Q-njXG^3XW3juKC7>yu{3ycb>g zlFbF7t4S`7B%YljB#p3=LcMYL%uC_O!=r~VQv|l?Hu@8|vpQ(W1inJ-1byz(n7Ru( z;IBbUodWA+zRw!n5ntTFXf2f{&!O1Oq?>HJgg9 z3i){3(t_A&hkK>@!e0W$@$}?r=Jh@xbI=3OQzNoo*N>zdkY){@Aw0*{tk}U4?SkipCvD?%;?}`_0~0#g}Fr@p3pYd>5hz@C2;)P6b+ae9ZFrhV;?E3)}jOGku++kdgPS zyZQ}Qod)#FI`b<#cg$}eTt~<{GPLdbC%cj#t^JcIC&pW|^t$elix?wd(e^c@&=W9; za%%)kYHhw>sl#FP-C((LM%4<$04cR=M~c=$Ic>}B?rRZ@_SQs*2IDkkg?zyG9p$W2 zVRNO6gJiH5GlZhSVtdF_u{+rGRoL>q!UOaP;I`H5x&t|Zd(8;JFQ`%hfhJvMTu^4U zOTIRUQxw{|_Vu&(Z8FPMYVEvX>QQ<6u^~#=hK&xZsT9!-9~R&?gkG9bDOJh~>;}7) zxCXVQr{wKVbyJ}d2)3nL%2EB=*C;?-vLDLa^d$WZmp?_UMv}n)k(5c&`XW(^t>8k1 z70T3C$WBlA@%cr_om~fd0DUv5c3Kr0t!}Mv?gOgy2j}MECa2Z1reoxY@RRe)2htq= z__#pq7WHAL$?0@goP!@$wZFJ#FdXj4wGCxwKh3nsC9*tyKiv&Y(t)@)uVmt-Cdl?K zCBeK+cv9eT4B zpV)!n8YGIs7mt5guKw_JI9N^Xu3`N2${6qm9grY2s!t)3L5XX(MkuU31OQh zNGdL%Ro;AA6D)=G@3|@0n_815o>E7`XzqHhc1X~`S^4f!@xpHy3_rT`^xxymHpy)C z3-nRk=q^OL5D7*cJdLY6z|}>=Eiv#Zhf3E_jI*MpdDf*tt2!-_pH8@|89*`yb3D+CW+cyxSIhj5jM8< zM@0^^hmX{EK-pU=*ddn*nqYO6ZA=zz|@9y)7My2_i-d-DXL-4IOWP>7+1W~&oLyO`1Ba4KtfKq$$v={uJmjA+ZyEBZHQ6W=#AKub){=Ft|LJZ5;BEz5fUJvr*xU>mxjqRwiRfFY_Gs~ zz%>FFd(H%@-S}1Yo2SgCiq$xLm*uWCvF$y{dnU`pv0}xnZRwuaej5v-q)m5BXVM!6 z*NNifnvKWLbP9JEA{D=C=m622>?S%WQT_JA)xwBgYp`bfTfM<1lOwDvqvN~A-rl`t zWT?*>Xc=PB!sCbq{1g2l`~@58Q$4c9YFZlJyX1lIF9np*#h@W3*?oX6WO@z%bU+cZ z0riM@Ch-@S8qxYrxeX>=B1e%S#If_$Tcz6rB?k;JjZ$~Lzt<)j4E;KzHWTmmA8-5 z=ek2~SX~aa-qYiEh~}s>Vxq4aVigaO4_&4?HD+!pw;OgJS;$Wsbp~Q9cD9n{<`#=9 zYN$j7qIY%ljZKaXIK!RWSzbUTOVERmvibQMP&G<8{1|Q6LseW60Hha)JS`-AVMqL;=7_!M7f5ikLNW75jR@O_?i5b&-((`akzT`3u$Orl@G07{ zQ21}?p&&Kpsb77}hOJ9HEK&)vwdyG2#m4FxbHe7sA4vt`eN4g$Rs`0PLZ5VOCi1Rh z`)yUwnJ`Zvx>=;VHp4&}Tp!D?Yj0{fe3{{BPM0tzFhW_N7U_rrWc3lfPJVgA3(>i@ zNrW$aXi86Fr*iR2+M1j_elfVoIsbI+M)Hqx`PDyX`tKT9fgYzfK%#V`KRxU6xq5m; z5hBIFMo4qLR&Uk92*MDXO^DP2n1v`Jrmy;OY;cFc*F3Nddhl&q*~JCOx+pO-vc~Mj zGSD7-xlrUR4C!CM+tJ=(SFhi%6bm_`Srw=R)Q{x4r*7&~ z%HtZbscZ2F2YPmKb9$+;^71Ni z02bor5tj#2mOvsV=O9JADAvizZDfQ%>l9742%OYlGj>B5htPrZ;0mehY=Mtnf==|+L4>_zuFYH z79Eu+P~_XX6Uv-U9V_n{%+Wi$gC1u0TEdVKuwJcUNC`!4&oB`}!Ghlsf#)WA*Zoit z#?(FXL;3?{q!LkmSm&^nXYU-qO0{BDZ`DM1n&cf;ZA{sBNqjNftEZi%^EPVU{)hfzyj`QDFl4Sl6VxkUpyK-T0FX=QuGj#29Qn#A}=f> zlfyXzdW>FcNEbK4_Gm za#nq>s;d0x{qibNJVD;8R%@Cgy`EwBG$Mm`W7teS_^hB(*kh;HzeHZzdTpml5mytn zP_$Gn-xI!W8NQrUuSGy%fA<=@*{t&Q1>v1U@0E+zPfwO@QMD3T4W%}zP()_chncp) z#8~8-U7MoJcQ?ffD0**5aAL!(vZTl(m#wEa$k@#=KW%)wY_JLdOtZ#FN02 zJoYm*<|8ax%i>gcQw48ItXRU}X3nY&ef1}{g?yQIMJN2-2I*k^Ft%nK$)Z!7a#_hR zO4R+7e1cBC%jA2P(?-sH{~^_rpzY!-Dq2yzNS@QEbuICJ5*haNM^ajYLZ$i8XQ^80 zY`R(?BS;2sybt*ip-D|NH2NQ!B_Fm{?EgZ4V!LTAIXgis!pYuIht;YM^m#QJg)-TE zIkCTf!H_edQ3w@LsY8lUNUj$}v}_=V^rz@)x(n3;h`c~l9TE0v<^NuHXUOGD5(hCo z-F`F~_lsilU9OQI*S?2%+GqXi?x(H_ZnUrb>zJXM_vd<2P1Uh-i@ABAG^A9G7u7y( zNBQR}f*G{v94S)(vvLLZ*9KWf49V#Kqtqor$8ZRih5|ex&khYASn8^PQ4*>RCz*4S zmF+a%R^L%E2RO4ro+L>Hb)Da@t7+8FOm2FJIL`f+c*&LY$2%TuiCRT@%db5_)ARY$ zEiFNnuIB}kjtRHc-m#P4W;W8c^Lu*pRTmKg<=Q_t8>Ry|fyDk~{_+xYl` z-MT)b)M;8v1jooI(IlIs`*3Rvu+Q>L!@JWB{l-$_=%*KefI!S0iGG-$4Py;^t{Yv* zKf$b*+_pG$8;_6|m_SC5f_*CRs2F)q+2RcC8Gcan*vJ+6Ci7nP(KV!UgWPs~SFZNp zUE=-bs;Tn`GJPi}O`)a>DJAye#mG2Cb@Mhq72H)9726|oL{l-#GB z4<6?8mGO;!){?WaQ+D9W;wnAFLWDrp^E3d5E+j#Mx)6va;_P;_xR;Vqh#RUb8o|0? z6ohY_SNqi7E?ezHj9)nU6j47vd2JUFn=Oab*YqgH@3h|0EA-c{8`&scAJ(d>mW7?x ztJWATk>(Q$mAUJ9${V2N^J|@?egiAs0#u;tp|pk2_(l?`nnj{$E49kSIijp6w_PIt zk~&a|$;plTu6k9Y^F?3YHM|M;`6^gK`{+ZmepC-KtJIofMce9&phzx4&mYrr&bQHk z4mwuCvGN2pf&dIJ0pFP0K+KGXtnP3Fl08BShIxFbT zOb`*OK-~RxrQy@#iMV4%pnq|qke5(8s5)nCw}XZKCv))4k+Wa`hm5vlb<(%3TVTkSu##U8QD&$ze4s*!pgkT}N*eJ`ag# z~#3T+&pJh@;qcBqA_!mc&8j|BtOk-XXJE=|d)O$9l9 zNVcDT2ADe*e;zJ{o}! zqH2VU&s{IPvRS8l-?pKh{hd_2F%&=gdR2INeKN8K17(GBN3rMPi^<_P=#_tLY7lIe z$AN!ZRT>2$ZgNGpt(`lw#bN1W8+U0<>B)F}XsXX@_jv3ooXOR)1-e!o9&^T6Vu1)n@H2$%hYu^*DZQNGod5DtVacc$H_A+LcO>S=w zRa3zI5p_A_jrD9e-Iu$fOT~Epld`qc1^+(6urO$962?ZL=TU+O+0BjKSeUaEE}#>I z>TCmSQ;uazpWVtLQVtIC?cuLbeeDnXHb;{>suto8?D&Q7FZ-YG5oso(wG^+5kSemP zu2xd+&NLT#%QhqJF=)3H@!a= z+}eHLx5(dPe?77wU7+{!NW(m$?Mo#D#NdzgKuPrC8O1XOP17W0Fnc5%*eK2f9u44> zTne%+v0xBSi{qcX?%SDg+UwhA!U#8ki%uuXYSF#C5RWkP1lEb9ahSj|QYK)9g8#NQ zrADDj8H{Ia^g{n8;o@R$TK`D1-f7gCM6rAW}|z9H=f;_@ntVj5ltEBwV1I zV6nQu8JI2K@LU!O_+S)C)=@;*JeM9$r2v#Ine1r~TZev7 zQ7;be=6hXQXW;sB?!^zHuBMm7L~3Ql)JuH z^V7?(`FEA<52uY+vpC8w**^Lyx)D`IE_fK*nbt#(QX#$6fwOK$_7F>*Ks+~|;PNY@ zaIzYPvViNw?v!FB-T`c>6z*lWkfot<5uM5;md|%nPir~3c3l1zZUXbDXmDRPY$YP` z>Wyo<1Wm2t?lmA1xS(AdS+Lmy7MDAen=~RLq+2)~EBpU`w$Gt<4yQ_b!{Ao8b6QV{ zIApfYUli3S-IXu5c64Q8T|=dUGVcPT{a`?&@Cq7(Q>zT5PJ6o!QZ!90TsW9K`m8Z4!cGk@ zZW6*7GHseQyFepYo}*}dZwlYbEKVVEwF<$A>&EZavYf*)Wb*(fhz;`q6jVJr0!l(q}5|4)50$NxAr}S2eZQF zqr#crc~drBRIdqHlvkp zSsOZn&?gLhL83(6M3bZv-#wb1LbUMy9ulGWtE{mHDtDR8(RJ)g=hjvS{kpc(n-AP~ z<5XI&?F$$p{r3rEyY;~yA|xC+mFVg?F@EP2+j5SkPL)5QRyh1S(e3=!CkEx}!$+@a zzI?u7at$W>&6Yz~^rja&iNDmIB%a{#u42nvvsdliQ|vpk$Jk*Kh35A$339pYLb{#q z25Ke?4+r!0l57|Q!HsOhAra^;AjN57Eyg*5hKUlS`0BS+fEt7j#1@u8-`pK`0zH;w z=MKi;olsaFo<+Lt3M*txL3sSeiL{4^)TuS}?ddV76xTc}fB7i<*pvFv9=YN2=yp*b zTDWp{gUP%{t=@4;U9(jZ=r~ffDdfKzLCXz}!FF4C)^>a^= zsbY`C+O9Jf`^Lx+0_Li|hsjyZ&rg!eYv<%dybjYh1Ub+92L@M$&xsR=Ca zQeC(32w8<)C?ZYeVPP}0^qK)RQdv$O_%n?VEw^(VNt#%;z&I0Fk+MOIgy(OV#HuS~ zTp=DoY!HY^IebVI;snYUXz%I>$(?u4b$XSeTW6~5SC%cR(ps%2Ix%$NH;DM<0vsJPb0Z()z?uv>+B`OM0I|I5B zKE%z4*GzcAcp`YBcw%_ZL>lmUvbZz72>jd@{FMCS7W}8)>{1m!b_6dVOv5WPSd)l) zz2~Bu&l1vP(PfO4r&qEV8njd|WL&c0N3*)oJvOczaZP#SaNZXj)hx@6rIRatxBmEu z!S{8P{-1TK<3TO;nf*GsU!_jj)N!LFWmU&jYK4M4^hakbZ=9~;>ObdLr~T%Dj=ItJ zBdDXUn9)K~HdV}MCM{NgSZ zc;6kC=xBf)m%_l_X1L+Z(AiQfjEf8=G;l>Qu$g6V`Sp>aWK2HdGAN!R_dP}exAn%o z14g+qx@X7W1;=`TaH~)*nE7=Jv)TIuL`dI+h%i}*KG7#(*{GJ z=^n$ifcD1q`X|>69SUE5$%n2auN4y(^P1z|x#2!Nm*#rXnVONt9%dD8#Eb0w=TgfwBOzyFLK;K1^3|$OS2xNn# z5>|HZ#D7PEi$PxKz_O>wz)8)6`$+fZJdNk?y!^TgGCR%;Kc+f!1G)W;z&)k*AQ>^r zEwRG~Cl93+2}&wPeV3X0rII$oMNl(DUz0;5m{bQKU)6+NU95lpQ_@LapU~>x^7k5d8 ziwUR$AAQ04#*bj8F$f1V@lpxIgN{UB9wTe9w={^0wgzuU(PI(>?S*@F0;N z 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 RpD5T{%P=sex!rCb{sAvn!&?9V literal 0 HcmV?d00001 diff --git a/data/fonts/efont_serif.ttf b/data/fonts/efont_serif.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6bab4c80fd6d05ee13780e9dc6621d7837523fdc GIT binary patch literal 54236 zcmdqKcbuJ7wLiS~b9(Q+_cN!LIp<6-nUJ zQ?lrab!(S@;<`WG%NQ@<>@QZWE!QreZ8{hetT;Yl!{o|MZ@=)}U&8S=##BGwdG_|b zPw)G_moe=aV+#Gwi!O+=HMo-*Rv;60?>+5oQ}E9B;dnLPx%RZ}=kH}6ren$(P=b_uuy`+}}JMCp6b7 z{*AHwgE&r}e)a{I{NV5L-{W`;-@o9@Q_nj`pEGP>>_NPb|NN|TcW$p=x#dR2zV{zE z{@U5wFWD=+Bz%{#htM7tJ!kvbr(QGhfhvyo0std>&prQw?|gg1ZH)ck4(jvX^G@CS z+cQe|)?@eJejn0PT>3lpWR%-E9~2Ky6>}Vle|fras&r01bfDz`bp{GS9^tcjv9URW*l_?&_TfIGyF!TLS+~JG4{5_vc~=a zsEC(PD6e2FGsceo?cI0Y`8bOHQzaZ}A7Np|AGkui%9;3nW@LZUc9@nKJ4b*6Cggf% zL2h7Hat8|{cd}6DAI!xf$lWZ8+{5C? zy)4oBJH{%B+|Sa;11y6)$a*?|VdaWmz_WyoU`T&#__Tc{bYl3oEcO$(?kyqIa z@*0~(UT1TiKeJx80(pb2MBZepkhj?C&I_!Mort`jtwlb-)_0y~gKPuxA+{0uFk3)A z!ZvsQ#75Z`>A`Jv+Fv)Wn0R6+45y5BZtw z{m9Q^A3%OK`%veX>>PG0@^jfoknd$5?fe&e1N%7g^Vn_3&u5=NegXSr=NIfk_G#o7 zvCkmCn0*fUCG7K^pR;}J4&-lSUqF5-`y%qo*q1y1$u4JKLH;Io0QsBQUC6IshdNKQ zE7{kOU&Zc5{ucHP{Yvu`24hJ73Pwd_9R*RlIMPqORT1IYKY2a*39`(Ec~ zptJ8IzkxlB{O#-!gFS})o$N=*-^G61`6>Gk_Bir)v!5criTw=u z&Fsm}{%_A&M+QJm?nVAh?nC}99_T#8zRiQk z@8x0S_wh*Q`|N%mL;f8eNB#g$B7cylI^Sd8Z*~7em{1IM4 zewde$|A1FJ53)yj4f$id7x@o)1No15tMdT+G4DhE6W)*faXyIrr+ldM9rgqtLH;v7 ziu_4Fj{GUUtaCqmnolDCPd^L5Cd;p>tAfp0|qEZ@}m7W*ULjQlx%67oOsEy$neTRY!mFYr^4 z|Cw(`{vzLj{4ac0=N|S~ek$^p_-V-ho1c#SZ~TnTH`w3#naKaa&qn@Feop6Z_A);g z`4RpGyVH<9;MHl6Vp&NdZX`$Y)UCqC%-sYqYvE3`UdL zVzt>FPM6!`_4xzAP&g8e#S_U?I+N|m!_Io+rHao#^ze;0z2V=^+&7_roIUa=+jI6g=k7iKf{QP??9MOT@x?EF z`72*NaMwY0=&>LE=v`M_dDUCqdd;=hUB90x`SW;PFN;FAazch=!11<$cXW7_FXL)eoLJOz>i&tr>e2X&~kxwEDHBdWc8D`P)j|ML|;@BPmYJ$>)f(1M=&JWkV4 z)sQMkC8THAv&iZ1cMRGXdr7Rz8Q0Y-Rvjei9ceGu^+M@h%dMqyzTwqKM#OUJqYgjUGTRLf)jlbyzN$S zr%&Ln?}4{{1bpfH;9`%1Uw#by?Q`H|^!Erj?SFv7-UKebAIDdLcfS?f`g-v5>mW0r zX^MXn&{Qr)?M%ppOHiH%8FCRj%$@+ZJr@$@J>axY;yiTU1B?~s4=~;8O?Pts_Jsqy zbM=8q7P<=>kK&ZA#RE{SqtU57lXviKI1mark&B_GC`704P^6|$+>}^|?vL)D-L*eD z9X);ft~-<|vBZT__b-&Acd)ga_8?!kDR#%$LSV6a>cYYR-lL@V;1S%ue*teeLw*BF z@l^Q;Zc-KIqjxCMt2eFLbjKBwfjh<~7XqzOTLV?<9=vUtq{u8=mlD**& zR6GWCQJFu$0@iUGQ{#jiDUH-bnnv1yv>WLnB<;!LDxhir=n!DS$p@JG$-AKZv6nG= zhmpz$n8k`-qOLAuNR8!#G=5Bh59q9wYRjok#M6!5X1(TC#MLfmSm|-sYt6=ps?nSN zdc^ICL_F?D!xK|#^g6v#&?~h{yP2n&U&FX4$|A9dUJtdtCIvR-=Uv))!Am$E(dQkDym+aMQ&W zmq(%3E8H&Ohc<)yR<2X3_^oP#O*+ttb$nBg4_k!KKueARqv<;bm$9Qsbpzq++skBhsaYOCy)w{f@|uVgA9sALFm@M!C50#v2K1 z20FL#7ZeHT;(ctCPaT3{&7k-bru176iCw|WPwdPgropv}c%(s7sar-glS=9aHNV@9 zB#t9EE*u6T?Z-p!MG{U1>giDNA@v~jBh4Z$Anifghol9z(Hk3w4+1qKOk=b6ix}Gv zjO_=;_TzLvFt#5U+YgNG2gdeyF}5EV+b?1)wPpzK7?$6GVZxd5Coy(jj2Xk2rO;~{ zrxeD_gP9f8J-DfiBpgPWvXaqqihvY`}j{ zD^ucm-blF23J`+ev6U1VjVH`KEvH$~G{Rib+ibZ?{J&e}*_toWnocN&W-J~>WOGr` zN{-h;k@|QnP|L>+UR`iu^uvyD+EEIcNJx!I~T>sBZM9g#-R<$f;_FM)_H}rtyz~VN6tOoo5vu;Thn84bZ5w8NOB; zWsf|{hk))3pdk#10Uuxr!1RfZsyHHC=@F0mMYQ*@ei1whfRk$CxM?tM8jPC;P}5-C zG#EDx#!Z89({#s8gK^VH2%^R(-AHMqCek$02Bh6c7a_^KDTXIv^aSBo5Ads}i(fs! zuO9JVKk`|m1*APl`;f%P_oEZ>5#2tKdt9_d`*(U&rC^vayuE;>a?=K8QBK>*4Ki|)oI?AE!0!=e#wVr(zI<7<7Ps-7J2#Y05B0d+Jyho0?RB^zR!`Wt zuzcD0RQpHA-vB%r2gc}yPheI(&$jTyA<>*w6LDY-Fak0H6KlecIF4pcot(ki!q+X7|&viXS-uOi!q+XARUC+Ajf9uSsLw0jNN2+>?SdG zlNh^6jNK&ep2XNqV(ca{c9ZlXl6GtGwKe$K8hmXHzP1KmTZ6A*){Z1&)Eazk4PJ|p zZegT{MGi48jv{dg3wS(@C~@x=(uya+{lOVX0uTqc9i}cq4u~XBlxvl0%FGjS@PZNE zY7P<`sMj=RuEAL2KkD|z4?0W!==8RP(-F;k2QRBeU9MKxe`GxEpHHWuD07zOzh<{VPTLr`3XGaS zAHocsq=D!#COV9X4r8LjnCLJjI*f@9W1{Phi4J3;lg5N}49uFuF;Ii599;#&E?R#{K}Q{=56Pk zbAxI9FWz$1FV>saKXdJMzsL8To%7lA;`dh_!net!Oz<#RMXXi=tLfE1SRE=pB=A;X zwGvpZ1Xe47)kRpO-jv zidIuZM5t;Jo=K$D8nxR~_h>4vibfsg%~8SQ1m?9yc&0azY1KzK->LGN6g%DAZL=WT zsWf_3D!o~;cOBPi{6VdvSP?WKvr(fJ)}N;^>xFG*t8(C6t}r0;8h9s3Drayv{$oCj(Q-_!XA|E};8$jUUk z{Q%40)+|y69r9wByyd%SbYB)*tU`-bxKD)^tI%QT107ZBZ_>ID0C`>7dCrPt3r4=w$0;ip@ z;8UBN=qMvx1}@nkK3p|X6u4|ob)LIo4L)wR=QkDve@dq}+s$iu!R;^$?{WIIZWX2n zD)o`WW{2C2FG7XGXgmTN|0#z6AE1FqRX&LeX#qdXBqe;;;<^^_(*k~4z)uVKX#qbi z;HMSwJ^G{wLy7JPhE8CE)Lyhz6B89-2sq-RkZ zwW7IYC0~BkITLep{_WSFxv4U_sxPOH59B<-+ElKwW%s2U(Do@{(%oqLF#GT!C}E7H z#J2ZJZBL=?sczd-XnP86PoeE8v^|Bkr_lBk+MYt&N##$mUI=R_`Q>rK9S@%Obf5R& zc@Lh4CW|zSw1Bh+X&;jIH=KsoB9~vQpN&Dk(#L^+>9oOOJ#d;f4NWU)B|_ z42EJegP9}KJ4Qk}lSQR9snzOu-*SlGpq?8X-g=`i7|lh~`epsjM8O-XVb_M!%qDpUPQW&7Nt?-Ndca)CAg>V zsyFJq=g^_g?eMnm)wfsd;4$uQKf^!QE<6742jaKm7{l)f4+4lMN!*I0un2zx;BV-{ z-vIa<0DlAEZvgxafWHCoHvs+yqFrj$LD&FnVvDRI{Yn}d(Jv=Flhmt>BL)En=-yJ> zc=42d@Z_=hd8cjV8voPj!iLEn-k3P!gu2P;tc;%6TC-Ng)hjMkMw|20)=cLmei+nQ zW1l|2>HtD7QXQQxp!0?Q1>fq$JBV*tx_rxmzFWF|x1jG9^xcBKThMn4`ffqrE$F*N z>U$M^*TeQnqoGINLu6e>Jw$!)Dw5Ldg4D~Uh$bQBh|u!zgOeAouR4>}u)h>{S;JYc z!)G^Zjm~;HIaUd#hE`^BD+Uv--S60J6b`yJoPXU+W&K#%R~pM^$IE_&#-K3FY7qnKepZeVce zNG0)r8sJ##!m)-sYk*@755u*Hw1Bh+X&(~t06M18|vuaff693j-m`NsI$?3qF>ly0T$?%Z%X(kNyf_H1n=TV2*;^VU}O zMq0Jf1EGAt|&{q{H z2ig#I0^-Xmj0uT*aZFTzkP2g>!kDNq3M!1L3S*+en2>^icK~Kl&}S6%Dbg2>3Vh{A zX{097G|~p7-AET9$)jSys1OkXW6Kzflsvbm*`E`JP=dJ=^wl~R<}_8ql&niui~M|G z^1_WEu3FevN`Sa}ys4-~B&~6gw6eJs10rczT^ldlKfRQ&%x00SW=o4?^&f9O#R*h*6L$YMLsHaQpxX?5fZMt_Q{JwbH=TCIY zUeXJF$t0hkbEF`Ot-TDsMrv({o&CRSEw$8wF;!ddLIWXpNo_o~-F8Gs&@Z+HQek^SvCAdPde>E)7vMx(UnHBIZrdkG->30OerJ~#dPW)C`!xx{~hz1_>dPl@lXy@@o$2EH9#{5IL3NH0A4?UwZI20nZe|3mlF0?T&( z!apc_0H%ntrt#nmQV?c~X+V=Kv`J71)Imw}u7X0UppYskq>6S|K_OL8NEH-P?NUe; z6jB9+;5`_LL3)-bbPyCe*rm`xQ0O2ibPyCe2nrnpg${y32SK5Oc+qkA7Qy#u+#(pa z)RJ+_I7N>^ZyJUZBDk)Zq-!*5Eb=ypH?pU3W7n@Ru2Ctq9Amz zvkv-^Gm@}`vOa^s6}DR}ny$OyQ!2GuWlP4xdVjgvmsqvNlN-s{+&YU*r!yH%I%m+P zbtg;SU_KSMTOzp-f}RAnrt`F7tMFHJ@JwDk1ho{-Em0Z`LpGg)BZqi&3I;pQX2fpB zQ8(Z&vVz7@u*>pz%WK&7!Vo82n=HchA{%e7=hvL2n=HcpumwBc>=F|1_=iN zknjxNHUqfN0PZt@`wW^j1Gvus?lW-N&A<&e1J~aS+=Vl62hK1Pu~ao0>PAWQ?z)hC3Bc;1tV^%7F{=F(kMZN?%GP5WMX**mlaRpPT&X^wQZ7ku$!3$ z;eg7ZwkQ=!1!h3HY+`)ZM52`&n)eCOZ2!t|q}I1<|Jt?hI%jO;oSPRWE=*g4duHd} zbW**t>C*YR%Qx4Ic9$;PNE$6#uJQ%E?LU|tCUvAb8uR&Ly~9G%AP5Tl*XmqakGr+` zg5iPra&LAx5f1H{Uwi$|*5Fz1Ic3}1Pc9}xK4-AF>8%^*-m<-~y6Muncwa7}3k57L zqe-9Hb;^AECVMF57}+u!srFP)o`XM6fFpznF9^Q}^^ZYOAWP3dL~gP^7Xi^Kq1D#?FDWfi3lW&JRyDxS`i6qy93jcx#20eEB12%89T##RLiK|QRf0%kOo ztT&)iR4edP2oD&Ys-CIQ;ke!8wJJb5`AT0*NE&vuVB z;x*fY30u%?*!Jn$Zr@__nYDh$=v8lj|7N2lh_fn1W^6;5{e>XzUi$b^QV=qd62dhXu3MZLU++F&$MbbOU&r%xJYUE2bv$3k^L0Fb7fdpeo@Zr2QCEur zv?YKzh;o4F!6oCp3u9xDC6NJjJqVx1iFEX$>~AWf4gtc7;;V=nN<YV33Oc+J{tSX13YPHQvD7CKhc>Ka&|*U2%9z%X(%qZ+&y5 zIh*5Gs{QF&I6qwt1ns6HA2Hj4;rdhtR@?}$czXKd-crKd{vdB`T^?(soHX~zc3u!} z5}tyJi+LKsU-Ah-&nBMny6iN750m{NWFt80GXZV_G1DT+ihi;s)IQ2V?)>J~w&gv7 zA~(CUwe3Qi&yu@%)yivj_V@3+X634ja~7ZN!Z>eizIfThg&S)lL+aB5@xfECJ7MK@ zy9eWe)73*GL`zX*KLBpIG3&h&I(1pHdq~z_A`;TF88psFSDr~O1P|l`<1iT|2y@Q z7{_Y#vkcyR?m^5Tr0HQ6^h1AUk$z}yPgXPSVcC3)dJJ{4#^q4bwK`#RSe{Xa(GSsh zkACP-FUuHRMxES&I#C01)N8O0S6i85de+KRh`T3ZWVHg`hB&y6$Y&I;M~?(eO0C=3 z&XlODB>@pmT9w{yZU0hj_>0-@!&LMy9~W+q8oa7AyInp@=`%RY1~rd6&55ri%?>^p z1g=ug{pfj??KwmLH{%mK-5R_RFj7~j*_nBsLyr?Y`U3j zIppl7x(4-(JdOk;JCX}rmA^`dC7yb0Pi_2>fJwEaqc4G4yZt+^dqJ4?65XD8x>Wc_ zP+^t5;{dAxb1Cp#CHAg>hSZP}hY6?ef+0lK_LgEm|+!C#RO*%#Z2Kl}C zZwE~dwbsA3(%LqYlPG$-NYR(9T5-*;{{CIptXOkR(GE5?7qpwdY|yLBme(NdZ2A$1 z8ng)JOW`?;d!4;Y@~FUtgGL&F@r0U^WwVOr8jxtDwJ4J`;|a+8D1g3Ed>-{pKwS@h zM|C}Jq<$*#5S3<>0!piVY)2Wuaab<1C`lL)3DNli!KdDksUc<)VQ>s>h~n24>l$!L z7~?MCYqj>@hK$bkRd(}W`yVxv-EOLJ^`P0#-{dq7ac#|Pw+jb?08#s|+yF43cI0Cw zM=W7NOC5APyy{t*@CJ z&g@{?Sl=+30DcHR3_8q5J~Xm0lGJ*X@nxsY3fs*NNN9-<+=p+@(0ntBPvk{>Ao_06 zs8@g%G`baxv{R;avaFNIfHWuvO1E4RS<$tWe4If^_toWc0wtl=6xuCnSSpws;UJTJ zylzsoUUS%cCD(#vyB9v|c3SMsv5AqoB{n-foeY5wwD9Z24Rm zp`mpi2iz?ep`HgdKj!R7}OgRE0&LXxZ>C$;dYf$a8I3ZVp0pFA!w1#)dOgS zS^u%ra~yqGWs3k|1>v{`Q%LfH+o|VHXqD)OguUqdF*x25>?)no9{IgiXEzPC|6V0d zU**5^Uc${TP1K+kPJ$)^u6N`kCVTJ#v?77%536KR8qfM-nFw5lsZp*QN4jDSZ%45*H$)ybc0Pl0nkBDEcOHVwX+s zmc&v-S=6%ex`c$n3Us6$|Bx-3LT`RCXm%+Cn+v!Fasn?23t?|h;>h=9_7OPpLE)q5 z9e866df>~DKn_U3&jXbBe2*+cDY%VX13hS(1xTTSO#m!evM2Z;J$#TtK1d-Sq>v9% z$OkFpgA{^WNwS0bAccIQ6tdu1vZjjmgaq`jL|6Yx;En{4H39uA0sSih{VM_eD*^p0 zA?aUE*;3~OjxgC$%B+CP;^a}Xhbkl~CA;+9Qg)!f`wJNo)|Ts7Lea)h;S@boFzGl%^C^bm? zkVIW`>FnaD1&R7CNiNc`BQkFz1&2hRnQ-J7$|UJCjH!eSmxQg->>4h4x&5*{p->N* zZ9AIVm*+ggXKq<-bZ&KH@fLZ0MtC5?hGrRA;7}Ggl*Jpez@aQ~ zC<`3Q0*4430N~ZAyc>yZQiOj9)0W`+x;z2kcuTG7DQPa&osD?Hs#Zf?Qqn9MlNA|# zgiLX+5$@ammbuw0xA#@nUog?yyn5xDEv?*etx#%x>AT) zllh!quzS@8Uow>lyc%jr)_^;KSp^u-zDl7wy%Xv5^1j#- zJmo@ZeyrtBScMN5T|EQIV1E%Dn4*H7Wvz$*X66u*UQrb)!xB$tQ<6%lS3udje$(0HJ7W+4%Qk&nLsXN9!0NXAkdEs&qK~m z9RlO%;!=Vn5eH$4QEfn^rFya!Ru1Y5N!qUN>q0$2+$E!-nSeOc>usS+Fe?r6W0YG+ zT$&;ZA2$WehPFm;;Xa>NqxD$tg>JxYLuUI!RxcL42q%63W;MOptXBw%_o)(L#}Qe( z6i#c--gyD0w;zHC5VM1M5{Q?^%p=cqW8x98^B}Z*$vYnuu~qVH5VlJCi&T<^ zN9Rbxqw_uJ&!YF<)|*D~Zp;P0J&ZD8DP~hTSr<=4gc)hzPu+fwz_fm zD-z{N(w^*lL{$_YP8vZ(E}Jw4qEh43IL*px1>CBaBJjH^8F*NAkXJ^Ol8P#%YDOy$ z7kUd}Z@OISF>=?Ls%v$p(e95xZV`(c=uOfS1xm zJfm#Y>;V;bMYGvV#BQ@kviX9;nocGBRwwrrdK<;CpbXeE+%Rac2|SQ3X9M;?B;Zg9 zO0HC?xGG?)@#vJn%$<=;DrV=NcqZ-vB!>VolTA6c>(VRUxOJd*;#n75SgT!d;hAe| z!t}ly-nDOy(gyv|Y6KMd?AdQRd-=eo(-wvWy;)<@Dhwt)moBRnytV#}-J5#(EFeF} zl}e*dgfKFN1rXkawW9~IhILxRktyK#(pk-v6%YpWmdAvN1xeets zj&~3Z#4{xknu~#}6pw0FY5@Bss707n!CBIsB~}h&ys}lHH6M~qIo1$L9#IGRJ^imGA{`E$?+;z>B!0)P}U|_F3ab~R!&sK zyYyNOuTRgy2-g^GrnpM4$6cT@z*P7>U^;<+6yq(e4WJnB<7tpgM})aVi$sG&i=@^O zEa`ZB2`vIHgsR7a%OhG%7Qtl$yi_8L`AY?Z2$X7sdsF$8pDWG!eEWrP!l{f`T9ue! z0aJOoYPOpcp`LOsOn?NgiCu5Z%$J2^Ypj(%+Vz>$(-oz|_nd4Wuz4Md!tnCZ0w6)X zA}Mf-@Mo~l2zZVQR0=gr#3c**jmR3YZnI)$jzFatk1ZPXxC(P7u=&#+`5dpdqr%!` zz@|6Ez3rR%PuhBe$y*Ex=S93nHvYRh;RN6OB-{k5_iE{@h{I(sBM#OGp(%MY6@W2u zIR$+QIAoJmg5Le--E+@*2qFEA@8t`;I<;chg6GwUJX|XrA9<*%Bg~$=M%vF0bBh#u zhgyOPq z+&%Nl$zSm_-`2jB-`-xJJ380#8?nap)gw7o@c1_PjqSbs#*u*mg3LNW!5+nUh_R>y z6hs1xU>PTESOKLD5iv;cm=euH8&*IYRzMr3@KaG6RzMq8h}!UCEGkVwBpCwelJh`z zBM5>c6GLA%ij(qY3+%qn|kS3+X<;tS&iSh0F5+zlOd=6njBQMG!ucH)n z52r&4p5+!UkaEVaw>V=NXKH>ZtD^zeAbm8`| zthwo?Cm!&aj2@f5YUQPL-lGl_2P00k-lDf8!Y)&|o{su^^3}L2;WNj*{%|U4)aeJ@ zkx<0-L6b!*7;J8kC9`+_#D6aw0cG~Gcf-*Kou6XXB`ZD|>dZ(qqqGAd>DY<76LoS4 z1~3<(bEMh?p!vg{C~5w$YbBOUol(L&z&a}O!u%pGameDuSX8$M%AUs4g6meEQv!O! zaB3}1E5pSpe{3|$O%9b&p-^fji_7Yp#*(qV*=3=8$jmMNxGObU^m%(){HI`jJ1riq zQ>hj-x+9;qXFY0fuxI|X;o1q!V0+N&kJ(<*+ARiOX;}`ZL`^;mzHkTs888607VtMX z;)r^JlE*5DUIc-eL7-j`)Dr||27#GDU}mt3nL%JCj2`6E@j!p1UX$I4)+AA#)*WzC zEV@cOkmxwKH0iiF$vp1&FrqH4c?seU3WKB1OEtP% z(orKsg-ehH>)pDuYXYIG)yNQAqHtM>GF|+;BC^A6zxG@d09_wRWoD_MByQk;Q3i#Nd$AB z_mGk;c{in5p9;;T$*T_ZL*hLEdeQ-MsV@Dzt{7u!NQ=tn#$;0*c4ut z4F%F(gX#%=U&7y7H=xrOW_v@iWxJ=UCk{l11`LTje}_Afcd7cYEP#WFGkz7gd7iD8 zyrYuUioBz0Br-fw-9=XPrE6Vju_$2z^@S{cRHqxstF6UD#H4J8K{c54h7h)1Ut*ku zOAzZa!<5mIxt_&yg1akWT%&BgXb0sL(wIhTPVX=IjRlr-3rhU(+&f^0zfl+}abZS)9&- zFELc|J8T=bX4$mb;&tqBB(YvdVQ|MBj%3gw2zpPHf3!!*jb?vgD4rVe z1oBv`WK1tBrJHf<={qvjkVU1mIt)Im!Q?Lt#zVcX_M22@Pbw6s#GNB8M>r6)-s+5% zeEwqG>5LcszEVt#fuK2oRd^YgglJ2|lFC?Q0Tz)gE{j-1z#_8&{EDc6Q-(lI1j!Jf zssopyx(+vlkVsFVl2|g8qWWaH=7UiMm1SGz5;^ z>NN3BN^Mo^+h0MDKB8bd&vwl0F0{;mZ`Kci0d@6cGIuM`GBRF8z_sCZq)1U8+NZ`% zG!Ej*K|))E6JoKOTSMz;2*zEPBivcnQq!D~$S^mN^s$61F=KwZ7JxhwPKr3)p%AX# zEy|nrWsMb$u*RVX^=%sAzl0nDVIx45{~8i|oNbqOUXb)5dN!lyniU}q8oava9Vk(DG=1`7`ID`fMODgEtMcj6AGNu#ml3ptx0p^;HxH-{exo9!wC;!lfJyGCR1-RrUnp?q&W zZ~Cy!C6&=`$~@u3qNeYJ?1a4d+%0AY5CZRq!mLn0rf+0Fk|HFe9SjPf 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 literal 0 HcmV?d00001 diff --git a/data/fonts/efont_serif_b.ttf b/data/fonts/efont_serif_b.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7b29c20e030f795a1f7543fd4391d30dd685088f GIT binary patch literal 55620 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 S@sr^Gqo^gaiDfNl* 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 NmlEh(YZ!v59kPre95{h(Dfk=s>h#eIy zSYB+eAy~i)3W^;O5G=2XT@V}D`G22#?`*OW^!4}qeg2!==bkzD&b{Y6=Q&S5XBcOU zxdC)6xpeKCMHlpJ6&T~~sC{O|nvUufi@T$Y2~K=ozJ6la>?=NSX%e4zFs6Tc*TJ2K zp1SnmAY;Z6#zgb3iw-B*D%{B|O96zvht57|i+=2F_`DL&Tyyr$3lFgXGcjhp6W5(* zpL^-vKdorpjnAKC?8>|M?LK(PZ`b_gS;k(sgR#H|_U+lZ`>~a8dzi8J8gYO3K2#Y0 zB0Y`IBlw)zcku8fk6kp_kI#69c=*7c3(hmW)v|=K_dSO9J$>%^yLPU+>4Hx&_JQO0 z{F#G0FF7Q{b<9rY9qT}EFZT)vQ{J*}gG^(HToiF)dbP#y@BtORVDD1{R z#%`QHSJ~fz73C66x~mz>kFZmJhc3O~LdIG0A9~^B+({M}f6YbZDrd^en3et2*kDFx zYMcZOm;ueq0%&1YKr6E~USu|A2edN>po2L9oy^tv2XiqupqqIBJ=UF=|0v1^bu*5n5J6O5#94oU5 zV1-oytE>iCW1WpZu};l?pf z>)8gt4Qv*0mTd&w$Tl^8$u_agfScJCz%6Vm;8wP+@e8(%Z3o=Wb^z{RI{|mHvl{=y z&SJX&cd^}oyV)MVJ#25|=WH)K8}Mwl4{#sb54fM5)A$)XhaCVsz|I9cmmLH=$j)p0 zl%2=U2Rxr00zAZC(fA2_1-k(70(K$bh3qikVRoeP3_HRu0=$S_40tiS1n?4eY2#^j zDSIX0E7@g$m$AzMFK1UYe$1|5R{~zit^&M@T@83OyQc9JyN10A@Kx+uz-!s70bk8t z(|D4-hP@W>wd^{;>)7>x*RvZMPp})8=?2YVAfNx^A0p7;m4ESbtd*d;7J9`V@Ti9Cx-^$(w z_%`Z2ZKEOT*_(66z;N9#)jqk7zu@3`&n0*BBBkZGqA7%g5_%{15b`Rh^ z>|=l*V;=|nIQvB7TkI3;lYpOOp91_8`)|PiW}j|6%0A7G10HAh0^Z9`0G?p?HNMI2 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 literal 0 HcmV?d00001 diff --git a/data/images/icon-win32.png b/data/images/icon-win32.png new file mode 100644 index 0000000000000000000000000000000000000000..5d86b533f09d248aee89305030b367f625a40946 GIT binary patch literal 1271 zcmVWdH}#1``7t64M6#t^fc42XskIMF-Lb69XPC%@)U|00009a7bBm000W` z000W`0Ya=am;e9-bxA})RCwCGmP<%0XB5Yi$s`&RHJbPgM!7z!h@fB+7edr@>&5SL7$lvdBy`Gh0SCq?*pKs6L0M*^LnpQG`bni^8j!|>|*`udmOq`Rc_@kckZWFS+g zm~7DoaX-ix?nr@r;Zez&me*x86G>Qn4Q5Z3YO|_BU*Wj)`B(DGSD92=(WF6^DDZIr z5laY^QbhVf)X8LeKd5{kkPc34p@@7Dwfy?K{Dt58*`|6PzE4?PBl@Zl^@!4ip&ysa z70a4-aX9a)b~e>HEK-VcLszL-BK?4)+@zw@1-X1;Bb;0ExJr zPA3bgB!Ia3Jp23mySlpc!1MF-JRxLmZcZeT6PC&)eFP{ zH8wWVBz%U3hV-)wmgoVj7K=`w>+9>quv%GJxw^XIn5r{|=;-JuaXULZ*Vfhm(;sIa zmWow?2e}gza$tjc4f7S5@xg%#X3@^hPG4Ui+32}_J@yMl$CXBjD>FSkO^*4~8{R!0 z5A9{)^?DuK0eOPVq$9mL`ULm76cGoqI-P8 z=tLn7iB1NCgM)lBQI6PjWQ_^Nosf$I2*K&cZ@!Vl=H@0^0*q{EHRJj0>`dSl0}vj# zZf$M#_VyaSg{G|DA%U5(ySqy>__u*@kB^U!j*d)!%f`mWPEJnLJPU}v{Q&^l!*t?Il<@!n002ovPDHLkV1lKNUg!V- literal 0 HcmV?d00001 diff --git a/data/images/icon.png b/data/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7752881ca680e42cc8a0764a3f65c27258aa0d92 GIT binary patch literal 2279 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 b_)q8`27ZO7N?4HV00000NkvXXu0mjfQphVQ literal 0 HcmV?d00001 diff --git a/data/images/icon32x32.xpm b/data/images/icon32x32.xpm new file mode 100644 index 000000000..1c41607d5 --- /dev/null +++ b/data/images/icon32x32.xpm @@ -0,0 +1,49 @@ +/* XPM */ +static char * icon32x32_xpm[] = { +"32 32 14 1", +" c None", +". c #000000", +"+ c #FFFF00", +"@ c #191919", +"# c #7F7F00", +"$ c #333333", +"% c #666667", +"& c #4C4C4C", +"* c #B2B2B2", +"= c #FFFFFF", +"- c #CCCCCC", +"; c #E5E5E5", +"> c #999999", +", c #7F7F7F", +"..... ..... ... ... ", +".+++. .+++.. .+@ .+. ", +"..#.....@..@..#.##.......@..#.. ", +" .#@#.#.##.##.#@##.##@#@##..##. ", +" .+.+.+..+++..+.+@+@+@+@+.+.+.. ", +" .+.+.+..+++.@++@++.+.+.+@+.+.. ", +" .#@#@#@##@##.#..##.#.#.#.#@##..", +" .+..++.++@++.+...+++@+@+.+@@++.", +" ............... .......@@......", +" @@.......@@ ", +" @$%$..@@...@ ", +" &*=*@%-*@..@ ", +"$@@@@@@@ %;--%;==%..@ ", +"@....@@@@ >*&*>;==%..@@ ", +"......... @-;-**$-;$...@ ", +"........@@ @$#&%>%;>;-@...@ ", +".........@@ ##+#++##,--&....@ ", +"..........@@ #++++++++&$@....@@", +"@..........@@@####+++++#@.....@@", +" @@.........@@+#$+++++++#......@", +" @@@........@#+++++++++#......@", +" @@@......@@#++++++++@......@", +" @@.......@##+++++#.......@", +" $@........@####$@.......@", +" @@.......@@@@...........", +" @@.....$>-*>$..........", +" @@..@-====;$...@.....", +" @@..%======*@.$>.....", +" @@..*======;$.$-@....", +" @@..$-======;&..*%....", +" @@..@-========%..$*@...", +" @@.@>=========>...%%..."}; diff --git a/data/images/icon48x48.png b/data/images/icon48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..05570b1ec54db415858264808844326df9f45f7f GIT binary patch literal 1994 zcmV;*2Q~PKP)TfqlHat9*^f*yl=d3 z66Qco;dw`iD|`TzND62eMnQ@IGxz{0A&rfV5)20A)TvYA^?IeQu1?z8+T{HC^U~7N zBATWpg?G7J5hg&1Y|d4zvq@uP<1x#!B!Mkkw#dnoCnXijmMzP)3*P{$#x1;Qnzm9( zJRVPPV$AJ!j})uGzJ2@b!NEc4@9!58kuzt`$Y|`^wJVbX&j7P1au-C?v{(jWsg4%( zdcBi@$^wW>XJ@CZSg}GDEm|ZZB9>)|ZQBwGg^~*F-Mcr9hiRI3;{C71`DBHb%FHy) zw{6?bDO5BXoiaE$cmwzXa8EAbD=RB^8HT~)#fw?BYL&xK)7Z0T4}QO&-rimSE?>T! zwlEfpdE?!@MoRk_i^VE(O&*0RK+h&TKr|ZtY)3~28#iuD`*`~FX>?tuveGf`(W6JR z@lb^dQ)qZgM2b+nKbx@@l7`281ACq`<-{*c`Ns<`={fd@y!wZ)NZ{Gk(%&DEOP4N5 zdwaWxh#Wa`M3hq5cs-kiM`;Qqny%|>Nk60V)yG^i(xHiTD3K1F_KFheP%_f4$$wt_ zm_%=Niik*8SC`b**5=~z9C@OVmhD3!uqO%Wq5`TC1=# z?7R}eW5)R2$~SOnL;1+(^?`%}1v^V7xLmF$oM8W>Q*jTopa-M`U<-xJoI-)m{Yxk3XXE@mU&*;jC*Eg3nvJ0;4G;&YThd zy-*CPIev}K7c?q-7La=fEYW$OL27O+o0k;^n``7>L>hvSvLwj!=Fb3jTX&JDTRn&n&!+{EOrIR>Ge6G>q(cfbLKp>E-?kS|*&qQ4{T`m`ZIhu)5D&wUkfrf^LwD~@tPyBv= zA;-y%_h(F)5}6oPS655w74jX}VvER$S5BnOudlC{?c28(v;!#@ovBPf88k)#rIc*i zv}vs9F-wNKuF7!N6^TWMW!}7b$u)kzU)tN-#pm-CbCebUWfLa6QcBjXTPNXgc#QC| zKVOic`+g#pYLf6hPs^WHe^Gw?qo+hunxK>@rDW^Ytp^7cZp<44pcI;|@wfZhS-ffzYu9{|8lO#n=oUv_ew8Pm{1zUM zhku^= z`ebVK>*&EZ>AkIU{QMM_eDilKd~_*8LwU>WW}L*fzhrN&sHhktJb?Aj9{NuHo7V{P zrV0_12t8%jxfTjy|52xA(tr8#r-qq18LG=IR(yI8-Io@sb0KN?k`<__smVBg^Yx4T zzUm@#HZ5oM6DtT`x<)^@nLN!;&D3dZ32fvCyMN6C({vtwu#6|Z`*VJ}`$g{D$yoBl zWlnDV2yh#x_#79K4pm!Qn=#(UhKA+#&9}uC5j(^8rluw*0HCC$rA3;Wnncs}%sBuh z{whO$`Aqqhw!oA&Qp$^xV`(T9A`*#=88=)eXfo)|rs33f2 z<>Z$teYo7x-w+=z_LXoH&6IZd@ZqePHyaW=0EpM?9b@&fva(z+7T*V!1NV$;2LgeB znfm|W!GlH9uu`l&I5?Q>8-~Hcg$p@w-~daOEJTMxv+Ar_v!u1PRSq3GB(1HjGI#FW(TS}Y=b`JvKn>1YQAt5a48yPzOxCPf zQ3PT@o8t6|QoCu4hz9qezuyC^PyKShu c`2WKH09fk{L?U`8dH?_b07*qoM6N<$f*lLIk^lez literal 0 HcmV?d00001 diff --git a/data/images/magic/blocks.png b/data/images/magic/blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..014bcbefd2b5fc4c78ca7fcb63a4df957b3694ea GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3HGb?#A2&Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG0wBz|R(WqJP>{XE)7O>#5(f*r7>iNYnn<8ff~SjPNX4AD*A8+uCzk@K|K6;5@Q&>d zNoGyvm2a7=fA{=*f6?~mt$(b%OL&&>OkomLF<>=1#8+?&XcvR0tDnm{r-UW|(~3!? literal 0 HcmV?d00001 diff --git a/data/images/magic/blur.png b/data/images/magic/blur.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0969716f513096d5a1c4bb184b985c7d1377a2 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3HGb?#A2&Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9GGf*{OTpAtV2D9B#o>FdgViGzh*obBlRKPEt-J)SO(Ar*7pUa`z$aujHN*q=7B zho@0FiSNPe-&W5!`Zfp%vCLp(I;CWoY;suaivHG+yRoaPs`gG$@tmY`Qu$@f#xO^7 zx7c%fkF*}GTK8fr%eN0*<~F85x)JQx|8))>!WPvHZZLfFpNT6o0t%JJR6V tpAPYj_q~qP-+439=CAo=kmYYJ7*t;y>}s!7_zCm}gQu&X%Q~loCIHG9dI$gj literal 0 HcmV?d00001 diff --git a/data/images/magic/chalk.png b/data/images/magic/chalk.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7c2adeaa11d13de7f1a72507036a882aa20e65 GIT binary patch literal 786 zcmV+t1MU2YP)i+-nBsVaF+|!^rPU=N#RyzQ4ykoF)1}-)UC^X97-o zMQGo?Pwk$G&=G^)ur9D>%|mZV{a4^~uKQc_XjQ!_ad_F^Gj7PsF1c^|=-adxO}K6A zY{087``K5XHG0sNn52SbKlIGPkk@=@1e4xxOS|bim-RiO_5TvHioR6Ef@@~n(6DM> zQ{bVf*OZ66WX1>T2m6}a9@uurdGGkqUayA7eyzxOQeXjJ`=Zs9UVuZU6@7lRPZ(B^ zl~eMW&DLQrz;3^ajFcz*>07m4fhYZvE-E`OtL)~XUoXIueo5m}5{mA*b?Eo_z;3^S zqLhSjH(TxK4S3Qots*0<DK}#O(~0u#0=Q8XdW}h1s2VVdrIcS{EbP;n)Gg`U+0S*lT#4N*|FSq z-mj!-yUnj6C8^x)*ZP+ubp#s5Try->#-b(bY65``cfFuwNgYW=vo6TF;uF7UbOW0P zJ!90MBWcN1Al_yiS#J# Q(EtDd07*qoM6N<$f`H?B?EnA( literal 0 HcmV?d00001 diff --git a/data/images/magic/drip.png b/data/images/magic/drip.png new file mode 100644 index 0000000000000000000000000000000000000000..39553bd7d9800b153c89b2516be6aecea9e06fe5 GIT binary patch literal 523 zcmV+m0`&cfP)p-Rw!1FGQb0!0I)|otzgZsoKlmxz35cbJ=?_I}9e&RazOs5)Su_>#b z`s9{N;>@4>Q9;|RY7Z#4e92MQJ=W56N6EJBZgo*)*PdlBtXg(Wa34e-3?4l8q3`!V z)&4Qe2!f47f5Yc4@Zm7vsYG)Fl-=m(zKbj*`s>|ITbjdwf3)M5l}vrhRw9}aw9R8d zaI=$4Udmj`KO(lC0j6KWih={+IG*L_oAb8sH$);|GaWzr7u4wqzJanz9+y^7QCH7o z-?*EIYJysJ;jpJxP;}T%CR<8HE!megLa#(ZYM#8xHqDOK0r*KoK~#90 z?bJEZ^Zb8$cwwC7Ppeo!|z?b@>L@Y+z+U^O0L`_{w z$C9SHWY#|md}Cn8j)7Dt-d!%yv1U~$fyd~Z7X$l_e03rfebP0MiE`A=BwjDl1vL-O z2afZkemHcjFBe7I4h$v5Xb_9!BTXyTB_37-W9fTj;MkE9sgbDb(1A=W&C83+2@+3d zfo0q;L#D6iyPknuUf|yA=@r1SzozC%^%;)QQ6|;bcdBnFGb(_wwD3Foo==a;z_9I`tXOV#e-{F`97yF}Oq9*Z0}6s?6SbnMfO|8_I8~TRwd~e>z=2S)nMG?> zmH$tVEzSo_W_|-VEKhd?u4vB(Y|JS8_I(u4aNTRGg2bNv`GAk?>KdNOJgzA7#b+N7 zG_1@Ayr%80yri@ZWs_c3G~ck|`YM6<4Go=^lno=~qOPu9h37(GqNQc2q}H))c_>@9YE!PEBZ>-j3)6ueuR$h5Nu1(c z@Ivso`!IgWC37~0oKGwmpE2#B0V6qC=rlqSIz37Qz2CA#Nyc>*f zd0smSbD~Z^m;`*@i*BA+&#uLx5#;?=W+zSCHtorOFk(Sq9}+mC55L+ zz~Is7Ql)n{#~!e4%ch`|fGdlmzKWndgzKXpB-OWi`fwd-jlu0C;dnO+EQgCHAPWJ-Ile% zg;v!Xwbunv$L@^Qy7j!3tM}?|I1t?(HTCb|L)R0KeU+@J+VkObYFFDI(XXUam!R8@ fMRDdd|A+npXu;k7@!-Mb00000NkvXXu0mjfm~;od literal 0 HcmV?d00001 diff --git a/data/images/magic/flip.png b/data/images/magic/flip.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7a1cd5cd491f6d79856f099a454990b03b6183 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57IrbSU$K900)?_XT^vIy=DeNi$i<+@;W~T9@A#Wx zg2BE2yPb4vW;cCVC>C2HG2Vb@1eibd3e10347YHTF%3iW0PBUJT}W3D*8uQij1 zBr3|@@uZq-ZfFU#J>@Nh@d{tT?^3aO#GdzyPxq05*o=~wowDK&|G25E>bSq)KWx?aC;9sfHB|sg9nWlLvs@bX+PYQ5D&+ zsd@0B1Y)xuH!Bt@Dh_vLPZD_zH{``;Wd{EBfV{rJL11Ja4~osJswi0*0|PB}eSezQ zGq7n^9_7*D?gfAL^qx~bqU!7zn6s%Pa?!hb+ERTbIc1j*0>8H42|Yy>M;!H)eX z!<+?Wsivl;mbTtb>kBUKzc&9TC37MjEiEl=-Q6Fnf!CPy=dff|1*z?w+WNBnT_&lp z<6DuId}OBGkX_AxxRj_c{i8)(!_8q8GG=i~kRD7}__SLspXj0000< KMNUMnLSTX+LufAm literal 0 HcmV?d00001 diff --git a/data/images/magic/negative.png b/data/images/magic/negative.png new file mode 100644 index 0000000000000000000000000000000000000000..bc95e93e1dc2585334cba4f44a7a73cf1a1893ef GIT binary patch literal 554 zcmV+_0@eMAP)X00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3lIPR3lIUVBfWJ1000McNliru(g*|x7#kr0j3NL40k=s+ zK~#90?Upfa!Y~v-pB+Hi8Cr1z7TURMrQRS&y#!0oz`#i=W$sjoxdUQouK+_?I#&v@ zJH)0TY7)m-?NFX%$->{x<0tkvoHGCgx9=8yVfwG86l2jDeMd zShcOp+#}L74KBCwkkdeF<{n9Ett3~s;B&*+6u;NHv>m0C$Mj?B4(h~ny&n(iQ>m6ZUpat9wbX^W)!56zDRS$$ zM5ydp>~+hRtq|hc%0*EW>?TuY46Hrot;=$4_1B9eNy-<@1;xf`Bct@q`DCuS&QvHb zDufsT_Y{SH!gu-FQJiy2Ddpo}F!%t-^PK&Dk5cN>%nvVEl?0Gd#!(a@r9=pEc(Bcq sQi?p!4`N;9yaek+ogUUf?99L63u6=qaJ-EP+yDRo07*qoM6N<$f&+>1+5i9m literal 0 HcmV?d00001 diff --git a/data/images/magic/rainbow.png b/data/images/magic/rainbow.png new file mode 100644 index 0000000000000000000000000000000000000000..d72c654e45b0a8b1bf2983ee06cf745942aec083 GIT binary patch literal 971 zcmV;+12p`JP)LUBS;;4#L&!(ELT#iu7kVPBY@A5&w1*bi$r$hhM zd1Fc%YVJtnC}eVljs>HS0>0~zNFupknN$);)x-*gOjk=+55=Ide+4djVVjqsP^Kc# z)#%TbXlTg#9fAB|z&-XF_qKUenM6fbMOh|M*wPUS^wc#JDxUP1ae*gX@P+e(z%fT0 zF>At66UY>Hid79u)a;h%3DDLOn(>U?s!B3P9d^PwXRO@Y!!akk;jl3k2aO0s%0f-K zKu=~)R|73|sX52&F(eX5WU8hdH1DG3UEqsOI;bheKEncp%5rT))=emD%QZBNIBK_8 zQ$t-%EKo9JR%j{0tdpL@x)hVf`*TOCGO<8K%?`QLrr3i0YSz`%-O#-BT&MIP^_)+l-RnuJ8rqHuAwCn8B(=b!T|^TjEXIVRr9KSvjQV# zRmD=N?|p2qgIH6yp`}nD(9zZrnDlfBQ>Ltnjc7@6*$$J!J~A?D6ipxbOze>T{iDWG zlvE7M^@K)Eh4mPBGp!-kgFnibu1qme_s= zOz6o)Dn?D1Htjc`x?)g;L~87Q#^e%hRb`u&+`7BM>o!f9Gpj06QZ;7CFFy3;wh;S6 zv7VuA!IFx#eCvk%E--P!bq%3$Gp2-AopZ*L)&p=9I$AQJ2&tBvezYMS{Oip+;(#e^ tSa#8^2g2?t6p4f=vFu{|EgERt4DDY@|NW_0E^@Atj$IVa=jm6y|{Tdx6qB7wG8)iYaa;r{?; zg$jBN88)O}PD@2e4(+1@^8$I10mI%kW=NN&k_auy(SXN<^4dZLeTIyA&!|YOAF(af zqW}kt8`82Nkr(MVWYoBBHB@Yfc$vcu z&&2x!0}XSoVMbM;*EyGEP5DbzNz2x2JEals&T7ZW4)VItl!y!)wBjcXC1o9v374?w zrn-hiRbHSi(GY8BhI^c>D>!KsMNgdYnF)_wx8%80UToeJW^HNM)>0G7=t!j!sWgz$ zYrjf`nUO*vUDn;yDp+KQ%aZK*_}DUoPtOG2UJ&ifKq{id+n z)MK+Uub9*8xPqz;>$?MiymWU}M`!0op*4O?5Q2K`Lu-cLkIL?O%6r>oKe{Ba;Gvce zTyepuoK*8*+>R-m?tr@zU3Si&wz||)_w-m)l;|7`gA8&83<`waGHzV2`~I*f**)}Y zmTVkG-3uUrya8u??X>&;G;2{TFQZ^vM{N6WxSiP0mSDsMAKCJYb+O2>NNhuVSlEuX z7fSPbbSt~=wvw!OO!{1(is!reJc2^DRZM%XTgi&LUZXC%WXdD!2W9U~KvJu!GE()! sfBx^pF literal 0 HcmV?d00001 diff --git a/data/images/magic/thick.png b/data/images/magic/thick.png new file mode 100644 index 0000000000000000000000000000000000000000..b09c2a8b19245f63826f97ce6eb517299195ef23 GIT binary patch literal 462 zcmV;<0WtoGP)FU0|PE<7Y2n}A5(ji(Ar7p}O#TrLT{KRP&JKo+ z$wU$cqJoAW!C(Lz-uF5{QwW9Lw@rux&okZOe9v=k&b?gfzf(`{ibUCM6^UJIR;=6Y zw0Yu*H-1WGGC?M_uBO@GdTWxVc@cA%fV{M8iyfCUyk3HLV94NT%rW*=TjZ@=3H4a5Heo3Q}ob7qI0?M8% zcd+Cq^#DiXB<^*Mqu2!2Z3;t zNyQzv^y^jk+bSmYM*x2qvli1iQET}noOIn()EuB{u?=qDY&;GgS~w@=s;BvIP%`Ix z3+RE5?jC=fdDgk&v2phe8gNzc*OIs1*^uQ=c&Q82Kb`^Pu^9dp?EnA(07*qoM6N<$ Ef?@Q=X#fBK literal 0 HcmV?d00001 diff --git a/data/images/magic/thin.png b/data/images/magic/thin.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5c9858cdf07d4c5e3daf25717076094536a657 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZjFyp1Wb$@_@>?NMQuI!gMSlAVHAJ|V}1PVR(ba4!+nDh3strv5k$kC7Y&!|WV z9&re8aya6on;YXM#VwvN_h`h8$W?1se^|VsfWJ|tL*Au{^N2;VqBEE83`WNZKkvUf zRQX))-tPXUddCmf8M*4_8qBweZCu6dUZ%s<^M%)^MJYC1Z_DRpE3zs-DE{2Ii*M>@ z)jMTr_2&+KyR)<8^+oGbVQW@#98D6=kLy*DSi=5|Cw*hJ?!Pj5Tc5b| zMu!C|o7Su|p1Q_T@cf>G#lEk_Sc=`*v@WY{c^wk}=j^vQ|xA&jf59DzcctjR6 zFmMZiFymU~y`?}w_7YEDSN2OBEbKDufjOd?K%r-zE{-7;bKXuhiguNZ%pN%G|g=(A2zLA)P01p8sv7y?+5a2fMfDu8haufIepMboFyt=akR{0GI`R=>Px# literal 0 HcmV?d00001 diff --git a/data/images/shapes/circle_f.png b/data/images/shapes/circle_f.png new file mode 100644 index 0000000000000000000000000000000000000000..4962bf134fadb01b94bc0f540d6a8e87a4366d73 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57ItZKi!Ym*fI{ayT^vIy=DfYSk+<1Ep!K1B=H%1~ zo0v}V_#6_O*=V|n$?GIT=1bpNO`WbE2kx-Cdrd6<{pDrPS;>D(S1n9dP+(!Rnq?bt zx?_durMjljFWfiwRB6eF3meT*V9D|?kB(6}8~e=c_rAj5t!{n-w?FF4eRE4{`_5wr zIVasay_jkJvh$l}U4L+tQ|)In7mJ@>!J|3sM~`Yc=T{aLdB!#StIv31`lFx;$ShaS zIPv~ha7lYX@t5>7V)M-6XS5$xFMG4;#cZL~FIJm}Uo8JA{)+WUgLJ^!nn{O&K4b87 L^>bP0l+XkKy*aJ<8 zrW#>8ut!vSa&}HK@*n?vYp@oJ|0!3eiOqT7tD8gm~oQ!TcF&;OseJq!g zLo3dvb4^=@1zb*M?yIM9OSbh!a5=f-k@MwTOGj41<>W_?%kHwFV?Tk*$(FtAFhMMp#v3b=7OgK zSCnl3x9zCk@BD&?`+jczpUm|W8}-(AuMGExo3NoNIJaV~cdlqtLl6XCyfNMzH)UJB z%{`E-a@o1OEth|BL2%}^r`fn6Rkx40Ah@xdg&R=mfc@^0C+WB`)d((VS@kSASG1!Q z2?h;o^2xYqd#+=+hw;2K8PAo}{_I^`zj`0HmjyLf3ArG+ux_L~H)zpa3N8qm=A$3{ z(R~W;&TibaXMFCs&YgOtrV!1+tWUlr;2LU5@f^H#>SqjhZO?Qv4$4jtQbhoLBXNsBkWeyP&N+Aj{o`Bm$s6ggl>7^$W5E8+cwo32hSb&A!yi4 rJK1h2`k-mUM1MHQSuol^E=7I;Z)Z|ooE3db00000NkvXXu0mjfT#d$H literal 0 HcmV?d00001 diff --git a/data/images/shapes/oval.png b/data/images/shapes/oval.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc0a84112b42a254b2eeb2e99d6bd4f45c30900 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZiFymU~y`?}w_7YEDSN2OBEbP*(ACw<80fp9ix;TbZ%z1m+kdHA?p#9_hHaF#M z*R)i!)Ncr%h)a6EsFb-=I3t!}s*_06)*$6du89$fk<;Anh5u9ksb>6HZlcE%d5^d! zwlf#*TNmOT-1OkhlNSl;sfqDR9gn*Rq doi17hjLW4gzg<=PH5uq~22WQ%mvv4FO#q%pY`p*g literal 0 HcmV?d00001 diff --git a/data/images/shapes/oval_f.png b/data/images/shapes/oval_f.png new file mode 100644 index 0000000000000000000000000000000000000000..a119b146eaa8ca7e58e23dd674e3b7729676c275 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57IrCv{oUdZfI_{VE{-7;bKXwY7CK}g;1EAUD(1pg z(U=C|f~Grb-8Cn1FA-m{!d2PujLss_FOxI9x?aAC-l~1?+#7Zg*PG000s1?N9{QZ? zRF-5DxVNX`(}IQ1{G=}*2vX8sbfhgcZ|W=SJ9EzcUn9(7e=XG0%5g=T_rw{D`Uwnt vwME|7e0ikL3z*$6a{naz?{Bb(Y7_t64R=JY-H1>GI*h^7)z4*}Q$iB}B>GvU literal 0 HcmV?d00001 diff --git a/data/images/shapes/pentagon.png b/data/images/shapes/pentagon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c03be310457724bcc4eafc132379ccb3b617015 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZiFymU~y`?}w_7YEDSN2OBEbLOMm%=`C1BEtvx;TbZ%z1nHBJUvufny)*OL^}s zmR-_(#kPcn{eW#(@fE)ZOwXOOlY-VcJUn`%U;NNS`IE5?w)WE9x~DmX+~pQotXT0Z zHjU@7c(SCy(;YcQCsQY`wPNeOFzvC~#MgJ&E?wWPdh>T*|Gm>~(#Z@ml^;3mtd~EN z+VePRqvm;sy$>g`-EufByLJD9zfXT_-B9@W_qU71N>lggryS2mt~BwmVxMc}KHX}9 iCR^ZiqY1YECz|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57IrDgzn1+yK%ov#7srr_Id3l=w4k=X_R2lFFymWp1TGUP|>c{6>E{k--HOihGl$_XCQ`qWsEV8J1$r0WO zjz`XMZJRSIr`Rj#-|lMFm#5e^S0r6d-_vI~iH~#q|xA&jf59DzcctjR6 zFmMZiFymU~y`?}w_7YEDSN2OBEbLO;d=3AO0ELV_T^vIy<|HRbur6*$Ilz(rcljjC z5JLe^ePPyP39O6R`lKu*cv2jbf~Wm-JE$SS%FM~Yxr9aZOXbDgK|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57IsOilH#?tKp_oJ7srr_ImrnUtcx2`4sfLZUEXKu sBO=+%+9PF=^|xA&jf59DzcctjR6 zFmMZiFymU~y`?}w_7YEDSN2OBEbNlH-xp~70t%UVx;TbZ%t=m=U~T3zND}?)zp!o- z?~z4)of+E&INf+|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57IsN_`|`>vppdqwi(^Q|oa6)v)@D9~B+Tc4Cg60Z#F6lR7wmW*0&-bP0l+XkKvZ5&B literal 0 HcmV?d00001 diff --git a/data/images/shapes/triangle.png b/data/images/shapes/triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..c637e9d5e9f43180cd9ea488c355ff5fa3632adb GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!2%?|T$vIEq?nSt-CY>|xA&jf59DzcctjR6 zFmMZiFymU~y`?}w_7YEDSN2OBEbI~{T^BZ11BKRkx;TbZ%y~QcB=2Db0oVD#>|YwW z7Ygj=kLln(SnKdhK|KASqEL5j$C1ZOhhKCj{&RSqfANL!Qx?8<3;zoO95?1%iFWIA zGBPMg&#Jl6=gg$=aYdQs;Xk*sV^+^O|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57IsOlpjC50LLHtijv*Cu-d;YT?AF3u}W$g-xQ*558T*tHJJ3VLM$< zMltH#eTya!s{lC#Q|2z#zQ@c(u6+vA3=P5$F1+=0*YnbA>#pBj|2hBOD?T0#lLFcL o$6c?3c``Deh%nEZ`O{3BbN8Y2-;dZ^fo@{(boFyt=akR{0HvK&hyVZp literal 0 HcmV?d00001 diff --git a/data/images/title.png b/data/images/title.png new file mode 100644 index 0000000000000000000000000000000000000000..5cea0b2572fb5326565e47167432c79ad801c4f9 GIT binary patch literal 80284 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 a|NjqL5%-gEDxNR^0000*2k;XDCP%= z$*xTZDHJqkL1&xUS?1;AW%=*5y5wH&-iE7mL53!xzB~=CDah>znkjI*qB`0>WW{lr zp=VqOD#dZMOyw$q^AxzMs46qjNrB5vwIs7g-$<6uUQ=`V#_~9BMZt7- rqTuW|>nmT(wj5ZW^^Xf#|E4|xT>o+DqM5K<00000NkvXXu0mjf_ByV1 literal 0 HcmV?d00001 diff --git a/data/images/tools/eraser.png b/data/images/tools/eraser.png new file mode 100644 index 0000000000000000000000000000000000000000..a727f0e0e5c968fa1adde6ae6769d155880e320e GIT binary patch literal 521 zcmV+k0`~ohP)7H&77@fIt&IfHQfw?lA&8)E za83PIa$h?9f9$y1Le^%$`XL ztRpZoGG2je1TNc$GjDBm8|hT-k5t=W4Vmp5d$HyI)6=z{-}9n>0mrdiwH}zn00000 LNkvXXu0mjf`R(84 literal 0 HcmV?d00001 diff --git a/data/images/tools/lines.png b/data/images/tools/lines.png new file mode 100644 index 0000000000000000000000000000000000000000..eda2bc5d254153261fbd08f66d01d125094db5ea GIT binary patch literal 476 zcmV<20VDp2P)1H_GGQyyFrm~b>NPx<(iz#qVAA{zdBZ>$gyXayR9uovZ#PROB8D)eCBLv}f=@2aN z=q1Lg2yXx=?&x8N=yGZ&bP>+ibcV*th{9utpy{l|ZsZZYbo4b0&5d!2O9lwSS-Mam z3&k~tT1NB@<*Xd5L^wbzQ)f*`mll$*o@pFn5ULqbS7NoT?}p87UAL(;w;|l^IT&Z z2!2ZQU8A(2c@AmMpJqj{+-NLpCbm++P(krxUxX~$d@)7a_Lgj1ruIenlY9d(Fp5IQ S>8Ixa0000Gzn literal 0 HcmV?d00001 diff --git a/data/images/tools/magic.png b/data/images/tools/magic.png new file mode 100644 index 0000000000000000000000000000000000000000..b64e4749bd3ea64e127e00dbd2502ebf331d70ec GIT binary patch literal 691 zcmV;k0!;mhP)%4*!o*I;t{lnks5- z+U(XEk4Z+WK*~N}%4&zCeHBRC@1qX=IvvoeWKEMKf;b@ScImei#UGup%Z4KsbsDy6 z*r==(-(>BRP^?8JE232?1KvjQq6?0CChN49vPO+qv!GzmMeCNW#{&ZeX=l9-TBBQT(XJ&t#bc{p$i*R3Mm*4?%T?XrivF6@K*o$sfk1y8u*W?k zCXMNea%UWj-sSJR&3F>xzQj4qyQxRYWw$HxhqYA!r$SuGcw=17ggj_=%(aI5k|zBS z2>dYF7}w!+nfYc%oT{jAJ><(u5w2c$LA#-AWQ_aVg1*YtIVJ|Sl@#4T?3ut7}JYazsaFz~mYwv;g&;tJcx{Q}m5W;_h1 zwiq|H+jW^V9pT1yimL}44X1X)^_}DD>HeSpDLd08pRJm1{7)%YVjFuh_FzTf-+cY0 ZeggVqzlmBN0n7jZ002ovPDHLkV1hn(Lzn;n literal 0 HcmV?d00001 diff --git a/data/images/tools/new.png b/data/images/tools/new.png new file mode 100644 index 0000000000000000000000000000000000000000..d81cf7d4c01ce903d429d744d65282425a1ca5db GIT binary patch literal 569 zcmV-90>=G`P)pjnx4e74^S$q#ynD~N{0~^P=TPF&-x|%@&=v&0 zB(|h>mHx!2WK~ll=%`u7LtT`09V_Sb6V4S`m3?#|m1ueGa-Xj_?tQ8*cs}&b73Yg< zOSNsA&q=GAV9r;c1+U`lII=nv-*f@gwd_iyzI&{uoyixXVL!v%F@dVoH*2QAl0>PW z8;cbo$1Rx5aly(+K8KRTQjWdftLzl}e&o0UwADti4_q3G-%H}`c&9s(e`0!IeNEaw z3umAtH8(Qz%+-PCfog1xokHol8S7@ihEA;Ero+PA8`pcQ8`9WqnJttKR!G;|*cy*) zjbMlWAv;>JhC8`_$?ozr7NxO<^U_QgWY6JAoT$WFCe{X`e5agnb@f=oFB<)IQO_=T z8Q(9bLt@-SxmVZ(Bam8FH1EnjX-cGmTd{^Mjm$Kj@>Ii5LD06RV$zut`xF&PPg=IE zA@pvVO?NZONXv_YmP0{spzg((3v|q_H;7FQAKZ?S{#*DBRvw`tEV|Od00000NkvXX Hu0mjfRF43G literal 0 HcmV?d00001 diff --git a/data/images/tools/open.png b/data/images/tools/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5599a8978c083424db868ca254c106bb66c8e761 GIT binary patch literal 1158 zcmV;11bO?3P)X00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3lIPR3lIUVBfWJ1000McNliru(g*|x9ub$0!nyze1QSU_ zK~#90)z@2yRb>5ON3SZj0k9M2rbnMvpmn{&R)Uf+MO`^SHS z7F>)gF$e2$5J&JQ_MwWK1|w)BF$&jXGM-O@9cagKbYeF);4}2$q7mjWAa23pB=8$n zsMMw+|=r5AMP` zyeiCBZ6NbUTqAt(I_$+7+>f{M2DUUK3s2#D;lxL909{yxnV3;}7UGmJ(=)j6Ov14! zKd36SenI{}jvt!6*oxnURyr_u5Qh=k+AzqyOK~{QC?5D(d}wd-I1RT8Q|-ikIX55s z^XV-;6&w;Kf{${3auZ^&<(@wLh3)x&RjyAf5p37M?RH@grsQ}@N!Whj#4GaoAO-Ep zy;FqARyH8^eu-EoE)!bp!^XP3J8>e3-dHba556poHwgzG2JjYXWQ?p23F1~bXj$ck0V~0U-oCwx} zWtAI1Ssipnut<9t_-NqAT^B`0%yCoUIh=cO{ig?LLe zkOzlI@I3q>%yes$eYfR#=Zom=6_un#l+n>5{jDp%RHU0Xhe)o#T2cNQVJyB9jmc)b zC+hh|5sdA42v;cO!7>hs2ptYug>x^jn=e|eZ}E=swQafgJGGM75A~hHTHGN_)myhV zUai_RLPhj-JtBur6!((~KEzcizfH~8w+g=<(531LPRB2}8z1M~OyR_Hgci!xqFfTY z^T2hY!@f5^@_@*1ht=*YyYaNsm2gIaM8V!8+Vcg%S#J z**hdOwiln`ClQE)Mk7buF7nZfcw96FMV06&z0;ipuNLMSmGdV{gf=D74t#z##0oUh z;5>XHwA3LkI}^kmw<28Nc#@hSG&fdsAkT^j?Ga6Av$k!>1jh(1w1}%>tH@PdBF9Y< z4nI+7Z8cs=@|_0ZS0jOn2!JZS5q|T9&`jZr4b#F%W1xF+U+H(BAa+!=`^(M&um2DJ Y1q6yisO{fYlmGw#07*qoM6N<$g4RI`7XSbN literal 0 HcmV?d00001 diff --git a/data/images/tools/print.png b/data/images/tools/print.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b5b4a096901c502ed179224b02b8bd94edf834 GIT binary patch literal 556 zcmV+{0@MA8P)IfDQI0li5?K~#90 z-POHr6G0RO;4c9!iWEShf+i)D7>P90E~rUCgGA$s4jv!{lps=&k_R9{5KD-Pf(|H= z=nzGSAP_4*GT0U|-Wdwk5PLU?y>y&uX3o7jI(O#I4F40Jh=L#;7(qwZ-G0*1k>wt` z;;DHzoEzY;Ii)wgyQ-j`V-xR1&&QWzQ>%d8lB$)FtBB@vY+X<-BgdNWIj$yHDJNGE zEa$kcjdF6V7x>%Nl#~?=?hP?@!E9N%YR=z3?B0?f4)x!(n2j;_F!5FN%C_wRenB*w z`OLTazNl#Hs$s(q>mHfQB3r&?vz5{Na7oZs^;tv9PvK9QQPk1Uuz(%A!)Kj;91`!G z_1Yz8Kt~5mnlgcqt>L^6)|@`r-KNySp*19KS+wYd=;}d<&jhKSo^+th{P>;K(-T$p zD|y}p_Z=IqvR#@1pbfrn`IYv*+F3_ksVUN`V1GyV42;Lq(2DW(col zEQg1%U_>pprphORAk@v^)4Eg;-f80OR5VfR?>#fu)wtD~(W4y6b;wk{tm}_J^3wNP$!E>=DN#fsy^nhrwWj;kZgjnlYhf0wU#3mxS@mLJ|o+_E@5 R+`a$+002ovPDHLkV1h?7$wL4D literal 0 HcmV?d00001 diff --git a/data/images/tools/redo.png b/data/images/tools/redo.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1486a0b654d40fd0778f9dfe5cac1779384fd2 GIT binary patch literal 847 zcmV-V1F-ywP))MU+5u zevvTtkmhkBkvc;)DB9|Rk;`HpnBrk|_9qWYypgMjgj72un5yr+W_?OP;GNSpcd0+BN$ZJ5xB_m07F%D z?z9_wt%Y&^3b~_XEVc~bgf<5c-)N~%dr}c$II8Bm3mzL0>mAh4+zjA$Xzd!Qwpb^X zx7IgmAbx1a>tA{Pf_wP8%C`Gjbya1rOOr^_Y)cyBLgk%SV z8um!gE>yewD;#<*-B!^RUDcl|7>t+On+PGj;Cm8@n+MWRqUry~m~x^XVQmdF=^5XA zMA4scD^Xj|R=Y>E8fqU!s002ovPDHLkV1k&|k^BGv literal 0 HcmV?d00001 diff --git a/data/images/tools/save.png b/data/images/tools/save.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6163d1faa43e4d6962384c88c45018074636fd GIT binary patch literal 908 zcmV;719SX|P)%QbRMgHCm7oY} zDYO$EI7k)KR*F=DuUIuSRAOo#y-iZ`vT4%haql_X!Ogw7dEVInOwL;C=imQcthHG? z3fyL^-A)@e;a``<9$ZRV8w%~R(c894=ryHZw^pYFoBoHTEb1K6ZO{?#sLRQ}F6o}R z|3)J^*CzL-a|Shf+WJM6^=>%r6A6)E)Ef)0e7F5JD^{M(1~X>u)1pbMc#&MGZ|qSj zxaO>b26KxqX>-|xAp<_QO|4qB>P3=Xb?Y4KtgGNIy~f2N17cHtUwqOPLBhk!T(?zg zPBdafgAu``zcqkPk(APT(xYZ{c?yM##L96(%EoMFNK!DWF^5$xlF~chynpnlTE<(t zzg1>^mdzvuLz*;sC5P8#TI7LD*yHDkHeXMUVR$+ibR5!`yB} zU_`qX`#dRSNVTiF4eIuC*1{4&uIsVWeh1ty=o6b2n?{uy1%i|kW6E4|(s@Uh@63D~ zFWBy|gC=yCG_DvUrroJRA!b~1(r-#6e78cM7dYJOTeA}WwBA-p7fq>9t44`_ueoAe zSI*m*SFqTO0zWBLZosHYJ8V$shz}+8FYQ)-Bt>FBJL-&aL0|4T+zdkYOL*&MMHW6* iAB&VZllS#o1^)r=v>W8Xr3#_|0000|xA&jf59DzcctjR6 zFmMZkFk^j6{6wH2dx@v7EBhr57Is;V8z(Gx0)@7Fx;TbZ%y~QIpx|Kz9v1VJ%}yCd zT9*j;|5B)RcvWzRz0%<0k!FU(-zQ&ohu?{0YU3)}@j8LcUu9Fm`U8<-kHY#l?|8{S z?Nnml&l{{m20n`d3X6tiFl)a>f`O-+DwGsY~k6= zbwhFSfy$T8md+8JXP3Pdw!Zm{clZ3RYyEA?;vbM|2PeTz5FFgJ4o;$rE$Glf zago}J78Q-y*5n)-LN96WnzoC+HzaxQyC?4*cLzGHl0&%dhIwthMmY|N62ZX0U=Bf6 zJzz+SEMs}^8R{77@`$oGN}YRVsJT;)Gf9IHZHSIK<00UEa@sr4Y2zi^x}MZiJ|`LQ z1es8wB#rUGp5&}?#i(kCI$@O~DV;;_>4opOO$_t}(*g@vhunN)o^*uuf0f#6Q^ z6WF>{HF?2iHsGdt=8~mA{RV=xY{^Ichy^ZuIn-JtChtob_=AB6fdhjg6P>$lQlW5A zp&}dVlhT9!KhWfRu)rACg9REqs(>}}eg43w&6eAwyCztd5%PVwPdwxzytCWyEdIQH Y0VuA6wd`xjqW}N^07*qoM6N<$g5L1dl>h($ literal 0 HcmV?d00001 diff --git a/data/images/tools/text.png b/data/images/tools/text.png new file mode 100644 index 0000000000000000000000000000000000000000..949c5e8eee5da98089646d850b3e2055705627bc GIT binary patch literal 446 zcmV;v0YUzWP)lNisYN2^DYmDnL2iWvX~s|O1hAv z!q|C*u$FKAueE30okB@&Mrnq z#npgu#w$tPRGX%*KC;fIWks-UaCP(L4?^&H6NHdI+qbB)J3>fZe&JaCt>D+q9!GXS oalsJT8?QqKL*#l+`>Fq_FG?27F|j4numAu607*qoM6N<$f|EBf5}X~CYebxlgwtbyVi6w+STnYLdB1R^it3wqKFE0sZjT#f_M=v*qetQ z1QDcqkrllu9*WZH!Fp)@pj0fS%0eQw?KauX?k3r6n#t$HL(;OaZ?@U@_RjpD-}^kz zJkR@##4c6>KS_!^YNX+Dq34_<#u6>vr+0LJu`O1)?hP_!U$k|w@nGu@?**e?z$62_ zH~!tNY^!W9xZk(XMNIg0IxxXs68eW;nTOcV%Q` zRQzM|1A()m5*GlqK;uyP^H|%Nm)~ZOb0PADr(Ad|c-m9iq)Qu_P^A5;x^T0*_a0r- zU-5&1-?i87?ihJE_?JEb_oJW#x_9L0L;^G{fwdrq&W!eM=W*A*-p(~!J>flXl)=G= zK@{&H*Wcyk7=i?fLk@cCGv1TDA85&|p1IZ$`M8&wYF}4~vBb2sKBb;*QbQs?Ou&$g zY9H%9JrMpN@|ku_g_!aUKny=%zLWO#c448lps;hL@Tz-@LY2qWRpB}s0ZwXm?A^6lfgVM%4(e=PV>>MPF`FbH9}yDz(bZsK4AU7EvrX!&yS z;6me6KC84hGs!oX=hSaOXASpk=<4z&fD1PvL|3AymjjY_?FZ`@r1eS(*Wt!X;fv(g zX;Pc+obO4}tWY5&Fcy5}Vx1W!>8w;0e@dC}Lb3LJyj4ZlnzM~_K743&=>QV7VStdj zRDDExTDCeR^(Q=zZCyOWQj&KS zCLsdo!{O3fTFQKO^dYd^iFq>~1Cp5iH;Dl_LD^*4GJ7WT|3G5`xv=UXMvY4UxB)|N z&;{G4O*_i~_EUi~5F$#M2t|@4XrSyKSlX-I0AT9c4akro$p#K}Y!WQ(2ABrGv)NE# zbjG;?ItB)H0yr3KkQv~_0N{(H0qtt_QA_R|2%L-JMM0uSaR(UeFz9q literal 0 HcmV?d00001 diff --git a/data/images/tux/bored.png b/data/images/tux/bored.png new file mode 100644 index 0000000000000000000000000000000000000000..11e0a3db899935ec3cd496c50c135781375ef2c1 GIT binary patch literal 2884 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 literal 0 HcmV?d00001 diff --git a/data/images/tux/kiss.png b/data/images/tux/kiss.png new file mode 100644 index 0000000000000000000000000000000000000000..573d1827f9897f0cd4d581d5fd1d3e64ddfce317 GIT binary patch literal 2596 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 a>;DH1Aw1b|lHm6M0000%4p8NjZTl~2J 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/btn_up.png b/data/images/ui/btn_up.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e4307f93a4267b4b9d3846f1e782f0d5036ba6 GIT binary patch literal 1827 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 FV1nvi$q4`e literal 0 HcmV?d00001 diff --git a/data/images/ui/cursor_up_large.png b/data/images/ui/cursor_up_large.png new file mode 100644 index 0000000000000000000000000000000000000000..7bef2e86fba22855c09d352f17ca0f4f993b1561 GIT binary patch literal 3816 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 R$8`Vz002ovPDHLkV1gjWJhcD- literal 0 HcmV?d00001 diff --git a/data/images/ui/no.png b/data/images/ui/no.png new file mode 100644 index 0000000000000000000000000000000000000000..b446473ee85df636f9a2b4d442e05fe1cf7d6a46 GIT binary patch literal 3094 zcmV+x4C(WUP)8!NHI; zTw)I&E}5M>Jit6K<%&Qh00kiX>hBPj2ZMBo-t6D(c=}Xt&xRLwESWHM$%H9QmyD4Q z9EWmoeEU<6J^Q=Ys?r}*oIbH@DG>Dyl zx4WzL_>rz$uJ!H1kG{HROY1L(nqbP1;S}5V)#j~RcI5=Aj@T(J0#8FOLbokeUZ zwg6m5IZl$z2Q#l^0Quj)Q%)s9cdxZrGh@#1bX_UEt*7hG9os(j*!K>!o%E4^5551T z7k9q7uaYLM&Gyf%ylwIf$;6z`AqGW}wQ$`%L{uu4V37CzG$zPP=bX7T4{ju;KVA!g^DbKZL&d6(}-K3{2i z*w%kz0F_AzGUYOq=^0;B|MK;>&K)_X(m?FohCM%>`{YBfA3H>uo=W}AkvG4*>)9&$ zC+6QUYv7QifMjyW=8%sl(?hv#c3iSp!jRRIu8LmYUmhN2mXL&585XHa)hz$W^u^<@ z7+h2PZckTxE|Zizk?Hx51FuEQA0IuQwSm${Gd)XoJl>hlRswx@-jca)Ao)W|*auCs>@0{{yXNCeEHwTQ6R%$f~fTsLUW=<#<>``F^~6HfGY zA80=bz_lo6n9hayi&p`XciGRDJWrPFoQK<0Zbb)dg~1T4LI>IZ#iQL_Z8KB>+F;yqK8 z^&A6`e8zH)opLBdLD$iv(A|NeJ2Pt`h}NVPrRqg1W`F*!NVP=t7ukzV$mliO|O7ZKva0K&TGX{Or)&MkagBLpY0(k z9LuPyNBO8&npucNGijwvEr$wW8sebCVyp*<0FylKZ#%Yh^QPF@N*X4farp$KYWgsG zUCxiPWKziXkgbiPSSkTg(4|tpvK)m;b-ZLPiMMOlwBm^l01|h?w5SXGW1nTF9{&&N(k5~14 z-Dg*P<Rz~${t3F&}M z2(1ws=m17T0%!#Z3TndrC*E1Q@!r_>ah;islh)nx1sHSXpGOvSq5DzbK77nl$ z`3RX@>~gT|UBpVUtEmOx$!ag8HAJ8VOwbyvzy{195AwMkCGSs7D|iYy{90YpP< zu!j)fQJm9tTOQhX^sOqI@gp17{rT;Hs#Ia~mF02t(yfilnnZ2*7-)&qcNfPb}b-=?Rl9l17Dvu)jjferww(lNtF z{>xoo2k_?cqYrF*9MAwGSwq%?1OT*w7AWJCVGsbSOEV8l6EP8Kub>1XAOb0P54a>= zY{MYHP0=3C}0fQ#NkzyIa6mkb@=(bIMFKdiQK z4$i~+a^nD4LD(rN91I5yW;J}UCzTwTKnhaa3mw6F>*AX?+_SCaCsj0KFB*COtzQE8 zy>&pke)CuVPKoUN&F+;Cu7{11PQn#qjVO>}07RaY8a|j)H(p0RRvtvj(Z>S{9rdc?B){>?h80FHZ#mz_vr5{ljlyHKDFUe*bn{LKc{gj05}3-cz1RIHFgw|+ZMAZ zxqP&RUr(?e&cnNPH?FLzw&wa~IDbxB92M^h%gs~SXc2<}$hZb)G`T!b42I4Dfb+|) zzNUHhpOt9F4!ii1Q<~u2xoQj>6{b5eVLc$^^3G@(*MQP}lw8)}orlZ9QNizuld}2t zHFwOvK6zew&BAjXo}wm_G@jUUS?|1D){x{Bfb{Z34uTl)9yVVnZ3)(kr-xR2^`*6& z?wEJ|wUe4YkiS%k^?kL}=RCYe3T32-5*w{&s*}{;t7rrW#MC2AL!8|`Tzk?O%u_25Z1z4xELbk%6|-Taluw>Rnx>$ za`^yHOBWy&AOfNY)}!#reE}{#`w9bzV|YXnA|Mse(gpnh0r20r6*do>hm8wyHG)n093{5=H*T$D=yQKaO3*k0Z?!{WgapK}fb#oFXK#q*Z4yHB)%6w kf9==TVA-D{49?E^KW!@wV8G?%tpET307*qoM6N<$f<8y^hX4Qo literal 0 HcmV?d00001 diff --git a/data/images/ui/no_title.png b/data/images/ui/no_title.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb242235ee7ca812220f5915becc0b980e384dd GIT binary patch literal 1205 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/paintcan.png b/data/images/ui/paintcan.png new file mode 100644 index 0000000000000000000000000000000000000000..b056bd7d4e43de98a20bad694ee282e7437d7f05 GIT binary patch literal 2743 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/progress.png b/data/images/ui/progress.png new file mode 100644 index 0000000000000000000000000000000000000000..58d73f7d7142260c56d21fccd9ca80e51f98301f GIT binary patch literal 830 zcmV-E1Ht@>P)V>IGcGYOVIUwNklF|9LImp_oPGYp>q^eAXapV zpqAM5A_(481VIo%PagCngn|fq@uY`6DTp8#3wjd_FWM4o5Zx?^{y-s~B9=^;oZtI( z*mic?nRed1H`qH+Cy4ZA7R(o(OG65S(9TjHx%)(b0S=mC~A#kP3^VE|oxU2MnZ*dA{9R1?@BNoW6p$NT)*}caWXvx zx)oC|@>KhOgLMeCk70B3eT?pYb$7P_xN*Bm+Ytm2d2dH9cNo|NHRN^Gl1jF{y)A}| zh|1lk`qRY)K&b5Ga=Al)c3eWlzP?tfYT@g)zyQz+ygZ@c()XkoUBF= zM9$JuvH&9^_l!3c^(Adb_zh0oZK0pb!{Gn`00(qQO+^RN2p9n%F9~Q+`2YX_07*qo IM6N<$g43;L)Bpeg literal 0 HcmV?d00001 diff --git a/data/images/ui/scroll_down.png b/data/images/ui/scroll_down.png new file mode 100644 index 0000000000000000000000000000000000000000..25f688acdb5c6b0fc0625e4442d2c8e1a393692c GIT binary patch literal 2560 zcmV+b3jg(qP)Z<00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3labT3lag+-G2N4000McNliru(gqI!9R^d(QEUJJ35`ia zK~#90)tP&Y7S$EN&pG$rd41oqi_2p{*ChxD0^+L`Y=Z^FiW*spHfd7=)uyJgYAd9+ zrX(gbwl=7h)-<+Nr1tTL5~(R_v`QsyERFAlqF87bDqUHSeSMFax%Zy_F*D!pe)}!! zF8*OpW@ql)Gk3n+-=1^sId_nm;gn*vIo@`tctOx-%y8|n6!UVrz=UG2MGD}C6VJ&x&> z&}*n`m_9W>b%NJeFI|TO0RkW*(Z@Hh(F-$M3xL)b6UJdzUthgSQR<44f(@co0!~ zuHRTMlq4aLhzL^!5+Y{qg;jor+3A(e1NZOy<7v~VmOJKNyJ+I9K_n_Nz+yNR3(VFs zTWhT~u@1X?quyew1OONmm?kfnb;C28W#A$+|9SmGZ$A1ozyQ|)0t7@NB0@qTh=_y` zB#6>mBtk+&%1o-36=i*Y>pJ*g`|}?oo!eWkT-b2Vz$pzBhRkf3nJs5r*cfZAvBnyc z-mR6$76`hm~WN550))=d`(b~k?=vZrQ zw6;cDV~jOyZQ^|u9~4S{`K5&pkUFEvcair@ArG%0s z1qwleAa%8hOVuWH?U_?@XEbbl`H|D4v+44imQ1^7aNkfusp$Z-HI|LB+L&0IIM!jL zqbLqT9folf={V9_qmHf7###Udwu}JGCf03Rcgpr%uR$6=C5rl8);*uH*TR z?>WA&d|&yl@?7CM!jY7OBta;WNK^w*6|OHdUz3|K{*LXN$4uw`)f+xP=d!BKS`G$j z>@k*&wZ_<3n@F25ipybK3gc2KDwU#AIVzW;DAWyFf z1&&loIgaZ&p6>-YHwe63&dCLCE>M9deOGuHASL=;EXkh-2cn@->4vGT{`mTD{A%ME z==}U^o36cR$qkZB(QnB=iGdt za;f={o6sQ;goGdl=0<~MnEdGa#n%a`)^5J-BhuNnVauw^Rt&2iT268rrok{<25DJZ zD~%P}P^3sHR1%d$DL@bq0s^NQ0RV$$!wdlRXE(`~r5AT?-ARZo~sa1-_s2 z{k$L4d4A6Ia*pdsxgt7U;oop z3$Ly$!NWnSZZZQSGXPs=1V93`gd~v^l8dMj4S)eKoW?0*t+kvThOuSo#bWa>AKL%h z7Z6Ygr5x9FT+a)9Kkxf_->>t6oag$E>q+GZA&F#?`~U+of(5hymO*p!OQ4f>c6-WW z&XgH*&YJnuo@Y-*=e8}YKDA=RS5^Od)iniL9Ep{PCL~So83=Yty;;fmQRCLqXTn))Majt0XkcU>Pj4NnlyjKn4kfASp>H zsg!h;bfi>5DiKFSgh=z&T-7*tngoDFcdzSw>)^@#N0LY_ND>JmK`4lkETRF>0LWl1 z7=RdAWGfdUV-}51we?StLe6k<2%lc(R;NUNCdf-Rq!Itd@`WJiqqd-UA)Jp9^yJL4I5=S04m*o}Y7E zPdScID$RNbfe>hr;Q$Pc$D`XS+OhYAwZH#PKbC9_!e(F9_;#xpBcj zK*|+qc|nK>l&$NP@}f4Q(aDZ~{Au0x?*YJLtAE&f-W8|wstTQcm&<&OnQa0{>o^W8 zfQp6gLZPQv>}^^y_tJaTseHO~R=r_%#eay>o|_%FbqqjQeUyyTP*Z&o@U>6 zb@Nph*4{9yh$%%!cD&m0hc~gu_|~0a->is1Y)v|;n2#oUrx`I#xBEufJouk zgpbjQgN3EATr8FPc${cjc|mjQCBk>A1`fMv&)Rgoaror!gQdO4s07M!m2!koX%UZU z5UQOY4tW3QXE_ELer@3X(ly%(O2bbah1Lgu-lXx1&uO^uY#iqE#;}0;f5O=Ek*@MT zPelLeF~^GbWXMIsWrK#Z?GYFb#3unyx``nWJ%NFs@vfK@IA@LXW;A-u4JbzV2J=6x WS0VQGZ(!#D0000hD literal 0 HcmV?d00001 diff --git a/data/images/ui/scroll_down_off.png b/data/images/ui/scroll_down_off.png new file mode 100644 index 0000000000000000000000000000000000000000..626515f4ffb5aa741cbcd594561caff5914b258c GIT binary patch literal 934 zcmV;X16lluP)LgBDY#^d;8WNQx0>mjrs6;C1feU{x7Y_W8+6qxl2vCSn`OzdO zKunq_sqx#L;jquoYsYRw=V0&7y#36ZnVsE7hFY}ySNG)XS;$oXQ%Gj!7Fw^hI8zO1 zasTl_FR899%r+c>=+a;_(%3&g=_vr9aecMpMjezpKb|GU)x~!4(h-E?KaY}+xwkj` z(1HE(&3SrauG1V@vH$3W(A%An>A(9=(>u?;ze1IR{{3H*k=xe@0J7X1e)j_YdyB(y zBA*?GG<|cc0Lbv{v!kS-`FV^xz~4VTm%sjMHnH^6>sEzre>?-S@M+=`$TgUVK%mUa zKaZcoUwtKG8w_Tq{nDyn+Mfv7!=37-iHMkpl8;IVc>4QP{>`g{yd=JvnW>psrQf(C z-Q5A6iJ6&`lPrXp;^!&+Tdh1f39hQDre*{Kb~j{40Rotq**WJNGZTZdN;DhaPvpP* zdObA2pr)!Z#u$~<6lBmHIRFSm%+863IC0FJCka5a@$Cfu=JkALFjLhSVhAC`s4yeL zft)73bK=E&FHV?wyp7+w^56ph!hGnlG|7|ODAB}FKV>{L?vorw2^_g=&?=Vea+ zYyQhI{zofya_R_7HHP4v>k|>6Fd}K5R_|Z;&dFgJA!rpk4K z4NzENM*lvIfC?Eadec`=xRJYia+idS^d~jp3sX9u{)M6~lep$Y8+Yc_By&s}4 zMA!{FVCrqThbjCz2D7Lk^h@{7jlqQjApG_uhzO7F(#u}T*;X|()ewR#ElXkyjM_as z)~bsyO}^kKbu(XEtUoL$^RDNo=e;thy|e>j@r~K}+3d6BKcvr|774A%1^@s607*qo IM6N<$f~PFLyZ`_I literal 0 HcmV?d00001 diff --git a/data/images/ui/scroll_up.png b/data/images/ui/scroll_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b5f667748e09081f4d91b3f59ee9f337375d28 GIT binary patch literal 2565 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/scroll_up_off.png b/data/images/ui/scroll_up_off.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0e4a800623909561b049fa3eefc6fbab54b710 GIT binary patch literal 921 zcmV;K17`e*P)GK~#90 zotDdQ97PbuzpAdDZ2U^t1uU|85DUc?AWkMiArj)kg};{z2Pct|2!)(bK#mn{h!Yz* z;Ki|JXW8kl;?O<2vkxyOb(wz6@9V0rnjSI?OuK(}50Br5+R*(n= zr?cBjL+6&}8je78X0RD)?4KO=6adh;w96#x3 z*z-pxX~ledVK!n1?b!?d*?E)pJa_XtWr62rhuW>%?I21?mWoC4~b78*I*(7fu^hc-2nisyf>X~ zFqoP4OUur*z8A8Gn|aejL`+0UBU@eO&30~Fy)eG*)G#wMQ!}$XzIIExTNR#(nVFNw z6c@S`AKRZar#WC|YO1PgYDO?%YfUy4Ab^RPopa7HGcjmF;Pta%``PCoP6!y(R5ivJ zqmr6}47w@10D*|vIS~;jj+yI0%C`HY-g~lsX~G9HRgEEr5JHR!GcxSTQQ|u%UcC3> zgqbJHc>D2a|MAyX#{>+fsv(B5EL}+v3L`s`6n-b-ec`y!Yb8F%!_{RhLfKi7*q=QE7}iwCQ|cqf=Xy-Y^4*S;RTV zOypLjd1H%+b8^Bo6>>dGU)-C{2kv}xZQyAxWHqaDJ}S|TreJ;l0I7V<%#>^tkL~-X z@qv4{hq+|KTDA&lRyKSruCmSx%Rhox^DAOp&u z|M0%>-Z>hSSjB(!(@Z|_)#aK(60jJ{vR{@Ted((U=hdb5Jc3K;Mo{RbboSywQa zS=12vrTgr1b>RRAFJ1-_;n6HT>!n;vRWnl!A;^_$k{H#bcJ~f6SMiz26FRAy`Qq~6 v$AW6=dUABqD}&lQ3lNKM%q`Bhm0*fP2 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 LNkvXXu0mjfuE}~v literal 0 HcmV?d00001 diff --git a/data/images/ui/yes.png b/data/images/ui/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4be91338df172bfe9455154001810734fd5b36 GIT binary patch literal 2728 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 literal 0 HcmV?d00001 diff --git a/data/sounds/blocks.wav b/data/sounds/blocks.wav new file mode 100644 index 0000000000000000000000000000000000000000..f13d0fdb10c0673fefb1a5e882d77432dc19ce74 GIT binary patch literal 13984 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 Qh@UYC=2!A~Zt)xZAJt#NEdT%j literal 0 HcmV?d00001 diff --git a/data/sounds/bubble.wav b/data/sounds/bubble.wav new file mode 100644 index 0000000000000000000000000000000000000000..398e389b365c4365a08fd4cd40ca457d3c6c4034 GIT binary patch literal 12302 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 literal 0 HcmV?d00001 diff --git a/data/sounds/chalk.wav b/data/sounds/chalk.wav new file mode 100644 index 0000000000000000000000000000000000000000..056a9e313b12fafb6250bbd8884c2b21e0f90c25 GIT binary patch literal 14656 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 qEZs2-& zci7)IhTFsImxnL^-W-Nnw&U5!RXO_khA!Ukj(?s1(F6ZC(Yy2Cv)|ud{$9z0i+28_ zAM~kzlCt@B`s(WH%g1+`KZ_q+w)r^E&g)5(ub)UfyKO=!Q_I$Zy=_>=%t<5jG<~<* zu6-)CcPmFWN7NK2>N^dpa9+VdDT&12u63*0N!B~4haYmMW`evtBIz9cuBxt zm7y0aNCQ%#97^2r7NMc(_*M;;ICP;Tgacr{hlCNJ!Y9Hx5W)`SSUgd2t-&lHADMUp z3un?`)Tk_a5lcZbfe|cF#|BeVx++Y>4_M$_GWUY6;cYgU0zYAzF5+O>;#C7gNT5YX zw?^$`Cx=ILsjFB|r$S=$Je^=#Ht5IKdDNWCyeeAD;Y=6P+41*jA)mdBZKY`=An~r7 zs;dgcRXID9;f$&++irlP~%s8!}#Cb&$cSYt!Oxn_)P%-$>Ha#wb#btLmN zPD~i)f{j4II5wJ%PQoeJ1#1;EwGYDLX2@q@M>ZNR7#H*&^D5{I(XtDZCeVsHxKc2o zd#~XYrjA%DW=|I6jtz#16qhqE6%}xhhKND}cz`1~=JE~l!GZ=llCWY_7>=^ZQi}#6 O1CgSHOd|o+=hc76oq5Rs literal 0 HcmV?d00001 diff --git a/data/sounds/drip.wav b/data/sounds/drip.wav new file mode 100644 index 0000000000000000000000000000000000000000..10fc12e087eb3ea1bf04e2eb100e9efa71ed6a72 GIT binary patch literal 1484 zcmXw3Pe>eB7=N?#c3oZLZnj&Lux*zzh?GS{mLf7pgfUdmL(8_M;30vfhB$Gq=-zwh_` zdoz6BjbFRwgbDd^^oOyZe<@~?gb)qu>KBCkHbO{<;=bUxn=s80+*%#92S$DqBv(>0AC7Udp!RoQM?50iQ(X-ZJ4Y`CqUt^GCE|cd#tH zCh_*UI^RVV%Cb)1iv%higV(UQ;?(#iUjhDr?=FN`FXD`&&M(Ui{tU5}Rduf3#K+i> z=y6V({1wFcAd<~EqpWWs#CH&3g+HdRn|VhOqtB(tx{4_4^qt*>9!A(O%NTXs*#qD& z3U%=r`x<>`?RNT_KLNI79iyW`@cQj8bh^nO@u!Z$2G|hmv!mdxqyL?91HL&nDAMI~ zbp3>H(L=L~eFdy{DuVml8V`UdyCMGu-tKQq8N;7|E8dSqTgcUf_z z)IhaQ`L59rJ&0rAD;%QIm$Ztw2J00`+|>^BLoxS&fKusWk*YO>jY6PXHMEjf_AJeAONR|% zc}u<boGf)(Ju&2=5$M|iM(IbCUio!MKPEN-3qM*DSuBcgmT)pp9=EYbZAk| z`oGI;$kOsbKA>7>XkOO*dvZ-%BKhDj$Z2`4Qx=1pq@X>7+>-_EII!Xf7&uan#IKJX0uHXtkVwoCwh zF7Lr>h&+^gatO0#5tFBn?8)bH0CEGGLiaF(dVp4ChE(N4XbETuaC+oCvE!BDeKMQBYng|ud#@@wH3drd#((VB&dqnPSZwX~#SRZy#{ ftQAM)zgQP@RoPm3n{Lgm755@@3s*C?^?34sCg8$* literal 0 HcmV?d00001 diff --git a/data/sounds/eraser1.wav b/data/sounds/eraser1.wav new file mode 100644 index 0000000000000000000000000000000000000000..44a316f3d5b6e9368346f55a39a1714b7337e038 GIT binary patch literal 9566 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 JtP9$S{{tF*e~bVC literal 0 HcmV?d00001 diff --git a/data/sounds/flip.wav b/data/sounds/flip.wav new file mode 100644 index 0000000000000000000000000000000000000000..18af71a1655a5df87070593ce9559a73166c2a73 GIT binary patch literal 976 zcmXX_&2Jk;6n8;FfH-jC00*{$Gbl)vh*VKXQX>N)Zdx@FA=H*#e(ad5Z9zT9M z7F&An^7)*sNiW7?u~TBc`)cgTIu(01mQ8EvIe}rAaY`}4lwoW`h$#^s#lXglQi2en zoD)nCVT_2~`QPDG*o0t&9S37zAaXJwImzM0>TJ|5ORkyP5=-mLIwd-NKj}C zQpXV?>ToV3EyO6aEXrMq0E8}M%;mO;n1gMAq0mB9B#5{dFr)6ZUAO}jg^s=y_hMMNHNt+N8Ge%)W)QM!#cOgKi)-k1psEFqPaWSQKnJ=kiZ!Zr7PNXDAlp&LcX+9Q zT2>8)5l~bH2uNQbl`>)%ndYhDEjAEd~#7D|6xD&4t;jCzFHCTt;q^E;7Ek2F_l%zpbCU zI>6bI)7yD)puh1PJ^rQn(%m0_%@_7AXaOul6IJ_b@X5tX_3sDC7pnj0vQk>P+`jh} zJv}qL`>;O0zW;anl@CTofAH0rYA3oq`MRN&O*2;>JUU)|>doE9w`SH`xlC2dFKRnC zhFd))sld+T#yjuFe>l1`85&I2nm(}7oqzvy-+un(?!Cj`r=H0)qP?!XZWcdW9vzJ% zb?UWiKi}FtxAN0(he3HI58W>x?Q<=q?*#F5v$x-WDxUKhCeVn$VJN=}oKCB1f9nn*cCm6nR-tYXxp=`+$K7W)saV8Y)3 literal 0 HcmV?d00001 diff --git a/data/sounds/giggle.wav b/data/sounds/giggle.wav new file mode 100644 index 0000000000000000000000000000000000000000..52a1790685aff6248470d9c472f4ab01c07d6427 GIT binary patch literal 15310 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 literal 0 HcmV?d00001 diff --git a/data/sounds/keyclick.wav b/data/sounds/keyclick.wav new file mode 100644 index 0000000000000000000000000000000000000000..1997a0be55692f83a9ca21efa9d5d7c41665f82e GIT binary patch literal 1774 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 LzDkqKhT#7IDXTG= literal 0 HcmV?d00001 diff --git a/data/sounds/line_start.wav b/data/sounds/line_start.wav new file mode 100644 index 0000000000000000000000000000000000000000..434fed62a94ccaf852624638bdb4d0b8911c12dc GIT binary patch literal 4066 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 literal 0 HcmV?d00001 diff --git a/data/sounds/paint1.wav b/data/sounds/paint1.wav new file mode 100644 index 0000000000000000000000000000000000000000..1b94ccdd89757f129d5ba8766b39529671c77fec GIT binary patch literal 3120 zcmZveQETd06orp5#u(Ey%@vU%rId2HFu!6R=EA(r!=2{~!@SMgh54)VP>P6%I5x%@ zV~jRTKNbgV84uMqjr;6xueJBdZ@+&1`Xw~x_n*K0^5uvr0lQHQxV;mE| zUHRktkMGXgU9-(U|30V7A}tr&X*S!ecEzDMq-9zbhtsRmGNwM2b#-hSV@|K9SFb$? zhW%lG5Ck1#T*r64w(pL@&z~M{?qhzEp6~i@(22UEa2$=oL6GzYLG1f3(Of6!1Rd8Q zmeX<_W6C<)=T&{GPpjQ?`t&kcuXcI0ET-8so9DC5b2?ei^VKdb`6&+dscC}F-SwA& z)?+e`Zm(Fwe(1T5*LGUfkvp5W7f~nc$r{4dj(E!=uZlyqPfK=vE5#dEbu4S*HVs)t zT@i+!GWObDJLx^#JSHL>_Ja=Bg3chYgh?;jv{OtuO0h?!1_*vp*IR2ZbW!{g(D$EZ7M55xX*;>iHf|J zHNGk9;;`7F;$%%0i|uTKQ@Qe-&NhoJjMSf=2|Bk|kBKG3E2<_wrFx19VR5jI7a?j| zLdCL#^$EtNah=dpXVFh0#F2N`5aJkmlwJ(IK>#5t#(vbrov4n6R2n`AQ4hxAfH&zo zy5*7(U8N#~WvzK|AH#@uKKc~j5f5d`IxXk9zAr|4QjCg44yb4eotE#$J~^Wbgv^`R zzrDJ)9z$z6XBpVjFFc(k^M@dCG(fU-~Q=eQX_Qw(3|DG`E zv5V#-zJM^>Q!V@np}cS=6xSu8G4x&RLx?IO#F69Z?wV@S@l4Fn!_Q|8nLtj<63VCe zf@v+nY`-j^Qa&FE@vbFwT66}pO@z!->r-~oe6)niVxGSzl!`b<+Tmxbp(Z|z5PEGU zha7o(HICQ`!qBsX^sLp8ib!=n<L^0~kJ3z1X=pVU<9kB+G_TT9j-uu)Xi@S12xET~())D3RMg(=gF|!%KuA=pAE(Bd zQ9eC0YMScQrqh@w(vW8u<_de92`wX&lzPb3^dd{sR2t$ZbjqlJ6q>fOJ;$*o~=RJ|>L_Nz` zx7qnfKVB-U9_6Zj<9=yJ1YShrrHQJF!)a%$al%=|}ynN6r=G i`*yLLmSq#2GUD5Enj+c1#B53I9haYc^ZZgY-v0v{12>!i literal 0 HcmV?d00001 diff --git a/data/sounds/paint2.wav b/data/sounds/paint2.wav new file mode 100644 index 0000000000000000000000000000000000000000..dc6525eb2ae44d3d85026a19e0101eddc36c8113 GIT binary patch literal 2241 zcmY+F*>d7W7=@X;xy&QvK2MR0OjT}Ei4B!WYBIL5kdTBHwC^hdffhgpGxmGr?Q;Ic zt|U!iFj9Aa|2gMx{qpmtPk((|JL{x}@kB961jlIN=9`Pfe8<#j5U)2dui=)n$r3@)94I zk|dF{)D6eC74G4IlXQK-bG#^UQ*5GWilUni7T#Z8UteBdFT-Jf*!NA9rD@{ns_BJ+ zs|iz1R8&P21X(u>UDFIVj6&bBZO;#|2g>Q%9k8M_O^e-d0oG|~t31t%O?TY4pxSQA zBn(k{L0CZ)1;AR`E{cA*pUzp;GeLNKnDXL6Q51D)J3-N%0rmRrdD!=T-vKL$LwAY& zec#rFM{X`FvM9`DP1kh|RR)mBu^n6nR=#f9X1gLafK?x#FXz+g*i=QD6`Qv2+ue3s z8MOl5r^25M)oOi5h+ceuMi-DDu_5S<}tOKyJyxcSltF9}!M_5@J zLE!*c=F%`Nb0JKjkOVBA=Q+X>B$;73LB2a)F5fP1SY5L&2n+LU*EKb9Mz{VK%l3l6 zBP@?9&#D^PSwZ21u=*!Z4Tok^6nVLBx(>|sW?f#fvm`=EAY)kOQkf%9yeLa^e)f(< zYAsDC$m+xSf^mK#wYsK;;=nRY+i@%%g#Zg&qO8D0m}rxG?iDMD(z3=tl#&#-)!p&w z^n^rhRz*>+cWu|~fK`zXmG8@_di5e1slYo4N)BVdZ7r9fkqxH1(=1tMwMS+tu~D zDsxg3trVksecyAeD;7dE6GRaW#m~6MhsW6*+o+VEFefZZ>TsmYW5p~EX`NYnm!JOB#3lvvVZA+>xI!|~YL;yg7J87>x<(OLpmmv85G_ECiwdJG z5a+C@>ZU({s@rX<)vDTTcUKP?HDSdJ3)3wVHUbMgq!vu%ISgKuAQn9Ifz=&PCu-}% zo?%ftQ+RC4T&k2RFp*f4EtqJ*KN8D(!&+6do^V72E$HBaVr2;q@|0}FbCMyGPHcoh7+ifsZB+Na1DjCI4xm_Q zQDs@8p$k?b)0@O5uxnXV8r}{>qC{N>uHz{LE{FgbXvFY|7@-Y`gOiHB&^N5d?!dBP F_z&ghIeq{D literal 0 HcmV?d00001 diff --git a/data/sounds/paint3.wav b/data/sounds/paint3.wav new file mode 100644 index 0000000000000000000000000000000000000000..9ece1a4618930cc50c3ab0204dbe9dd1d818ac79 GIT binary patch literal 3339 zcmaJ@*^=7m74E6rKV7ir z4;R0^NXCTNzkYXd5qW(XiA3g8?x{V~%2=Op<)@>ArepHs4s{_sm>@_6oi_?Z2O_x@kKiM)OH z_PcBR=Vx)npHpH2{m|c7%h`0kDs?(- zNhl_-{{D}fWT8|p=2G!^GE?LPLEtN;GABqKwWp~axgm;DtE;HpPP?O-!`Xa+ng@=q zX}V#VreO!`!_)cUcsM?s4(o|$nU>|a!|D2Nw_VL=)9G|J9ebAEQ&mkj9mg?swbN>M zdwsms6000nYqZ)eG;@1(bsbF=xf)kU$75(Gor>Mw#uAxau~aFSN)^5?(HEWB{rSt6 z&!0Yj{_^SZu-k4n_*pNGAP&Jf4n+?PBDZhGAOn zXuiJNt`~%GIvM-Uprw9B4|X-R{x^F=n3QYmKHXa@pAR)yL~txrT^WE|B z@c{r2cdLmH2!>(%lLfB3oCDuv9QdxOYpMbk2cW&L(qUayRob#xL#8kmP)yF0-8!DV>iTWJe@5RiUlyq3!>cC%wT;yf1-LipFkq;p%zm#MF?ATW)0G7 z$zrvbiAOP`e4&ubrqk&x=;V2x;{X(j=qL*2AW2eFCWIidXS%^;Hhb2c2H``h-gvb; zJurm3%{*`|!!&JoG+nONOOQwihrVO>HHOeI484bQ!D1I&HpN=CD%2aIP|hWz*Vot4 zL^fZ{XH&@pDi*!Ix`NEoIkZ?TmbqG8lDmC(x;;FepPru1u*d#xvt9w?avpfrpa+43 zXEtP6ZU~ipiYY#u&*d_iG!$RvIEIj~)tfD7v)yVorDn55EMn}s<&P%hEFY5SF@&Zw zoUQi<$nx8hcsZc#B9|Nq{V2yfR;7i$L z^!6qiPi69XNQw}~A=9htTX-_Z5LT)}quEvsf4)6FoX>>tbYMCK!o@UzRC;Q+CDjES z31%RTGW3v0f;=3W&15jXa)l!f`5K+op&sOBv&nSY=_cs%qhbPAOY3}o7T zv%9}P+~4o+){F7bb!^-5hLhQ1v7FC{!_m-lOp*|00`F2A@HI~Fw3=dFKtF;|trRke z*lje1cCxt)asdeAw{RlT1|1TIa1Yd{=ytHUyFWcVk~t207@jy>&L%_59r@UjL>wqK zq=tytf*z6}FGmQoI0r#W2)QcGB3$j(3qt5h(fXilG#-yfzGDsa5TP@iEH}IT{T|nX z9pE}drsoHf`TQ$~o@<-P0nCID_Is*=IENiuGIhfc@}+z_8HfK;81)N6u*wi-a(P5e zh_Kr;{poslgf$2u=87x@#>Fh~ZKK~qh)SYZ4-w*2gfbimgt;sb;+#r_A%r_5QYQ>6 zH)V1nbfxyNhWyb8&O*zE4j&qp?Tu#3&31Qpx81InvoZb`BAm_U@NCGTYtuxCbrc~a z78$|@X$liCcsrluHN^4>hqNcY1~!EH-e)>EXl>ZfRevkbtnr zK-Z99ps&%us)IC;qLeY&91wy@HYu>kG5<@lO!%NunVblO*n+m}`$HcnEG!1(CJ+uM z^VNF0z1wb(+7oEfbv=I+z_H&W1bM_dL&%)S5W+0bDR`__O8G2sA=DW{yd)<^qtX9D z*j9CWI9=ZD569C95x(Dr2;oFn#4`HWa&l9`o?{40a5Ypx=m7E?LIf_9OxRE%LU5?4 z{Q-i~^F8l7gsvZ8Pp;R{3Z*9`?75x?HBV?8G7f#uv5+zUi?9WR>{wXAZG1u(b`-c3c-iw9zwhXgS_!Je@C>aQkAxI3$EVSR5mjg3)LQ$n*r|_>n}weg*}D+ zus#$;qpgEWI?rmN>)ICTd5-M-Z)elV_&&{%P<_*7$Qu?H%Te0V)D|#eudza>)G@t& ZPRS5=$Q9m)BB{U`KEiORF9m!!?B7o1Os@a{ literal 0 HcmV?d00001 diff --git a/data/sounds/paint4.wav b/data/sounds/paint4.wav new file mode 100644 index 0000000000000000000000000000000000000000..ea8d3ccbf7714dd3c21b1953bff536d05cbf6b75 GIT binary patch literal 6633 zcma)=OIuo57KW`^4}03Pp7*clL8U52O;yrQsuJS`MFbUZAShk{MFmt41OYE-yu{SB z=lx^)pY;2!y$@cx`m*vMMB%Xade`@@wa>fPuU`H0PknvA{Pn~4k$CdYf9&h)`;LF< zzx3JTyS_j4g+s~EKX}i;>(~8*11{Y2;NZ|8uim_QGw}My*8`tosaz`dY2b%fKMa1H zUdd(GSK{H}cLV*e`~An+9<;H@A9m(P`Ezhb6tQSS*&x<%7e@@yTiD?Be3`;=I#7Z8k`N1<&xw{H&*58u9hg9T^!RgQ3ZAWI8s366Rb8aBAqel>m| zBp#^R+b>t$3+Q!xwA(GDscNSj3p+cAg*=ruF}#pui|F{cN$Gv=GKF0@hB$^_XCjH~k?D2STXK0}E;h|V#>cIWqBB|n41uVSJxHDGPYekO zQA(6YsGP}y)dNygtgW$H(bK~cwOvrsk8AalhT@suVW^mzV^|dGM*HmY`UV$$WJq^t z$$<@`SYW6?terGl?Y3M8aqFs{VYPB}bRg%Ho%R@tJvt^G7`-rRdANoANIn9!#4>^5 zKrxkCNiNOL#vsm;2}LwTuVNVepC_*OPw*kgKQB)ho0GQXkw)Boip-d9c^+u}=#mjE@ib31M1WNr6B@(Lb=L}7&%r!QjhFuOxnzCjc zF<`irrL&Ze1o52CkK52SZUcsbsL{q|8`C1i2}DUzqqh10lc*@N)|ICW{aUpyrWh>% zin3FbsE{sQf0hPKhhhjs`8*zB-l-q*XVanYiK_DeqEtrSt8f%T(u|@sYl@(Gou)_h zRpl%qiszgih;!l$i0lR>>T^0N^cd1%8>rCwtj#p?QqM4`5y#NJM>XRadM!ROq@san zJ|&h6ac&N^8C|}K@>JtuXcQ$yw1^IwCdMqrZC*7U1Ud8dZbQf>4EKsm2PdcPvkTWV z;CMrzL&s42HIDcx)rk_VizrblKFy*UAa$5i=v1dRfNSVfD2k4uC_09E@(fi|@>4x} z4Bae>8a+SfrBbK$M90w1Y0Q(P{)m8tV*x}c!ck62Lo|l+$mS`X9gKj~jz9=Q?Z)#t zFou$~_1OQ!5IeOJ0iq}98ER&I$x!Db@27IA1l>_5V$Cob(go0JyvI;AFNUrsf>H6` z8S0pbn;vk&rDa^uGOn+sMloax2cqosk)icO)h-pU-a}hNilS&E73g!O*AON00H{M35A>msiA=!h$d zZoR%AqC;#$O0*+|e4@t?c;cuhjalaIJwG*u%y2Bu&7;gRFB#Hrz$k`x&qx$?r$r%0 z#7$kE10CwvfScMugrSo_ftt|l{NQyMFqEd%Vy(w|A2la6%53>5LmbrlqMkLW>+C2g zx_J!KQ1$7IYu;p&DO$Aq8gZpY$E~NivEo*uUhveJTJ1;avRL@gTUzWE>@;d?C_^xQO`x_HjeW*eo%^#cl0RVkXFv<|7eIMgmTy67e^LU~fclsA_< zdym?UGUO%?0E(cUr=2IcYSkX)Bu_&3DKs?jz)`%XXp)m>ktKIl?9F6Sq|K7Siq+6P zpWs=oLBH0Mwj{Svsmh9<>Q5=qcwpgQ8^0by?wF88rBuDi^(kKX90xjarwp2-x}!0Y zUm3FZ|)drE81^d@FDuWPZ+r|emo;-Pz6md8L2_N=7p_m6)wy=b{&{VZ$`{Llya am_2x@U-u&Tn|}`WtM7gmS`cg0Q}$nE?2gO; literal 0 HcmV?d00001 diff --git a/data/sounds/prompt.wav b/data/sounds/prompt.wav new file mode 100644 index 0000000000000000000000000000000000000000..8a730acce7742bc33e6a5a734a93378aae5f59e0 GIT binary patch literal 2196 zcmW+&U2hx56=i@vkUn_EK6(&hGhwYAP9mWR7Ma4)o=yX2nzq2KK9Z}a6jf_@44rmbIIJt ziG=@dEcW?Fo454)&d+`vi^bl7&rg0Cd;5JS_HL~FmGe~v*2H4}`^8UVKZ*%I^rh=b zPBBKd?O-lk&vQBDoMX#!5GLI7rRT!fkyL_ULa=RP3O7Qkr@r!FCx$QM3_oN-z>H&C zHWi+F8U#{$(j^GN8p5ToMg{8KQ2xUTr9)&C1NeO3HEKf@??2toDh6xj%=P5xE zf>{9RI1WUXQYq!SN1P%D-i?Us`<{R&gaP<67C=@maS&w;pb@~#Ii(!%Q7)Ay7=fLX zaUqsLAs9pUE@aF+B^3ZYa;0F98KnnY!MhJ(13Y2d0Y*IOONJamDS5<}5a`jLRQNpf zxPW{qMV4hD>iW+b&*dQ#92=EtwQ3@+f*`DgzEZv*mW>^>4@?6<7m{Yc-2MThgaA_J z!XkCV$O8*453IUheG5|1C&&54zSJ z!kC~)x{r|(UN>+*Cgd?>$PWp7tP~OZ%yvBDmY#+6rBZ-$iFI^HyrYPSg3Y-r4loi7 zWGQI?YH&<82BE44dzeep*-`GpnzFWChf*I=FQi&MtW_hA{>tJ*TaRX6l+bxgEB(;9 zUYH92+GMNRYxA18EN{&1z(qkPReDohiKbiHv^?C?2k7Q>@Bw~ZO?QpH+!}fxj63h| zzS7gpN}qpmrpK??_5LEUQ{Ow!)@IjQ(`)ACr+2#gMb*4q;};*5Ul%t2roAeeuWqXG ziuh-ODEoA^-TrMqSeb-tEn_Tl|4Ds$9xuPjZP$bThgZcri_cRp^Xax|7hZ2}oo%Nt z_1nFJpnCN?cd^D!Z|V_a{o~xL?ev8aAK0w#WiRwkPtiwBrcdeC_q&^CZlYc#ms#A~ z-kLp33Vh-fW@f6{Tlp+G{F4TKFQAU{?kL-?6HOWf)bx^2h3Z-Q2mq>;#B;&>)0#pSJ4FMp!3a zr%`J+n!MHo)mgUT*cz|w7P92)l1MpmS%?eY?p23or;{H})Rp;$4|}CaBxl;RR5Odp zEjE8Xd@p*B=ERNQ*W=$z)_Mh14MpVFg3f@=jVt{;x1jZacFk@wDthHA()L#UoR{CL zAgfwK^}UdHe9^CuYUA49L$~QQ5UBWGL1`ju+|{z5cqv@89UB{S)R)mPikhd*e!I~Y z=mqjDWNEoOWWAUvl(Ko(AXEfRSDpE@UT+))W4{hfhv!u8ezLN*xv`U~X!uc)DeTw# z=h5JNH0pN7ZqVAtRqM;O&1^E0(XuJ1ksGvY-P6fzzUa5cQ6mVfZ8MWeWo{?)h0n@H z)lmKRU_PHL&IZFMq)m*iQZkoGWHOmsmAe%bgq`!z;&j$IZ4bJv5+t>BJifi2FC{ct z?6m#fd~h*pUPeQSAC>aC+qdo{i>X_>qV0plcrhBi=}fJYyWT2YFRT~SndFW@Zf(@< zPfsS_%|d8Jd96@b{qSBv16}t9i{|vA9Sv0JzO|95Y$SA&4m+Yd>o?CQbY9n}vtAJI z$D4Y*)kWc1@7ZGHb5SkdEfm(0r5!Az-sEI48~yc(Rk@o>09yC<~=N1gZar~61nyt3h_iDTgF~p`p02o(IbF8@uKhROdA9S|*F literal 0 HcmV?d00001 diff --git a/data/sounds/rainbow.wav b/data/sounds/rainbow.wav new file mode 100644 index 0000000000000000000000000000000000000000..bcfdb76b5805357552a327b15d59b5dc19adb14b GIT binary patch literal 17784 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�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 Vet`YwX#bl?zg!fB`YVV5;Qt4U11|so literal 0 HcmV?d00001 diff --git a/data/sounds/stamp.wav b/data/sounds/stamp.wav new file mode 100644 index 0000000000000000000000000000000000000000..8d1457d2612fe9ad24f2a6eb807847d4d7908214 GIT binary patch literal 7562 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 literal 0 HcmV?d00001 diff --git a/data/sounds/thick.wav b/data/sounds/thick.wav new file mode 100644 index 0000000000000000000000000000000000000000..23f10864c3b995e588bfa0704f79ab4064ce7c39 GIT binary patch literal 14666 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 TFA*3)kxxh%`WgvD!jS(5a(Y(0 literal 0 HcmV?d00001 diff --git a/docs/AUTHORS.txt b/docs/AUTHORS.txt new file mode 100644 index 000000000..ababcf22b --- /dev/null +++ b/docs/AUTHORS.txt @@ -0,0 +1,185 @@ +AUTHORS.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright (c) 2003 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + + +June 17, 2002 - February 18, 2003 + + +* Design and Coding: + + Bill Kendrick + New Breed Software + http://www.newbreedsoftware.com/ + + Filled shapes algorythm based on description from + the book "Computer Graphics: C Version," (c) Prentice Hall 1997 + by Donald Hearn and M. Pauline Baker. + [ NOTE: Currently not in use. ] + + Flood fill code based on Wikipedia example: + http://www.wikipedia.org/wiki/Flood_fill/C_example + by Damian Yerrick - http://www.wikipedia.org/wiki/Damian_Yerrick + + 800x600 resolution support patch by: + TOYAMA Shin-ichi + + +* Graphics + + * UI buttons - Created using "AquaPro" button script in The GIMP + Copyright (C) 2001 Denis Bodor + + * UI icons - Created by Bill Kendrick using The GIMP + + * Cartoon representation of "Tux," the Linux penguin + Created by Sam "Criswell" Hart + Tux originally designed by Larry Ewing + http://www.isc.tamu.edu/~lewing/linux/ + + * Brushes created using The GIMP + http://www.gimp.org/ + + +* Fonts + + * "efont-serif.ttf" by Electronic Font Open Laboratory + http://openlab.ring.gr.jp/efont/serif/ + GPL'd, Copyright 2000-2001 Kazuhiko + + * "default_font.ttf" is "FreeSans.ttf" from the Free UCS Outline Fonts. + http://www.freesoftware.fsf.org/freefont/ + GPL'd, Copyright 2002 Primoz Peterlin + et al + + +* Sound + + * Many recorded by Bill Kendrick + * Blocks - Stack of Nintendo NES cartridges hitting each other. + * Blur - Microphone against mousepad. + * Chalk - Microphone against head of hair. + * Fade - Squeaky frog. + + * Many others taken from various sources on the web. + + * Edited using SOX + http://sox.sourceforge.net/ + + * Edited using Audacity + http://www.audacity.org/ + + +* Translations + + * Catalan + Pere Pujal Carabantes + + * Chinese + Wang Jian + + * Czech + Peter Sterba + Martin , + (Coming soon) Ales + + * Danish + Rasmus Erik Voel Jensen [retired] + + * Dutch + Herman Bruyninckx + Geert Stams + + * Finnish + Tarmo Toikkanen + + * French + Jacques Chion + Charles Vidal + + * German + Fabian Franz + + * Greek + The Greek Linux i18n Team + + * Hungarian + Trk Gbor + + * Icelandic + Pjetur G. Hjaltason + + * Indonesian + Tedi Heriyanto + + * Italian + Marco Milanesi + + * Japanese + TOYAMA Shin-ichi + + * Korean + Mark Kim + + * Norwegian + Karl Ove Hufthammer + + * Polish + Arkadiusz Lipiec + + * Portuguese (Brazilian) + Daniel Jos Viana + Dedicated to my beloved daughter Scarlet + + * Portuguese + Ricardo Cruz , + + * Romanian + Laurentiu Buzdugan + + * Spanish + Gabriel Gazzan + + * Slovak + Milan Plzik + + * Swedish + Daniel Andersson [retired] + + * Turkish + Doruk Fisek + + +* Ports and Packaging + + * Windows 32-bit builds + John Popplewell + + * Debian packages + Ben Armstrong + + * NetBSD packages + Thomas Klausner + + * Mac OS X builds + Darrell Walisser + + * BeOS builds + Marcin 'Shard' Konicki + + * Slackware packages + Torsten Giebl + + +* Support / Testers + + Tux4Kids.org, Sam Hart (Tux4Kids project manager) + Many others in the community! (Testing, bug fixes, comments, kudos) + + +See also: CHANGES.txt + diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt new file mode 100644 index 000000000..43b951dc2 --- /dev/null +++ b/docs/CHANGES.txt @@ -0,0 +1,1346 @@ +CHANGES.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright (c) 2003 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + + +2003.February.22 (0.9.10) + * UTF-8 stamp descriptions word-wrap around spaces. + + * Portuguese (from Portugal) translation. + Ricardo Cruz + + * Support for more HTML escape codes in description files. + [ Not yet working ] + + * Czech .po file renamed to the correct "cs.po". + + * ALT+F4 accepted as alternative to [Escape] (to quit) + by Tux Paint's main loop. Windows wasn't rending a 'Close Window' + event on that key combo, like it should (I think). + John Popplewell + + * Windows printing changes: + + Now uses a default printer configuration. + + No pop-up dialog appears unless [ALT] is held while hitting "Print" + button in the toolbox. + + Can be told to save any changes to printer configuration (so it's + used as default configuration from now on) by sending the + "--printcfg" command-line option. + John Popplewell + + * Fancy cursors automatically disabled when in fullscreen mode in Windows. + (A bug in SDL causes the larger cursors to leave trails on the screen.) + + * BeOS version will chdir to where Tux Paint is, if launched from a GUI + (e.g., OpenTracker) + Marcin 'Shard' Konicki + + * Included new "src/Makefile.beos" + Marcin 'Shard' Konicki + + +2003.February.1 (0.9.9) + * Translated into Slovak! + Milan Plzik + + * Updated Norwegian Nynorsk translation. + Karl Ove Hufthammer + + * Added Japanese translation to Tux Paint icon (tuxpaint.desktop) + TOYAMA Shin-ichi + + * Moved Makefile.beos into src/, to keep root directory less cluttered. + + * Incorporated "tuxpaint.nsi" in src/ + (A configuration file for creating an installer program for + Windows, using Nullsoft's Scriptable Install System + ) + John Popplewell + + * Alphabetized locale generation/installation in Makefile + (partly for nicer looking output during compilation, but mostly for + easier maintenance) + + * When a locale requiring its own font can't be used because the font + is missing, Tux Paint now CORRECTLY switches back to default + ($LANG=C, which for Tux Paint is 'American English') + + * Removed some debugging output that shouldn't have been kept in. + + * Locale-detection code made more robust. (Check LC_MESSAGES, not LC_ALL) + TOYAMA Shin-ichi + + * Added support for some useful HTML escape sequences in stamp descriptions + (e.g., "´" for "" ("a" with "'" over it)) + Append ".esc" to the locale code (e.g., "fr.esc=...") in the ".txt" + description files. + + * Wrote "docs/ESCAPES.txt", which covers valid escape sequences. + + * Made 800x600 mode available at runtime, rather than just at compile-time + (available "--800x600" command-line option and "800x600=yes" in conf. file; + overridden by "--640x480" option, or "800x600=no" or "640x480=yes" in conf.) + NOTE: STILL EXPERIMENTAL! 640x480 mode is still default! + + * Fixed 'Magic Tool' selector redraw bug in 800x600 mode. + + +2003.January.27 (0.9.8) + * Updated Makefile to include "beos" and "beos-install" targets. + (Apparently doesn't work yet.) + Based on BeOS Makefile by Marcin 'Shard' Konicki + + * Included Makefile.beos for BeOS. + (Needs updating to match newer upstream Makefile) + Marcin 'Shard' Konicki + + * Added some translations to Tux Paint's icon's comment in tuxpaint.desktop. + + * Updated default tuxpaint.conf to mention all of the newest options. + + * Fixed tuxpaint.desktop's icon so that it works right under Gnome. + + * Fixed crash that could happen when picking an unavailable spot in the + selector on the right. + + * Fixed Japanese locale detection. + TOYAMA Shin-ichi + + * Stamp description translations can be encoded using UTF-8. + Append ".utf8" to the locale code (e.g., "fr.utf8=...") + + * Removed stamp descriptions from Japanese translation file + (src/messages/ja.po). (Will be placed as UTF-8 encoded text in next + Tux Paint stamps package release.) + + +2003.January.26 (0.9.7) + * Translated to Japanese! + TOYAMA Shin-ichi + + * Fixed translation bugs with some save-related prompts. + + * Polish available as "--lang polski" as well. + + * Disabled fancy cursors by default in BeOS. (Support is buggy in SDL.) + Marcin 'Shard' Konicki + + * BeOS updates. + Marcin 'Shard' Konicki + + +2003.January.22 (0.9.6) + * Save directory can be specified ("--savedir") + John Popplewell + + * BeOS printing support! (Makefile needs updating) + Marcin 'Shard' Konicki + + * tuxpaint-import now creates the '~/.tuxpaint/saved' directory, + if it doesn't exist + + * Initial support for arbitrary window sizes. (#define SVGA for 800x600) + TOYAMA Shin-ichi + + * Added a few new colors, renamed some old ones. + TOYAMA Shin-ichi + + * Fixed text tool bug when hitting [Enter]/[Return] past bottom of canvas + + * Gnome and KDE install targets won't kill make process + + * Indonesian available as "--lang bahasa-indonesia" as well. + + +2003.January.13 (0.9.5) + * Romanian translation! + Laurentiu Buzdugan + + * Greek translation! + The Greek Linux i18n Team + + * Polish translation! + Arkadiusz Lipiec + + * French translation update. + Jacques Chion + + * Cleaned up Makefile some. + Made output less verbose during compile & install. + + +2003.January.8 (0.9.4) + * Indonesian translation! + Tedi Heriyanto + + * Changed sparkles so they look less like blobs. + (Thanks to Dave Nelson for the suggestion.) + + * Added a mode that uses XORs ("rubber-band lines") much less: --nooutlines + It should help for very slow machines and using Tux Paint remotely + over a networked X display. + + * The 'Circle' shape no longer switches into rotation mode + (since it never affected the shape!) + + +2003.January.6 (0.9.3) + * Chinese translation! + Wang Jian + + * Fixed bug when testing for printer availability under Windows. + John Popplewell + + * Screen now refreshes when switching back to fullscreen Tux Paint. + John Popplewell + + * Spanish translation update. + Gabriel Gazzan + + * Lots of Spanish documentation updates. + Gabriel Gazzan + + * FAQ categorized + + +2002.December.10 (0.9.2) + * Translated INSTALL.txt, FAQ.txt and PNG.txt documentation to Dutch. + Geert Stams + + * Updated AUTHORS.txt + + * Updated Norwegian documentation (docs/nn/INSTALLERING.txt) + Karl Ove Hufthammer + + * Added initial attempt at keyboard control support + (for mouseless environments): "--keyboard" + + * UTF-8 support working. + + * Korean translation completed! + Mark K. Kim + + * Fixed errors in 'uninstall' target in Makefile + + +2002.November.16 (0.9.1) + * Updated man page. + + * Translated to Catalan. + Pere Pujal Carabantes + + * Added some missing "gettext_noop()" wrappers to some strings. + + * Stamp sound effects played when clicked, even if stamp is already selected. + + * Added more translated documentation directories, with dummy docs. + + * Simplified documentation installation target in Makefile + (and fixed permissions to something more sensible). + + +2002.November.12 (0.9.0) + * Fixed endian issue which caused stamp icons and saved-file thumbnails to + have messed up colors! (Tested on Mac laptop running Mac OS X.) + + * Added FAQ item regarding fullscreen not being in 640x480 under Linux. + (Partially based on libSDL's Linux FAQ: + http://www.libsdl.org/faq.php?action=listentries&category=3#34 ) + + * Added notice about downloading libraries and '-dev' packages under + compiling/Linux section of INSTALL.txt. + + * Rearranged INSTALL.txt some. + + * Converted titlescreen image from JPEG to PNG + (so libJPEG would no longer be required). + + * Updated PNG software list (PNG.txt) + + * Added version number and release date to title screen. + + * Fixed strange undo/redo access bug (redo available after open). + + * Uses "Library/Preferences/tuxpaint" instead of hidden ".tuxpaint" + directory under Mac OS X. + Darrell Walisser + + +2002.November.3 + * HTML documentation cleaned up (no warnings or errors from HTML Tidy!) + + * Updated Norwegian translation of INSTALL.txt (INSTALLERING.txt) + Karl Ove Hufthammer + + * Translated to Hungarian. + Trk Gbor + + * Partly translated to Korean. PO file in an unusable charset, though... + Mark K. Kim + + * Supports locale-specific fonts for languages that need Unicode. + e.g., Korean will use "ko.ttf", if found, for translated strings. + + * Updated Spanish translation. + Gabriel Gazzan + + * Updated French translation. + Jacques Chion + + +2002.October.26 + * Updated German translation. + Fabian Franz + + * Updated Brazilian Portuguese translation. + Daniel Jose Viana + + * Updated Icelandic translation. + Pjetur G. Hjaltason + + * Updated French translation. + Jacques Chion + + * Translated to Czech. + Peter Sterba + Martin + + * Fixed KDE_ICON_PREFIX setting (needed '--expandvars' arg. to kde-config) + Pjetur G. Hjaltason + + * Updated KDE launcher install to place .desktop file where kde-config says to. + + * Updated Gnome launcher install to use `gnome-config --prefix` + + * Now using Links (instead of Lynx) to convert HTML README to text. + + +2002.October.20 + * Updated INSTALL.txt documentation. + + * Updated README.txt documentation. + + * Created HTML version of README documentation, with screenshots! + + * Updated Icelandic translations. + Pjetur G. Hjaltason + + * Updated Norwegian translations. + Karl Ove Hufthammer + + * Installs pt_br documentation now. + + * Created British English (en_GB) translation. (i.e., "color" is "colour") + + +2002.October.19 + * Windows printing updates (src/win_print.c): + - Correct aspect ratio (e.g., circles are now circular). + - Image now centered on the page horizontally + - Printouts work in high-quality mode + - Looks good on John's Epson Stylus Color 860 + - Fixes for possible crashing bugs + John Popplewell + + * Updated Norwegian translations. + Karl Ove Hufthammer + + * Made toolbox, color selector, and object selector titles translatable. + + * Replaced SGML man pages with hand-written nroff. + + * Extensive man page updates. + + +2002.October.6 + * Windows printing support! + John Popplewell + + * Updated Shape tool's tips. + (Thanks to Tarmo for pointing this out.) + + * Fixed 'Great!' sayings (src/great.h) to be wrapped in gettext_noop() + Fabian Franz + + * Fixed forgotten endian issue with stamps (seen on Sparq & PowerPC) + Thanks to Fabian's keen eyes. + + * Finnish updates. + Tarmo Toikkanen + + * Updated Brazilian Portuguese translation. + Daniel Jose Viana + + * Updated Norwegian translations. + Karl Ove Hufthammer + + * Updated Icelandic translations. + Pjetur G. Hjaltason + + * Updated Spanish translation. + Gabriel Gazzan + + * Updated / added more Brazilian Portuguese documentation. + Daniel Jose Viana + + * Removed 'Rubber Stamps' section from 'docs/AUTHORS.txt' + (since Stamps package has its own 'docs/CONTRIBUTORS.txt' document now) + + * Dealt with warning with call to TTF_SizeUNICODE + + +2002.September.29 + * Updated Norwegian documentation. + Karl Ove Hufthammer + + * Updated German translation. + Fabian Franz + + * Fixed problem where some locales wouldn't get translated stamps. + Fabian Franz + + * Various sayings can be used instead of just 'Great!'. See 'src/great.h' + + * Fixes for Win32 + John Popplewell + + * Text tool checks width of character in font, rather than relying on + 'isprint()' - this SHOULD help unicode characters work in the Text tool. + Thanks to Jon Atkins + + * Updated Spanish translation. + Gabriel Gazzan + + * Increased scrollbar repeat speed. + + +2002.September.28 + * Translated to Brazilian Portuguese ('pt_BR'). + (Get with "--lang brazilian", "--lang brazilian-portuguese" or + "--lang portugues-brazilian") + Daniel Jose Viana + + * Fixed 'get_fname()' so that it won't return a directory name with + a trailing slash (if no filename was given). Some 'mkdir()'s don't + like trailing slashes. + Thomas Klausner + + * "lang=" setting is now recognized in configuration files. + + * Default configuration file now exists (Unix/Linux). + Installed as /etc/tuxpaint/tuxpaint.conf. + (Unless 'PREFIX' is not '/usr' or '/usr/local', then it's + installed into $(PREFIX)/etc/tuxpaint/tuxpaint.conf. + Overridable by setting CONFDIR Makefile variable) + Read before "~/.tuxpaintrc". + Reading it can be disabled with "--nosysconfig" on command-line. + + * Added support for "OPTION=no" in config file, as well as + "UNOPTION=yes" (like command-line args. use), so that "~/.tuxpaintrc" + can override any settings in new system config. + (e.g., "noprint=no" or "print=yes" will override a "noprint=yes") + + * Updated INSTALL.txt and README.txt for Windows users. + John Popplewell + + * Updated Spanish documentation. + Gabriel Gazzan + + * Added warnings about untranslated strings ("NOTRANS: ...") to + debugging output. ("#define DEBUG") (Useful for translators.) + + * Added option to disable 'fancy' mouse pointers: --nofancycursors + (since fullscreen under Windows and non-X-Window targets under Linux + currently have problems due to an SDL library bug) + + * Changed 'tuxpaint-import's usage message to reflect that it can import + multiple files at a time, and that it has a "--help" option. + + * Updated 'tuxpaint-import's help message to describe what the program does. + + +2002.September.25 + * Translated to Danish. + Rasmus Erik Voel Jensen + + * Norwegian updates. + Karl Ove Hufthammer + + * Updated Karl's e-mail address in docs. + + +2002.September.24 + * Norwegian translation of INSTALL.txt + Karl Ove Hufthammer + + * Updated Icelandic translations. + Pjetur G. Hjaltason + + * Fixed bug where German translation of stamps wouldn't be used. + Fabian Franz + + * 'Great!' text appears when you use stamps, etc., again. + Replaced with the old tip text (e.g., stamp description, + instructions, etc.) after a moment. + Fabian Franz + + * Prompt and label font is smaller when in "--uppercase" mode. + + * "Open", "Erase" and "Back" buttons in 'Open' dialog are now translatable. + (Still need to translate selector titles (e.g., "Tools", "Colors", etc.)) + + +2002.September.23 + * Replaced key-repeat code with simple SDL-based key repeat. + Fabian Franz + + * Fixed toolbar bug when using 'Save' via [Ctrl]-[S] shortcut. + Fabian Franz + + * Shortcut keys for "Yes" and "No" prompts are now based on the + first character of the translated versions of those words. + (e.g., in Spanish, [S] for "Si", and [N] for "No". + In German, [J] for "Ja", and [N] for "Nein".) + Fabian Franz + + * Added URLs to Windows and Mac software in PNG.txt. + + * README updated. + + * Some documentation translated to German. (See "docs/de/") + (Using Google.com Language Tools) + + * Placeholders created for some other translated documentation. + + * Translated documentation gets installed now. + + * 'Print' tool disabled when picture is blank + (Simply mimicks 'New' tool) + Fabian Franz + + * Mouse wheel now scrolls selector (e.g., list of stamps, brushes, etc.) + (Non-wheel mouse users can try it with mouse buttons 2 and 3 under + X-Window by running: xmodmap -e "pointer = 1 4 5" ) + Fabian Franz + + * Mouse wheel can be disabled with "nowheelmouse=yes" in config., or + "--nowheelmouse" on commandline. + + +2002.September.22 + * Updated Spanish documentation. (Added translation of PNG.txt) + Gabriel Gazzan + + * Updated Norwegian translations. + Karl Ove Hufthammer + + * Free mouse pointer shapes on exit. + John Popplewell + + * Ignore $HOME env. variable under Windows (not used there normally, + but could be - e.g., if the user happens to use CVS) + John Popplewell + + +2002.September.21 + * Selector scroll buttons 'repeat' if mouse is held down on them. + Fabian Franz + + * Rotate mode of shape tool has its own mouse pointer shape. + + * Rotate mode of shape tool warps mouse to '0 degree' rotation spot. + + * Increased threshold of Magic 'Fill' tool. + + * Created "tuxpaint-import" shell script which will take an arbitrary + image file (JPEG, GIF, PNG, etc.) and make a copy available to Tux Paint + (by converting it to an appropriately-sized and -shaped PNG file and + placing it in "~/.tuxpaint/saved/"). Only works under Linux and Unix... + + * Fixed bug where trying to type a Control character in the 'Text' tool + would crash Tux Paint. + + * Some updates to man page (tuxpaint.sgml). Ugh! Help me! + + * Rearranged and reprioritized TODO.txt some more. + + * Blinking cursor in text tool moves right now. + + * Keys repeat in text tool. + + * Fixed bug where 'Fill' could recurse infinitely and crash Tux Paint. + + +2002.September.20 + * Updated AUTHORS.txt + + * Updated README.txt (regarding brushes, stamps, fonts). + + * Added a flood fill ("bucket fill") Magic tool. + Based on http://www.wikipedia.org/wiki/Flood_fill/C_example + by Damian Yerrick - http://www.wikipedia.org/wiki/Damian_Yerrick + + * Flood fill can be faster and lower quality. + #define LOW_QUALITY_FLOOD_FILL, and only exact pixel matches will be + checked for. + + * Thumbnails in 'Open' dialog can be double-clicked to open them. + + * Brushes, stamps and fonts can be stored in the user's + tuxpaint directory. ("~/.tuxpaint/" under Linux and Unix, + "userdata" under Windows.) They go under "brushes", "stamps" and "fonts" + subdirectories, respectively. + + +2002.September.19 + * Updated Spanish documentation. + Gabriel Gazzan + + * Updated INSTALL.txt with steps that Installer EXE goes through. + + * Icelandic translation. + Pjetur G. Hjaltason + + * Color selector and current tool's selector greyed out in 'Open' dialog. + (Good solution for now...) + + * Font and color changes while typing text are reflected by the preview. + + * Background of text preview is dark grey if the rendered text color is light. + + * [Enter] key moves text cursor down one line and starts a new line of text. + + * Undo/Redo works better with text tool. + + * Text tool rendering is clipped to canvas area (no more overwriting + Tux Paint's widgets) + + * Text tool cursor height corresponds to current font's general height. + + * Clicking a new position while entering text moves the current text, + rather than rendering it and starting a new line. + + * Text tool allows broader range of characters + (e.g., uppercase, punctuation, etc.) thanks to + 'event.key.keysym.unicode' values. + + +2002.September.15 + * "Save over the older version...?" prompt can be disabled. + "--saveover" (or "saveover=yes") will always save over the existing file. + "--saveovernew" (or "saveover=new") will always save a new file. + "--saveoverask" (or "saveover=ask") will prompt (the old, and default mode) + (Karl Ove Hufthammer's suggestion) + + * Added option to have Tux Paint grab all keyboard and mouse input. + This should keep the mouse inside Tux Paint's window and override + things like [Alt]-[Tab] window cycling and [Alt]-[Enter] fullscreen + toggling. + + * Context-sensitive mouse pointer shapes! + + * Fixed some indentation anomolies in tuxpaint.c + + * Increased audio buffer even more (2Kbytes) under Windows, for better sound. + John Popplewell + + * Cleaned up memory leaks from 'uppercase()' calls. + John Popplewell + + * Cleaned up loaded fonts when quitting. + John Popplewell + + * Mouse buttons 2 and 3 supported again. (Wheel still not used.) + Partly because kids may get frustrated using 2- and 3-button mice. + Partly due to a lefthand/righthand bug in SDL for Windows in fullscreen. + (Thanks to John Popplewell.) + + +2002.September.14 + * Fixed bug where tool tip would revert to English. + (Thanks to Karl Ove Hufthammer and John Popplewell) + + * Fixed README.txt regarding Norwegian. + + * Update Spanish translation. + Gabriel Gazzan + + * Stamp description no longer replaced with "Great!" when stamp drawn. + (Thanks to Karl Ove Hufthammer for the suggestion.) + + * "Your picture has been saved" prompt when saving-on-quit is now + translated properly. + + * Added "--uppercase" option, which renders all text strings entirely + in uppercase (for children who haven't learned lowercase letters yet). + (Or use "uppercase=yes" in config. file. "--mixedcase" to override config.) + + * Created an Frequently Asked Questions document: FAQ.txt. + + * More compile-time options reported (if set) in "--version" output. + + * Only mouse button 1 (left-click) is used now. All other buttons ignored. + (Avoids problems with mouse wheels causing 'hyper clicking.') + (Perhaps it should be buttons 1 through 3?) + + +2002.September.12 + * Translated to Swedish. + Daniel Andersson + + * More work on the text tool. + (Now activated by default, but still not perfect; see TODO.txt) + + * Fonts loaded from 'data/fonts/' directory. Font selector added! + + +2002.September.11 + * Updated Spanish translations. + Gabriel Gazzan + + * Updated Norwegian translations. + Karl Ove Hufthammer + + * Fixed horrible sounding audio in Win32. + John Popplewell + Thanks to: Gabriel Gazzan + + * Removed "Loading" image. + + * Fixed bug where "New" tool would be disabled if 'Open' was cancelled. + + * Ctrl-N does the same as pushing the 'New' button. + + * Added keyboard shortcuts to README.txt. + + * Reorganized and (kinda) prioritized TODO.txt. + + * Created 16x16, 32x32 and 48x48 icons for KDE. Install them into + wherever "kde-config --install icon" says is good, if 'kde-config' exists. + + * Started working on text tool. (#define ENABLE_TEXT_TOOL to try it out. + Warning: It's unusable!) + + +2002.September.8 + * Fixed bug in Win32 'opendir' + John Popplewell + + * "docbook-to-man" is now optional. (Without it, man page won't be built.) + Thanks to Mike Simons for bash tips. + + * Updated Norwegian translations. + Karl Ove Hufthammer + + * Moved list of stamp ideas from TODO.txt into stamp package's own to-do list. + + * Print tool enabled! (Linux/Unix only; requires NetPBM tools) + + * Print tool can be disabled with "--noprint" on command-line, or + "noprint=yes" in config. file (can be re-enabled with "--print" on + command line). + + * Printing can be restricted to only one print every N seconds, with + "--printdelay=SECONDS" on command-line, or "printdelay=SECONDS" in + config. file. ("--printdelay=0" will disable the restriction). + Thanks to Koyote on #ucd for the idea. + + * Print command can be set (default is "lpr") with "printcommand=COMMAND" + in config. file. + + * 'fopen' opens PNG for write in binary mode ("wb"; for Win32) + + * Thumbnails are now saved (making Open dialog much faster!) + (Existing saved images without thumbnails are given thumbnails the first + time 'Open' is clicked, too!) + + * Files in 'Open' dialog are sorted by filename (aka time/date created). + This gets around new files ending up in 'holes' in the directory structure + where files had been deleted. + + * Added an alpha-blended shadow behind pop-up prompts. + (Can be disabled by #define'ing "NO_PROMPT_SHADOWS" in src/tuxpaint.c) + + * Increased number of files Tux Paint can deal with from 128 to 256. + + * Approx. doubled number of undo buffers. + + * Added progress bar to Save operation. + + +2002.September.6 + * Fixed translation problems in Makefile (installed italian into dutch, + didn't uninstall some of the new ones) + (Thanks to Ben Armstrong) + + * Updated Dutch translation (after testing on some children). + Herman Bruyninckx + + * Updated Norwegian translation (for some new strings). + Karl Ove Hufthammer + + * Fixed misspelling of "occurred" in errors and warnings. + (Thanks to Andries Brouwer for noticing) + + * Reset tool tip after Open dialog goes away. + + * do_save() returns whether there was success, so now if there wasn't, + Tux Paint doesn't think the picture was saved, and won't quit if + you save-on-quit and it failed. + + * A prompt shows up confirming save-on-quit. + + * Fixed problem with CTRL commands not being noticed. + + * Attempted installation skeleton for Japanese translation. + (Nothing translated yet) + + * Changed default font to a Sans Serif font. + From the Free UCS Outline Fonts: + http://www.freesoftware.fsf.org/freefont/ + + * Removed all rubber-stamps. They're now available as a separate download. + (tuxpaint-stamps...) + + * 'loadarbitrary()' won't abort if it can't find any stamps. + + * Brushes tested to make sure they aren't larger than 40x40. + + +2002.August.23 + * Support for SDL's upcoming "WMCLASS" support. + + * Italian translation (it_IT@euro) + Marco Milanesi + + * Dutch translation (nl_BE@euro) + Herman Bruyninckx + + * Added missing Norwegian trans. install (Makefile) and docs. (README.txt) + + * Norwegian available with "--lang norsk" as well. + + * More and updated German translations (especially stamp translations). + Ingo Blechschmidt + + * Fixed nickel stamp (was 'colorable', so came out a solid circle). + + * Renamed US Coin stamps so that they're ordered by value. + + * Added Italian, Turkish and Dutch versions of the GPL. + + * Made cursor in 'Open' dialog look nicer. + + * Made a few of the flower stamps tintable. + + * Support for legacy saved files (BMP format). + (Only issue is when you 'Save over', it actually makes a new file, + since it will be ".png", not ".bmp") + + * Added details on "*PREFIX" variables in Makefile to "INSTALL.txt" + (Spanish version of that file currently has this section in English.) + + * Added animated progress bar ('candy cane' or 'barbershop pole', since + determining percentage of progress is quite difficult!). Displayed + when first starting up, as well as when creating thumbnails for the + 'Open' screen... + + +2002.August.19 + * Translated into Norwegian Nynorsk ("NN") + Karl Ove Hufthammer + + * Finnish translation updated. + Tarmo Toikkanen + + * Updated German translation of some planet stamps. + Ingo Blechschmidt + + +2002.August.19 + * Now saves in PNG format, instead of BMP. (Huge disk space savings!) + (Uses libPNG to save. Note: Previously-saved BMPs can't be loaded. + Sorry! They must be converted to PNG.) + + * If 'current' image didn't exist, it won't ask if you wish to replace it + when you go to save. + + * Added US coins, flowers and flags to rubber stamps. + (c) Justin Zeigler 2002 Administered by The Project Impresarios of GOVIA. + http://govia.osef.org/ + + * Tool buttons disabled when 'Open' dialog is displayed. + Fabian Franz + + * Stamps can be colored using the color picker. + (Certain stamps can have this enabled. For example, right now, the + mathematical and musical stamps do.) The stamp really becomes a kind + of limited brush. Create a "STAMP.dat" file for the stamp, and stick + the word "colorable" in it.) + (Thanks to Fabian Franz for the suggestion.) + + * Stamps can be tinted using the color picker. + (Certain stamps can have this enabled.) The stamp's brightness and + saturation are kept, but the hue of the currently-picked color is used. + Create a "STAMP.dat" file for the stamp, and stick the word + "tintable" in it.) + + * LOCALE_PREFIX, the location where translation files (".mo") should be + installed, is now based on PREFIX in Makefile. Source has been + updated with a 'bindtextdomain()' (which was used under Win32), + which lets 'gettext()' find the translations, regardless of where + they are. (e.g., you can install as a non-root user now) + + * Updated Spanish translations of stamp descriptions. + Gabriel Gazzan + + * Selector sound effect doesn't get played when a stamp is selected + which has its own sound effect. + + +2002.August.12 + * Removed rainbow magic tool's ending sound effect altogether. + + * Rubber stamp outlines now based on shape of the stamp. + (Simple rectangle outlines available by #define'ing + "LOW_QUALITY_STAMP_OUTLINE" at the top of src/tuxpaint.c) + (Thanks to Ben Armstrong for the idea.) + + * Rubber stamps can have their own sound effects (STAMP.wav) + (.e.g, "pict.wav" is the sound for the stamp "pict.png") + + * Rubber stamps can have localized sound effects (STAMP_LOCALE.wav) + (e.g., "pict_fr.wav" and "pict_es.wav") + + * Rubber stamps directory moved out of "data/images/" and into just "data/" + + * Brush directory moved out of "data/images" and into just "data/" + + * Moved "Rainbow" and "Sparkles" magic tool buttons to the top of the + list, since they actually DRAW things. (So if a child goes to the + "Magic" tool while the picture is still blank, they can at least draw + without having to pick a specific magic tool.) + + * Fixed bug where tall and narrow stamps' thumbnails would be aligned wrong + in their buttons on the selector. + + * Surface locking and unlocking moved to outside loops/etc., + rather than being WITHIN putpixel() and getpixel() functions! + (i.e., locking occurs far less frequently, so some things, like XOR lines, + should be sped up a little) + + * Animated filled shapes. (On slower machines, it takes quite a while, + so you can't tell if it's doing anything!) + + * Added Turkish translation. (Buggy - charset needs fixing.) + Doruk Fisek + + * Resampled and trimmed some sound files (to make them smaller). + + +2002.August.9 + * Translated button labels to German. + Fabian Franz + + * Translated button labels to Spanish. + Gabriel Gazzan + + * Translated button labels to French. + Jacques Chion + + * Button label font size larger, and scaled horizontally (may squish + aspect ratio!) to fit within the buttons. (Makes things more readable.) + + * Check LANG env. variable if LC_ALL contains "LC_MESSAGES" + Fabian Franz + + * Disabled warnings about description-less stamp images. + Fabian Franz + + * Translated documentation directories created (docs/es, docs/fr, etc.) + + * Documentation (AUTHORS.txt, INSTALL.txt) translated to Spanish. + Gabriel Gazzan + + * Spanish, French and German versions of GPL (COPYING.txt) included. + + * Stamp images divded into "photo" and "cartoon" subdirectories, + reorganized some. + + * More space images added (from NASA and NSSDC public domain photo + gallery). Planets renamed #_name.png, so that they sort in the + correct order. + + * List of stamp ideas added to TODO.txt + + * Previous tool re-selected if you go to Quit and then decide not to. + + * Fixed bug where Redo and Undo wouldn't make Save available if you've + just saved... + + * Fixed bug opening tuxpaint.cfg under Windows. + John Popplewell + + * Fixed minor font opening/closing bugs + John Popplewell + + * Disabled sound effect wait when finishing a rainbow magic tool draw. + (Should interrupt now, instead?) + John Popplewell + + * Translated more stamp descriptions into German, French and Spanish + (Using Google.com's language tool.) + + * Added mathematic stamps (numbers, operators) + + * Added musical stamps (clefs, notes, rests, keys) + + +2002.August.4 + * Added "Thick" and "Thin" magical effects. + + * Reorganized some magical effects in the selector menu. + + * Text removed from button icons, and can now be translated using gettext! + + * Filled shapes enabled. (Using lame radius-based fill, rather than + scanline fill. Couldn't get scanline fill to work yet, though.) + + * Renamed 'slash' brushes so they sort more nicely in the brush selector. + + * Gave magical effects their own sound effects. + + * Used a better 'harp' intro sound effect. + + +2002.August.2 + * Fixed command-line argument parsing bug. + Ben Armstrong + + * Fixed broken Spanish translation .po file. + Gabriel Gazzan + + * Made "wait_for_sfx()" less CPU-intensive and hopefully better on Win32(?) + John Popplewell + + * Made sure "LC_MESSAGES" dirs created by "install" in Makefile + Ben Armstrong + + * Added "uninstall" target to Makefile + + * Changed font to "efont.ttf", a completely free, GPL'd font. + (See: http://openlab.ring.gr.jp/efont/serif/) + + * Added info to INSTALL.txt on making a TuxPaint shortcut under Windows, + and using it to alter command-line options. + John Popplewell + + * Added info to README.txt on ways to change language settings under + Windows. + John Popplewell + + * Win32 updates for LOCALE-related stuff. + John Popplewell + + * Reduced font size (some text was overlapping or going off the screen). + (Needs more testing) + + * Updated AUTHORS.txt some. + + +2002.July.31 + * Fixed memory deallocation bug in "Open" dialog function. + + * Translated to Finnish + Tarmo Toikkanen + + * Update Spanish translation + Gabriel Gazzan + + * Switched from using #define'd strings for translations to using "gettext" + and ".po" files (see src/messages/) + Fabian Franz + (Thanks to Andreas Best for help getting locales working) + + * Added "--locale" option to override current locale at runtime + (e.g. "--locale de_DE@euro") + + * Added "--lang" option to override current locale at runtime, + using human-readable language names. + (e.g. "--locale german" or "--locale deutsch") + + * Stamp descriptions now support multiple languages. + (Each description MUST be on one line - multiple lines no longer supported!) + + Lines beginning with "xx=" (where "xx" is a locale abbreviation, + e.g. "de" for German or "es" for Spanish) provide text for their + respective locales. + + * Added details about stamp multilingual support to "README.txt". + + * Added more requirements to the "INSTALL.txt" documentation. + + * Supports a "~/.tuxpaintrc" file which contains default options + (e.g. "fullscreen=yes") + + * Command-line options to disable some options + (e.g., "--windowed" to override a "fullscreen=yes" in .tuxpaintrc) + + +2002.July.24 + * Fixed a bug where Ctrl-Z and Ctrl-R would do Undo and Redo even if you + shouldn't be able to. + + * Undo and Redo disable shape tool if it's active. + (Really, Undo should only become available AFTER the shape has been + rotated and drawn...) + + +2002.July.23 + * Added more (and updated some) French translations. + Jacques Chion + + * Added first German translations + Fabian Franz + + * Fixed word-wrap issue with prompt button labels. + + * Multiple lines now read properly in stamp description (.txt) files. + + * Makefile changes (PREFIX and icon/launcher pathes) + to suit the Filesystem Heirarchy Standard + ( http://www.debian.org/doc/packaging-manuals/fhs/ ) + Ben Armstrong + + +2002.July.19 + * Installs man page into /usr/share/man by default now. + + * Man page now gzipped when installed. + + * No longer installs "INSTALL.txt" when installing documents. + + * Install target split up (install-bin, install-data, etc.) in Makefile + Ben Armstrong + + * Added initial help display ("--help") + + * Installs PNG icon (for use by GNOME, KDE, etc.) + Installs into /usr/share/pixmaps/ + + * Installs launcher into GNOME and KDE menus (under "Graphics") + + * Created 32x32, 24 color (based on "cmap.xpm") XPM icon. + Installs into /usr/X11R6/include/X11/pixmaps/ + + * Added descriptive comments to Makefile + + * Fixed SDL surface manipulation calls (now locks/unlocks, etc.) + John Popplewell + + * Added option for simple Shape tool (no rotation mode) + (--simpleshapes) + + * Version info. shows whether or not + LOW_QUALITY_THUMBNAILS, LOW_QUALITY_COLOR_SELECTOR + and NOSOUND ("make nosound") were set at compile-time. + (Along with version number, version date, and LANG setting.) + + * Title/credits screen now dismisses itself after 5 seconds. + + * Added Sparkle and Fade "Magic" tools. + + * Added accelerator keys: Ctrl-Z and Ctrl-R for Undo and Redo. + Ctrl-S and Ctrl-O for Save and Open. + + * Fixed "Open" dialog cursor movement bug when scrolling up. + + * Added key controls for "Open" dialog: Arrows to move. + Space or Enter to open. Escape to go back. Ctrl-D to Delete. + + * Added key controls for pop-up prompts. Y or Enter to accept. + N or Escape to cancel. + + +2002.July.18 + * Replaced perror() with internal win32_perror() under WIN32. + John Popplewell + + * Chalk doesn't grab black around the edges. + John Popplewell + + * Added version, usage, and copying displays (--version, --usage, --copying) + John Popplewell + + * Added fullscreen and quiet modes (--fullscreen, --nosound) + John Popplewell + + * Chalk and Blur don't grab black from the edges anymore. + John Popplewell + + * Added option to disable "Quit" button (--noquit) + + * Man page updated. + + * Man page now gets installed. + + +2002.July.17 + * Added Flip, Mirror, Rainbow and Chalk "Magic" tools. + + * Shape's and Magic's tools' tips now appear when they are selected. + + * "New" tool wasn't available after opening a saved picture. Fixed. + + * Animated prompt window's appearance and dismissal. + + * Now prompts to save a changed image before opening. + + * Save's "camera shutter" sound effect now plays completely before quitting. + + * "Open" screen now has a cursor (select image, then click "Open" to load) + + * "Open" screen can now delete pictures (select image, then click "Erase") + + * Changes to "clean" Makefile target + Ben Armstrong + + * Initial man page (docbook SGML, from Debian package of Tux Paint) + Ben Armstrong + + * More memory freeing cleanups. + John Popplewell + + +2002.July.07 + * Added the shape tool and began work on filled shapes. (Currently disabled) + (Fill algo. based on text in "Computer Graphics: C Version," + (c) Prentice Hall 1997 by Donald Hearn and M. Pauline Baker) + + * Added Save command. + + * Added Open command. + + * "Current" image (opened on launch) now referred-to by ID + (current_id.txt), not saved as its own image (current.bmp). + + * More memory freeing cleanups. + John Popplewell + + +2002.July.03 + * Added French language support (#define LANG_FR) + Most translation by: Charles Vidal + Some thanks to Babelfish. + + * Added Spanish language suppirt (#define LANG_ES) + Translation thanks to Babelfish. + + * Changed UI font to "chicago.ttf", since it supports international chars. + + * Now strips (converts to spaces) newlines in rubber stamp .txt files + (mainly to avoid the "end of line" glyph in the new Chicago font). + + * Explicitly free up memory at exit + John Popplewell + + +2002.July.02 + * Fixed bug in get_fname() under Windows. + John Popplewell + + * Moved word-wrap text code from draw_tux_text() into its own + function: wordwrap_text() + + * Added Yes/No prompt function: do_prompt() + + * Prompts before "New" (erase current image) and "Quit" actions. + + +2002.June.30 + * Incorporated 32x32 icon for Win32. + John Popplewell + + * Added "nosound" Makefile target (to build without sound or SDL_mixer) + + * Auto-saves current image (to "$HOME/.tuxpaint/current.bmp") when you + quit. Auto-loads it when you start back up (if it's available). + (Creates "$HOME/.tuxpaint/" directory if it doesn't exist.) + (Under Windows, it is simply in the "userdata/" folder in Tux Paint's + folder.) + + * Data file installation moved to /usr/local/lib/tuxpaint/ by default. + (Mike Simons) + + * Documentation now installed into /usr/local/share/doc/tuxpaint/. + + * Created first "Magic" tools: "Blur," "Blocks" and "Negative." + + * Color-picker disabled when not applicable. + + +2002.June.27 [unreleased] + * Moved source into src/, documentation into docs/ and object files to obj/ + + * Added "Copyright" to documentation and source files. + + * Added True Type font (TTF) support, using SDL_ttf library. + + * Added word-wrap support to the "Tip text" + + * Incorporated stuff for Windows builds (win_dirent.c/h, some #defines). + John Popplewell + + * Cast surface->pixels more in get/putpixel() calls + John Popplewell + + * Created "INSTALL.txt" documentation on compiling and installing + + * Created "PNG.txt" documentation on creating PNG images + + * Extensive updates and fleshing-out of README.txt + + +2002.June.17a + * Made new title screen. (Better picture, plus credits.) + + * Title screen says "Loading" while loading data. + + * Title screen remains until keypress or mouse click. + + * Created "install" target in Makefile + + * Created "AUTHORS.txt" + + * Included "COPYING.txt" (GNU GPL v.2), as the software is GPL. + + +2002.June.17 + * Lightened grey around outside of selected (dark) tool/selector buttons. + + * Selector has a different sound, now. (No longer same as toolbar buttons) + + * Made see-through brush more transparent. + + * Replaced most calls to SDL_Flip() with calls to SDL_UpdateRect(). + + * Thumbnails rendering made high-quality. (Can be disabled by + #define LOW_QUALITY_THUMBNAILS) + + * Stamp and brush files are sorted alphabetically by filename now. + + * Color selector buttons look like other interface buttons. + (Can be made simple again by #define LOW_QUALITY_COLOR_SELECTOR) + + * "Tip text" and cartoon tux added for tools, colors and, if available, + stamps. (Store respective ".txt" files in data/images/stamps/) + + +2002.June.16 + * Initial release. + Supports brushes, stamps, lines, eraser, sound effects. + diff --git a/docs/COPYING.txt b/docs/COPYING.txt new file mode 100644 index 000000000..60549be51 --- /dev/null +++ b/docs/COPYING.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/docs/ESCAPES.txt b/docs/ESCAPES.txt new file mode 100644 index 000000000..d1507a743 --- /dev/null +++ b/docs/ESCAPES.txt @@ -0,0 +1,214 @@ +ESCAPES.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright 2003 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +February 1, 2003 - February 1, 2003 + + +About Escape Sequences +---------------------- + Tux Paint allows the use of HTML escape sequences in the description files + (".txt" files) it reads when loading Rubber Stamp images. + (See README.txt for more information on creating your own rubber stamps.) + + The escape sequences provide a way of entering hard-to-type ASCII + characters into the text file. The escape sequences Tux Paint supports + are identical to those used in HTML pages on the web. + + A sequence begins with the "&" character (ampersand), and ends with + the ";" character (semicolon). For example: "ï". + + +Using Escape Sequences in Tux Paint +----------------------------------- + To use a string containing escape sequences in a rubber stamp description + file (the ".txt" file that corresponds to the stamps ".png" image file), + the line containing the translated description should begin with the + language's "locale code", followed by ".esc=" and the description text. + + For example, a Spanish translation of a string in plain ASCII might look + like this: + + es=Hola + + A Spanish translation that takes advantage of the HTML-style escape + sequences might look like this: + + es.esc=¡Hola niños! + + + In both cases, the "es" at the beginning of the line corresponds to the + language of the description: Spanish. + (See README.txt for a list of languages supported by Tux Paint, and their + locale codes.) + + In the latter example, the "¡" is an 'escape sequence' that + represents an inverted (upside-down) exclamation point ("!"), which + looks like this: "" + + The "ñ" represents an "n" with a tilde ("~") over it. + The Spanish character: "" + + + This example could have been easily done using plain ASCII, like so: + + es=Hola nios! + + However, depending on the text editor being used, typing that literally + may not be an easy task. Typing the letters A-Z and punctuation should + never be a problem, though. This is why escape sequence support was + added to Tux Paint. + + + NOTE: Since the ampersand character ("&") is used to denote the beginning + of an escape sequence, it itself must be escaped. Use the sequence "&" + + For example, in plain ASCII: + + xx=This & that + + Should be written as follows when using the escape sequence mode: + + xx.esc=This & that + + + The following is INCORRECT, and will end up truncated to just the word "This": + + xx.esc=This & that + + + +Supported Escape Sequences +-------------------------- + Sequence Character Description + -------- --------- ----------- + à Lowercase a grave + á Lowercase a acute + â Lowercase a circumflex + ã Lowercase a tilde + ä Lowercase a umlaut + å Lowercase a ring + + À Uppercase A grave + Á Uppercase A acute + Â Uppercase A circumflex + Ã Uppercase A tilde + Ä Uppercase A umlaut + Å Uppercase A ring + + æ Lowercase ae ligature + Æ Uppercase AE ligature + + ç Lowercase c cedil + Ç Uppercase C cedil + + ð Lowercase eth + Ð Uppercase Eth + + è Lowercase e grave + é Lowercase e acute + ê Lowercase e circumflex + ë Lowercase e umlaut + + È Uppercase E grave + É Uppercase E acute + Ê Uppercase E circumflex + Ë Uppercase E umlaut + + ì Lowercase i grave + í Lowercase i acute + î Lowercase i circumflex + ï Lowercase i umlaut + + Ì Uppercase I grave + Í Uppercase I acute + Î Uppercase I circumflex + Ï Uppercase I umlaut + + ò Lowercase o grave + ó Lowercase o acute + ô Lowercase o circumflex + õ Lowercase o tilde + ö Lowercase o umlaut + ø Lowercase o slash + + Ò Uppercase O grave + Ó Uppercase O acute + Ô Uppercase O circumflex + Õ Uppercase O tilde + Ö Uppercase O umlaut + Ø Uppercase O slash + + ù Lowercase u grave + ú Lowercase u acute + û Lowercase u circumflex + ü Lowercase u umlaut + + Ù Uppercase U grave + Ú Uppercase U acute + Û Uppercase U circumflex + Ü Uppercase U umlaut + + ñ Lowercase n tilde + Ñ Uppercase N tilde + + ß Sharp S + + ý Lowercase y acute + ÿ Lowercase y umlaut + Ý Uppercase Y acute + + þ Lowercase thorn + Þ Uppercase thorn + + ¡ Inverted exclamation + ¿ Inverte question mark + « Left angle quotes + » Right angle quotes + + ¢ Cent sign + £ Pound sign + ¤ Currency sign + ¥ Yen sign + + ´ Acute + ¸ Cedil + ¨ Umlaut + + " " Quote + & & Ampersand + < < Less than + > > Greater than + + ± Plus-minus sign + × Times sign + ÷ Division sign + ¬ Logical not sign + ° Degree sign + µ Micro sign + + ¼ One quarter (1/4) + ½ One half (1/2) + ¾ Three quarters (3/4) + + ¹ Superscript 1 + ² Superscript 2 + ³ Superscript 3 + + ¦ Broken vertical bar + § Section sign + ¶ Paragraph sign + · * Middle dot + + © Copyright sign ((C)) + ® Registered trademark sign ((R)) + + ª Feminine ordinal + º Masculine ordinal + ­ Soft hyphen + ¯ Spacing macron + diff --git a/docs/FAQ.txt b/docs/FAQ.txt new file mode 100644 index 000000000..119691003 --- /dev/null +++ b/docs/FAQ.txt @@ -0,0 +1,438 @@ +FAQ.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright 2003 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +September 14, 2002 - January 5, 2003 + + +Frequently Asked Questions: +--------------------------- + Drawing-related + --------------- + Why can't you have different sized erasers, or use the brush shapes? + -------------------------------------------------------------------- + The eraser is meant for quickly erasing large parts of the picture. + + You'll notice it simply turns parts of the picture white. You can + get the result you want (different sizes and/or shapes) by simply using + the "Brush" tool and the white paint color! :^) + + + The Magic "Fill" Tool Looks Bad + ------------------------------- + Tux Paint is probably comparing exact pixel colors when filling. + This is faster, but looks worse. Run the command "tuxpaint --version" + from a command line, and you should see, amongst the other output: + "Low Quality Flood Fill enabled". + + To change this, you must rebuild Tux Paint from source. + Be sure to remove or comment out any line that says: + + #define LOW_QUALITY_FLOOD_FILL + + in the "tuxpaint.c" file in the "src" directory. + + Stamp outlines are always rectangles + ------------------------------------ + Tux Paint was built with low-quality (but faster) stamp outlines. + + Rebuild Tux Paint from source. Be sure to remove or comment out any + line that says: + + #define LOW_QUALITY_STAMP_OUTLINE + + in the "tuxpaint.c" file in the "src" directory. + + + Interface Problems + ------------------ + Stamp thumbnails in the Stamp Selector look bad + ----------------------------------------------- + Tux Paint was probably compiled with the faster, lower quality + thumbnail code enabled. Run the command: "tuxpaint --version" from + a command line. If, amongst the other output, you see the text: + "Low Quality Thumbnails enabled", then this is what's happening. + + Rebuild Tux Paint from source. Be sure to remove or comment out any + line that says: + + #define LOW_QUALITY_THUMBNAILS + + in the "tuxpaint.c" file in the "src" directory. + + + Pictures in the 'Open' dialog look bad + -------------------------------------- + "Low Quality Thumbnails" is probably enabled. + See: "Stamp thumbnails in the Stamp Selector look bad", above. + + + The color picker buttons are ugly squares, not pretty buttons! + -------------------------------------------------------------- + Tux Paint was probably compiled with the nice looking color + selector buttons disabled. Run the command: "tuxpaint --version" from + a command line. If, amongst the other output, you see the text: + "Low Quality Color Selector enabled", then this is what's happening. + + Rebuild Tux Paint from source. Be sure to remove or comment out any + line that says: + + #define LOW_QUALITY_COLOR_SELECTOR + + in the "tuxpaint.c" file in the "src" directory. + + + The Mouse Pointer Leaves Trails! + -------------------------------- + In Windows under fullscreen, and in Linux under fullscreen outside of + X-Window, the SDL library has a bug where the mouse pointer can leave + trails of 'garbage' on the screen. + + Until there's a fix, either don't use fullscreen, or disable the + fancy mouse pointer shapes using the configuration option: + + nofancycursors=yes + + Or by using this command-line argument: + + --nofancycursors + + + All of the text is in uppercase! + -------------------------------- + The "uppercase" option is on. + + If you're running Tux Paint from a command-line, make sure you're + not giving it an "--uppercase" option. + + If you're running Tux Paint by double-clicking an icon, check the + properties of the icon to see if "--uppercase" is listed as a + command-line argument. + + If "--uppercase" isn't being sent on the command line, check Tux Paint's + configuration file ("~/.tuxpaintrc" under Linux and Unix, + "tuxpaint.cfg" under Windows) for a line reading: "uppercase=yes". + + Either remove that line, or simply run Tux Paint with the command-line + argument: "--mixedcase", which will override the uppercase setting. + + + Tux Paint is in a weird language! + --------------------------------- + Make sure your locale setting is correct. + See "Tux Paint won't switch to my language", below. + + + Tux Paint won't switch to my language + ------------------------------------- + Linux and Unix users: Make sure the locale is available + ------------------------------------------------------- + Make sure the locale you want is available. Check your + "/etc/locale.gen" file. See README.txt for the locales + Tux Paint uses (especially when using the "--lang" option). + + Note: Debian users can simply run "dpkg-reconfigure locales" + if the locales are managed by dpkg. + + If you're using the "--lang" command-line option + ------------------------------------------------ + Try using the "--locale" command-line option, or your operating system's + locale settings (e.g., the "$LANG" environment variable), and + please e-mail us regarding your trouble. + + If you're using the "--locale" command-line option + -------------------------------------------------- + If this doesn't work, please e-mail us regarding your trouble. + + If you're trying to use your Operating System's locale + ------------------------------------------------------ + If this doesn't work, please e-mail us regarding your trouble. + + Make sure you have the necessary font + ------------------------------------- + Some translations require their own font. Chinese and Korean, + for example, need Chinese and Korean TrueType Fonts installed + and placed in the proper location, respectively. + + The appropriate fonts for such locales can be downloaded from the + Tux Paint website: + + http://www.newbreedsoftware.com/tuxpaint/download/fonts.php3 + + + Printing + -------- + I get the message "You can't print yet!" when I go to print! + ------------------------------------------------------------ + The "print delay" option is on. You can only print once every X seconds. + + If you're running Tux Paint from a command-line, make sure you're + not giving it a "--printdelay=..." option. + + If you're running Tux Paint by double-clicking an icon, check the + properties of the icon to see if "--printdelay=..." is listed as + a command-line argument. + + If a "--printdelay=..." option isn't being sent on the command line, + check Tux Paint's configuration file ("~/.tuxpaintrc" under Linux and Unix, + "tuxpaint.cfg" under Windows) for a line reading: "printdelay=...". + + Either remove that line, set the delay value to 0 (no delay), or + decrease the delay to a value you prefer. (See README.txt). + Or, you can simply run Tux Paint with the command-line argument: + "--printdelay=0", which will override the configuration file's setting, + and allow unlimited printing. (You won't have to wait between prints.) + + + I simply can't print! The button is greyed out! + ------------------------------------------------ + The "no print" option is on. + + If you're running Tux Paint from a command-line, make sure you're + not giving it a "--noprint" option. + + If you're running Tux Paint by double-clicking an icon, check the + properties of the icon to see if "--noprint" is listed as an argument. + + If "--noprint" isn't on the command-line, check Tux Paint's configuration + file ("~/.tuxpaintrc" under Linux and Unix, "tuxpaint.cfg" under Windows) + for a line reading: "noprint=yes". + + Either remove that line, or simply run Tux Paint with the command-line + argument: "--print", which will override the configuration file's setting. + + + Saving + ------ + Tux Paint always saves over my old picture! + ------------------------------------------- + The "save over" option is enabled. (This disables the prompt + that would appear when you click 'Save.') + + If you're running Tux Paint from a command-line, make sure you're + not giving it a "--saveover" option. + + If you're running Tux Paint by double-clicking an icon, check the + properties of the icon to see if "--saveover" is listed as an argument. + + If "--saveover" isn't on the command-line, check Tux Paint's configuration + file ("~/.tuxpaintrc" under Linux and Unix, "tuxpaint.cfg" under Windows) + for a line reading: "saveover=yes". + + Either remove that line, or simply run Tux Paint with the command-line + argument: "--saveoverask", which will override the configuration file's + setting. + + Also, see "Tux Paint always saves a new picture!", below. + + + Tux Paint always saves a new picture! + ------------------------------------- + The "never save over" option is enabled. (This disables the prompt + that would appear when you click 'Save.') + + If you're running Tux Paint from a command-line, make sure you're + not giving it a "--saveovernew" option. + + If you're running Tux Paint by double-clicking an icon, check the + properties of the icon to see if "--saveovernew" is listed as an argument. + + If "--saveovernew" isn't on the command-line, check Tux Paint's + configuration file ("~/.tuxpaintrc" under Linux and Unix, "tuxpaint.cfg" + under Windows) for a line reading: "saveover=new". + + Either remove that line, or simply run Tux Paint with the command-line + argument: "--saveoverask", which will override the configuration file's + setting. + + Also, see "Tux Paint always saves over my old picture!", above. + + + Audio Problems + -------------- + There's no sound! + ----------------- + First, check the obvious: + + * Are you certain you're using the computer with the sound card? ;^) + * Are your speakers connected and turned on? + * Is the volume turned up on your speakers? + * Is the volume turned up in your Operating System's "mixer?" + * Are any other programs running that use sound? (They may be + 'blocking' Tux Paint) + + If sound seems to work otherwise (and you're sure no other program is + "blocking" the sound device), then Tux Paint is either running with + a "no sound" option or was compiled with sound support disabled entirely. + + To test whether sound support was enabled when Tux Paint was compiled, + run Tux Paint from a command line, like so: + + tuxpaint --version + + If, amongst the other information, you see "Sound disabled", then the + version of Tux Paint you're running has sound disabled. Recompiled + Tux Paint, and be sure NOT to build the "nosound" target. + (i.e., don't run "make nosound") Be sure SDL_mixer library is available! + + If Tux Paint wasn't build without sound support, make sure you're + not running Tux Paint with the "--nosound" option as a command-line + argument. + + If it's not, then check the configuration file ("~/.tuxpaintrc" under + Linux and Unix, and "tuxpaint.cfg" under Windows) for a line reading: + "nosound=yes". + + Either remove that line, or simply run Tux Paint with the command-line + argument: "--sound", which will override the configuration file's setting. + + + The sound effects sound strange + ------------------------------- + This could have to do with how SDL and SDL_mixer were initialized. + (The buffer size chosen.) + + Please e-mail us with details about your computer system. + (Operating system and version, sound card, which version of Tux Paint + you're running (run "tuxpaint --version" to verify), and so on.) + + + Fullscreen Mode Problems + ------------------------ + When I run Tux Paint full-screen and ALT-TAB out, the window turns black! + ------------------------------------------------------------------------- + This is apparently a bug in the SDL library. Sorry. + + + When I run Tux Paint full-screen, it has large borders around it + ---------------------------------------------------------------- + Linux users - Your X-Window server is probably not set with the + ability to switch to the desired resolution: 640 x 480. + (This is typically done manually under the XFree86 server by + pressing [Ctrl]-[Alt]-[KeyPad Plus] and -[KeyPad Minus].) + + For this to work, your monitor must support that resolution, and + you need to have it listed in your X server configuration. + + Check the "Display" subsection of the "Screen" section of your + XFree86 configuration file (typically "/etc/X11/XF86Config-4" or + "/etc/X11/XF86Config", depending on the version of XFree86 you're + using; 3.x or 4.x, respectively). + + Add "640x480" to the appropriate "Modes" line. (e.g., in + the "Display" subsection that contains 16-bit color depth ("Depth 16"), + which is what Tux Paint tries to use.) + + e.g.: + + Modes "1280x1024" "1024x768" "800x600" "640x480" + + Note that some Linux distributions have tools that can make these + changes for you. Debian users can run the command + "dpkg-reconfigure xserver-xfree86" as root, for example. + + + Tux Paint keeps running in Full Screen mode - I want it windowed! + ----------------------------------------------------------------- + The "fullscreen" option is set. + + If you're running Tux Paint from a command-line, make sure you're + not giving it a "--fullscreen" option. + + If you're running Tux Paint by double-clicking an icon, check the + properties of the icon to see if "--fullscreen" is listed as an argument. + + If "--fullscreen" isn't on the command-line, check Tux Paint's + configuration file ("~/.tuxpaintrc" under Linux and Unix, + "tuxpaint.cfg" under Windows) for a line reading: "fullscreen=yes". + + Either remove that line, or simply run Tux Paint with the command-line + argument: "--windowed", which will override the configuration file's + setting. + + + Other Probelms + -------------- + Tux Paint keeps writing weird messages to the screen / to a text file + --------------------------------------------------------------------- + A few messages are normal, but if Tux Paint is being extremely verbose + (like listing the name of every rubber-stamp image it finds while loading + them), then it was probably compiled with debugging output turned on. + + Rebuild Tux Paint from source. Be sure to remove or comment out any + line that says: + + #define DEBUG + + in the "tuxpaint.c" file in the "src" directory. + + + Tux Paint is using options I didn't specify! + -------------------------------------------- + By default, Tux Paint first looks at configuration files for + options. + + Unix and Linux + -------------- + Under Unix and Linux, it first examines the system-wide + configuration file, located here: + + /etc/tuxpaint/tuxpaint.conf + + It then examines the user's personal configuration file: + + ~/.tuxpaintrc + + Finally, any options sent as command-line arguments are used. + + Windows + ------- + Under Windows, Tux Paint first examines the configuration file: + + tuxpaint.cfg + + Then, any options sent as command-line arguments are used. + + + This means that if anything is set in a configuration file that + you don't want set, you'll need to either change the config. file + (if you can), or override the option on the command-line. + + For example, if "/etc/tuxpaint/tuxpaint.conf" includes an option + to disable sound: + + nosound=yes + + You can reenable sound by either adding this option to your own + ".tuxpainrc" file: + + sound=yes + + Or by using this command-line argument: + + --sound + + + Linux and Unix users can also disable the system-wide configuration + file by including the following command-line argument: + + --nosysconfig + + Tux Paint will then only look at "~/.tuxpaintrc" and command-line + arguments to determine what options should be set. + + +Help / Contact +-------------- + Any questions you don't see answered? Let me know! + + bill@newbreedsoftware.com + + Or post to our 'tuxpaint-dev' mailing list: + + http://www.newbreedsoftware.com/tuxpaint/lists/ + diff --git a/docs/INSTALL.txt b/docs/INSTALL.txt new file mode 100644 index 000000000..5ef9af0c8 --- /dev/null +++ b/docs/INSTALL.txt @@ -0,0 +1,299 @@ +INSTALL.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright 2002 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +June 27, 2002 - November 5, 2002 + + +Requirements: +------------- + Windows Users: + -------------- + The Windows version of Tux Paint comes pre-packaged with the + necessary pre-compiled libraries (in ".DLL" form), so no extra + downloading is needed. + + libSDL + ------ + Tux Paint requires the Simple DirectMedia Layer Library (libSDL), + an Open Source multimedia programming library available under the + GNU Lesser General Public License (LGPL). + + Along with libSDL, Tux Paint depends on a number of other SDL 'helper' + libraries: SDL_Image (for graphics files), SDL_TTF (for True Type Font + support) and, optionally, SDL_Mixer (for sound effects). + + Linux/Unix Users: + ----------------- + The SDL libraries are available as source-code, or as RPM or Debian + packages for various distributions of Linux. They can be downloaded + from: + + libSDL: http://www.libsdl.org/ + SDL_Image: http://www.libsdl.org/projects/SDL_image/ + SDL_TTF: http://www.libsdl.org/projects/SDL_ttf/ + SDL_Mixer: http://www.libsdl.org/projects/SDL_mixer/ [OPTIONAL] + + They are also typically available along with your Linux distribution + (e.g. on an installation CD, or available via package maintainance + software like Debian's "apt-get"). + + NOTE: When installing from packages, be sure to ALSO install the + "-devel" versions of the packages. (For example, install both + "SDL-1.2.4.rpm" AND "SDL-1.2.4-devel.rpm") + + Other Libraries: + ---------------- + Tux Paint also takes advantage of a number of other + free, LGPL'd libraries. Under Linux, just like SDL, they should + either already be installed, or are readily available for installation + as part of your Linux distribution. + + libPNG + ------ + Tux Paint uses PNG (Portable Network Graphics) format for its + data files. SDL_image will require libPNG be installed. + + http://www.libpng.org/pub/png/libpng.html + + FreeType2 + --------- + Tux Paint uses TTF (True Type Font) fonts for drawing text. + SDL_ttf will require the FreeType2 library. + + http://www.freetype.org/ + + gettext + ------- + Tux Paint uses your system's locale settings along with the + "gettext" library to support various languages (e.g., Spanish). + You'll need the gettext library installed. + + http://www.gnu.org/software/gettext/ + + NetPBM Tools [OPTIONAL] + ------------------------ + Under Linux and Unix, the NetPBM tools are what are currently + used for printing. (A PNG is generated by TuxPaint, and converted + into a PostScript using the 'pngtopnm' and 'pnmtops' NetPBM command-line + tools.) + + http://netpbm.sourceforge.net/ + + +Compiling and Installation: +--------------------------- + Tux Paint is released under the GNU General Public License (GPL) + (see "COPYING.txt" for details), and therefore the 'source code' to + the program is included. + + Windows Users: + -------------- + Compiling: + ---------- + Tux Paint comes pre-compiled for Windows, so no compilation is + necessary. [Eventually, information on rebuilding for Windows + will be placed here. In the meantime, you're on your own. Sorry!] + + Installer: + ---------- + Double-click the Tux Paint installer executable (.EXE file) and + follow the instructions. + + First, you will be asked to agree to the license. + (It is the GNU General Public License (GPL), which is also + available as "COPYING.txt".) + + You will then be asked whether you want to install shortcuts + to Tux Paint in your Windows Start Menu and on your Windows Desktop. + (Both options are set by default.) + + Then you will be asked where you wish to install Tux Paint. + The default should be suitable, as long as there is space available. + Otherwise, pick a different location. + + At this point, you can click 'Install' to install Tux Paint! + + Changing the Settings Using the Shortcut: + ----------------------------------------- + To change program settings, right-click on the TuxPaint shortcut + and select 'Properties' (at the bottom). + + Make sure the 'Shortcut' tab is selected in the window that + appears, and examine the 'Target:' field. You should see + something like this : + + "C:\Program Files\TuxPaint\TuxPaint.exe" + + You can now add command-line options which will be enabled when + you double-click the icon. + + For example, to make the game run in fullscreen mode, + with simple shapes (no rotation option) and in French, + add the options (after 'TuxPaint.exe'), like so: + + "C:\Program Files\TuxPaint\TuxPaint.exe" -f -s --lang french + + (See "README.txt" for a full list of available command-line options.) + + If you make a mistake or it all disappears use Ctrl-Z to undo or + just hit the [ESC] key and the box will close with no changes made + (unless you pushed the "Apply" button!). + + When you have finished, click "OK." + + If Something Goes Wrong + ----------------------- + If, when you double-click on the shortcut to run the game, + nothing happens, it is probably because some of these command-line + options are wrong. Open an Explorer like before, and look for a file + called 'stderr.txt' in the TuxPaint folder. + + It will contain a description of what was wrong. Usually it will + just be due to incorrect character-case (capital 'Z' instead + of lowercase 'z') or a missing (or extra) '-' (dash). + + + Linux/Unix Users: + ----------------- + Compiling: + ---------- + Note: Currently, Tux Paint does not use autoconf/automake, so there + is no "./configure" script to run. (Sorry!) Compiling should be + straight-forward though, assuming everything Tux Paint needs is installed. + + To compile the program from source, simply run the following command + from a shell prompt (e.g., "$"): + + $ make + + Disabling Sound at Compile-time: + -------------------------------- + Alternatively, if you don't have a sound card, or would prefer to build + the program with no sound support (therefore, SDL_mixer not having to be + installed), you can run "make" with "nosound" as the 'target', instead: + + $ make nosound + + + If you get errors: + ------------------ + If you receive any errors during compile-time, make sure you have + the appropriate libraries installed (see above). If using packaged + versions of the libraries (e.g., RPMs under RedHat or DEBs under Debian), + be sure to get the corresponding "-dev" or "-devel" packages as well, + otherwise you won't be able to compile Tux Paint (and other programs) + from source! + + + Installing: + ----------- + Assuming no fatal errors occured, you can now install the program + so that it can be run by users on the system. By default, this must + be done by the "root" user ('superuser'). Switch to "root" by + typing the command: + + $ su + + Enter "root"'s password at the prompt. You should now be "root" + (with a prompt like "#"). To install the program and its + data files, type: + + # make install + + Finally, you can switch back to your regular user by exiting + superuser mode: + + # exit + + + NOTE: By default, "tuxpaint", the executable program, is + placed in "/usr/local/bin/". The data files (images, sounds, etc.) + are placed in "/usr/local/share/tuxpaint/". + + + Changing Where Things Go + ------------------------ + You can change where things will go by using the 'prefix' + variables in Makefile. "PREFIX" is the basis of where all other + files go, and is, by default, set to "/usr/local". + + Other variables are: + BIN_PREFIX + Where the "tuxpaint" binary will be installed. + (Set to "$(PREFIX)/bin" by default - e.g., "/usr/local/bin") + + DATA_PREFIX + Where the data files (sound, graphics, brushes, stamps, fonts) + will go, and where Tux Paint will look for them when it's run. + (Set to "$(PREFIX)/share/tuxpaint") + + DOC_PREFIX + Where the documentation text files (the "docs" directory) will go. + (Set to "$(PREFIX)/share/doc/tuxpaint") + + MAN_PREFIX + Where the manual page for Tux Paint will go. + (Set to "$(PREFIX)/share/man") + + ICON_PREFIX $(PREFIX)/share/pixmaps + X11_ICON_PREFIX $(PREFIX)/X11R6/include/X11/pixmaps + GNOME_PREFIX $(PREFIX)/share/gnome/apps/Graphics + KDE_PREFIX $(PREFIX)/share/applnk/Graphics + Where the icons and launchers (for GNOME and KDE) will go. + + LOCALE_PREFIX + Where the translation files for Tux Paint will go, and where + Tux Paint will look for them. + (Set to "$(PREFIX)/share/locale/") + (Final location of a translation file will be + under the locale's directory (e.g., "es" for Spanish), + within the "LC_MESSAGES" subdirectory.) + + +Uninstalling Tux Paint: +----------------------- + Windows + ------- + Using the Uninstaller + --------------------- + If you installed the Start Menu shortcuts (the default), then go to the + TuxPaint folder and select "Uninstall". A box will be displayed that will + confirm that you are about to uninstall Tux Paint and, if you are certain + that you want to permanently remove Tux Paint, click on the 'Uninstall' + button. + + When it has finished, click on the close button. + + It is also possible to use the entry "TuxPaint (remove only)" in the + Control Panel Add/Remove programs section. + + NOTE: because the pictures that are created are saved inside the Tux Paint + folder, this folder and the 'userdata' folder inside it are NOT removed. + + + Linux + ----- + Within the Tux Paint source directory (where you compiled Tux Paint), + you can use a 'Makefile' target to uninstall Tux Paint. + By default, this must be done by the "root" user ('superuser'). + (See the installation instructions above for further information.) + + Switch to "root" by typing the command: + + $ su + + Enter "root"'s password at the prompt. You should now be "root" + (with a prompt like "#"). To uninstall the program and its data files + (the default rubber-stamp images, if any, will also be removed), type: + + # make uninstall + + Finally, you can switch back to your regular user by exiting + superuser mode: + + # exit diff --git a/docs/PNG.txt b/docs/PNG.txt new file mode 100644 index 000000000..c5eb7b667 --- /dev/null +++ b/docs/PNG.txt @@ -0,0 +1,142 @@ +PNG.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright 2002 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +June 27, 2002 - November 7, 2002 + + +About PNGs +---------- + PNG is the Portable Network Graphic format. It is an open standard, + not burdened by patents (like GIFs). It is a highly compressed format + (though not "lossy" like JPEGs - lossiness allows files to be much + smaller, but introduces 'mistakes' in the image when saved), and + supports 24-bit color (16.7 million colors) as well as a full + "alpha channel" - that is, each pixel can have a varying degree of + transparency. + + For more information, visit: http://www.libpng.org/ + + These features (openness, losslessness, compression, transparency/alpha) + make it the best choice for Tux Paint. (Tux Paint's support for the PNG + format comes from the Open Source SDL_Image library, which in turn gets + it from the libPNG library.) + + Support for many colors allows photo-quality "rubber stamp" images to + be used in Tux Paint, and alpha transparency allows for high-quality + "paint brushes." + + +How To Make PNGs +---------------- + The following is a very _brief_ list of ways to create PNGs or + convert existing images into PNGs. + + + Linux/Unix Users + ---------------- + The GIMP + -------- + The best tool with which to create PNG images for use in Tux Paint is + the GNU Image Manipulation Program ("The GIMP"), a high-quality + Open Source interactive drawing and photo editing program. + + It's probably already installed on your Linux system. If not, it's + almost definitely available on the install CD or from your + distribution's download site. Otherwise: + + http://www.gimp.org/ + + + Krita + ----- + Krita is a painting and image editing application for KOffice. + + http://koffice.kde.org/krita/ + + + NetPBM + ------ + The Portable Bitmap tools (collectively known as "NetPBM") is a + collection of Open Source command-line tools which convert to and from + various formats, including GIF, TIFF, BMP, PNG, and many more. + + NOTE: The NetPBM formats (Portable Bitmap: PBM, + Portable Greymap: PGM, Portable Pixmap: PPM, and the catch-all + Portable Any Map: PNM) do not support alpha, so any transparency + information (e.g. from within a GIF) will be lost! Use The GIMP! + + It's probably already installed on your Linux system. If not, it's + almost definitely available on the install CD or from your + distribution's download site. Otherwise: + + http://netpbm.sourceforge.net/ + + + cjpeg/djpeg + ----------- + The "cjpeg" and "djpeg" command-line programs convert between + the NetPBM Portable Any Map (PNM) format and JPEGs. + + It's probably already installed on your Linux system. + (Under Debian, this is available in the package "libjpeg-progs".) + If not, it's almost definitely available on the install CD or from + your distribution's download site. Otherwise: + + ftp://ftp.uu.net/graphics/jpeg/ + + + Windows Users + ------------- + Canvas (Deneba) + http://www.deneba.com/products/canvas8/default2.html + + CorelDRAW (Corel) + http://www.corel.com/ + + Fireworks (Macromedia) + http://macromedia.com/software/fireworks/ + + Illustrator (Adobe) + http://www.adobe.com/products/illustrator/main.html + + Paint Shop Pro (Jasc) + http://www.jasc.com/products/psp/ + + Photoshop (Adobe) + http://www.adobe.com/products/photoshop/main.html + + + Macintosh Users + --------------- + Canvas (Deneba) + http://www.deneba.com/products/canvas8/default2.html + + CorelDRAW (Corel) + http://www.corel.com/ + + Fireworks (Macromedia) + http://macromedia.com/software/fireworks/ + + GraphicConverter (Lemke Software) + http://www.lemkesoft.de/us_gcabout.html + + Illustrator (Adobe) + http://www.adobe.com/products/illustrator/main.html + + Photoshop (Adobe) + http://www.adobe.com/products/photoshop/main.html + + +More Info. +---------- + The libPNG website lists image editors and image converts that + support the PNG format: + + http://www.libpng.org/pub/png/pngaped.html + http://www.libpng.org/pub/png/pngapcv.html + diff --git a/docs/README.txt b/docs/README.txt new file mode 100644 index 000000000..0449cc0b8 --- /dev/null +++ b/docs/README.txt @@ -0,0 +1,1431 @@ + Tux Paint + 0.9.10 + + A simple drawing program for children + + Copyright 2003 by Bill Kendrick + New Breed Software + + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 14, 2002 - February 22, 2003 + + ---------------------------------------------------------------------- + + About + + "Tux Paint" is a drawing program for young children. It provides a + simple interface and fixed canvas size, and provides access to previous + images using a thumbnail browser (e.g., no access to the underlying + file-system). + + Unlike popular drawing programs like "The GIMP," it has a very limited + tool-set. However, it provides a much simpler interface, and has + entertaining, child-oriented additions such as sound effects. + + ---------------------------------------------------------------------- + + License: + + Tux Paint is an Open Source project, Free Software released under the + GNU General Public License (GPL). It is free, and the 'source code' + behind the program is available. (This allows others to add features, + fix bugs, and use parts of the program in their own GPL'd software.) + + See COPYING.txt for the full text of the GPL license. + + ---------------------------------------------------------------------- + + Objectives: + + Easy and Fun + Tux Paint is meant to be a simple drawing program for young + children. It is not meant as a general-purpose drawing tool. It + is meant to be fun and easy to use. Sound effects and a cartoon + character help let the user know what's going on, and keeps them + entertained. There are also extra-large cartoon-style mouse + pointer shapes. + + Extensibility + Tux Paint is extensible. Brushes and "rubber stamp" shapes can + be dropped in and pulled out. For example, a teacher can drop in + a collection of animal shapes and ask their students to draw an + ecosystem. Each shape can have a sound which is played, and + textual facts which are displayed, when the child selects the + shape. + + Portability + Tux Paint is portable among various computer platforms: Windows, + Linux, etc. The interface looks the same among them all. + Tux Paint runs suitably well on older systems (like a Pentium + 133), and can be built to run better on slow systems. + + Simplicity + There is no direct access to the computer's underlying + intricacies. The current image is kept when the program quits, + and reappears when it is restarted. Saving images requires no + need to create filenames or use the keyboard. Opening an image + is done by selecting it from a collection of thumbnails. Access + to other files on the computer is restricted. + + ---------------------------------------------------------------------- + + Other Documentation + + Other documentation included with Tux Paint (in the "docs" + folder/directory) include: + + * AUTHORS.txt + List of authors and contributors + * CHANGES.txt + Summary of changed between releases + * COPYING.txt + Copying license (The GPL) + * INSTALL.txt + Instructions for compiling/installing, when applicable + * PNG.txt + Notes on creating PNG format images for use in Tux Paint + * README.txt + (This file) + * TODO.txt + A list of pending features or bugs needing fixed + + ---------------------------------------------------------------------- + + Using Tux Paint + +Building Tux Paint + + To compile Tux Paint from source, please refer to INSTALL.txt. + + ---------------------------------------------------------------------- + +Loading Tux Paint + + Linux/Unix Users + + Run the following command at a shell prompt (e.g., "$"): + + $ tuxpaint + + It is also possible to make a launcher button or icon (e.g. in GNOME + or KDE). See your desktop environment's documentation for details... + + If any errors occur, they will be displayed on the terminal (to + "stderr"). + + ---------------------------------------------------------------------- + + Windows Users + + [Icon] + Tux Paint + + Simply double-click the "Tux Paint" icon on the desktop (which was + created for you by the installer), or double-click the + "tuxpaint.exe" icon in the 'Tux Paint' folder on your computer. + + If any errors occur, they will be stored in a file named + "stderr.txt" in the Tux Paint folder. + + See "INSTALL.txt" for details on customizing the 'Shortcut' icon to + Tux Paint, which lets you easily set program options (via the + command-line). + + To run Tux Paint and provide command-line options directly, you will + need to run "tuxpaint.exe" from an MSDOS Prompt window. (See + "INSTALL.txt" for details.) + + ---------------------------------------------------------------------- + +Options + + Configuration File + + You can create a simple configuration file for Tux Paint, which it + will read each time you start it up. + + The file is simply a plain text file containing the options you want + enabled: + + Linux Users + + The file you should create is called ".tuxpaintrc" and it should + be placed in your home directory. (a.k.a. "~/.tuxpaintrc" or + "$HOME/.tuxpaintrc") + + Before this file is read, a system-wide configuration file is + read. (By default, this configuration has no settings enabled.) It + is located at: + + /etc/tuxpaint/tuxpaint.conf + + You can disable reading of this file altogether, leaving the + settings as defaults (which can then be overridden by your + ".tuxpaintrc" file and/or command-line arguments) by using the + command-line option: + + --nosysconfig + + Windows Users + + The file you should create is called "tuxpaint.cfg" and it should + be placed in Tux Paint's folder. + + You can use NotePad or WordPad to create this file. Be sure to + save it as Plain Text, and make sure the filename doesn't have + ".txt" at the end... + + Available Options + + The following settings can be set in the configuration file. + (Command-line settings will override these. See below.) + + fullscreen=yes + Run the program in full screen mode, rather than in a + window. + + 800x600=yes + Run the program at 800x600 resolution (EXPERIMENTAL), + rather than the smaller 640x480 resolution. + + nosound=yes + Disable sound effects. + + noquit=yes + Disable the on-screen "Quit" button. (Pressing the + [Escape] key or clicking the window's close button still + works.) + + noprint=yes + Disable the printing feature. + + printdelay=SECONDS + Restrict printing so that printing can occur only once + every SECONDS seconds. + + printcommand=COMMAND + + (Linux and Unix only) + + Use the command COMMAND to print a PNG file. If not set, + the default command is: + + pngtopnm | pnmtops | lpr + + Which converts the PNG to a NetPBM 'portable anymap', then + converts that to a PostScript file, and finally sends that + to the printer, using the "lpr" command. + + printcfg=yes + + (Windows only) + + Tux Paint will use a printer configuration file when + printing. Push the [ALT] key while clicking the 'Print' + button in Tux Paint to cause a Windows print dialog window + to appear. + + (Note: This only works when not running Tux Paint in + fullscreen mode.) Any configuration changes made in this + dialog will be saved to the file "userdata/print.cfg", and + used again, as long as the "printcfg" option is set. + + simpleshapes=yes + Disable the rotation step of the 'Shape' tool. Click, drag + and release is all that will be needed to draw a shape. + + uppercase=yes + All text will be rendered only in uppercase (e.g., "Brush" + will be "BRUSH"). Useful for children who can read, but + who have only learned uppercase letters so far. + + grab=yes + + Tux Paint will attempt to 'grab' the mouse and keyboard, + so that the mouse is confined to Tux Paint's window, and + nearly all keyboard input is passed directly to it. + + This is useful to disable operating system actions that + could get the user out of Tux Paint [Alt]-[Tab] window + cycling, [Ctrl]-[Escape], etc. This is especially useful + in fullscreen mode. + + nowheelmouse=yes + This disables support for the wheel on mice that have it. + (Normally, the wheel will scroll the selector menu on the + right.) + + keyboard=yes + + This allows the keyboard arrow keys to be used to control + the mouse pointer. (e.g., for mouseless environments.) + + The [Arrow] keys move the mouse pointer. [Space] acts as + the mouse button. + + nooutlines=yes + + In this mode, much simpler outlines and 'rubber-band' + lines are displayed when using the Lines, Shapes, Stamps + and Eraser tools. + + This can help when Tux Paint is run on very slow + computers, or displayed on a remote X-Window display. + + savedir DIRECTORY + + Use this option to change where Tux Paint saves pictures. + By default, this is "~/.tuxpaint/saved/" under Linux and + Unix, and "userdata\" under Windows. + + This can be useful in a Windows lab, where Tux Paint is + installed on a server, and children run it from + workstations. You can set savedir to be a folder in their + home directory. (e.g., "H:\tuxpaint\") + + Note: When specifying a Windows drive (e.g., "H:\"), you + must also specify a subdirectory. + + saveover=yes + This disables the "Save over the old version...?" prompt + when saving an existing file. With this option, the older + version will always be replaced by the new version, + automatically. + + saveover=new + This also disables the "Save over the old version...?" + prompt when saving an existing file. This option, however, + will always save a new file, rather than overwrite the + older version. + + saveover=ask + + (This option is redundant, since this is the default.) + + When saving an existing drawing, you will be first asked + whether to save over the older version or not. + + lang=LANGUAGE + + Run Tux Paint in one of the supported languages. Possible + choice for LANGUAGE currently include: + + +-------------------------------------------------+ + |english |american-english | | + |--------------------+------------------+---------| + |british-english |british | | + |--------------------+------------------+---------| + |brazilian-portuguese|portuges-brazilian|brazilian| + |--------------------+------------------+---------| + |catalan |catala | | + |--------------------+------------------+---------| + |chinese | | | + |--------------------+------------------+---------| + |czech |cesky | | + |--------------------+------------------+---------| + |danish |dansk | | + |--------------------+------------------+---------| + |dutch | | | + |--------------------+------------------+---------| + |finnish |suomi | | + |--------------------+------------------+---------| + |french |francais | | + |--------------------+------------------+---------| + |german |deutsch | | + |--------------------+------------------+---------| + |greek | | | + |--------------------+------------------+---------| + |hungarian |magyar | | + |--------------------+------------------+---------| + |icelandic |islenska | | + |--------------------+------------------+---------| + |indonesian |bahasa-indonesia | | + |--------------------+------------------+---------| + |italian |italiano | | + |--------------------+------------------+---------| + |japanese | | | + |--------------------+------------------+---------| + |korean | | | + |--------------------+------------------+---------| + |norwegian |nynorsk | | + |--------------------+------------------+---------| + |polish |polski | | + |--------------------+------------------+---------| + |portuguese |portugues | | + |--------------------+------------------+---------| + |romanian | | | + |--------------------+------------------+---------| + |spanish |espanol | | + |--------------------+------------------+---------| + |slovak | | | + |--------------------+------------------+---------| + |swedish |svenska | | + |--------------------+------------------+---------| + |turkish | | | + +-------------------------------------------------+ + + ---------------------------------------------------------------------- + + Overriding System Config. Options using .tuxpaintrc + + If any of the above options are set in + "/etc/tuxpaint/tuxpaint.config", you can override them in your own + "~/.tuxpaintrc" file. + + For true/false options, like "noprint" and "grab", you can simply + say they equal 'no' in your "~/.tuxpaintrc" file: + + noprint=no + uppercase=no + + Or, you can use options similar to the command-line override + options described below. For example: + + print=yes + mixedcase=yes + + ---------------------------------------------------------------------- + + Command-Line Options + + Options can also be issued on the command-line when you start + Tux Paint. + + --fullscreen + --800x600 + --nosound + --noquit + --noprint + --printdelay=SECONDS + --printcfg + --simpleshapes + --uppercase + --grab + --keyboard + --nooutlines + --nowheelmouse + --savedir DIRECTORY + --saveover + --saveovernew + --lang LANGUAGE + These enable or correspond to the configuration file + options described above. + + --windowed + --640x480 + --sound + --quit + --print + --printdelay=0 + --noprintcfg + --complexshapes + --mixedcase + --dontgrab + --mouse + --outlines + --wheelmouse + --saveoverask + These options can be used to override any settings made in + the configuration file. (If the option isn't set in the + configuration file(s), no overriding option is necessary.) + + --locale locale + + Run Tux Paint in one of the support languages. See the + "Choosing a Different Language" section below for the + locale strings (e.g., "de_DE@euro" for German) to use. + + (If your locale is already set, e.g. with the "$LANG" + environment variable, this option is not necessary, since + Tux Paint honors your environment's setting, if possible.) + + --nosysconfig + + Under Linux and Unix, this prevents the system-wide + configuration file, "/etc/tuxpaint/tuxpaint.conf", from + being read. + + Only your own configuration file, "~/.tuxpaintrc", if it + exists, will be used. + + ---------------------------------------------------------------------- + + Command-Line Informational Options + + The following options display some informative text on the screen. + Tux Paint doesn't actually start up and run afterwards, however. + + --version + Display the version number and date of the copy of + Tux Paint you are running. It also lists what, if any, + compile-time options were set. (See INSTALL.txt and + FAQ.txt). + + --copying + Show brief license information about copying Tux Paint. + + --usage + Display the list of available command-line options. + + --help + Display brief help on using Tux Paint. + + ---------------------------------------------------------------------- + + Choosing a Different Language + + Tux Paint has been translated into a number of languages. To access + the translations, you can use the "--lang" option on the + command-line to set the language (e.g. "--lang spanish") or use the + "lang=" setting in the configuration file (e.g., "lang=spanish"). + + Tux Paint also honors your environment's current locale. (You can + override it on the command-line using the "--locale" option (see + above).) + + The following languages are supported: + + +--------------------------------------------------------+ + | Locale Code | Language | Language | + | | (native name) | (English name) | + |---------------+-------------------+--------------------| + |C | |English | + |---------------+-------------------+--------------------| + |ca_ES |Catalan |Catal`a | + |---------------+-------------------+--------------------| + |cs_CZ |Cesky |Czech | + |---------------+-------------------+--------------------| + |da_DK |Dansk |Danish | + |---------------+-------------------+--------------------| + |de_DE@euro |Deutsch |German | + |---------------+-------------------+--------------------| + |el_GR.UTF8 (*) | |Greek | + |---------------+-------------------+--------------------| + |en_GB | |British English | + |---------------+-------------------+--------------------| + |es_ES@euro |Espanol |Spanish | + |---------------+-------------------+--------------------| + |fi_FI@euro |Suomi |Finnish | + |---------------+-------------------+--------------------| + |fr_FR@euro |Franc,ais |French | + |---------------+-------------------+--------------------| + |hu_HU |Magyar |Hungarian | + |---------------+-------------------+--------------------| + |id_ID |Bahasa Indonesia |Indonesian | + |---------------+-------------------+--------------------| + |is_IS |Islenska |Icelandic | + |---------------+-------------------+--------------------| + |it_IT@euro |Italiano |Italian | + |---------------+-------------------+--------------------| + |ja_JP.UTF-8 (*)| |Japanese | + |---------------+-------------------+--------------------| + |ko_KR.UTF-8 (*)| |Korean | + |---------------+-------------------+--------------------| + |nn_NO |Norsk (nynorsk) |Norwegian Nynorsk | + |---------------+-------------------+--------------------| + |nl_NL@euro | |Dutch | + |---------------+-------------------+--------------------| + |pl_PL |Polski |Polish | + |---------------+-------------------+--------------------| + |pt_BR |Portuges Brazileiro|Brazilian Portuguese| + |---------------+-------------------+--------------------| + |pt_PT |Portuges |Portuguese | + |---------------+-------------------+--------------------| + |ro_RO | |Romanian | + |---------------+-------------------+--------------------| + |sk_SK |Slovak | | + |---------------+-------------------+--------------------| + |sv_SE@euro |Svenska |Swedish | + |---------------+-------------------+--------------------| + |tr_TR@euro | |Turkish | + |---------------+-------------------+--------------------| + |zh_CN | |Chinese (Simplified)| + +--------------------------------------------------------+ + + (*) - These languages require their own fonts, since they are not + represented using a Latin character set, like the others. See + Special Fonts, below. + + Setting Your Environment's Locale + + Changing your locale will affect much of your environment. + + As stated above, along with letting you choose the language at + runtime using command-line options ("--lang" and "--locale"), + Tux Paint honors the global locale setting in your environment. + + If you haven't already set your environment's locale, the + following will briefly explain how: + + Linux/Unix Users + + First, be sure the locale you want to use is enabled by editing + the file "/etc/locale.gen" on your system and then running the + program "locale-gen" as root. + + Note: Debian users may be able to simply run the command + "dpkg-reconfigure locales". + + Then, before running Tux Paint, set your "$LANG" environment + variable to one of the locales listed above. (If you want all + programs that can be translated to be, you may wish to place the + following in your login script; e.g. ~/.profile, ~/.bashrc, + ~/.cshrc, etc.) + + For example, in a Bourne Shell (like BASH): + + export LANG=es_ES@euro ; \ + tuxpaint + + And in a C Shell (like TCSH): + + setenv LANG es_ES@euro ; \ + tuxpaint + + ---------------------------------------------------------------------- + + Windows Users + + Tux Paint will recognize the current locale and use the + appropriate files by default. So this section is only for people + trying different languages. + + The simplest thing to do is to use the '--lang' switch in the + shortcut (see "INSTALL.txt"). However, by using an MSDOS Prompt + window, it is also possible to issue a command like this: + + set LANG=es_ES@euro + + ...which will set the language for the lifetime of that DOS + window. + + For something more permanent, try editing your computer's + 'autoexec.bat' file using Windows' "sysedit" tool: + + Windows 95/98 + + 1. Click on the 'Start' button, and select 'Run...'. + 2. Type "sysedit" into the 'Open:' box (with or without + quotes). + 3. Click 'OK'. + 4. Locate the AUTOEXEC.BAT window in the System Configuration + Editor. + 5. Add the following at the bottom of the file: + + set LANG=es_ES@euro + + 6. Close the System Configuration Editor, answering yes to save + the changes. + 7. Restart your machine. + + To affect the entire machine, and all applications, it is + possible to use the "Regional Settings" control panel: + + 1. Click on the 'Start' button, and select + 'Settings | Control Panel'. + 2. Double click on the "Regional Settings" globe. + 3. Select a language/region from the drop down list. + 4. Click 'OK'. + 5. Restart your machine when prompted. + + Special Fonts + + Some languages require special fonts be installed. These font + files (which are in TrueType format (TTF)), are much too large to + include with the Tux Paint download, and are available separately. + (See the table above, under the "Choosing a Different Language" + section.) + + When running Tux Paint in a language that requires its own font, + Tux Paint will try to load the font file from its system-wide + "fonts" directory (under a "locale" subdirectory). The name of the + file corresponds to the first two letters in the 'locale' code of + the language (e.g., "ko" for Korean, "ja" for Japanese, "zh" for + Chinese). + + For example, under Linux or Unix, when Tux Paint is run in Korean + (e.g., with the option "--lang korean"), Tux Paint will attempt to + load the following font file: + + /usr/share/tuxpaint/fonts/locale/ko.ttf + + You can download fonts for supported languages from Tux Paint's + website, http://www.newbreedsoftware.com/tuxpaint/. (Look in the + 'Fonts' section under 'Download.') + + Under Unix and Linux, you can use the Makefile that comes with the + font to install the font in the appropriate location. + + ---------------------------------------------------------------------- + +Title Screen + + When Tux Paint first loads, a title/credits screen will appear. + + [Title Screenshot] + + Once loading is complete, press a key or click on the mouse to + continue. (Or, after about 30 seconds, the title screen will go away + automatically.) + + ---------------------------------------------------------------------- + +Main Screen + + The main screen is divided into the following sections: + + Left Side: Toolbar + + The toolbar contains the drawing and editing controls. + +[Tools: Paint, Stamp, Lines, Shapes, Text, Magic, Undo, Redo, Eraser, New, + Open, Save, Print, Quit] + + Middle: Drawing Canvas + + The largest part of the screen, in the center, is the drawing + canvas. This is, obviously, where you draw! + + [(Canvas)] + + Right Side: Selector + + Depending on the current tool, the selector shows different + things. e.g., when the Paint Brush tool is selected, it shows + the various brushes available. When the Rubber Stamp tool is + selected, it shows the different shapes you can use. + + [Selectors - Brushes, Letters, Shapes, Stamps] + + Lower: Colors + + A palette of available colors are shown near the bottom of the + screen. + + [Colors - Black, White, Red, Pink, Orange, Yellow, Green, Cyan, Blue, + Purple, Brown, Grey] + + Bottom: Help Area + + At the very bottom of the screen, Tux, the Linux Penguin, + provides tips and other information while you draw. + + (For example: 'Pick a shape. Click to pick the center, drag, then let go +when it is the size you want. Move around to rotate it, and click to draw + it.) + + ---------------------------------------------------------------------- + +Available Tools + + Drawing Tools + + Paint (Brush) + + The Paint Brush tool lets you draw freehand, using various + brushes (chosen in the Selector on the right) and colors + (chosen in the Color palette towards the bottom). + + If you hold the mouse button down, and move the mouse, it + will draw as you move. + + As you draw, a sound is played. The bigger the brush, the + lower the pitch. + + ---------------------------------------------------------------------- + + Stamp (Rubber Stamp) + + The Stamp tool is like a rubber stamp, or stickers. It lets + you paste pre-drawn or photographic images (like a picture + of a horse, or a tree, or the moon) in your picture. + + As you move the mouse around, an outline follows the mouse, + showing where the stamp will be placed. + + Different stamps can have different sound effects. + + ---------------------------------------------------------------------- + + Lines + + This tool lets you draw straight lines using the various + brushes and colors you normally use with the Paint Brush. + + Click the mouse and hold it to choose the starting point of + the line. As you move the mouse around, a thin 'rubber-band' + line will show where the line will be drawn. + + Let go of the mouse to complete the line. A "sproing!" sound + will play. + + ---------------------------------------------------------------------- + + Shapes + + This tool lets you draw some simple filled, and un-filled + shapes. + + Select a shape from the selector on the right (circle, + square, oval, etc.). + + In the canvas, click the mouse and hold it to stretch the + shape out from where you clicked. Some shapes can change + proportion (e.g., rectangle and oval), others cannot (e.g., + square and circle). + + Let go of the mouse when you're done stretching. + + Normal Mode + + Now you can move the mouse around the canvas to + rotate the shape. + + Click the mouse button again and the shape will + be drawn in the current color. + + Simple Shapes Mode + If simple shapes are enabled (e.g., with the + "--simpleshapes" option), the shape will be + drawn on the canvas when you let go of the + mouse button. (There's no rotation step.) + + ---------------------------------------------------------------------- + + Text + + Choose a font (from the 'Letters' available on the right) + and a color (from the color palette near the bottom). Click + on the screen and a cursor will appear. Type text and it + will show up on the screen. + + Press [Enter] or [Return] and the text will be drawn onto + the picture and the cursor will move down one line. + + Click elsewhere in the picture and the current line of text + will move there, where you can continue editing. + + ---------------------------------------------------------------------- + + Magic (Special Effects) + + The 'Magic' tool is actually a set of special tools. Select + one of the "magic" effects from the selector on the right, + and then click and drag around the picture to apply the + effect. + + Rainbow + This is similar to the paint brush, but as you + move the mouse around, it goes through all of + the colors in the rainbow. + + Sparkles + This draws glowing yellow sparkles on the + picture. + + Mirror + When you click the mouse in your picture with + the "Mirror" magic effect selected, the entire + image will be reversed, turning it into a + mirror image. + + Flip + Similar to "Mirror." Click and the entire image + will be turned upside-down. + + Blur + This makes the picture fuzzy wherever you drag + the mouse. + + Blocks + This makes the picture blocky looking + ("pixelated") wherever you drag the mouse. + + Negative + This inverts the colors wherever you drag the + mouse. (e.g., white becomes black, and vice + versa.) + + Fade + This fades the colors wherever you drag the + mouse. (Do it to the same spot many times, and + it will eventually become white.) + + Chalk + This makes parts of the picture (where you move + the mouse) look like a chalk drawing. + + Drip + This makes the paint "drip" wherever you move + the mouse. + + Thick + This makes the darker colors in the picture + become thicker wherever you drag the mouse. + + Thin + Similar to "Thick," except dark colors become + thinner (light colors become thicker). + + Fill + This floods the picture with a color. It lets + you quickly fill parts of the picture, as if it + were a coloring book. + + ---------------------------------------------------------------------- + + Eraser + + This tool is similar to the Paint Brush. Wherever you click + (or click and drag), the picture will be erased to white. + + As you move the mouse around, a very large square outline + follows the pointer, showing what part of the picture will + be erased to white. + + As you erase, a "squeaky clean" eraser/wiping sound is + played. + + ---------------------------------------------------------------------- + + Other Controls + + Undo + + Clicking this tool will undo the last drawing action. You + can even undo more than once! + + Note: You can also press [Control]-[Z] on the keyboard to + undo. + + ---------------------------------------------------------------------- + + Redo + + Clicking this tool will redo the drawing action you just + "undid" with the 'Undo' button. + + As long as you don't draw again, you can redo as many times + as you had "undone!" + + Note: You can also press [Control]-[R] on the keyboard to + redo. + + ---------------------------------------------------------------------- + + New + + Clicking the "New" button will start a new drawing. You will + first be asked whether you really want to do this. + + Note: You can also press [Control]-[N] on the keyboard to + start a new drawing. + + ---------------------------------------------------------------------- + + Open + + This shows you a list of all of the pictures you've saved. + If there are more than can fit on the screen, use the "Up" + and "Down" arrows at the top and bottom of the list to + scroll through the list of pictures. + + Click a picture to select it, then... + + * Click the green "Open" button at the lower left of + the list to load the selected picture. + + (Alternatively, you can double-click a picture's icon + to load it.) + + * Click the brown "Erase" (trash can) button at the + lower right of the list to erase the selected + picture. (You will be asked to confirm.) + + * Or click the red "Back" arrow button at the lower + right of the list to cancel and return to the picture + you were drawing. + + If choose to open a picture, and your current drawing hasn't + been saved, you will be prompted as to whether you want to + save it or not. (See "Save," below.) + + Note: You can also press [Control]-[O] on the keyboard to + get the 'Open' dialog. + + ---------------------------------------------------------------------- + + Save + + This saves your current picture. + + If you haven't saved it before, it will create a new entry + in the list of saved images. (i.e., it will create a new + file) + + Note: It won't ask you anything (e.g., for a filename). It + will simply save the picture, and play a "camera shutter" + sound effect. + + If you HAVE saved the picture before, or this is a picture + you just loaded using the "Open" command, you will first be + asked whether you want to save over the old version, or + create a new entry (a new file). + + (NOTE: If either the "saveover" or "saveovernew" options are + set, it won't ask before saving over. See the "Options" + section of this document, above.) + + Note: You can also press [Control]-[S] on the keyboard to + save. + + ---------------------------------------------------------------------- + + Print + + Click this button and your picture will be printed! + + Disabling Printing + + If the "noprint" option was set (either with + "noprint=yes" in Tux Paint's configuration + file, or using "--noprint" on the + command-line), the "Print" button will be + disabled. + + See the "Options" section of this document, + above. + + Restricting Printing + + If the "printdelay" option was used (either + with "printdelay=SECONDS" in the configuration + file, or using "--printdelay=SECONDS" on the + command-line), you can only print once every + SECONDS seconds. + + For example, with "printdelay=60", you can + print only once a minute. + + See the "Options" section of this document, + above. + + Printing Command + + (Linux and Unix only) + + The command used to print is actually a set of + commands that convert a PNG to a PostScript and + send it to the printer: + + pngtopnm | pnmtops | lpr + + This command can be changed by setting the + "printcommand" value in Tux Paint's + configuration file. + + See the "Options" section of this document, + above. + + Printer Settings + + (Windows only) + + By default, Tux Paint simply prints to the + default printer with default settings when the + 'Print' button is pushed. + + However, if you hold the [ALT] key on the + keyboard while pushing the button, as long as + you're not in fullscreen mode, a Windows print + dialog will appear, where you can change the + settings. + + You can have the printer configuration changes + stored by using the "printcfg" option, either + by using "--printcfg" on the command-line, or + "printcfg=yes" in Tux Paint's own configuration + file ("tuxpaint.cfg"). + + If the "printcfg" option is used, printer + settings will be loaded from the file + "userdata/print.cfg". Any changes will be saved + there as well. + + See the "Options" section of this document, + above. + + ---------------------------------------------------------------------- + + Quit + + Clicking the "Quit" button, closing the Tux Paint window, or + pushing the "Escape" key will quit Tux Paint. + + (NOTE: The "Quit" button can be disabled (e.g., with the + "--noquit" command-line option), but the [Escape] key will + still work. See the "Options" section of this document, + above.) + + You will first be prompted as to whether you really want to + quit. + + If you choose to quit, and you haven't saved the current + picture, you will first be asked if wish to save it. If it's + not a new image, you will then be asked if you want to save + over the old version, or create a new entry. (See "Save" + above.) + + NOTE: If the image is saved, it will be reloaded + automatically the next time you run Tux Paint! + + ---------------------------------------------------------------------- + + Loading Other Pictures into Tux Paint + + Since Tux Paint's 'Open' dialog only displays pictures you created with + Tux Paint, what if you want to load some other picture or photograph + into Tux Paint to edit? + + To do so, you simply need to convert the picture into a PNG (Portable + Network Graphic) image file, and place it in Tux Paint's "saved" + directory. ("~/.tuxpaint/saved/" under Linux and Unix, "userdata\saved\" + under Windows.) + +Using 'tuxpaint-import' + + Linux and Unix users can use the "tuxpaint-import" shell script which + gets installed when you install Tux Paint. It uses some NetPBM tools + to convert the image ("anytopnm"), resize it so that it will fit in + Tux Paint's canvas ("pnmscale"), and convert it to a PNG ("pnmtopng"). + + It also uses the "date" command to get the current time and date, + which is the file-naming convention Tux Paint uses for saved files. + (Remember, you are never asked for a 'filename' when you go to Save or + Open pictures!) + + To use 'tuxpaint-import', simply run the command from a command-line + prompt and provide it the name(s) of the file(s) you wish to convert. + + They will be converted and placed in your Tux Paint 'saved' directory. + (Note: If you're doing this for a different user - e.g., your child, + you'll need to make sure to run the command under their account.) + + Example: + + $ tuxpaint-import grandma.jpg + grandma.jpg -> /home/username/.tuxpaint/saved/20020921123456.png + jpegtopnm: WRITING A PPM FILE + + The first line ("tuxpaint-import grandma.jpg") is the command to run. + The following two lines are output from the program while it's + working. + + Now you can load Tux Paint, and a version of that original picture + will be available under the 'Open' dialog. Just double-click its icon! + +Doing it Manually + + Windows users must currently do the conversion manually. + + Load a graphics program that is capable of both loading your picture + and saving a PNG format file. (See the documentation file "PNG.txt" + for a list of suggested software, and other references.) + + Reduce the size of the image to no wider than 448 pixels across and no + taller than 376 pixels tall. (i.e., the maximum size is 448 x 376 + pixels) + + Save the picture in PNG format. It is highly recommended that you name + the filename using the current date and time, since that's the + convention Tux Paint uses: + + YYYYMMDDhhmmss.png + + * YYYY = Year + * MM = Month (01-12) + * DD = Day (01-31) + * HH = Hour, in 24-hour format (00-23) + * mm = Minute (00-59) + * ss = Second (00-59) + + e.g.: + + 20020921130500 - for September 21, 2002, 1:05:00pm + + Place this PNG file in your Tux Paint 'saved' directory. (See above.) + + Under Windows, this is in the "userdata" folder. + + ---------------------------------------------------------------------- + + Extending Tux Paint + + If you wish to add or change things like Brushes and Rubber Stamps used + by Tux Paint, you can do it fairly easily by simply putting or removing + files on your hard disk. + + Note: You'll need to restart Tux Paint for the changes to take effect. + +Where Files Go + + Standard Files + + Tux Paint looks for its various data files in its 'data' directory. + + Linux and Unix + + Where this directory goes depends on what value was set for + "DATA_PREFIX" when Tux Paint was built. See INSTALL.txt for + details. + + By default, though, the directory is: + + /usr/local/share/tuxpaint/ + + If you installed from a package, it is more likely: + + /usr/share/tuxpaint/ + + Windows + + Tux Paint looks for a directory called 'data' in the same + directory as the executable. This is the directory that the + installer used when installing Tux Paint e.g.: + + C:\Program Files\TuxPaint\data + + ---------------------------------------------------------------------- + + Personal Files + + You can also create brushes, stamps and fonts in your own directory + for Tux Paint to find. + + Linux and Unix + + Your personal Tux Paint directory is "~/.tuxpaint/". + + That is, if your home directory is "/home/karl", then your + Tux Paint directory is "/home/karl/.tuxpaint/". + + Don't forget the period (".") before the 'tuxpaint'! + + Windows + + Your personal Tux Paint directory is named "userdata" and is in + the same directory as the executable e.g.: + + C:\Program Files\TuxPaint\userdata + + To add brushes, stamps and fonts, create subdirectories under your + personal Tux Paint directory named "brushes", "stamps" and "fonts", + respectively. + + (For example, if you created a brush named "flower.png", you would + put it in "~/.tuxpaint/brushes/" under Linux or Unix.) + + ---------------------------------------------------------------------- + +Brushes + + The brushes used for drawing with the 'Brush' and 'Lines' tools in + Tux Paint are simply greyscale PNG images. + + The alpha (transparency) of the PNG image is used to determine the + shape of the brush, which means that the shape can be 'anti-aliased' + and even partially-transparent! + + Brush images should be no wider than 40 pixels across and no taller + than 40 pixels high. (i.e., the maximum size can be 40 x 40.) + + Just place them in the "brushes" directory. + + Note: If your new brushes all come out as solid squares or rectangles, + it's because you forgot to use alpha transparency! See the + documentation file "PNG.txt" for more information and tips. + + ---------------------------------------------------------------------- + +Stamps + + All stamp-related files go in the "stamps" directory. It's useful to + create subdirectories and sub-subdirectories there to organize the + stamps. (For example, you can have a "holidays" folder with + "halloween" and "christmas" sub-folders.) + + Images + + Rubber Stamps in Tux Paint can be made up of a number of separate + files. The one file that is required is, of course, the picture + itself. + + The Stamps used by Tux Paint are PNG pictures. They can be + full-color or greyscale. The alpha (transparency) of the PNG is used + to determine the actual shape of the picture (otherwise you'll stamp + a large rectangle on your drawings). + + The PNGs can be any size, but in practice, a 100 pixels wide by + 100 pixels tall (100 x 100) is quite large for Tux Paint. + + Note: If your new stamps all have solid rectangular-shaped outlines + of a solid color (e.g., white or black), it's because you forgot to + use alpha transparency! See the documentation file "PNG.txt" for + more information and tips. + + ---------------------------------------------------------------------- + + Description Text + + Text (".TXT") files with the same name as the PNG. (e.g., + "picture.png"'s description is stored in "picture.txt" in the same + directory.) + + The first line of the text file will be used as the default + description of the stamp's image. + + Language Support + + Additional lines can be added to the text file to provide + translations of the description, to be displayed when Tux Paint is + running in a different locale (like French or Spanish). + + There are three ways of placing translated descriptions in a + stamp's ".txt" file. In each case, the beginning of the line + should correspond to the locale code of the language in question + (e.g., "de" for German, "fr" for French, etc.). + + * Lines beginning with "xx=" (where "xx" is the locale code) + will be considered plain ASCII. That is, any special + characters on the line will be interpreted literally. + + For example, "es=!Ninos!", will come out literally as + "!Ninos!" + + * Lines beginning with "xx.esc=" can contain special + 'escape sequences' which allow you to create a description + using special ASCII characters (like "a" and "th") without the + need to figure out how to get those characters in the file + with whatever editor you chose to use. + + The escape sequences are identical to those used in HTML to + display ASCII characters 161 through 255. The sequence begins + with a "&" (ampersand), and ends with a ";" (semicolon). See + the documentation file "ESCAPES.txt" for a list of escapable + characters. + + For example, "es.esc=¡Niños!", will come out as + "!Ninos!" + + Note: As in HTML, if you want an actual ampersand ("&") in + your description when using the "xx.esc" method, you'll need + to escape it: "&". + + * Lines beginning with "xx.utf8=" can be used to use UTF-8 + encoded text for the description's translation. You'll need an + editor capable of saving UTF-8 encoded files. + + If no translation is available for the language Tux Paint is + currently running in, the default string (the first line, which is + typically in English) is used. + + Windows Users + + Use NotePad or WordPad to edit/create these files. Be sure to save + them as Plain Text, and make sure they have ".txt" at the end of + the filename... + + ---------------------------------------------------------------------- + + Sound Effects + + WAVE (".WAV") files with the same name as the PNG. (e.g., + "picture.png"'s sound effect is the sound "picture.wav" in the same + directory.) + + Language Support + + For sounds for different locales (e.g., if the sound is someone + saying a word, and you want translated versions of the word said), + also create WAV files with the locale's label in the filename, in + the form: "STAMP_LOCALE.wav" + + "picture.png"'s sound effect, when Tux Paint is run in Spanish + mode, would be "picture_es.wav". In French mode, "picture_fr.wav". + And so on... + + If no localized sound effect can be loaded, Tux Paint will attempt + to load the 'default' sound file. (e.g., "picture.wav") + + ---------------------------------------------------------------------- + + Stamp Options + + Aside from a graphical shape, a textual description, and a sound + effect, stamps can also be given other attributes. To do this, you + need to create a 'data file' for the stamp. + + A stamp data file is simply a text file containing the options. + + The file has the same name as the PNG image, but a ".dat" extension. + (e.g., "picture.png"'s data file is the text file "picture.dat" in + the same directory.) + + Colored Stamps + + Stamps can be made to be either "colorable" or "tintable." + + Colorable + + "Colorable" stamps they work much like brushes - you pick the + stamp to get the shape, and then pick the color you want it to + be. (Symbol stamps, like the mathematical and musical ones, are + an example.) + + Nothing about the original image is used except the transparency + ("alpha" channel). The color of the stamp comes out solid. + + Add the word "colorable" to the stamp's data file. + + Tinted + + "Tinted" stamps are similar to "colorable" ones, except the + details of the original image are kept. (To put it technically, + the original image is used, but its hue is changed, based on the + currently-selected color.) + + Add the word "tintable" to the stamp's data file. + + Windows Users + + You can use NotePad or WordPad to create these file. Be sure to + save it as Plain Text, and make sure the filename has ".dat" at + the end, and not ".txt"... + + ---------------------------------------------------------------------- + +Fonts + + The fonts used by Tux Paint are TrueType Fonts (TTF). + + Simply place them in the "fonts" directory. Tux Paint will load the + font and provide four different sizes in the 'Letters' selector when + using the 'Text' tool. + + ---------------------------------------------------------------------- + + More Information + + For more information, see the other documentation files that come with + Tux Paint. + + If you need help, feel free to contact New Breed Software: + + http://www.newbreedsoftware.com/ + + You may also wish to participate in the numerous Tux Paint mailing + lists: + + http://www.newbreedsoftware.com/tuxpaint/lists/ diff --git a/docs/TODO.txt b/docs/TODO.txt new file mode 100644 index 000000000..6c21086a3 --- /dev/null +++ b/docs/TODO.txt @@ -0,0 +1,131 @@ +TODO.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright (c) 2003 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +February 22, 2003 + + +LOW-PRIORITY DOCUMENTATION CHANGES: +----------------------------------- + * Windows compilation in INSTALL.txt + + * Mention CONFDIR in INSTALL.txt + + +HIGH-PRIORITY IMPLEMENTATION CHANGES: +------------------------------------- + + +LOW-PRIORITY IMPLEMENTATION CHANGES: +------------------------------------ + * Fix and use scanline fill for filled shapes. + + * Fix "update_shape()" function and use it to replace SDL_Flip()'s + + * Show different text tip for shape tool when in --simpleshapes mode. + + * Update Makefile and source so that "*_PREFIX"-like Makefile vars. + don't require an ending slash! + + * Allow runtime alteration of mouse control keys (in --keyboard mode). + + * Clean up 800x600 support code + + * Make mouse pointer change from hand to arrow when over unselectable + Selector or Color. + + * Allow locale font files to be specified in conf file + (so instead of using /usr/local/share/tuxpaint/fonts/locale/ja.ttf, + it can use /usr/local/share/ttf/kochi-mincho.ttf). + Distros can take advantage of this. + (Ben Armstrong's suggestion.) + + +HIGH-PRIORITY BUGS: +------------------- + * Figure out why Tux Paint crashes when displaying Euro symbol (under Linux) + 2003.02.22 + + * Figure out why fonts don't appear on PPC. + (Thomas Klausner reported: 2002.09.30) + + * Deal with clash between Open dialog arrow key controls and + mouse arrow key (--keyboard) controls. + + +LOW-PRIORITY BUGS: +------------------ + * Fix XOR bug with blinking text cursor. + + * Fix XOR bug when you 'abort' the shape tool. + + +PLATFORM-SPECIFIC BUGS: +----------------------- + * Create a 'tuxpaint-import' type program for Windows. + + * Translated sound effects not working under XP for some reason. + (Works okay under Win98 and Win2K. - Gabriel G., 2002.09.13; + still a problem as of 0.9.7, 2003.01.27) + + * Crashing when printing on OS X? (Reported in v.0.9.2 for OS X) + + +HIGH-PRIORITY TRANSLATION STUFF: +-------------------------------- + * Finish current translations. + + * Fix Romanian! + + * Tip text (except stamps) aren't translated in --uppercase mode. + + +LOW-PRIORITY TRANSLATION STUFF: +------------------------------- + * Support more languages! + * Hindi + * ... + + * Update Czech and Slovak translations (so they use accents/etc.!) + + +FEATURE IDEAS: +-------------- + * Sym-link "~/TuxPaintPictures" to "~/.tuxpaint/saved/"??? + + * Show shape instructions after _temporarily_ describing the shape??? + (Herman Bruyninckx's suggestion; 2002.08.25) + + * Special command-line options that enable groups of other options + all at once. (e.g., "--fullscreen --noquit --printdelay=60 --grab") + ...and/or pre-written configuration files. + + That way a parent/guardian/teacher can very easily set up Tux Paint for + certain age groups, for example. + + * Allow compile-time option (or system config?) that disables + parsing of ~/.tuxpaintrc and/or command-line options. + + * Allow command-line option to disable parsing of ~/.tuxpaintrc + + * Show only one category of stamps at a time? + (Provide category selection dialog) !?!?!? + + * Show configuration options (e.g., from ~/.tuxpaintrc) in --version info. + + +POSSIBLE FEATURE IDEAS: +----------------------- + * Round eraser + + * Support animated brushes (then replace Sparkle magic with one) ?? + + * Make a 'rainbow' color (then remove Rainbow magic tool; no longer needed) ?? + + * "Gallery"/slideshow mode (available via Open dialog, maybe?) + (Ben Armstrong's suggestion: 2002.08.26) + diff --git a/docs/ca/AUTHORS.txt b/docs/ca/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/ca/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/ca/COPYING.txt b/docs/ca/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/ca/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/ca/FAQ.txt b/docs/ca/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/ca/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/ca/INSTALL.txt b/docs/ca/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/ca/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/ca/PNG.txt b/docs/ca/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/ca/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/ca/README.txt b/docs/ca/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/ca/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/cz/AUTHORS.txt b/docs/cz/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/cz/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/cz/COPYING.txt b/docs/cz/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/cz/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/cz/FAQ.txt b/docs/cz/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/cz/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/cz/INSTALL.txt b/docs/cz/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/cz/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/cz/PNG.txt b/docs/cz/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/cz/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/cz/README.txt b/docs/cz/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/cz/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/da/AUTHORS.txt b/docs/da/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/da/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/da/COPYING.txt b/docs/da/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/da/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/da/FAQ.txt b/docs/da/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/da/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/da/INSTALL.txt b/docs/da/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/da/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/da/PNG.txt b/docs/da/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/da/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/da/README.txt b/docs/da/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/da/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/de/ANBRINGEN.txt b/docs/de/ANBRINGEN.txt new file mode 100644 index 000000000..18c6021fa --- /dev/null +++ b/docs/de/ANBRINGEN.txt @@ -0,0 +1,2 @@ +Sehen Sie bitte docs/INSTALL.txt + diff --git a/docs/de/AUTOREN.txt b/docs/de/AUTOREN.txt new file mode 100644 index 000000000..7652bf032 --- /dev/null +++ b/docs/de/AUTOREN.txt @@ -0,0 +1,2 @@ +Sehen Sie bitte docs/AUTHORS.txt + diff --git a/docs/de/FAQ.txt b/docs/de/FAQ.txt new file mode 100644 index 000000000..0f023efc6 --- /dev/null +++ b/docs/de/FAQ.txt @@ -0,0 +1,2 @@ +Sehen Sie bitte docs/FAQ.txt + diff --git a/docs/de/GELESEN_MIR.txt b/docs/de/GELESEN_MIR.txt new file mode 100644 index 000000000..4f5e2433a --- /dev/null +++ b/docs/de/GELESEN_MIR.txt @@ -0,0 +1,1041 @@ +GELESEN_MIR.txt fr Tux Paint +[ bersetzt, "GOOGLE.COM" Sprachwerkzeuge verwendend. ] + + +Tux Paint - ein einfaches zeichnendes Programm fr Kinder. + +Copyright 2002 durch Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +Juni 14, 2002 - September 23, 2002 + +ber: +----- + Tux Paint ist ein zeichnendes Programm fr junge Kinder. + (Sagen, 3-10 Jahre alt.) Sie wird hauptschlich entwickelt, + um eine educational-/edutainmentnotwendigkeit am geffneten + Betriebssystem Quell"Linux" zu fllen, aber ist- mit vielen anderen + Plattformen, einschlielich Windows, MacOS, BeOS, anderer Unixvarianten, + usw. kompatibel. + + +Lizenz: +------- + Tux Paint ein geffnetes Quellprojekt, freigegeben unter der + GNU-ffentlichkeit Lizenz (GPL). Er ist frei und das ' Quellenprogramm ' + hinter dem Programm ist vorhanden. (dieses lt andere Eigenschaften + addieren, Wanzen zu reparieren, und Teile des Programms in ihrem eigenen + GPL'd zu benutzen ffnen Sie Quell-Software.) + + Sehen Sie KOPIE.txt fr das Ganztext der GPL-Lizenz. + +Zielsetzungen: +-------------- + Einfach und Spa + ---------------- + Tux Paint wird bedeutet, um ein einfaches zeichnendes Programm fr junge + Kinder zu sein. Es wird nicht da ein universelles zeichnendes Werkzeug + bedeutet. Zu verwenden WIRD bedeutet, um Spa und einfach zu sein. + Stichhaltige Effekte und eine Karikaturbuchstabenhilfe informieren den + Benutzer was weitergeht, und halten sie unterhalten. Es gibt auch + extra-large Karikatur-Artmusezeigerformen. + + Dehnbarkeit + ----------- + Tux Paint ist ausdehnbar. Brsten und "Gummistempel" Formen knnen + innen fallengelassen werden und ausgezogen werden. Z.B. kann ein Lehrer + in eine Ansammlung Tierformen fallen und ihre Kursteilnehmer bitten, ein + Oekosystem zu zeichnen. Jede Form kann einen Ton, der gespielt wird, + und Texttatsachen haben, die angezeigt werden, wenn das Kind die Form + vorwhlt. + + Beweglichkeit + ------------- + Tux Paint ist unter verschiedenen Computerplattformen beweglich: + Windows, Macintosh, Linux, usw.. Die Schnittstelle schaut dasselbe + unter ihnen alle. Tux Paint luft passend gut auf ltere Systeme + (wie ein Pentium 133) und kann errichtet werden, um auf langsame + Systeme besser zu laufen. + + Einfachheit + ----------- + Es gibt keinen direkten Zugriff zu den zugrundeliegenden Verwicklungen + des Computers. Das gegenwrtige Bild wird gehalten, wenn das Programm + beendigt, und wieder erscheint, wenn es wiederbegonnen wird. + Das Speichern von Bildern erfordert keine Notwendigkeit, Dateinamen + zu verursachen oder die Tastatur zu benutzen. Das ffnen eines Bildes + wird getan, indem man es von einer Ansammlung thumbnails vorwhlt. + + Andere Unterlagen + ----------------- + Andere Unterlagen, die mit Tux Paint umfat werden (in den "docs" + folder/directory) umfassen: + + AUTHORS.txt - Liste der Autoren und der Mitwirkenden + CHANGES.txt - Zusammenfassung von gendert zwischen Freigaben + KOPIE.txt - kopierenlizenz (der GPL) + ANBRINGEN.txt - Anweisungen fr compiling/installing, wenn anwendbares + PNG.txt - Anmerkungen ber das Verursachen der + PNG-Formatbilder fr Gebrauch in Tux malen Sie + GELESEN_MIR.txt - (diese Akte) + TODO.txt - eine Liste der schwebenden Eigenschaften oder + des Wanzenbentigens geregelt + + +Verwenden Der Tux Paint +----------------------- + Gebude Tux Paint + ------------------ + Um Tux Paint von der Quelle zu kompilieren, beziehen Sie bitte sich auf + ANBRINGEN.txt. + + Laden Tux Paint + --------------- + Linux-/UnixcBenutzer + -------------------- + Lassen Sie den folgenden Befehl an einer Oberteilaufforderung laufen + (z.B., "$"): + + $ tuxpaint + + Es ist auch mglich, eine Abschurampe knpfen zu lassen oder Ikone + (z.B. in GNOME oder in KDE). Sehen Sie Unterlagen Ihres desktop Klimas + fr Details... + + Wenn irgendwelche Strungen auftreten, werden sie auf dem Anschlu + angezeigt ("stderr"). + + WindowscBenutzer + ---------------- + Einfach Doppeltklicken die "tuxpaint.exe-" Ikone im heft Tux Paint. + + Wenn irgendwelche Strungen auftreten, werden sie in einer Akte + gespeichert, die "stderr.txt" im heft Tux Paint genannt wird. + + Sehen Sie "ANBRINGEN.txt" fr Details ber das Bilden eine + ' Krzung' Ikone zur Tux Paint, die Sie leicht Befehl-Linienwahlen + einstellen lt. + + Um Tux laufen zu lassen malen Sie und stellen Sie Befehl-Linienwahlen + direkt, Sie mu "tuxpaint.exe" von einem sofortigen Fenster MSDOS + laufen lassen zur Verfgung. (sehen Sie "ANBRINGEN.txt" fr Details.) + + MacintoshcBenutzer + ------------------ + Einfach Doppeltklicken die Farben"Ikone" Tux im Farbenheft Tux. + + [ wie man Comamndlinienwahlen unter MacOS herausgibt? + Wahl-doppelt-Klicken? ] + + + Wahlen + ------ + KonfigurationscAkte + ------------------- + Sie knnen eine einfache Konfigurationsakte fr Tux Paint herstellen, + der sie jede Zeit liest, die, Sie sie oben beginnen. + + Die Akte ist einfach eine normale Textakte, welche die Wahlen enthlt, + die Sie ermglicht wnschen: + + fullscreen=yes + -------------- + Lassen Sie das Programm im Modus des vollen Schirmes, + anstatt in einem Fenster laufen. + + nosound=yes + ----------- + Sperren Sie stichhaltige Effekte. + + noquit=yes + ---------- + Sperren Sie die "beendigte" Taste des Aufschirmes. + (das Bettigen des "Schlssel Entweichens" oder das Anklicken der + Fensterendentaste arbeitet noch.) + + noprint=yes + ----------- + Sperren Sie die druckeneigenschaft. + + printdelay=SEKUNDEN + ------------------- + Schrnken Sie den Druck ein, damit der Druck nur einmal auftreten + kann jedes SEKUNDEN-Sekunden. + + printcommand=BEFEHLSFOLGE + ------------------------- + Verwenden Sie den BefehlscBefehl, eine PNG-Akte zu drucken. + Wenn er nicht eingestellt wird, ist der Rckstellungsbefehl: + + pngtopnm | pnmtops | lpr + + Welchen Bekehrten das PNG zu einem NetPBM ' bewegliches anymap ', + dann das in eine Postskriptumakte umwandelt und schlielich das zum + Drucker schickt mit dem "lpr" Befehl. + + simpleshapes=yes + ---------------- + Sperren Sie Umdrehungsmodus im Formwerkzeug. + Klicken Sie, schleppen Sie, Freigabe ist alle, die erforderlich ist, + eine Form zu zeichnen. + + uppercase=yes + ------------- + Aller Text wird nur in Versalien bertragen (z.B., "Brste" ist + "BRSTE"). Ntzlich fr Kinder, die lesen knnen, aber wer nur + Versalienbuchstaben bis jetzt erlernt haben. + + grab=yes + -------- + Tux Paint versucht, die Maus ' zu ergreifen ' und Tastatur, + damit die Maus zum Fenster der Tux Paint begrenzt wird, und fast + alle Tastatureingabe wird direkt zu ihm gefhrt. Dieses ist + ntzlich, Betriebssystemttigkeiten zu sperren, die den Benutzer + aus dem einen Kreislauf durchmachenden Fenster der Tux Paint + herausbekommen konnten [ Alt]-[Tab ], [ Ctrl]-[Escape ], usw.. + Besonders ntzlich fullscreen innen Modus. + + nowheelmouse=yes + ---------------- + Dieses sperrt Untersttzung fr das Rad auf Musen, die es haben. + (Normalerweise, scroll das Rad das Whlmen auf dem Recht.) + + saveover=yes + ------------ + Dieses sperrt die "auer ber der alten Version...?" + Aufforderung, wenn es eine vorhandene Akte speichert. + Mit dieser Wahl wird die ltere Version immer durch die neue + Version, automatisch ersetzt. + + saveover=new + ------------ + Dieses sperrt auch die "auer ber der alten Version...?" + Aufforderung, wenn es eine vorhandene Akte speichert. + Diese Wahl jedoch speichert immer eine neue Akte, anstatt + berschreibt die ltere Version. + + saveover=ask + ------------ + (diese Wahl ist berflssig, da dieses die Rckstellung. ist.) + Wenn man ein bestehendes Zeichnen speichert, werden Sie zuerst + gefragt, ob man ber der lteren Version oder nicht speichert. + + + Benutzer Linux + -------------- + Die Akte, die Sie herstellen sollten, wird ".tuxpaintrc" genannt + und sie sollte in Ihr Hauptverzeichnis gelegt werden. + (a.k.a. "~/.tuxpaintrc" oder "$$HOME/.tuxpaintrc") + + WindowscBenutzer + ---------------- + Die Akte, die Sie herstellen sollten, wird "tuxpaint.cfg" genannt + und sie sollte in Heft der Tux Paint gelegt werden. + + Befehl-LiniencWahlen + -------------------- + Wahlen knnen auf der Befehl-Linie auch herausgegeben werden, + wenn Sie Tux Paint beginnen. + + --fullscreen + --nosound + --noquit + --noprint + --printdelay=SEKUNDEN + --simpleshapes + --uppercase + --grab + --nowheelmouse + --saveover + --saveovernew + ------------- + Diese ermglichen den Wahlen, die oben beschrieben werden. + + --windowed + --sound + --quit + --print + --printdelay=0 + --complexshapes + --mixedcase + --dontgrab + --wheelmouse + --saveoverask + ------------- + Diese Wahlen knnen verwendet werden, um irgendwelche + Einstellungen berzulaufen, die in der Konfigurationsakte + gebildet werden. (wenn die Wahl nicht in die Konfigurationsakte + eingestellt wird, ist keine berlaufende Wahl. notwendig), + + + --lang sprache + -------------- + Lassen Sie Tux Paint in einer der gesttzten Sprachen laufen. + Die Wahlen, die umfassen vorhanden sind z.Z.: + + english + dutch + finnish suomi + french francais + german deutsch + italian italiano + norwegian nynorsk + spanish espanol + swedish svenska + turkish + + + --locale locale + --------------- + Lassen Sie Tux Paint in einer der Sttzsprachen laufen. + Sehen Sie "eine andere Sprache unten beschlieen" fr die + localezeichenketten (z.B., "de_DE@euro" fr Deutschen) um zu + verwenden. + + (wenn Ihr locale bereits eingestellt wird, z.B. mit der "LANG-" + Klimavariable, ist diese Wahl nicht, seit Tux Paint ehrt Einstellung + Ihres Klimas notwendig, wenn mglich.) + + Befehl-LiniencInfo. Wahlen + --------------------------- + Die folgenden Wahlen zeigen etwas informativen Text auf dem Schirm an. + Tux Paint nicht wirklich beginnt oben und luft danach, jedoch. + + --version + --------- + Zeigen Sie die Versionsnummer und das Datum der Kopie der Tux Paint an, + die Sie laufen lassen. + + --copying + --------- + Zeigen Sie kurze Lizenzinformationen ber die Kopie der Tux Paint. + + --usage + ------- + Zeigen Sie die Liste der vorhandenen Befehl-Linienwahlen an. + + --help + ------ + Anzeigenschriftsatzhilfe auf dem Verwenden der Tux Paint. + + + Whlen einer anderen Sprache + ---------------------------- + Tux Paint ist in eine Anzahl von Sprachen bersetzt worden. + um die bersetzungen zugnglich zu machen, knnen Sie die "--lang" + Wahl auf der Befehl-Linie verwenden, um die Sprache (z.B. "--lang spanish") + einzustellen. + + Tux Paint ehrt auch gegenwrtiges locale Ihres Klimas. (Sie knnen sie + auf der Befehl-Linie mit der "--locale" Wahl berlaufen (sehen Sie oben)) + + Die folgenden wird gesttzt: + + de_DE@euro - Deutsch / German + es_ES@euro - Espanol / Spanish + fi_FI@euro - Suomi / Finnish + fr_FR@euro - Francais / French + is_IS - Islenska / Icelandic + it_IT@euro - Italiano / Italian + nn_NO - Norsk (nynorks) / Norwegian Nynorsk + nl_NL@euro - Dutch + sv_SE@euro - Svenska / Swedish + tr_TR@euro - Turkish + + + Einstellung Von Locale Ihres Klimas + ----------------------------------- + Das ndern Ihres locale beeinflut viel Ihres Klimas. + + Wie oben angefhrt zusammen mit dem Lassen Sie die Sprache an der + Laufzeit mit Befehl-Linienwahlen whlen ("--lang" und "--locale"), + ehrt Tux Paint das globale locale, das in Ihr Klima einstellt. + + Wenn Sie nicht bereits locale Ihres Klimas eingestellt haben, erklren + der folgende Wille kurz, wie: + + Linux-/UnixcBenutzer + -------------------- + Zuerst seien Sie sicher, da das locale, das Sie benutzen mchten, + ermglicht wird, indem man Akten "/etc/locale.gen" auf Ihrem System + redigiert und dann das Programm "locale-gen" als Wurzel laufen lt. + + Anmerkung: Benutzer Debian knnen in der LageSEIN, den Befehl + einfach laufen zu lassen "dpkg-reconfigure locales". + + Dann bevor Sie Tux Paint laufen lassen, stellen Sie Ihre "LANG-" + Klimavariable bis eins der locales ein, die oben verzeichnet werden. + (wenn Sie alle Programme wnschen, die bersetzt werden knnen, um + zu sein, knnen Sie mchten das folgende in Ihren LOGON-Index legen; + z.B. ~/.profile, ~/.bashrc, ~/.cshrc, usw..) + + + Z.B. in einem Bourne-Shell (wie HEFTIGER SCHLAG): + + export LANG=es_ES@euro; tuxpaint + + + Und in einem c-Oberteil (wie TCSH): + + setenv LANG es_ES@euro; tuxpaint + + + WindowscBenutzer + ---------------- + Recoginse TuxPaint Willensdas gegenwrtige locale und benutzen die + passenden Akten durch Rckstellung. So ist dieser Abschnitt nur fr + die Leute, die unterschiedliche Sprachen versuchen. + + Die einfachste Sache zum Tun ist, den '--lang' Schalter in der + Krzung zu benutzen (sehen Sie "ANBRINGEN.txt"). Jedoch indem man + ein sofortiges Fenster MSDOS verwendet, ist es auch mglich, einen + Befehl so herauszugeben: + + set LANG=es_ES@euro + + ...das die Sprache fr die Lebenszeit dieses DOS-Fensters einstellt. + + Fr dauerhafteres etwas, versuchen Sie, 'autoexec.bat' Akte Ihres + Computers mit Windows "sysedit" Werkzeug zu redigieren: + + Windows 95/98: + -------------- + 1) klicken an die 'Anfangs' ('Start') Taste und + whlen 'Durchlauf...' ('Run') + 2) schreiben "sysedit" in 'sich ffnen:' ('Open') Kasten + (mit oder ohne Anfhrungsstriche). + 3) Klicken 'OKAY' ('OK'). + 4) lokalisieren das AUTOEXEC.BAT-Fenster im + Anlagenkonfigurationsherausgeber. + 5) fgen das folgende an der Unterseite der Akte hinzu: + set LANG=es_ES@euro + 6) der Anlagenkonfigurationsherausgeber ein und ja antworten, + um die nderungen zu speichern. + 7) beginnen Ihre Maschine wieder. + + um die GESAMTE MASCHINE und ALLE ANWENDUNGEN zu beeinflussen, ist + es mglich, die verkleidung "der regionalen Einstellungen" + ("Regional Settings") zu benutzen Steuer: + + 1) klicken an die 'Anfangs' ('Start') Taste und whlen + 'Verkleidung Settings|Control' ('Settings|Control Panel') vor. + 2) doppelt klicken Sie an die Kugel "der regionalen Einstellungen" + ("Regional Settings"). + 3) whlen ein language/region vom Tropfen verzeichnen unten vor. + 4) Klicken 'OKAY'. ('OK') + 5) beginnen Ihre Maschine wieder, wenn es aufgefordert wird. + + + TitelcSchirm + ------------ + Wenn erste Lasten der Tux Paint, ein title-/creditsschirm erscheinen. + + Sobald Laden komplett ist, bettigen Sie einen Schlssel oder klicken + Sie an die Maus, um fortzufahren. + + + HauptcSchirm + ------------ + Der Hauptschirm ist in die folgenden Abschnitte unterteilt: + + Linke Seite: Toolbar + --------------------- + Das toolbar enthlt die zeichnenden und redigierenden Kontrollen. + + + Mitte: Zeichnendes Segeltuch + ----------------------------- + Das grte Teil des Schirmes, in der Mitte, ist das zeichnende + Segeltuch. Dieses ist offensichtlich wo Sie zeichnen! + + + Rechte Seite: Vorwahl + ---------------------- + Abhngig von dem gegenwrtigen Werkzeug zeigt der Vorwahl + unterschiedliche Sachen. z.B. wenn die Farbenbrste vorgewhlt wird, + er zeigt die verschiedenen vorhandenen Brsten. Wenn der Gummistempel + vorgewhlt wird, zeigt er die unterschiedlichen Formen, die Sie + verwenden knnen. + + + Niedriger: Farben + ------------------ + Eine Palette der vorhandenen Farben werden nahe dem unteren + Bildschirmrand gezeigt. + + + Unterseite: HilfencBereich + --------------------------- + Am unteren Bildschirmrand, stellt Tux, der Penguin Linux, Spitzen und + andere Informationen zur Verfgung, whrend Sie zeichnen. + + + Vorhandene Werkzeuge + -------------------- + Zeichnende Werkzeuge + -------------------- + Malen Sie Brste + ---------------- + Das Farbenbrstenwerkzeug lt Sie freihndig zeichnen mit den + verschiedenen Brsten (gewhlt im Vorwahl auf dem Recht) und den + Farben (gewhlt in der Farbenpalette in Richtung zur Unterseite). + + Wenn Sie die Maustaste nach unten halten und die Maus verschieben, + zeichnet sie, wie Sie umziehen. + + Whrend Sie zeichnen, wird ein Ton gespielt. Das grsser die Brste, + das niedriger der Taktabstand. + + Stempel (Gummistempel) + ---------------------- + ist das Stempelwerkzeug wie ein Gummistempel oder Aufkleber. Es lt + Sie vor-gezeichnete Bilder (wie eine Abbildung eines Pferds oder ein + Baum oder der Mond) in Ihrer Abbildung kleben. + + Da Sie die Maus herum verschieben, folgt eine rechteckige umrei der + Maus und zeigt, wohin der Stempel gesetzt wird. + + unterschiedliche Stempel knnen unterschiedliche stichhaltige Effekte + haben. + + Linien + ------ + Dieses Werkzeug lt Sie gerade Geraden mit den verschiedenen + Brsten und den Farben zeichnen, die Sie normalerweise mit der + Farbenbrste verwenden. + + Klicken Sie die Maus an und halten Sie sie, um den Ausgangspunkt der + Linie zu whlen. Da Sie die Maus herum verschieben, zeigt eine dnne + 'Gummi-Band' Linie, wohin die Linie gezeichnet wird. + + Gelassen gehen Sie von der Maus, die Linie durchzufhren. Ein + "Sproing!", Ton spielt. + + Formen + ------ + Dieses Werkzeug lt Sie etwas einfache gefllte und ungefllte + Formen zeichnen. + + Whlen Sie eine Form vom Vorwahl auf dem Recht vor (Kreis, Quadrat, + Oval, etc.). + + Im Segeltuch klicken Sie die Maus und halten Sie sie, um auszudehnen + die Form heraus von, wo Sie klickten. Etwas Formen knnen Anteil + (z.B., Viereck und Oval), andere ndern knnen nicht (z.B., Quadrat + und Kreis). + + Gelassen gehen Sie von der Maus, wenn Sie erfolgtes Ausdehnen sind. + + Normaler Modus + -------------- + Jetzt knnen Sie die Maus um das Segeltuch verschieben, + um die Form zu drehen. + + Klicken Sie die Maustaste wieder und die Form wird in die + gegenwrtige Farbe gezeichnet. + + Einfacher FormcModus + -------------------- + Wenn einfache Formen ermglicht werden ("--simpleshapes" Wahl), + wird die Form auf das Segeltuch gezeichnet, wenn Sie von der + Maustaste gehen lassen. (es gibt keinen Umdrehungsschritt.), + + + Text + ---- + Whlen Sie einen Schriftkegel und eine Farbe. Klicken Sie an + den Schirm und ein Cursor erscheint. Arttext und -er stellen + oben auf dem Schirm dar. + + Drcken Sie [Enter], oder [Return] und der Text wird auf die + Abbildung gezeichnet und der Cursor bewegt nach unten eine Linie. + + Klicken anderwohin in der Abbildung und im Text bewegt dort. + + + Magie (spezielle Effekte) + ------------------------- + ist das magische Werkzeug wirklich ein Satz Spezialwerkzeuge. + Whlen Sie einen der "magischen" Effekte vom Vorwahl auf dem Recht, + vor und dann klicken Sie und schleppen Sie um die Abbildung, um den + Effekt anzuwenden. + + Spiegel + ------- + Wenn Sie die Maus in Ihrer Abbildung mit dem magischen vorgewhlten + Effekt "des Spiegels" anklicken, wird das gesamte Bild aufgehoben + und macht ihn zu ein Spiegelbild. + + Leichter Schlag + --------------- + hnlich "Spiegel.", Klicken und das gesamte Bild werden + upside-down gedreht. + + Unschrfe + --------- + Dieses bildet die Abbildung flockig, wohin Sie die Maus schleppen. + + Blcke + ------ + Dieses bildet die Abbildung das blocky Schauen ("pixelated"), wohin + Sie die Maus schleppen. + + Negativ + ------- + Dieses kehrt die Farben um, wohin Sie die Maus schleppen. + (z.B., Wei wird und umgekehrt. schwarz), + + Verblassen Sie + -------------- + Dieses verblt die Farben, wohin Sie die Maus schleppen. (tun + Sie es zum gleichen Punkt viele Male, und er wird schlielich. wei) + + Regenbogen + ---------- + Dieses ist der Farbenbrste hnlich, aber, da Sie die Maus herum + verschieben, luft es alle Farben im Regenbogen durch. + + Funkelt + ------- + Dieses zeichnet das Glhen gelb funkelt auf der Abbildung. + + Kreide + ------ + Dieses lt Teile von der Abbildung (wo Sie die Maus verschieben), + wie eine Kreidezeichnung aussehen. + + Tropfenfnger + ------------- + Dieses lt die Farbe "tropfen", wohin Sie die Maus verschieben. + + Dick + ---- + Dieses bildet die dunkleren Farben in der Abbildung werden dick, + wohin Sie die Maus schleppen. + + Dnn + ---- + hnlich "dick,", ausgenommen dunkle Farben dnner werden + (helle Farben werden dick). + + Flle + ----- + Dieses berschwemmt die Abbildung mit einer Farbe. Es lt Sie + schnell Teile der Abbildung fllen, als ob es ein Farbtonbuch war. + + + Radiergummi + ----------- + Dieses Werkzeug ist der Farbenbrste hnlich. Wohin Sie (oder Klicken + und Gegenkraft) klicken, wird die Abbildung zum Wei gelscht. + + Da Sie die Maus herum verschieben, folgt eine sehr groe quadratische + umrei dem Zeiger und zeigt, was Teil der Abbildung zum Wei gelscht + wird. + + Whrend Sie lschen, wird ein "quietschender sauberer" + eraser-/wipington gespielt. + + + Andere Kontrollen + ----------------- + Undo + ---- + Das Anklicken dieses Werkzeugs undo die letzte zeichnende Ttigkeit. + Sie knnen undo mehr als einmal. + + Anmerkung: Sie knnen [Control]-[Z] auf der Tastatur auch sich + bettigen. + + Machen Sie nochmals + ------------------- + Dieses Werkzeug anklickend, macht die zeichnende Ttigkeit nochmals, + die Sie gerade "undid.", So lang, wie Sie nicht wieder zeichnen, + knnen Sie so viele Male nochmals machen, Sie "undone.", + + Anmerkung: Sie knnen [Control]-[R] auf der Tastatur auch sich + bettigen. + + Neu + --- + Das Anklicken der "neuen" Taste beginnt eine neue Zeichnung. + Sie werden zuerst gefragt, ob Sie wirklich dies tun mchten. + + Anmerkung: Sie knnen [ Control]-[N ] auf dem ke auch sich + bettigenyboard. + + Geffnet + -------- + Dieses zeigt Ihnen eine Liste von allen Abbildungen, die Sie + gespeichert haben. Wenn es mehr gibt, als auf dem Schirm passen + kann, verwenden Sie "herauf" und "unten" Pfeile an der Oberseite + und an der Unterseite der Liste scroll durch die Liste der Abbildungen. + + Klicken Sie eine Abbildung an, um sie vorzuwhlen, dann..., + + * Klicken Sie das Grne "ffnen" Taste am untereren Linke der + Liste, um die vorgewhlte Abbildung zu laden an. + + Wechselweise knnen Sie Doppeltklicken die Ikone der + Abbildung (innerhalb 1 zweiten) es laden. + + * Klicken Sie das Braun "lschen" (Abfalldosen) Taste am + niedrigeren Recht der Liste, die vorgewhlte Abbildung zu + lschen an. (Sie werden gebeten zu besttigen.) + + * Oder klicken Sie die "rckseitige" Pfeiltaste des Rotes am + niedrigeren Recht der Liste zu annullieren und der Rckkehr + zur Abbildung, die Sie zeichneten. + + Wenn beschlieen Sie, eine Abbildung zu ffnen und Ihre gegenwrtige + Zeichnung nicht gespeichert worden ist, werden Sie aufgefordert, ob + Sie sie speichern mchten oder nicht. (sehen Sie "auer," unten.) + + Anmerkung: Sie knnen [Control]-[O] auf der Tastatur auch sich + bettigen, um zu erhalten 'ffnen' Dialog. + + Auer + ----- + Dieses speichert Ihre gegenwrtige Abbildung. + + Wenn Sie es nicht vor gespeichert haben, verursacht es eine neue + Eintragung in der Liste der gespeicherten Bilder. (d.h., es stellt + eine neue Akte her) + + Anmerkung: Sie nicht fragt Sie nichts (z.B., fr einen Dateinamen). + Sie speichert einfach die Abbildung und spielt einen stichhaltigen + Effekt "des Kamerablendenverschlusses". + + Wenn Sie die Abbildung vor gespeichert HABEN oder dieses eine + Abbildung ist, die Sie gerade mit dem "geffneten" Befehl luden, + werden Sie zuerst, ob Sie ber der alten Version speichern mchten, + oder verursachen eine neue Eintragung gefragt (eine neue Akte). + + Anmerkung: Sie knnen [Control]-[S] auf der Tastatur auch sich + bettigen. + + Druck + ----- + [ Anmerkung: Der Druck arbeitet nur unter Linux und Unix im Augenblick + und erfordert die Werkzeuge NetPBM. Sehen Sie docs/ANBRINGEN.txt ] + + + Klicken Sie diese Taste an und Ihre Abbildung wird gedruckt! + + + SperrencDruck + ------------- + Wenn der "noprint" Wahl eingestellt wurde (entweder "noprint=yes" + in der Konfigurationsakte mit der Tux Paint oder im Verwenden + "--noprint" auf der Befehl-Linie), ist die" Druck"Taste untauglich. + + Sehen Sie den "Wahl" Abschnitt oben. + + + Einschrnkender Druck + --------------------- + Wenn die "printdelay" Wahl verwendet wurde (entweder mit + "printdelay=SEKUNDEN" in der Konfigurationsakte oder im + Verwenden von "--printdelay=SEKUNDEN" auf der Befehl-Linie), + knnen Sie nur einmal drucken jedes SEKUNDEN-Sekunden. + + Z.B. wenn "printdelay=60", Sie nur eine Minute einmal drucken kann. + + Sehen Sie den "Wahl" Abschnitt oben. + + Andere DruckencWahlen + --------------------- + Der Befehl, der verwendet wird, um zu drucken, ist wirklich ein + Satz Befehle, die ein PNG in ein Postskriptum umwandeln und es + zum Drucker schicken: + + pngtopnm | pnmtops | lpr + + Dieser Befehl kann durch die Einstellung des "printcommand" Wertes + in der Konfigurationsakte der Tux Paint gendert werden. + + Sehen Sie den "Wahl" Abschnitt oben. + + + Beendigen Sie + ------------- + Den "beendigte" Taste, das Farbenfenster Tux schlieend oder drckend + "Escape" Schlssel, anklickend beendigt Tux Paint. + + ANMERKUNG: Der "beendigte" Taste kann untauglich sein (mit der + "--noquit" Befehl-Linienwahl), aber "Escape" Schlssel wird ruhige + Arbeit. + + Sie werden zuerst aufgefordert, ob Sie wirklich beendigen mchten. + + Wenn Sie beschlieen zu beendigen und Sie nicht die gegenwrtige + Abbildung gespeichert haben, werden Sie zuerst wenn Wunsch gebeten, + ihn zu speichern. Wenn es nicht ein neues Bild ist, werden Sie dann, + wenn Sie ber der alten Version speichern mchten, oder verursachen + eine neue Eintragung gefragt. (sehen Sie "auer" oben.) + + ANMERKUNG: Wenn das Bild gespeichert wird, wird es automatisch neu + geladen, naechstes Mal wenn Sie Tux Paint laufen lassen! + + +Laden anderer Abbildungen in Tux Paint +-------------------------------------- + Da geffneter 'Dialog der Tux Paint' nur Abbildungen anzeigt, die Sie + mit Tux Paint verursachten, was, wenn Sie irgendeine andere Abbildung oder + Fotographie in Tux Paint laden mchten, um zu redigieren? + + um so zu tun, mssen Sie einfach die Abbildung in eine Bildakte PNG + (bewegliche Netzgraphik - 'Portable Network Graphic') umwandeln und + legen sie in gespeichertes "Verzeichnis der Tux Paint". + ("~/.tuxpaint/saved/"unter Linux und Unix, "userdata\saved\" unter Windows.) + + Das Verwenden 'tuxpaint-import' + ------------------------------- + knnen Benutzer Linux und Unix verwenden "tuxpaint-import" Oberteilindex, + der angebracht erhlt, wann Sie Tux Paint anbringen. Sie benutzt einige + Werkzeuge NetPBM, um das Bild ("anytopnm") umzuwandeln, die Gre neu + bestimmt es, damit sie in Segeltuch der Tux Paint ("pnmscale") pat, + und umwandelt es in ein PNG ("pnmtopng"). + + Sie benutzt auch "Datum", um die aktuelle Uhrzeit und das Datum zu + erhalten, das der filenaming Farbengebrauch VersammlungTux fr + gespeicherte Akten ist. (erinnern Sie sich, werden Sie nie um einen + 'Dateinamen' gebeten, wenn Sie gehen, Abbildungen zu speichern oder zu + ffnen!) + + um zu verwenden 'tuxpaint-import' Sie, lassen Sie einfach den + Befehl von einer Befehl-Linienaufforderung laufen und stellen Sie ihn + das name(s) des file(s) zur Verfgung, das Sie umwandeln mchten. + + Sie werden in Ihre Farbe 'saved' Verzeichnis Tux umgewandelt und gelegt. + (Anmerkung: Wenn Sie dies fr einen anderen Benutzer tun - z.B. + Ihr Kind, mssen Sie berprfen, den Befehl unter ihr Konto laufen zu + lassen.) + + Beispiel: + + $ tuxpaint-import grandma.jpg + grandma.jpg -> /home/username/.tuxpaint/saved/20020921123456.png + jpegtopnm: SCHREIBEN Einer PPMCAkte + + Die erste Linie ("tuxpaint-import grandma.jpg"), ist der Befehl zu + laufen. Die folgenden zwei Linien werden vom Programm ausgegeben, + whrend es funktioniert. + + + Jetzt knnen Sie Tux Paint laden, und eine Version dieser ursprnglichen + Abbildung ist unter 'ffnen' Dialog vorhanden. Gerades Doppeltklicken + seine Ikone! + + + Sie manuell tun + --------------- + Windowsbenutzermu tut z.Z. die Umwandlung manuell. + + Laden Sie ein Graphikprogramm, das zum Laden Ihrer Abbildung und zum + Speichern einer PNG-Formatakte fhig ist. (sehen Sie "PNG.txt" fr + eine Liste der vorgeschlagenen Software.) + + Verringern Sie die Gre des Bildes auf nicht weit als 448 Pixeln herber + und nicht hher als 376 hohe Pixel. (z.B., ist maximale Gre + 448 x 376 Pixel) + + Auer der Abbildung im PNG-Format. Es wird IN HOHEM GRADE, da Sie den + Dateinamen mit dem Tagesdatum nennen und Zeit festsetzen, seit dem das + ist der Farbengebrauch VersammlungTux empfohlen: + + YYYYMMDDhhmmss + + z.B.: + + 20020921130500 - fr September 21, 2002, 1:05:00pm + + Legen Sie diese PNG-Akte in Ihre Farbe 'gespeichertes' Verzeichnis Tux. + (sehen Sie oben.), + + Unter Windows ist dieses im "userdata" Heft. + + +Verlngernde Tux Paint +---------------------- + Wenn Sie Sachen wie Brsten und die Gummistempel hinzufgen oder ndern, + die mchten von Tux Paint benutzt werden, knnen Sie sie ziemlich leicht + tun, indem Sie einfach Akten auf Ihrer Festplatte setzen oder entfernen. + + Anmerkung: Sie mssen Tux Paint fr die nderungen am Nehmeneffekt + wiederbeginnen. + + + Wo Akten Gehen + -------------- + StandardcAkten + -------------- + Tux Paint sucht nach seinen verschiedenen Dateien in seinem + Datenverzeichnis. + + Linux und Unix + -------------- + Wo dieses Verzeichnis geht, hngt von ab, was Wert fr "DATA_PREFIX" + eingestellt wurde, als Tux Paint errichtet wurde. + Sehen Sie ANBRINGEN.txt fr Details. + + Durch Rckstellung obwohl, das Verzeichnis ist: + + Windows + ------- + Wo dieses Verzeichnis geht, hngt von ab, was Heft Sie dem Installateur + erklrten, einzusetzen Tux Paint. + + [ was die Rckstellung ist? ] + + + Persnliche Akten + ----------------- + Sie knnen Brsten, Stempel und Schriftkegel in Ihrem eigenen + Verzeichnis auch herstellen, damit Tux Paint findet. + + Linux und Unix + -------------- + Ihr persnliches Farbenverzeichnis Tux ist "~/.tuxpaint/". + + Das heit, wenn Ihr Hauptverzeichnis "/home/karl" ist, dann Ihr + Farbenverzeichnis Tux ist "/home/karl/.tuxpaint/". + + Vergessen Sie die Periode (".") nicht vor dem Wort 'tuxpaint'! + + Windows + ------- + Ihr persnliches Farbenverzeichnis Tux wird "userdata" genannt. + + [ wo es jetzt ist? ] + + + um Brsten zu addieren, stellen Stempel und Schriftkegel, + Unterverzeichnisse unter Ihren persnliches genannten "Brsten" der + Tux Paint Verzeichnis, "Stempel" und "Schriftkegel", beziehungsweise her. + + (zum Beispiel, wenn Sie eine Brste herstellten, die "flower.png" + genannt wurde, Sie wrden es in "~/.tuxpaint/brushes/" unter Linux + oder Unix. setzen), + + Brsten ("Brushes") + ------------------- + Die Brsten, die fr das Zeichnen mit den Brsten- und Linienwerkzeugen + in der Tux Paint benutzt werden, sind einfach greyscale PNG-Bilder. + + Das Alpha (Transparent) des PNG-Bildes wird benutzt, um die Form der + Brste festzustellen, die bedeutet, da die Form sein kann 'anti-aliased' + und sogar teilweis-transparent! + + Brstenbilder sollten sein nicht weit als 40 Pixel herber und nicht hher + als 40 hohe Pixel. + + Gerade legen Sie sie in "brushes" Verzeichnis. + + Stempel ("Stamps") + ------------------ + Alle stempeln-in Verbindung stehenden Akten gehen in "stamps" Verzeichnis. + Es ist ntzlich, Unterverzeichnisse und Vor-Unterverzeichnisse dort + herzustellen, um die Stempel zu organisieren. (zum Beispiel, knnen Sie + ein "feiertag" Heft mit "halloween" und "weihnachts" subfolders haben.) + + Bilder + ------ + Gummistempel in der Tux Paint knnen eine Anzahl von unterschiedlichen + Akten bestehen. Die eine Akte, die angefordert wird, ist + selbstverstndlich die Abbildung selbst. + + Die Stempel, die von Tux Paint benutzt werden, sind PNG-Abbildungen. + Sie knnen Vollfarbe oder greyscale sein. Das Alpha (Transparent) des + PNG wird benutzt, um die tatschliche Form der Abbildung (anders stempeln + Sie ein groes Viereck auf Ihren Zeichnungen) festzustellen. + + Das PNGs kann jede mgliche Gre sein, aber in der Praxis, ist + 100 Pixel weit durch 100 hohe Pixel (100x100) fr Tux Paint ziemlich + gro. + + + BeschreibungscText + ------------------ + Text ("TXT") ordnet mit dem gleichen Namen wie das PNG ein. + (z.B., "picture.png"'s-Beschreibung wird in "picture.txt" im gleichen + Verzeichnis. gespeichert), + + Zeichnet den Beginn mit "xx=" (wo "xx" eine der gesttzten Sprachen ist; + z.B. "de" fr Deutschen, "fr" fr Franzosen, usw..) wird unter den + verschiedenen gesttzten locales verwendet. + + Wenn keine bersetzung fr das locale des Benutzers vorhanden ist, + wird die Rckstellungszeichenkette (die erste Linie, die auf englisch + sein sollte), benutzt. + + + Stichhaltige Effekte + -------------------- + WAVE Sie ("WAV") Akten mit dem gleichen Namen wie das PNG wellenartig. + (z.B., stichhaltiger Effekt "picture.png"'s ist der Ton "picture.wav" + im gleichen Verzeichnis.) + + Fr Tne fr unterschiedliche locales (z.B., wenn der Ton jemand ist, + der ein Wort sagt, und Sie wnschen bersetzte Versionen des Wortes + sagten), stellen Sie auch WAV-Akten mit dem Aufkleber der locales im + Dateinamen, in der Form her: "STAMP_LOCALE.wav." + + stichhaltiger Effekt "picture.png"'s, wenn Tux Paint in spanischen + Modus gelaufen wird, wrde "picture_es.wav" sein. Im franzsischen + Modus "picture_fr.wav". Und so weiter. + + Wenn kein beschrnkter stichhaltiger Effekt geladen werden kann, + versucht Tux Paint, die stichhaltige Akte 'der Rckstellung' zu laden. + (z.B., "picture.wav") + + + StempelcWahlen + -------------- + Neben einer graphischen Form, einer Textbeschreibung und einem + stichhaltigen Effekt knnen Stempel andere Attribute auch gegeben + werden. um dies zu tun, mssen Sie eine '.dat' fr den Stempel + herstellen. + + Eine Stempeldatei ist einfach eine Textakte, welche die Wahlen enthlt. + + Die Akte hat den gleichen Namen wie das PNG-Bild, aber eine ".dat" + Verlngerung. (z.B., "picture.png"'s-Datei ist die Textakte + "picture.dat" im gleichen Verzeichnis.) + + Farbige Stempel + --------------- + Stempel knnen gebildet werden, um 'colorable' oder 'tintable' zu + sein entweder. + + Colorable + --------- + Stempel "Colorable", die sie ganz wie Brsten - Sie Auswahl der + Stempel zum Erhalten der Form bearbeiten und whlen dann die Farbe + aus Sie sie sein wnschen. (Symbolstempel, wie die mathematischen + und musikalischen, sind ein Beispiel.) + + Nichts ber das ursprngliche Bild wird ausgenommen das Transparent + verwendet ("Alpha"Fhrung). Die Farbe des Stempels kommt aus Krper. + + Fgen Sie das "colorable" Wort der Datei des Stempels hinzu. + + Abgetnt ("Tintable") + --------------------- + "tnte" Stempel sind die hnliche "colorable" ab, ausgenommen die + Details des ursprnglichen Bildes gehalten werden. (es techically + zu setzen, wird das ursprngliche Bild verwendet, aber seine Farbe + wird gendert, gegrndet auf der gegenwrtig-vorgewhlten Farbe.) + + Fgen Sie das "tintable" Wort der Datei des Stempels hinzu. + + + Schriftkegel + ------------ + Die Schriftkegel, die von Tux Paint benutzt werden, sind Schriftkegel + TrueType (TTF). + + Legen Sie sie einfach in das "Schriftkegel" Verzeichnis. Tux Paint + ldt den Schriftkegel und liefert vier unterschiedliche Gren im + 'Schriftkegelvorwahl', wenn sie 'Text' Werkzeug verwendet. diff --git a/docs/de/KOPIE.txt b/docs/de/KOPIE.txt new file mode 100644 index 000000000..516bf3c49 --- /dev/null +++ b/docs/de/KOPIE.txt @@ -0,0 +1,507 @@ + + Deutsche bersetzung der + GNU General Public License + + Erstellt im Auftrag der S.u.S.E. GmbH http://www.suse.de + von Katja Lachmann bersetzungen , + berarbeitet von Peter Gerwinski (31. Oktober 1996, 4. Juni 2000) + + Diese bersetzung wird mit der Absicht angeboten, das Verstndnis der + GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich + jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte + bersetzung. + + Die Free Software Foundation (FSF) ist nicht der Herausgeber dieser + bersetzung, und sie hat diese bersetzung auch nicht als + rechtskrftigen Ersatz fr die Original-GNU-GPL anerkannt. Da die + bersetzung nicht sorgfltig von Anwlten berprft wurde, knnen die + bersetzer nicht garantieren, da die bersetzung die rechtlichen + Aussagen der GNU-GPL exakt wiedergibt. Wenn Sie sichergehen wollen, + da von Ihnen geplante Aktivitten im Sinne der GNU-GPL gestattet + sind, halten Sie sich bitte an die englischsprachige Originalversion. + + Die Free Software Foundation mchte Sie darum bitten, diese + bersetzung nicht als offizielle Lizenzbedingungen fr von Ihnen + geschriebene Programme zu verwenden. Bitte benutzen Sie hierfr + stattdessen die von der Free Software Foundation herausgegebene + englischsprachige Originalversion. + + This is a translation of the GNU General Public License into German. + This translation is distributed in the hope that it will facilitate + understanding, but it is not an official or legally approved + translation. + + The Free Software Foundation is not the publisher of this translation + and has not approved it as a legal substitute for the authentic GNU + General Public License. The translation has not been reviewed + carefully by lawyers, and therefore the translator cannot be sure that + it exactly represents the legal meaning of the GNU General Public + License. If you wish to be sure whether your planned activities are + permitted by the GNU General Public License, please refer to the + authentic English version. + + The Free Software Foundation strongly urges you not to use this + translation as the official distribution terms for your programs; + instead, please use the authentic English version published by the + Free Software Foundation. + + GNU General Public License + + Deutsche bersetzung der Version 2, Juni 1991 + + Copyright 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA + + peter@gerwinski.de + + Es ist jedermann gestattet, diese Lizenzurkunde zu vervielfltigen und + unvernderte Kopien zu verbreiten; nderungen sind jedoch nicht + erlaubt. + + Diese bersetzung ist kein rechtskrftiger Ersatz fr die + englischsprachige Originalversion! + + Vorwort + + Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen + die Freiheit zu nehmen, die Software weiterzugeben und zu verndern. + Im Gegensatz dazu soll Ihnen die GNU General Public License , die + Allgemeine ffentliche GNU-Lizenz, ebendiese Freiheit garantieren. Sie + soll sicherstellen, da die Software fr alle Benutzer frei ist. Diese + Lizenz gilt fr den Groteil der von der Free Software Foundation + herausgegebenen Software und fr alle anderen Programme, deren Autoren + ihr Datenwerk dieser Lizenz unterstellt haben. Auch Sie knnen diese + Mglichkeit der Lizenzierung fr Ihre Programme anwenden. (Ein anderer + Teil der Software der Free Software Foundation unterliegt stattdessen + der GNU Library General Public License , der Allgemeinen ffentlichen + GNU-Lizenz fr Bibliotheken.) [Mittlerweile wurde die GNU Library + Public License von der GNU Lesser Public License abgelst - Anmerkung + des bersetzers.] + + Die Bezeichnung ,,freie`` Software bezieht sich auf Freiheit, nicht + auf den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren, + Kopien freier Software zu verbreiten (und etwas fr diesen Service zu + berechnen, wenn Sie mchten), die Mglichkeit, die Software im + Quelltext zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die + Lizenzen sollen garantieren, da Sie die Software ndern oder Teile + davon in neuen freien Programmen verwenden drfen - und da Sie + wissen, da Sie dies alles tun drfen. + + Um Ihre Rechte zu schtzen, mssen wir Einschrnkungen machen, die es + jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie + aufzufordern, auf diese Rechte zu verzichten. Aus diesen + Einschrnkungen folgen bestimmte Verantwortlichkeiten fr Sie, wenn + Sie Kopien der Software verbreiten oder sie verndern. + + Beispielsweise mssen Sie den Empfngern alle Rechte gewhren, die Sie + selbst haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien eines + solchen Programms verbreiten. Sie mssen sicherstellen, da auch die + Empfnger den Quelltext erhalten bzw. erhalten knnen. Und Sie mssen + ihnen diese Bedingungen zeigen, damit sie ihre Rechte kennen. + + Wir schtzen Ihre Rechte in zwei Schritten: (1) Wir stellen die + Software unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen + diese Lizenz an, die Ihnen das Recht gibt, die Software zu + vervielfltigen, zu verbreiten und/oder zu verndern. + + Um die Autoren und uns zu schtzen, wollen wir darberhinaus + sicherstellen, da jeder erfhrt, da fr diese freie Software + keinerlei Garantie besteht. Wenn die Software von jemand anderem + modifiziert und weitergegeben wird, mchten wir, da die Empfnger + wissen, da sie nicht das Original erhalten haben, damit irgendwelche + von anderen verursachte Probleme nicht den Ruf des ursprnglichen + Autors schdigen. + + Schlielich und endlich ist jedes freie Programm permanent durch + Software-Patente bedroht. Wir mchten die Gefahr ausschlieen, da + Distributoren eines freien Programms individuell Patente lizensieren - + mit dem Ergebnis, da das Programm proprietr wrde. Um dies zu + verhindern, haben wir klargestellt, da jedes Patent entweder fr + freie Benutzung durch jedermann lizenziert werden mu oder berhaupt + nicht lizenziert werden darf. + + Es folgen die genauen Bedingungen fr die Vervielfltigung, + Verbreitung und Bearbeitung: + + Allgemeine ffentliche GNU-Lizenz + Bedingungen fr die Vervielfltigung, + Verbreitung und Bearbeitung + + 0. Diese Lizenz gilt fr jedes Programm und jedes andere Datenwerk, + in dem ein entsprechender Vermerk des Copyright-Inhabers darauf + hinweist, da das Datenwerk unter den Bestimmungen dieser General + Public License verbreitet werden darf. Im folgenden wird jedes + derartige Programm oder Datenwerk als ,,das Programm`` bezeichnet; die + Formulierung ,,auf dem Programm basierendes Datenwerk`` bezeichnet das + Programm sowie jegliche Bearbeitung des Programms im + urheberrechtlichen Sinne, also ein Datenwerk, welches das Programm, + auch auszugsweise, sei es unverndert oder verndert und/oder in eine + andere Sprache bersetzt, enthlt. (Im folgenden wird die bersetzung + ohne Einschrnkung als ,,Bearbeitung`` eingestuft.) Jeder Lizenznehmer + wird im folgenden als ,,Sie`` angesprochen. + + Andere Handlungen als Vervielfltigung, Verbreitung und Bearbeitung + werden von dieser Lizenz nicht berhrt; sie fallen nicht in ihren + Anwendungsbereich. Der Vorgang der Ausfhrung des Programms wird nicht + eingeschrnkt, und die Ausgaben des Programms unterliegen dieser + Lizenz nur, wenn der Inhalt ein auf dem Programm basierendes Datenwerk + darstellt (unabhngig davon, da die Ausgabe durch die Ausfhrung des + Programmes erfolgte). Ob dies zutrifft, hngt von den Funktionen des + Programms ab. + + 1. Sie drfen auf beliebigen Medien unvernderte Kopien des + Quelltextes des Programms, wie sie ihn erhalten haben, anfertigen und + verbreiten. Voraussetzung hierfr ist, da Sie mit jeder Kopie einen + entsprechenden Copyright-Vermerk sowie einen Haftungsausschlu + verffentlichen, alle Vermerke, die sich auf diese Lizenz und das + Fehlen einer Garantie beziehen, unverndert lassen und desweiteren + allen anderen Empfngern des Programms zusammen mit dem Programm eine + Kopie dieser Lizenz zukommen lassen. + + Sie drfen fr den eigentlichen Kopiervorgang eine Gebhr verlangen. + Wenn Sie es wnschen, drfen Sie auch gegen Entgeld eine Garantie fr + das Programm anbieten. + + 2. Sie drfen Ihre Kopie(n) des Programms oder eines Teils davon + verndern, wodurch ein auf dem Programm basierendes Datenwerk + entsteht; Sie drfen derartige Bearbeitungen unter den Bestimmungen + von Paragraph 1 vervielfltigen und verbreiten, vorausgesetzt, da + zustzlich alle im folgenden genannten Bedingungen erfllt werden: + + 1. + Sie mssen die vernderten Dateien mit einem aufflligen + Vermerk versehen, der auf die von Ihnen vorgenommene + Modifizierung und das Datum jeder nderung hinweist. + 2. + Sie mssen dafr sorgen, da jede von Ihnen verbreitete oder + verffentlichte Arbeit, die ganz oder teilweise von dem + Programm oder Teilen davon abgeleitet ist, Dritten gegenber + als Ganzes unter den Bedingungen dieser Lizenz ohne + Lizenzgebhren zur Verfgung gestellt wird. + 3. + Wenn das vernderte Programm normalerweise bei der Ausfhrung + interaktiv Kommandos einliest, mssen Sie dafr sorgen, da es, + wenn es auf dem blichsten Wege fr solche interaktive Nutzung + gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen + geeigneten Copyright-Vermerk enthlt sowie einen Hinweis, da + es keine Gewhrleistung gibt (oder anderenfalls, da Sie + Garantie leisten), und da die Benutzer das Programm unter + diesen Bedingungen weiter verbreiten drfen. Auch mu der + Benutzer darauf hingewiesen werden, wie er eine Kopie dieser + Lizenz ansehen kann. (Ausnahme: Wenn das Programm selbst + interaktiv arbeitet, aber normalerweise keine derartige Meldung + ausgibt, mu Ihr auf dem Programm basierendes Datenwerk auch + keine solche Meldung ausgeben). + + Diese Anforderungen gelten fr das bearbeitete Datenwerk als Ganzes. + Wenn identifizierbare Teile des Datenwerkes nicht von dem Programm + abgeleitet sind und vernnftigerweise als unabhngige und + eigenstndige Datenwerke fr sich selbst zu betrachten sind, dann + gelten diese Lizenz und ihre Bedingungen nicht fr die betroffenen + Teile, wenn Sie diese als eigenstndige Datenwerke weitergeben. Wenn + Sie jedoch dieselben Abschnitte als Teil eines Ganzen weitergeben, das + ein auf dem Programm basierendes Datenwerk darstellt, dann mu die + Weitergabe des Ganzen nach den Bedingungen dieser Lizenz erfolgen, + deren Bedingungen fr weitere Lizenznehmer somit auf das gesamte Ganze + ausgedehnt werden - und somit auf jeden einzelnen Teil, unabhngig vom + jeweiligen Autor. + + Somit ist es nicht die Absicht dieses Abschnittes, Rechte fr + Datenwerke in Anspruch zu nehmen oder Ihnen die Rechte fr Datenwerke + streitig zu machen, die komplett von Ihnen geschrieben wurden; + vielmehr ist es die Absicht, die Rechte zur Kontrolle der Verbreitung + von Datenwerken, die auf dem Programm basieren oder unter seiner + auszugsweisen Verwendung zusammengestellt worden sind, auszuben. + + Ferner bringt auch das einfache Zusammenlegen eines anderen + Datenwerkes, das nicht auf dem Programm basiert, mit dem Programm oder + einem auf dem Programm basierenden Datenwerk auf ein- und demselben + Speicher- oder Vertriebsmedium dieses andere Datenwerk nicht in den + Anwendungsbereich dieser Lizenz. + + 3. Sie drfen das Programm (oder ein darauf basierendes Datenwerk + gem Paragraph 2) als Objectcode oder in ausfhrbarer Form unter den + Bedingungen der Paragraphen 1 und 2 kopieren und weitergeben - + vorausgesetzt, da Sie auerdem eine der folgenden Leistungen + erbringen: + + 1. + Liefern Sie das Programm zusammen mit dem vollstndigen + zugehrigen maschinenlesbaren Quelltext auf einem fr den + Datenaustausch blichen Medium aus, wobei die Verteilung unter + den Bedingungen der Paragraphen 1 und 2 erfolgen mu. Oder: + 2. + Liefern Sie das Programm zusammen mit einem mindestens drei + Jahre lang gltigen schriftlichen Angebot aus, jedem Dritten + eine vollstndige maschinenlesbare Kopie des Quelltextes zur + Verfgung zu stellen - zu nicht hheren Kosten als denen, die + durch den physikalischen Kopiervorgang anfallen -, wobei der + Quelltext unter den Bedingungen der Paragraphen 1 und 2 auf + einem fr den Datenaustausch blichen Medium weitergegeben + wird. Oder: + 3. + Liefern Sie das Programm zusammen mit dem schriftlichen Angebot + der Zurverfgungstellung des Quelltextes aus, das Sie selbst + erhalten haben. (Diese Alternative ist nur fr + nicht-kommerzielle Verbreitung zulssig und nur, wenn Sie das + Programm als Objectcode oder in ausfhrbarer Form mit einem + entsprechenden Angebot gem Absatz b erhalten haben.) + + Unter dem Quelltext eines Datenwerkes wird diejenige Form des + Datenwerkes verstanden, die fr Bearbeitungen vorzugsweise verwendet + wird. Fr ein ausfhrbares Programm bedeutet ,,der komplette + Quelltext``: Der Quelltext aller im Programm enthaltenen Module + einschlielich aller zugehrigen + Modulschnittstellen-Definitionsdateien sowie der zur Compilation und + Installation verwendeten Skripte. Als besondere Ausnahme jedoch + braucht der verteilte Quelltext nichts von dem zu enthalten, was + blicherweise (entweder als Quelltext oder in binrer Form) zusammen + mit den Hauptkomponenten des Betriebssystems (Kernel, Compiler usw.) + geliefert wird, unter dem das Programm luft - es sei denn, diese + Komponente selbst gehrt zum ausfhrbaren Programm. + + Wenn die Verbreitung eines ausfhrbaren Programms oder von Objectcode + dadurch erfolgt, da der Kopierzugriff auf eine dafr vorgesehene + Stelle gewhrt wird, so gilt die Gewhrung eines gleichwertigen + Zugriffs auf den Quelltext als Verbreitung des Quelltextes, auch wenn + Dritte nicht dazu gezwungen sind, den Quelltext zusammen mit dem + Objectcode zu kopieren. + + 4. Sie drfen das Programm nicht vervielfltigen, verndern, weiter + lizenzieren oder verbreiten, sofern es nicht durch diese Lizenz + ausdrcklich gestattet ist. Jeder anderweitige Versuch der + Vervielfltigung, Modifizierung, Weiterlizenzierung und Verbreitung + ist nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz. + Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien oder Rechte + unter dieser Lizenz erhalten haben, nicht beendet, solange diese die + Lizenz voll anerkennen und befolgen. + + 5. Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie sie + nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes die + Erlaubnis, das Programm oder von ihm abgeleitete Datenwerke zu + verndern oder zu verbreiten. Diese Handlungen sind gesetzlich + verboten, wenn Sie diese Lizenz nicht anerkennen. Indem Sie das + Programm (oder ein darauf basierendes Datenwerk) verndern oder + verbreiten, erklren Sie Ihr Einverstndnis mit dieser Lizenz und mit + allen ihren Bedingungen bezglich der Vervielfltigung, Verbreitung + und Vernderung des Programms oder eines darauf basierenden + Datenwerks. + + 6. Jedesmal, wenn Sie das Programm (oder ein auf dem Programm + basierendes Datenwerk) weitergeben, erhlt der Empfnger automatisch + vom ursprnglichen Lizenzgeber die Lizenz, das Programm entsprechend + den hier festgelegten Bestimmungen zu vervielfltigen, zu verbreiten + und zu verndern. Sie drfen keine weiteren Einschrnkungen der + Durchsetzung der hierin zugestandenen Rechte des Empfngers vornehmen. + Sie sind nicht dafr verantwortlich, die Einhaltung dieser Lizenz + durch Dritte durchzusetzen. + + 7. Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs einer + Patentverletzung oder aus einem anderen Grunde (nicht auf Patentfragen + begrenzt) Bedingungen (durch Gerichtsbeschlu, Vergleich oder + anderweitig) auferlegt werden, die den Bedingungen dieser Lizenz + widersprechen, so befreien Sie diese Umstnde nicht von den + Bestimmungen dieser Lizenz. Wenn es Ihnen nicht mglich ist, das + Programm unter gleichzeitiger Beachtung der Bedingungen in dieser + Lizenz und Ihrer anderweitigen Verpflichtungen zu verbreiten, dann + drfen Sie als Folge das Programm berhaupt nicht verbreiten. Wenn zum + Beispiel ein Patent nicht die gebhrenfreie Weiterverbreitung des + Programms durch diejenigen erlaubt, die das Programm direkt oder + indirekt von Ihnen erhalten haben, dann besteht der einzige Weg, + sowohl das Patentrecht als auch diese Lizenz zu befolgen, darin, ganz + auf die Verbreitung des Programms zu verzichten. + + Sollte sich ein Teil dieses Paragraphen als ungltig oder unter + bestimmten Umstnden nicht durchsetzbar erweisen, so soll dieser + Paragraph seinem Sinne nach angewandt werden; im brigen soll dieser + Paragraph als Ganzes gelten. + + Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen, irgendwelche + Patente oder andere Eigentumsansprche zu verletzen oder die + Gltigkeit solcher Ansprche zu bestreiten; dieser Paragraph hat + einzig den Zweck, die Integritt des Verbreitungssystems der freien + Software zu schtzen, das durch die Praxis ffentlicher Lizenzen + verwirklicht wird. Viele Leute haben grozgige Beitrge zu dem groen + Angebot der mit diesem System verbreiteten Software im Vertrauen auf + die konsistente Anwendung dieses Systems geleistet; es liegt am + Autor/Geber, zu entscheiden, ob er die Software mittels irgendeines + anderen Systems verbreiten will; ein Lizenznehmer hat auf diese + Entscheidung keinen Einflu. + + Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als + Konsequenz aus dem Rest dieser Lizenz betrachtet wird. + + 8. Wenn die Verbreitung und/oder die Benutzung des Programms in + bestimmten Staaten entweder durch Patente oder durch urheberrechtlich + geschtzte Schnittstellen eingeschrnkt ist, kann der + Urheberrechtsinhaber, der das Programm unter diese Lizenz gestellt + hat, eine explizite geographische Begrenzung der Verbreitung angeben, + in der diese Staaten ausgeschlossen werden, so da die Verbreitung nur + innerhalb und zwischen den Staaten erlaubt ist, die nicht + ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz die + Beschrnkung, als wre sie in diesem Text niedergeschrieben. + + 9. Die Free Software Foundation kann von Zeit zu Zeit berarbeitete + und/oder neue Versionen der General Public License verffentlichen. + Solche neuen Versionen werden vom Grundprinzip her der gegenwrtigen + entsprechen, knnen aber im Detail abweichen, um neuen Problemen und + Anforderungen gerecht zu werden. + + Jede Version dieser Lizenz hat eine eindeutige Versionsnummer. Wenn in + einem Programm angegeben wird, da es dieser Lizenz in einer + bestimmten Versionsnummer oder ,,jeder spteren Version`` (``any later + version'') unterliegt, so haben Sie die Wahl, entweder den + Bestimmungen der genannten Version zu folgen oder denen jeder + beliebigen spteren Version, die von der Free Software Foundation + verffentlicht wurde. Wenn das Programm keine Versionsnummer angibt, + knnen Sie eine beliebige Version whlen, die je von der Free Software + Foundation verffentlicht wurde. + + 10. Wenn Sie den Wunsch haben, Teile des Programms in anderen freien + Programmen zu verwenden, deren Bedingungen fr die Verbreitung anders + sind, schreiben Sie an den Autor, um ihn um die Erlaubnis zu bitten. + Fr Software, die unter dem Copyright der Free Software Foundation + steht, schreiben Sie an die Free Software Foundation ; wir machen zu + diesem Zweck gelegentlich Ausnahmen. Unsere Entscheidung wird von den + beiden Zielen geleitet werden, zum einen den freien Status aller von + unserer freien Software abgeleiteten Datenwerke zu erhalten und zum + anderen das gemeinschaftliche Nutzen und Wiederverwenden von Software + im allgemeinen zu frdern. + +Keine Gewhrleistung + + 11. Da das Programm ohne jegliche Kosten lizenziert wird, besteht + keinerlei Gewhrleistung fr das Programm, soweit dies gesetzlich + zulssig ist. Sofern nicht anderweitig schriftlich besttigt, stellen + die Copyright-Inhaber und/oder Dritte das Programm so zur Verfgung, + ,,wie es ist``, ohne irgendeine Gewhrleistung, weder ausdrcklich + noch implizit, einschlielich - aber nicht begrenzt auf - Marktreife + oder Verwendbarkeit fr einen bestimmten Zweck. Das volle Risiko + bezglich Qualitt und Leistungsfhigkeit des Programms liegt bei + Ihnen. Sollte sich das Programm als fehlerhaft herausstellen, liegen + die Kosten fr notwendigen Service, Reparatur oder Korrektur bei + Ihnen. + + 12. In keinem Fall, auer wenn durch geltendes Recht gefordert oder + schriftlich zugesichert, ist irgendein Copyright-Inhaber oder + irgendein Dritter, der das Programm wie oben erlaubt modifiziert oder + verbreitet hat, Ihnen gegenber fr irgendwelche Schden haftbar, + einschlielich jeglicher allgemeiner oder spezieller Schden, Schden + durch Seiteneffekte (Nebenwirkungen) oder Folgeschden, die aus der + Benutzung des Programms oder der Unbenutzbarkeit des Programms folgen + (einschlielich - aber nicht beschrnkt auf - Datenverluste, + fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder + anderen getragen werden mssen, oder dem Unvermgen des Programms, mit + irgendeinem anderen Programm zusammenzuarbeiten), selbst wenn ein + Copyright-Inhaber oder Dritter ber die Mglichkeit solcher Schden + unterrichtet worden war. + +Ende der Bedingungen + + Anhang: Wie Sie diese Bedingungen auf Ihre eigenen, + neuen Programme anwenden knnen + + Wenn Sie ein neues Programm entwickeln und wollen, da es vom + grtmglichen Nutzen fr die Allgemeinheit ist, dann erreichen Sie + das am besten, indem Sie es zu freier Software machen, die jeder unter + diesen Bestimmungen weiterverbreiten und verndern kann. + + Um dies zu erreichen, fgen Sie die folgenden Vermerke zu Ihrem + Programm hinzu. Am sichersten ist es, sie an den Anfang einer jeden + Quelldatei zu stellen, um den Gewhrleistungsausschlu mglichst + deutlich darzustellen; zumindest aber sollte jede Datei eine + Copyright-Zeile besitzen sowie einen kurzen Hinweis darauf, wo die + vollstndigen Vermerke zu finden sind. + + [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] + Copyright (C) [Jahr] [Name des Autors] + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. + + Auf Deutsch: + + [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] + Copyright (C) [Jahr] [Name des Autors] + + Dieses Programm ist freie Software. Sie knnen es unter den + Bedingungen der GNU General Public License, wie von der Free + Software Foundation verffentlicht, weitergeben und/oder + modifizieren, entweder gem Version 2 der Lizenz oder (nach Ihrer + Option) jeder spteren Version. + + Die Verffentlichung dieses Programms erfolgt in der Hoffnung, da + es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar + ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT + FR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General + Public License. + + Sie sollten eine Kopie der GNU General Public License zusammen mit + diesem Programm erhalten haben. Falls nicht, schreiben Sie an die + Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, + MA 02111-1307, USA. + + Fgen Sie auch einen kurzen Hinweis hinzu, wie Sie elektronisch und + per Brief erreichbar sind. + + Wenn Ihr Programm interaktiv ist, sorgen Sie dafr, da es nach dem + Start einen kurzen Vermerk ausgibt: + + version 69, Copyright (C) [Jahr] [Name des Autors] + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to + redistribute it under certain conditions; type `show c' for + details. + + Auf Deutsch: + + Version 69, Copyright (C) [Jahr] [Name des Autors] Fr Gnomovision + besteht KEINERLEI GARANTIE; geben Sie `show w' fr Details ein. + Gnonovision ist freie Software, die Sie unter bestimmten + Bedingungen weitergeben drfen; geben Sie `show c' fr Details ein. + + Die hypothetischen Kommandos `show w' und `show c' sollten die + entsprechenden Teile der GNU-GPL anzeigen. Natrlich knnen die von + Ihnen verwendeten Kommandos anders heien als `show w' und `show c'; + es knnten auch Mausklicks oder Menpunkte sein - was immer am besten + in Ihr Programm pat. + + Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber (wenn Sie als + Programmierer arbeiten) oder Ihre Schule einen Copyright-Verzicht fr + das Programm unterschreiben lassen. Hier ein Beispiel. Die Namen + mssen Sie natrlich ndern. + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + [Unterschrift von Ty Coon], 1 April 1989 + Ty Coon, President of Vice + + Auf Deutsch: + + Die Yoyodyne GmbH erhebt keinen urheberrechtlichen Anspruch auf das + von James Hacker geschriebene Programm ,Gnomovision` (einem + Schrittmacher fr Compiler). + + [Unterschrift von Ty Coon], 1. April 1989 + Ty Coon, Vizeprsident + + Diese General Public License gestattet nicht die Einbindung des + Programms in proprietre Programme. Ist Ihr Programm eine + Funktionsbibliothek, so kann es sinnvoller sein, das Binden + proprietrer Programme mit dieser Bibliothek zu gestatten. Wenn Sie + dies tun wollen, sollten Sie die GNU Library General Public License + anstelle dieser Lizenz verwenden. diff --git a/docs/de/PNG.txt b/docs/de/PNG.txt new file mode 100644 index 000000000..45b0c5ee5 --- /dev/null +++ b/docs/de/PNG.txt @@ -0,0 +1,2 @@ +Sehen Sie bitte docs/PNG.txt + diff --git a/docs/es/AUTORES.txt b/docs/es/AUTORES.txt new file mode 100644 index 000000000..af806aa28 --- /dev/null +++ b/docs/es/AUTORES.txt @@ -0,0 +1,152 @@ +AUTORES.txt de Tux Paint + +Tux Paint - Un programa de dibujo simple para nios. + +Copyright (c) 2002 por Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + + +17 de Junio de 2002 - 21 de Noviembre de 2002 + + +* Diseo y Programacin: + + Bill Kendrick + New Breed Software + http://www.newbreedsoftware.com/ + + Algoritmo de figuras rellenas basado en una descripcin del libro + "Computer Graphics: C Version," (c) Prentice Hall 1997 + por Donald Hearn y M. Pauline Baker. + [ NOTA: Actualmente no utilizado. ] + + Cdigo de relleno basado en el ejemplo de Wikipedia: + http://www.wikipedia.org/wiki/Flood_fill/C_example + por Damian Yerrick - http://www.wikipedia.org/wiki/Damian_Yerrick + + +* Grficos + + * Botones de la IU - Creados usando el guin para botones "AquaPro" de + The GIMP. Copyright (C) 2001 Denis Bodor + + * conos de la IU - Creados por Bill Kendrick usando The GIMP + + * Representacin tipo dibujo animado de "Tux", el pingino de Linux + Creada por Sam "Criswell" Hart + Tux diseado originalmente por Larry Ewing + http://www.isc.tamu.edu/~lewing/linux/ + + * Pinceles creados usando The GIMP + http://www.gimp.org/ + + +* Tipos de Letra + + * "efont-serif.ttf" por Electronic Font Open Laboratory + http://openlab.ring.gr.jp/efont/serif/ + Bajo licencia GPL, Copyright 2000-2001 Kazuhiko + + * "default_font.ttf" es "FreeSans.ttf" de las Free UCS Outline Fonts. + http://www.freesoftware.fsf.org/freefont/ + Bajo licencia GPL, Copyright 2002 Primoz Peterlin + y otros + + +* Sonido + + * Varios grabados por Bill Kendrick + * Bloques - Pila de cartuchos de Nintendo NES golpendose entre s. + * Desenfoque - Micrfono contra la almohadilla del ratn. + * Tiza - Micrfono contra la cabellera. + * Desvanecimiento - Rana chillona. + + * Muchos otros tomados de varios lugares de la web. + + * Editado utilizando SOX + http://sox.sourceforge.net/ + + * Editado utilizando Audacity + http://www.audacity.org/ + + +* Traducciones + + * Cataln + Pere Pujal Carabantes + + * Checo + Peter Sterba + Martin , + (Coming soon) Ales + + * Dans + Rasmus Erik Voel Jensen + + * Holands + Herman Bruyninckx + Geert Stams + + * Finlands + Tarmo Toikkanen + + * Francs + Jacques Chion + Charles Vidal + + * Alemn + Fabian Franz + + * Islands + Pjetur G. Hjaltason + + * Italiano + Marco Milanesi + + * Hngaro (prximamente) + Trk Gbor + + * Noruego + Karl Ove Hufthammer + + * Polaco (prximamente) + Jacek Poplawski + + * Portugus (Brasilero) + Daniel Jos Viana + Dedicado a mi amada hija Scarlet + + * Espaol + Gabriel Gazzn + + * Sueco + Daniel Andersson + + * Turco + Doruk Fisek + + +* Ports y Empaque + + * Versin para Windows 32 bits + John Popplewell + + * Paquete para Debian + Ben Armstrong + + * Paquete para NetBSD + Thomas Klausner + + * Versin para Mac OS X + Darrell Walisser + + +* Soporte / Probadores + + Tux4Kids.org, Sam Hart (encargado del proyecto Tux4Kids) + Muchos otros en la comunidad! (Pruebas, correccin de errores, + comentarios, alabanzas) + + +Ver tambin: CHANGES.txt (en ingls) diff --git a/docs/es/CONTRIBUYENTES.txt b/docs/es/CONTRIBUYENTES.txt new file mode 100644 index 000000000..b5f896927 --- /dev/null +++ b/docs/es/CONTRIBUYENTES.txt @@ -0,0 +1,100 @@ +CONTRIBUYENTES.txt de los Sellos del Tux Paint + +Tux Paint - Un programa de dibujo simple para nios. +Esta es una coleccin de imgenes de 'sellos de goma' para el Tux Paint. + +Copyright 2002 por Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/?lang=es + +6 de Octubre de 2002 - 9 de Octubre de 2002 + + +Por detalles especficos, ver "CHANGES.txt" y/o verificar las lneas +comentadas ("#") en los textos descriptivos de los sellos, las que +habitualmente contienen crditos. + + +Imgenes de Sellos +------------------ + Bill Kendrick + + * Smbolos matemticos + * Smbolos Musicales + * Algunas frutas y vegetales + * Sellos de Halloween + + + Proyecto GOVIA + Justin Zeigler + http://govia.osef.org/ + + * Monedas de EE.UU. + * Flores + * Banderas + + + NASA y NSSDC + http://nssdc.gsfc.nasa.gov/ + + * Sellos espaciales + + + George Wong + http://www.botany.hawaii.edu/faculty/wong/BOT135/LECT06.HTM + + * Papa + + + MarketplaceFood.com + http://www.marketplacefood.com/weekly_specials.html + + * Algunas frutas + * Algunos vegetales + + + Cocoranch Organic Farmers Market + Towani Organci Farm, Bangor, California + http://www.cocoranch.com/ + + * Algunos vegetales + + + Jacques Chion + + * Monedas de Euros + + + Jen y Ed Collins + (por permitirme escudriar su casa con mi cmara) + + * Herramientas + * Algunas frutas + * Algunos utensilios y platos + + +Traducciones +------------ + Portugus Brasilero + Daniel Jose Viana + + Dans + Rasmus Erik Voel Jensen + + Alemn + Fabian Franz + Ingo Blechschmidt + + Espaol + Gabriel Gazzn + + Francs + Jacques Chion + + Islands + Pjetur G. Hjaltason + + Noruego + Karl Ove Hufthammer + + diff --git a/docs/es/COPIADO.txt b/docs/es/COPIADO.txt new file mode 100644 index 000000000..64c9119ae --- /dev/null +++ b/docs/es/COPIADO.txt @@ -0,0 +1,427 @@ + + [philosophical-gnu-sm.jpg] + + GNU General Public License + + Licencia Pblica General + + Versin 2, Junio de 1991 + Traduccin al Espaol : Diciembre de 2001 por + Jos Mara Sarchaga Fischer jsarachaga@garaitia.com + + > prembulo + > trminos y condiciones + > cmo aplicar esta licencia + ______________________________________________________________ + + This is an unofficial translation of the GNU General Public License + into spanish. It was not published by the Free Software Foundation, + and does not legally state the distribution terms for software that + uses the GNU GPL--only the original English text of the GNU GPL + does that. However, we hope that this translation will help spanish + speakers understand the GNU GPL better. + ________________________________________ + + Esta es una traduccin NO oficial de la "GNU General Public + License" al espaol. No fu publicada por la "FSF Free Software + Foundation", y no respalda legalmente los trminos de distribucin + del software que utiliza la "GNU GPL", slo el texto original en + ingls lo hace. Sin embargo esperamos que esta traduccin ayude a + las personas de habla hispana a entender mejor la "GPL". + ______________________________________________________________ + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + + Toda persona tiene permiso de copiar y distribuir copias fieles de + este documento de licencia, pero no se permite hacer + modificaciones. + + PREAMBULO + ______________________________________________________________ + + Los contratos de licencia de la mayor parte del software estn + diseados para quitarle su libertad de compartir y modificar dicho + software. En contraste, la "GNU General Public License" pretende + garantizar su libertad de compartir y modificar el software + "libre", esto es para asegurar que el software es libre para todos + sus usuarios. Esta licencia pblica general se aplica a la mayora + del software de la "FSF Free Software Foundation" (Fundacin para + el Software Libre) y a cualquier otro programa de software cuyos + autores as lo establecen. Algunos otros programas de software de + la Free Software Foundation estn cubiertos por la "LGPL Library + General Public License" (Licencia Pblica General para Libreras), + la cual puede aplicar a sus programas tambin. + + Cuando hablamos de software libre, nos referimos a libertad, no + precio. Nuestras licencias "General Public Licenses" estn + diseadas para asegurar que: + 1. usted tiene la libertad de distribuir copias del software libre (y + cobrar por ese sencillo servicio si as lo desea) + 2. recibir el cdigo fuente (o tener la posibilidad de obtenerlo si + as lo desea) + 3. que usted puede modificar el software o utilizar partes de el en + nuevos programas de software libre + 4. que usted est enterado de que tiene la posibilidad de hacer todas + estas cosas. + + Para proteger sus derechos, necesitamos hacer restricciones que + prohiban a cualquiera denegarle estos derechos o a pedirle que + renuncie a ellos. Estas restricciones se traducen en algunas + responsabilidades para usted si distribuye copias del software, o + si lo modifica. + + Por ejemplo, si usted distribuye copias de un programa, ya sea + gratuitamente o por algun importe, usted debe dar al que recibe el + software todos los derechos que usted tiene sobre el mismo. Debe + asegurarse tambin que reciban el cdigo fuente o bin que puedan + obtenerlo si lo desean. Y por ltimo debe mostrarle a esa persona + estos trminos para que conozca los derechos de que goza. + + Nosotros protegemos sus derechos en 2 pasos: (1) protegiendo los + derechos de autor del software y (2) ofreciendole este contrato de + licencia que le otorga permiso legal para copiar, distribuir y + modificar el software. + + Adems, para la proteccin de los autores de software y la nuestra, + queremos asegurarnos de que toda persona entienda que no existe + ninguna garanta del software libre. Si el software es modificado + por alguien y lo distribuye, queremos que quienes lo reciban sepan + que la copia que obtuvieron no es la original, por lo que cualquier + problema provocado por quien realiz la modificacin no afectar la + reputacin del autor original. + + Finalmente, cualquier programa de software libre es constantemente + amenazado por las patentes de software. Deseamos evadir el peligro + de que los re-distribuidores de un programa de software libre + obtenga individualmente los derechos de patente con el fin de + volver dicho programa propietario. Para prevenir esto, hemos dejado + en claro que cualquier patente deber ser licenciada para el uso + libre de toda persona o que no est licenciada del todo. + + A continuacin se describen con precisin los trminos y + condiciones para copiar, distribuir y modificar el software. + + TERMINOS Y CONDICIONES PARA COPIA, MODIFICACION Y DISTRIBUCION + ______________________________________________________________ + + 0. Esta licencia aplica a cualquier programa o trabajo que contenga + una nota puesta por el propietario de los derechos del trabajo + estableciendo que su trabajo puede ser distribuido bajo los + trminos de esta "GPL General Public License". El "Programa", + utilizado en lo subsecuente, se refiere a cualquier programa o + trabajo original, y el "trabajo basado en el Programa" significa ya + sea el Programa o cualquier trabajo derivado del mismo bajo la ley + de derechos de autor: es decir, un trabajo que contenga el Programa + o alguna porcin de el, ya sea ntegra o con modificaciones y/o + traducciones a otros idiomas. De aqu en adelante "traduccin" + estar incluida (pero no limitada a) en el trmino "modificacin", + y la persona a la que se aplique esta licencia ser llamado + "usted". + + Otras actividades que no sean copia, distribucin o modificacin no + estn cubiertas en esta licencia y estn fuera de su alcance. El + acto de ejecutar el programa no est restringido, y la salida de + informacin del programa est cubierta slo si su contenido + constituye un trabajo basado en el Programa (es independiente de si + fue resultado de ejecutar el programa). Si esto es cierto o no + depende de la funcin del programa. + + 1. Usted puede copiar y distribuir copias fieles del cdigo fuente + del programa tal como lo recibi, en cualquier medio, siempre que + proporcione de manera conciente y apropiada una nota de derechos de + autor y una declaracin de no garanta, adems de mantener intactas + todas las notas que se refieran a esta licencia y a la ausencia de + garanta, y que le proporcione a las dems personas que reciban el + programa una copia de esta licencia junto con el Programa. + + Usted puede aplicar un cargo por el acto fsico de transferir una + copia, y ofrecer proteccin de garanta por una cuota, lo cual no + compromete a que el autor original del Programa responda por tal + efecto. + + 2. Usted puede modificar su copia del Programa o de cualquier parte + de el, formando as un trabajo basado en el Programa, y copiar y + distribuir tales modificaciones o bin trabajar bajo los trminos + de la seccin 1 arriba descrita, siempre que cumpla con las + siguientes condiciones: + + A. Usted debe incluir en los archivos modificados notas declarando + que modific dichos archivos y la fecha de los cambios. + B. Usted debe notificar que ese trabajo que distribuye contiene + totalmente o en partes al Programa, y que debe ser licenciado como + un conjunto sin cargo alguno a cualquier otra persona que reciba + sus modificaciones bajo los trminos de esta Licencia. + C. Si el programa modificado lee normalmente comandos + interactivamente cuando es ejecutado, usted debe presentar un + aviso, cuando el programa inicie su ejecucin en ese modo + interactivo de la forma ms ordinaria, que contenga una noticia de + derechos de autor y un aviso de que no existe garanta alguna (o + que s existe si es que usted la proporciona) y que los usuarios + pueden redistribuir el programa bajo esas condiciones, e + informando al usuario como puede ver una copia de esta Licencia. + (Excepcin: si el programa en s es interactivo pero normalmente + no muestra notas, su trabajo basado en el Programa no tiene la + obligacin de mostrar tales notas) + + Estos requerimientos aplican al trabajo modificado como un todo. Si + existen secciones identificables de tal trabajo que no son + derivadas del Programa original, y pueden ser razonablemente + consideradas trabajos separados e independientes como tal, entonces + esta Licencia y sus trminos no aplican a dichas secciones cuando + usted las distribuye como trabajos separados. Pero cuando usted + distribuye las mismas secciones como parte de un todo que es un + trabajo basado en el Programa, la distribucin del conjunto debe + ser bajo los trminos de esta Licencia, cuyos permisos para otras + personas que obtengan el software se extienden para todo el + software, as como para cada parte de el, independientemente de + quin lo escribi. + + No es la intencin de esta seccin de reclamar derechos o pelear + sus derechos sobre trabajos hechos enteramente por usted, en lugar + de eso, la intencin es ejercer el derecho de controlar la + distribucin de los trabajos derivados o colectivos basados en el + Programa. + + Adicionalmente, el simple agregado de otro trabajo NO basado en el + Programa al Programa en cuestin (o a un trabajo basado en el + Programa) en algn medio de almacenamiento no pone el otro trabajo + bajo el alcance de esta Licencia. + + 3. Usted puede copiar y distribuir el Programa (o un trabajo basado + en l, bajo la Seccin 2) en cdigo objeto o en forma de ejecutable + najo los trminos de las secciones 1 y 2 arriba descritas siempre + que cumpla los siguientes requisitos: + A. Acompaarlo con el correspondiente cdigo fuente legible por la + mquina, que debe ser distribudo bajo los trminos de las + secciones 1 y 2 y en un medio comunmente utilizado para el + intercambio de software, o + B. Acompaarlo con una oferta escrita, vlida por al menos 3 aos y + para cualquier persona, por un cargo no mayor al costo que + conlleve la distribucin fsica del cdigo fuente correspondiente + en un medio comunmente utilizado para el intercambio de software, + o + C. Acompaarlo con la informacin que usted recibi sobre la oferta + de distribucin del cdigo fuente correspondiente. (Esta + alternativa est permitida slo para distribucin no-comercial y + slo si usted recibi el Programa en cdigo objeto o en forma de + ejecutable con tal oferta de acuerdo a la subseccin b anterior) + + El cdigo fuente de un trabajo significa la forma preferida de + hacer modificaciones al mismo. Para un trabajo ejecutable, un + cdigo fuente completo significa todo el cdigo fuente de todos los + mdulos que contiene, mas cualquier archivo de definicin de + interfases, mas los programas utilizados para controlas la + compilacin y la instalacin del ejecutable. + + Si la distribucin del ejecutable o del cdigo objeto se hace + ofreciendo acceso a copiar desde un lugar designado, entonces el + ofrecer acceso equivalente para copiar el cdigo fuente desde el + mismo lugar se considera distribucin del cdigo fuente, aunque las + dems personas no copien el cdigo fuente junto con el cdigo + objeto. + + 4. Usted no puede copiar, modificar, sub-licenciar ni distribuir el + Programa a menos que sea expresamente bajo esta Licencia, de otra + forma cualquier intento de copiar, modificar, sub-licenciar o + distribuir el programa es nulo, y automticamente causar la + prdida de sus derechos bajo esta Licencia. Sin embargo, cualquier + persona que haya recibido copias o derechos de usted bajo esta + Licencia no vern terminadas sus Licencias ni sus derechos perdidos + mientras ellas continen cumpliendo los trminos de esta Licencia. + + 5. Usted no est obligado a aceptar esta Licencia, dado que no la + ha firmado. Sin embargo, nada le otorga el permiso de modificar o + distribuir el Programa ni sus trabajos derivados. Estas acciones + estn prohibidas por la ley si usted no acepta esta Licencia. Sin + embargo, modificando o distribuyendo el Programa (o cualquier + trabajo basado en el Programa) indica su aceptacin de esta + Licencia y de todos sus trminos y condiciones para copiar, + distribuir o modificar el Programa y/o trabajos basados en el. + + 6. Cada vez que usted redistribuye el Programa (o cualquier trabajo + basado en el Programa), la persona que lo recibe automticamente + recibe una licencia del autor original para copiar, distribuir o + modificar el Programa sujeto a estos trminos y condiciones. Usted + no puede imponer ninguna restriccin adicional a las personas que + reciban el Programa sobre los derechos que en esta Licencia se les + otorga. Usted no es responsable de forzar a terceras personas en el + cumplimiento de esta Licencia. + + 7. Si como consecuencia de un veredicto de un juzgado o por el + alegato de infringir una patente o por cualquier otra razn (no + limitado solo a cuestiones de patentes) se imponen condiciones + sobre usted que contradigan los trminos y condiciones de esta + Licencia, stas no le excusan de los trminos y condiciones aqu + descritos. Si usted no puede distribuir el producto cumpliendo + totalmente con las obligaciones concernientes a la resolucin + oficial y al mismo tiempo con las obligaciones que se describen en + este contrato de Licencia, entonces no podr distribuir ms este + producto. Por ejemplo, si una licencia de patente no permitir la + distribucin del Programa de forma libre de regalas (sin pago de + regalas) por parte de quienes lo reciban directa o indirectamente, + entonces la nica forma de cumplir con ambas obligaciones es + renunciar a la distribucin del mismo. + + Si cualquier parte de esta seccin resulta invlida, inaplicable o + no obligatoria bajo cualquier circunstancia en particular, la + tendencia de esta es a aplicarse, y la seccin completa se aplicar + bajo otras circunstancias. + + La intencin de esta seccin no es la de inducirlo a infringir + ninguna ley de patentes, ni tampoco infringir algn reclamo de + derechos, ni discutir la validez de tales reclamos; esta seccin + tiene el nico propsito de proteger la integridad del sistema de + distribucin del software libre, que est implementado por + prcticas de licencia pblica. Mucha gente ha hecho generosas + contribuciones a la amplia gama de software distribuido bajo este + sistema favoreciendo as la constante aplicacin de este sistema de + distribucin; es decisin del autor/donador si su Programa ser + distribudo utilizando este u otro sistema de distribucin, y la + persona que recibe el software no puede obligarlo a hacer ninguna + eleccin en particular. + + Esta seccin pretende dejar muy en claro lo que se cree que ser + una consecuencia del resto de esta Licencia. + + 8. Si la distribucin y/o el uso del Programa se restringe a + algunos pases ya sea por patentes, interfases protegidas por + derechos de autor, el propietario original de los derechos de autor + que ubica su Programa bajo esta Licencia puede agregar una + restriccin geogrfica de distribucin explcita excluyendo los + pases que aplique, dando como resultado que su distribucin slo + se permita en los pases no excludos. En tal caso, esta Licencia + incorpora la limitacin como si hubiera sido escrita en el cuerpo + de esta misma Licencia. + + 9. La "FSF Free Software Foundation" puede publicar versiones + nuevas o revisadas de la "GPL General Public License" de uno a otro + momento. Estas nuevas versiones mantendrn el espritu de la + presente versin, pero pueden diferir en la inclusin de nuevos + problemas o en la manera de tocar los problemas o aspectos ya + presentes. + + Cada versin tendr un nmero de versin que la distinga. Si el + Programa especifica un nmero de versin para esta Licencia que + aplique a l y "cualquier versin subsecuente", usted tiene la + opcin de seguir los trminos y condiciones de dicha versin o de + cualquiera de las posteriores versiones publicadas por la "FSF". Si + el programa no especifica una versin en especial de esta Licencia, + usted puede elegir entre cualquiera de las versiones que han sido + publicadas por la "FSF". + + 10. Si usted desea incorporar partes del Programa en otros + Programas de software libre cuyas condiciones de distribucin sean + distintas, deber escribir al autor solicitando su autorizacin. + Para programas de software protegidas por la "FSF Free Software + Foundation", deber escribir a la "FSF" solicitando autorizacin, + en ocasiones hacemos excepciones. Nuestra decisin ser guiada por + dos metas principales: + * mantener el estado de libertad de todos los derivados de nuestro + software libre + * promover el uso comunitario y compartido del software en general + + NO EXISTE GARANTIA ALGUNA + ______________________________________________________________ + + 11. DEBIDO A QUE EL PROGRAMA SE OTORGA LIBRE DE CARGOS Y REGALIAS, + NO EXISTE NINGUNA GARANTIA PARA EL MISMO HASTA DONDE LO PERMITA LA + LEY APLICABLE. A EXCEPCION DE QUE SE INDIQUE OTRA COSA, LOS + PROPIETARIOS DE LOS DERECHOS DE AUTOR PROPORCIONAN EL PROGRAMA + "COMO ES" SIN NINGUNA GARANTIA DE NINGUN TIPO, YA SEA EXPLICITA O + IMPLICITA, INCLUYENDO, PERO NO LIMITADA A, LAS GARANTIAS QUE + IMPLICA EL MERCADEO Y EJERCICIO DE UN PROPOSITO EN PARTICULAR. + CUALQUIER RIESGO DEBIDO A LA CALIDAD Y DESEMPEO DEL PROGRAMA ES + TOMADO COMPLETAMENTE POR USTED. SI EL SOFTWARE MUESTRA ALGUN + DEFECTO, USTED CUBRIRA LOS COSTOS DE CUALQUIER SERVICIO, REPARACION + O CORRECCION DE SUS EQUIPOS Y/O SOFTWARE QUE REQUIERA. + + 12. EN NINGUN CASO NI BAJO NINGUNA CIRCUNSTANCIA EXCEPTO BAJO + SOLICITUD DE LA LEY O DE COMUN ACUERDO POR ESCRITO, NINGUN + PROPIETARIO DE LOS DERECHOS DE AUTOR NI TERCERAS PERSONAS QUE + PUDIERAN MODIFICAR Y/O REDISTRIBUIR EL PROGRAMA COMO SE PERMITE + ARRIBA, SERAN RESPONSABLES DE LOS DAOS CORRESPONDIENTES AL USO O + IMPOSIBILIDAD DE USAR EL PROGRAMA, SIN IMPORTAR SI SON DAOS + GENERALES, ESPECIALES, INCIDENTALES O CONSEQUENTES CORRESPONDIENTES + AL USO O IMPOSIBILIDAD DE USAR EL PROGRAMA (INCLUYENDO PERO NO + LIMITADO A LA PERDIDA DE INFORMACION O DETERIORO DE LA MISMA + AFECTANDOLO A USTED, A TERCERAS PERSONAS QUE SEA POR FALLAS EN LA + OPERACION DEL PROGRAMA O SU INTERACCION CON OTROS PROGRAMAS) + INCLUSIVE SI TAL PROPIETARIO U OTRAS PERSONAS HAYAN SIDO + NOTIFICADAS DE TALES FALLAS Y DE LA POSIBILIDAD DE TALES DAOS. + ______________________________________________________________ + + FIN DE TERMINOS Y CONDICIONES + + Cmo aplicar estos trminos a sus nuevos programas? + + Si usted desarrolla un nuevo Programa y desea que sea lo ms + pblico posible, el mejor modo de hacerlo es haciendolo Software + Libre donde toda persona lo puede redistribui y cambiar bajo estos + trminos. + + Para hacer esto, agregue las siguientes notas al programa. Es ms + seguro agregarlas al inicio de cada archivo del cdigo fuente para + notificar de manera ms efectiva la ausencia de garanta; y cada + archivo debe de contener al menos la lnea de "Copyright" o + derechos de autor y una referencia de donde se puede encontrar la + nota completa. + + ejemplo: + +esta lnea que contenga el nombre del programa y una idea de lo que hace. +Copyright (C) AO nombre del autor + +Este programa es Software Libre; usted puede redistribuirlo +y/o modificarlo bajo los trminos de la "GNU General Public +License" como lo publica la "FSF Free Software Foundation", +o (a su eleccin) de cualquier versin posterior. + +Este programa es distribuido con la esperanza de que le ser +til, pero SIN NINGUNA GARANTIA; incluso sin la garanta +implcita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en +particular. Vea la "GNU General Public License" para ms +detalles. + +Usted debe haber recibido una copia de la "GNU General Public +License" junto con este programa, si no, escriba a la "FSF +Free Software Foundation, Inc.", 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + + Adicionalmente agregue informacin de cmo contactarle por correo + electrnico y convencional. + + Si el programa es interactivo, ponga en la salida del programa una + nota corta al iniciar el modo interactivo: + +Gnomovision version 69, Copyright (C) AO nombre del autor +Gnomovision no tiene NINGUNA GARANTIA, para ms detalles +escriba 'show w'. Este es Software Libre, y usted est +permitido para redistribuirlo bajo ciertas condiciones; +escriba 'show c' para ms detalles. + + Estos supuestos comandos 'show w' y 'show c' debern mostrar las + partes apropiadas de la "GPL General Public License". Por supuesto, + los comandos que utilice pueden ser distintos, pueden ser incluso + "clicks" del ratn, opciones de mens etc, lo ms apropiado para su + programa. + + Usted debera hacer que su jefe de proyecto (si trabaja como + programador) o su escuela, si aplica, firme una "declaracin de + derechos de autor" para el programa, si se necesita. Aqu hay un + ejemplo, modifique los nombres: + +Yoyodyne, Inc., aqu vienen las declaraciones de derechos de autor +inters en el programa 'Gnomovision' +(lo que make pasa al compilador) +escrito por James Hacker. + +firma de Ty Coon, 1 de Abril 1989 +Ty Coon, Presidente + + Esta Licencia Pblica General no permite incorporar su programa en + programas propietarios. Si su programa es una librera de subrutinas, + puede ser ms til permitir que se ligue en tiempo de compilacin o + ejecucin a aplicaciones propietarias. Si esto es lo que quiere hacer, + use la licencia Pblica General para Libreras en lugar de esta + licencia. diff --git a/docs/es/FAQ.txt b/docs/es/FAQ.txt new file mode 100644 index 000000000..6309be82e --- /dev/null +++ b/docs/es/FAQ.txt @@ -0,0 +1,452 @@ +FAQ.txt del Tux Paint + +Tux Paint - Un programa de dibujo simple para nios. + +Copyright 2002 por Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +14 de Setiembre de 2002 - 28 de Setiembre de 2002 + + +Preguntas Ms Frecuentes: +------------------------- + Por qu no puedo tener una Goma de diferentes tamaos o utilizar las formas + ---------------------------------------------------------------------------- + de los pinceles? + ---------------- + La Goma de Borrar est pensada para borrar rpidamente grandes partes de + la imagen. + + Notar que simplemente deja partes de la imagen en blanco. Es posible + obtener el resultado deseado (los diferentes tamaos y/o formas) + simplemente utilizando la herramienta "Pintar" pintando con el color + blanco! :^) + + + Todo el texto est en Maysculas! + -------------------------------- + La opcin "uppercase" (maysculas) est activada. + + Si se est ejecutando Tux Paint desde una lnea de comandos, hay que + asegurarse de no incluir la opcin "--uppercase". + + Si se est ejecutando Tux Paint mediante doble clic en un cono, verificar + propiedades del cono para comprobar que "--uppercase" no est siendo + incluido como argumento de lnea de comandos. + + Si "--uppercase" no estuviera siendo incluido en la lnea de comandos, + verificar el archivo de configuracin del Tux Paint ("~/.tuxpaintrc" bajo + Linux y Unix, "tuxpaint.cfg" bajo Windows) buscando una lnea que + contenga: "uppercase=yes". + + Bien remover esa lnea o simplemente ejecutar Tux Paint con el argumento + "--mixedcase" en la lnea de comandos, lo que pasar por alto la + preferencia de maysculas. + + + Aparece el mensaje "No puedes imprimir an!" al intentar imprimir! + ---------------------------------------------------------------- + La opcin de retardo de impresin (print delay) est activada. Slo es + posible imprimir una vez cada X segundos. + + Si se est ejecutando Tux Paint desde una lnea de comandos, asegurarse de + no estar incluyendo la opcin "--printdelay=...". + + Si se est ejecutando Tux Paint mediante doble clic en un cono, verificar + las propiedades del cono para comprobar que "--printdelay=..." no est + siendo incluido como argumento de lnea de comandos. + + Si la opcin "--printdelay=..." no estuviera siendo incluida en la lnea de + comandos, verificar el archivo de configuracin del Tux Paint + ("~/.tuxpaintrc" bajo Linux y Unix, "tuxpaint.cfg" bajo Windows) buscando + una lnea que contenga: "printdelay=...". + + Bien remover esa lnea, fijar el valor de retardo a 0 (sin retardo) o + disminuir el retardo al valor preferido. (Ver LEEME.txt). + O simplemente ejecutar Tux Paint con el argumento "--printdelay=0" en la + lnea de comandos, lo que pasar por alto la preferencia establecida en el + archivo de configuracin, permitiendo una impresin ilimitada. (No ser + necesario esperar entre cada impresin.) + + + Simplemente no puedo imprimir! El botn est desactivado! + ------------------------------------------------------------ + La opcin "no print" ha sido activada. + + Si se est ejecutando Tux Paint desde una lnea de comandos, asegurarse de + no estar incluyendo la opcin "--noprint". + + Si se est ejecutando Tux Paint mediante doble clic en un cono, verificar + las propiedades del cono para comprobar que "--noprint" no est siendo + incluido como argumento. + + Si la opcin "--noprint" no estuviera siendo incluida en la lnea de + comandos, verificar el archivo de configuracin del Tux Paint + ("~/.tuxpaintrc" bajo Linux y Unix, "tuxpaint.cfg" bajo Windows) buscando + una lnea que contenga: "noprint=yes". + + Bien remover esa lnea, o simplemente ejecutar Tux Paint con el argumento + "--print" en la lnea de comandos, lo que pasar por alto la preferencia + establecida en el archivo de configuracin. + + + Al ejecutar Tux Paint a pantalla completa, si salgo con ALT-TAB, al volver + --------------------------------------------------------------------------- + la ventana queda negra! + ----------------------- + Este es aparentemente un error en la biblioteca SDL. Lo sentimos. + + + Al ejecutar Tux Paint a pantalla completa, tiene bordes grandes alrededor + ------------------------------------------------------------------------- + Usuarios de Linux - El servidor X-Window probablemente no est fijado + con la habilidad de cambiar a la resolucin requerida: 640 x 480. + (Esto se efecta manualmente bajo el servidor XFree86 presionando + [Ctrl]-[Alt]-['+' del teclado numrico] y -['-' del teclado numrico].) + + Para que esto funcione, el monitor debe soportar esa resolucin y se + necesitar tenerlo listado en la configuracin del servidor X. + + Verificar la sub-seccin "Display" de la seccin "Screen" del archivo de + configuracin de XFree86 (normalmente en "/etc/X11/XF86Config-4" o en + "/etc/X11/XF86Config", dependiendo de la versin de XFree86 que se est + utilizando: 3.x o 4.x respectivamente). + + Agregar "640x480" en la lnea "Modes" apropiada. (p.ej.: en la subseccin + "Display" que contiene la profundidad de color de 16 bits ("Depth 16"), + que es lo que el Tux Paint intentar utilizar.) + + p.ej.: + + Modes "1280x1024" "1024x768" "800x600" "640x480" + + Notar que algunas distribuciones de Linux tienen herramientas que pueden + realizar estos cambios ms facilmente. Los usuarios de Debian pueden + ejecutar el comando "dpkg-reconfigure xserver-xfree86" como root, por + ejemplo. + + + No hay sonido! + --------------- + Primero, verificar lo obvio: + + * Asegurarse de estar usando una computadora con tarjeta de sonido. ;^) + * Estn conectados y encendidos los parlantes? + * Est alto el volumen de los parlantes? + * Est alto el volumen del mezclador del Sistema Operativo? + * Hay otros programas corriendo que utilicen sonido? (Pueden estar + 'bloqueando' al Tux Paint) + + Si el sonido parece estar funcionando (y ningn otro programa estuviera + "bloqueando" el dispositivo de sonido), entonces: o Tux Paint se est + ejecutando con la opcin "no sound" o fue compilado con el soporte para + sonido desabilitado por completo. + + Para verificar si el soporte para sonido de Tux Paint estaba habilitado al + ser compilado, ejecutar Tux Paint desde una lnea de comando, de esta + forma: + + tuxpaint --version + + Si, entre otras informaciones, apareciera "Sound disabled", entonces la + versin del Tux Paint que est siendo ejecutada tiene deshabilitado el + sonido. Recompilar Tux Paint y asegurarse no incluir el target "nosound". + (no ejecutar "make nosound") Asegurarse que la biblioteca SDL_mixer est + disponible! + + Si Tux Paint no estuviera compilado sin soporte para sonido, asegurarse de + no estar ejecutndolo con la opcin "--nosound" como argumento en la lnea + de comandos. + + Si no fuera ese el caso, entonces verificar el archivo de configuracin + ("~/.tuxpaintrc" bajo Linux y Unix, y "tuxpaint.cfg" bajo Windows) buscando + una lnea que incluya: "nosound=yes". + + Bien remover dicha lnea o simplemente ejecutar Tux Paint con el argumento + de lnea de comandos: "--sound", el cual pasar por alto las preferencias + del archivo de configuracin. + + + Los efectos de sonido suenan extraos + ------------------------------------- + Esto puede tener que ver con la forma en que fueron inicializadas SDL y + SDL_mixer. (El tamao de bufer escogido.) + + Por favor envennos correo-e con los detalles de la computadora utilizada. + (Sistema operativo y versin, tarjeta de sonido, qu versin de Tux Paint + se est corriendo (ejecutar "tuxpaint --version" para verificar) y cosas + por el estilo.) + + + Las miniaturas del Selector de Sellos se ven mal + ------------------------------------------------ + Probablemente Tux Paint haya sido compilado con el cdigo de miniaturas + ms rpido y de menor calidad habilitado. Ejecutar el comando: + "tuxpaint --version" desde una lnea de comando. Si entre los otros + mensajes aparece el texto: + "Low Quality Thumbnails enabled", entonces esto es lo que est sucediendo. + + Recompilar Tux Paint desde el cdigo fuente. Asegurarse de remover o + comentar cualquier lnea que diga: + + #define LOW_QUALITY_THUMBNAILS + + en el archivo "tuxpaint.c" en el directorio "src". + + + La herramienta mgica "Rellenar" da malos resultados + ---------------------------------------------------- + Probablemente Tux Paint est comparando colores exactos de pixel al + rellenar. Esto es ms rpido, pero se ve peor. Ejecutar el comando + "tuxpaint --version" desde una lnea de comandos, se ver, entre otras + informaciones: "Low Quality Flood Fill enabled". + + Para cambiar esto, se deber recompilar Tux Paint desde el cdigo fuente. + Asegurarse de remover o comentar cualquier lnea que diga: + + #define LOW_QUALITY_FLOOD_FILL + + en el archivo "tuxpaint.c" en el directorio "src". + + + Las imgenes del dilogo 'Abrir' se ven mal + ------------------------------------------- + Es probable que "Low Quality Thumbnails" est abilitado. + Ver: "Las miniaturas del Selector de Sellos se ven mal", arriba. + + + Los botones de seleccin de colores son unos cuadrados horribles en vez de + --------------------------------------------------------------------------- + lindos botones! + --------------- + Probablemente Tux Paint fue compilado con los botones de seleccin de + color lindos deshabilitados. Ejecutar el comando: "tuxpaint --version" + desde una lnea de comandos. Si, entre otra informacin, se ve el texto: + "Low Quality Color Selector enabled", entonces es eso lo que sucede. + + Recompilar Tux Paint desde su cdigo fuente. Asegurarse de remover o + comentar cualquier lnea que diga: + + #define LOW_QUALITY_COLOR_SELECTOR + + en el archivo "tuxpaint.c" en el directorio "src". + + + Tux Paint sige ejecutndose a Pantalla Completa - lo quiero en una ventana! + ---------------------------------------------------------------------------- + La opcin "fullscreen" est activa. + + Si Tux Paint se est ejecutando desde una lnea de comandos, asegurarse + de no estar pasndole la opcin "--fullscreen". + + Si se est ejecutando mediante doble clic en un cono, verificar las + propiedades del cono para ver si "--fullscreen" aparece listado como un + argumento. + + Si "--fullscreen" no se encuentra en la lnea de comandos, verificar el + archivo de configuracin del Tux Paint ("~/.tuxpaintrc" bajo Linux y Unix, + "tuxpaint.cfg" bajo Windows) buscando una lnea que contenga: + "fullscreen=yes". + + Bien remover esa lnea o simplemente ejecutar Tux Paint desde una lnea + de comando con el argumento: "--windowed", lo que pasar por alto las + preferencias establecidas en el archivo de configuracin. + + + Tux Paint sigue escribiendo extraos mensajes en la pantalla / en un archivo + ---------------------------------------------------------------------------- + de texto + -------- + Unos cuantos mensajes es normal, pero si Tux Paint se torna extremadamente + verborrgico (como listar el nombre de cada imagen de sellos que encuentre + al cargarla), entonces probablemente haya sido compilado con la salida de + depuracin activada. + + Recompilar Tux Paint desde su cdigo fuente. Asegurarse de remover o + comentar cualquier lnea que diga: + + #define DEBUG + + en el archivo "tuxpaint.c" en el directorio "src". + + + Los bordes de los Sellos siempre son rectngulos + ------------------------------------------------ + Tux Paint fue compilado utilizando bordes de sellos de baja calidad (pero + ms rpidos). + + Recompilar Tux Paint desde su cdigo fuente. Asegurarse de remover o comentar + cualquier lnea que diga: + + #define LOW_QUALITY_STAMP_OUTLINE + + en el archivo "tuxpaint.c" en el directorio "src". + + + Tux Paint est en un idioma extrao! + ------------------------------------- + Asegurarse que la localizacin de la computadora sea la correcta. + Ver "Tux Paint no se cambia a mi idioma", abajo. + + + Tux Paint no se cambia a mi idioma + ---------------------------------- + Usuarios de Linux y Unix: Asegurarse que la localizacin est disponible + ------------------------------------------------------------------------ + Asegurarse que la localizacin deseada est disponible. Verificar el + archivo "/etc/locale.gen". Ver LEEME.txt para una lista de las + localizaciones que Tux Paint usa (especialmente al utilizar la opcin + "--lang"). + + Nota: Los usuarios de Debian pueden simplemente ejecutar + "dpkg-reconfigure locales" si las localizaciones estn siendo + administradas con dpkg. + + Si se est utilizando la opcin de lnea de comandos "--lang" + ------------------------------------------------------------- + Intentar usar la opcin de lnea de comandos "--locale" o las + preferencias de localizacin del sistema operativo (p.ej: la variable + de entorno "$LANG") y por favor enviarnos un correo-e acerca del problema. + + Si se est utilizando la opcin de lnea de comandos "--locale" + --------------------------------------------------------------- + Si esto no funciona, por favor enviarnos correo-e acerca del problema. + + Si se est utilizando la localizacin del Sistema Operativo + ----------------------------------------------------------- + Si esto no funciona, por favor enviarnos correo-e acerca del problema. + + + Tux Paint siempre guarda sobre la imagen anterior! + --------------------------------------------------- + La opcin "save over" est habilitada. (Esto deshabilita la consulta que + aparece al hacer clic en 'Guardar'.) + + Si se est ejecutando Tux Paint desde una lnea de comandos, asegurarse de + no estar incluyendo la opcin "--saveover". + + Si se est ejecutando Tux Paint mediante doble clic en un cono, verificar + las propiedades del cono para comprobar que el argumento "--saveover" no + aparezca listado. + + Si "--saveover" no est en la lnea de comandos, verificar el archivo de + configuracin del Tux Paint ("~/.tuxpaintrc" bajo Linux y Unix, + "tuxpaint.cfg" bajo Windows) buscando una lnea que diga: "saveover=yes". + + Bien remover esa lnea o simplemente ejecutar Tux Paint con el argumento + de lnea de comandos: "--saveoverask", lo que pasar por alto las + preferencias establecidas en el archivo de configuracin. + + Tambin ver "Tux Paint siempre guarda una nueva imagen!", abajo. + + + Tux Paint siempre guarda una nueva imagen! + ------------------------------------------- + La opcin "never save over" est habilitada. (Esto deshabilita la consulta + que aparecera al hacer clic en 'Guardar'.) + + Si Tux Paint est siendo ejecutado desde una lnea de comandos, asegurarse + de no ester incluyendo la opcin "--saveovernew". + + Si se est ejecutando Tux Paint mediante doble clic en un cono, verificar + las propiedades del cono para verificar que "--saveovernew" no est + siendo listado como argumento. + + Si "--saveovernew" no estuviera en la lnea de comandos, verificar el + archivo de configuracin del Tux Paint ("~/.tuxpaintrc" bajo Linux y Unix, + "tuxpaint.cfg" bajo Windows) buscando una lnea que diga: "saveover=new". + + Bien remover esa lnea o simplemente ejecutar Tux Paint con el argumento + de lnea de comandos: "--saveoverask", el cual pasar por alto las + preferencias establecidas en el archivo de configuracin. + + Tambin ver "Tux Paint siempre guarda sobre la imagen anterior!", arriba. + + + Tux Paint est usando opciones que nunca especifiqu! + ------------------------------------------------------ + Por defecto, Tux Paint busca opciones primero en los archivos de + configuracin. + + Unix y Linux + ------------ + Bajo Unix y Linux, examina primero el archivo de configuracin para + todo el sistema, ubicado aqu: + + /etc/tuxpaint/tuxpaint.conf + + Luego examina el archivo de configuracin personal del usuario: + + ~/.tuxpaintrc + + Finalmente, cualquier opcin enviada como argumento en la lnea de + comandos es utilizada. + + Windows + ------- + Bajo Windows, Tux Paint primero examina el archivo de configuracin: + + tuxpaint.cfg + + Luego, cualquier opcin enviada como argumento en la lnea de comandos + es utilizada. + + + Esto significa que si hay algo fijado en un archivo de configuracin que + no se desea, se necesitar cambiar el archivo de configuracin (si + eso fuera posible) o bien sobreescribir dicha opcin mediante la lnea de + comandos. + + Por ejemplo, si "/etc/tuxpaint/tuxpaint.conf" incluye una opcin para + deshabilitar el sonido: + + nosound=yes + + Es posible volver a habilitarlo agregando esta opcin en el archivo de + configuracin personal ".tuxpainrc": + + sound=yes + + O utilizando este argumento en la lnea de comandos: + + --sound + + + Los usuarios de Linux y Unix tambin pueden deshabilitar el archivo de + configuracin para todo el sistema mediante el siguiente argumento de la + lnea de comandos: + + --nosysconfig + + Entonces Tux Paint slo utilizar el archivo "~/.tuxpaintrc" y los + argumentos de lnea de comandos para determinar qu opciones se usarn. + + + El puntero del ratn deja una estela! + ------------------------------------- + Bajo Windows a pantalla completa y en Linux a pantalla completa fuera de + X-Window, la biblioteca SDL presenta un error que hace que el puntero del + ratn deje una estela de 'basura' en la pantalla. + + Hasta se corrija esto, no usarlo a pantalla completa o bien deshabilitar + las decoraciones del puntero con la opcin de configuracin: + + nofancycursors=yes + + o usando el argumento de lnea de comandos: + + --nofancycursors + + +Ayuda / Contctanos +------------------- + Por cualquier pregunta que no est respondida aqu, por favor escribir + (en ingls) a: + + bill@newbreedsoftware.com + + o enviar un mensaje a nuestra lista de correo: + + http://www.newbreedsoftware.com/tuxpaint/lists/ + diff --git a/docs/es/INSTALACION.txt b/docs/es/INSTALACION.txt new file mode 100644 index 000000000..eca792042 --- /dev/null +++ b/docs/es/INSTALACION.txt @@ -0,0 +1,310 @@ +INSTALACION.txt de Tux Paint + +Tux Paint - Un programa de dibujo simple para nios. + +Copyright 2002 por Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +27 de Junio de 2002 - 5 de Noviembre de 2002 + + +Requerimientos: +--------------- + Usuarios de Windows: + -------------------- + La versin Windows de Tux Paint viene pre-empacada con todas las + bibliotecas necesarias pre-compiladas (en forma de ".DLL"), por lo + tanto no se necesita bajar nada extra. + + libSDL + ------ + Tux Paint requiere Simple DirectMedia Layer Library (libSDL), + una biblioteca de programacin multimedia de Cdigo Abierto + disponible bajo la licencia GNU Lesser General Public License (LGPL). + + Junto con libSDL, Tux Paint depende de una cantidad de otras bibliotecas + de 'ayuda' de SDL: SDL_Image (para archivos grficos), SDL_TTF (para el + soporte de Fuentes True Type) y, opcionalmente, SDL_Mixer (para efectos de + sonido). + + Usuarios de Linux/Unix: + ----------------------- + Las bibliotecas SDL estn disponibles como cdigo-fuente o como paquetes + RPM o Debian para varias distribuciones de Linux. Pueden ser bajadas + desde: + + libSDL: http://www.libsdl.org/ + SDL_Image: http://www.libsdl.org/projects/SDL_image/ + SDL_TTF: http://www.libsdl.org/projects/SDL_ttf/ + SDL_Mixer: http://www.libsdl.org/projects/SDL_mixer/ [OPCIONAL] + + Tambin suelen estar disponibles con tu distribucin Linux + (p.ej.: en uno de los CDs de instalacin, o disponibles va programas + de mantenimiento de software como el "apt-get" de Debian). + + NOTA: Al instalar desde paquetes, asegrate de instalar TAMBIN las + versiones "-devel" de los paquetes. (Por ejemplo, instala tanto + "SDL-1.2.4.rpm" como "SDL-1.2.4-devel.rpm") + + Otras Bibliotecas: + ------------------ + Tux Paint tambin saca partido de varias otras bibliotecas libres bajo + licencia LGPL. Bajo Linux, como en el caso de la SDL, ya deberan estar + instaladas tambin, o debern estar listas para su instalacin como parte + de tu distribucin Linux. + + libPNG + ------ + Tux Paint usa el formato PNG (Portable Network Graphics) para sus + archivos de informacin. SDL_image requiere que libPNG est instalada. + + http://www.libpng.org/pub/png/libpng.html + + FreeType2 + --------- + Tux Paint usa fuentes TTF (True Type Font) para dibujar texto. + SDL_ttf requiere la biblioteca FreeType2. + + http://www.freetype.org/ + + gettext + ------- + Tux Paint utiliza las preferencias locales de tu sistema conjuntamente + con la biblioteca "gettext" para soportar varios idiomas + (p.ej: Espaol). Necesitars tener la biblioteca gettext instalada. + + http://www.gnu.org/software/gettext/ + + Herramientas NetPBM [OPCIONAL] + ------------------------------ + Bajo Linux y Unix, las herramientas NetPBM son las actualmente usadas + para imprimir. (Una PNG es generada por TuxPaint y convertida a + PostScript usando las herramientas de lnea de comandos de NetPBM + 'pngtopnm' y 'pnmtops'.) + + http://netpbm.sourceforge.net/ + + +Compilacin e Instalacin: +-------------------------- + Tux Paint se entrega bajo la licencia GNU General Public License (GPL) + (ver "COPYING.txt" por ms detalles) y por lo tanto el 'cdigo fuente' + del programa est incluido. + + Usuarios de Windows: + -------------------- + Compilacin: + ------------ + Tux Paint viene pre-compilado para Windows, por lo tanto no se + necesita compilacin. [Eventualmente, pondremos aqu informacin + acerca de como recompilar para Windows. Mientras tanto, ests por + las tuyas. Lo sentimos!] + + Instalacin: + ----------- + Hacer doble clic sobre el ejecutable (archivo .EXE) del instalador del + Tux Paint y seguir las instrucciones. + + En primer lugar se preguntar si se est de acuerdo con la licencia. + (Es la Licencia Pblica General de GNU (GPL), la cual tambin est + disponible en el archivo "COPIADO.txt".) + + A continuacin se consultar si se desean instalar accesos directos a + Tux Paint en el Men Inicio y en el Escritorio de Windows. + (Ambas opciones estn habilitadas por defecto.) + + Luego se consultar sobre dnde se desea instalar el Tux Paint. + La opcin por defecto debera ser apropiada, en tanto haya espacio + disponible. En caso contrario, escoger una ubicacin diferente. + + En este punto, slo resta hacer clic en 'Install' para instalar Tux + Paint! + + Cambiando las preferencias Utilizando el Acceso Directo: + -------------------------------------------------------- + Para cambiar las preferencias del programa, hacer clic derecho sobre el + acceso directo del TuxPaint y seleccionar 'Propiedades' (abajo). + + Asegurarse de que la etiqueta 'Acceso directo' est seleccionada en la + ventana que aparece y examinar el campo 'Destino:'. Se debera ver + algo como esto: + + "C:\Archivos de Programa\Tuxpaint\TuxPaint.exe" + + Ahora es posible agregar opciones de lnea de comando, las que entrarn + en accin al hacer doble clic sobre el cono. + + Por ejemplo, para hacer que el juego funcione a pantalla completa, + con figuras simplificadas (sin opcin de rotacin) y en Espaol, + agregar estas opciones (luego de 'TuxPaint.exe'): + + "C:\Archivos de Programa\Tuxpaint\TuxPaint.exe" -f -s --lang spanish + + (Ver "LEEME.txt" para una lista completa de las opciones de lnea de + comando disponibles.) + + Si se cometiera un error o si todo desapareciera, utilizar Ctrl-Z para + deshacer o simplemente presionar la tecla [ESC] para cerrar el dilogo + sin aplicar los cambios (a menos que se hubiera presionado el botn + "Aplicar"!). + + Una vez finalizado, hecer clic en "Aceptar". + + + Si Algo Sale Mal + ---------------- + Si al hacer doble clic en el acceso directo para ejecutar el juego + nada sucede, es probable que sea porque algunas de las opciones de + lnea de comando estn mal. Abrir un Explorador como antes y buscar un + archivo llamado 'stderr.txt' en la carpeta del TuxPaint. + + Este contendr una descripcin de lo que estuvo mal. Usualmente ser + slo debido a una mayscula o minscula incorrecta ('Z' en vez de 'z') + o un guin '-' de menos o de ms. + + + Usuarios Linux/Unix: + -------------------- + Compilacin: + ------------ + Nota: Al presente, Tux Paint no utiliza autoconf/automake, por lo que + no hay un guin "./configure" que ejecutar. (Lo sentimos!) Sin + embargo compilarlo no debera presentar complicaciones, asumiendo que + todo lo que el Tux Paint necesita est instalado. + + Para compilar el programa desde las fuentes, simplemente ejecutar el + siguiente comando desde un prompt del shell (p.ej.: "$"): + + $ make + + Deshabilitando el Sonido al Compilar: + ------------------------------------- + Alternativamente, si no hubiera tarjeta de sonido, o si se prefieriera + compilar el programa sin soporte para sonido (por lo que SDL_mixer no + tendra que ser instalada), se puede ejecutar "make" con "nosound" como + 'target': + + $ make nosound + + + Si aparecen errores: + -------------------- + Si aparecen errores durante la compilacin, asegurarse de tener + instaladas las bibliotecas apropiadas (ver arriba). Si se estn + utilizando versiones empacadas de las bibliotecas (p.ej: RPMs bajo + RedHat o DEBs bajo Debian), asegurarse tambin de obtener los paquetes + correspondientes "-dev" o "-devel", de otro modo no ser posible + compilar Tux Paint (y otros programas) a partir del cdigo fuente! + + + Instalacin: + ------------ + Asumiendo que no hayan ocurrido errores fatales, ahora es posible + instalar el programa para que pueda ser ejecutado por los usuarios del + sistema. Por defecto, esto debe ser hecho por el usuario "root" + ('superusuario'). Volverse "root" ingresando el comando: + + $ su + + Ingresar la clave de "root" cuando sea solicitada. Ahora se debera + estar en modo "root" (con un prompt as: #). Para instalar el programa + y sus archivos de datos, tipear: + + # make install + + Finalmente, volver al usuario regular saliendo del modo + superusuario: + + # exit + + + NOTA: Por defecto, "tuxpaint", el programa ejecutable, est ubicado + en "/usr/local/bin/". Los archivos de datos (imgenes, sonidos, etc.) + estn ubicados en "/usr/local/share/tuxpaint/". + + + Chambiando las Cosas de Lugar + ----------------------------- + Es posible cambiar las cosas de lugar usando las variables 'prefix' + al hacer Makefile. "PREFIX" es la base de a donde todos los dems + archivos irn, y est fijado por defecto en "/usr/local". + + Otras variables son: + BIN_PREFIX + Donde ser instalado el binario "tuxpaint". + (Fijado por defecto en "$(PREFIX)/bin" - p.ej.: "/usr/local/bin") + + DATA_PREFIX + Donde irn los archivos de datos (sonido, grficos, pinceles, + sellos, fuentes), y donde el Tux Paint los buscar al ejecutarse. + (Fijado en "$(PREFIX)/share/tuxpaint") + + DOC_PREFIX + Donde irn los los archivos de texto de la documentacin (el + directorio "docs"). (Fijado en "$(PREFIX)/share/doc/tuxpaint") + + MAN_PREFIX + Donde ir la pgina de manual del Tux Paint. + (Fijado en "$(PREFIX)/share/man") + + ICON_PREFIX $(PREFIX)/share/pixmaps + X11_ICON_PREFIX $(PREFIX)/X11R6/include/X11/pixmaps + GNOME_PREFIX $(PREFIX)/share/gnome/apps/Graphics + KDE_PREFIX $(PREFIX)/share/applnk/Graphics + Donde irn los conos y lanzadores (para GNOME y KDE). + + LOCALE_PREFIX + Donde irn los archivos de traduccin del Tux Paint, y donde + Tux Paint los buscar. + (Fijado en "$(PREFIX)/share/locale/") + (La ubicacin final de un archivo de traduccin ser bajo el + directorio de la respectiva localizacin [p.ej.: "es" para + Espaol] dentro del subdirectorio "LC_MESSAGES".) + + +Desinstalando Tux Paint: +------------------------ + Windows + ------- + Utilizando el Desinstalador + --------------------------- + Si se instalaron los accesos directos del Men Inicio (por defecto), + entonces ir a la carpeta del TuxPaint y seleccionar "Uninstall". + Un dilogo aparecer que confirmar que se est a punto de desinstalar + Tux Paint y consultar si se lo quiere remover permanentemente, hacer + clic en el botn 'Uninstall'. + + Una vez haya terminado, hacer clic en el botn Cerrar. + + Tambin es posible utilizar la entrada "TuxPaint (remove only)" en la + seccin Agregar/Quitar Programas del Panel de Control. + + NOTA: Como las imgenes creadas con el programa se almacenan dentro de + la carpeta del Tux Paint, sta as como la sub-carpeta 'userdata' NO son + removidas. + + + Linux + ----- + Dentro del directorio de fuentes del Tux Paint (donde se compil el + programa), es posible utilizar un 'target' de 'Makefile' para desinstalar + Tux Paint. Por defecto, esto debe ser hecho por el usuario "root" + ('superusuario'). + (Ver las instrucciones de instalacin arriba por ms informacin.) + + Volverse "root" tipeando el comando: + + $ su + + Ingresar la clave de "root" cuando sea solicitada. Ahora se debera + estar en modo "root" (con un prompt as: #). Para desinstalar el programa + y sus archivos de datos (las imgenes de los sellos incluidos, si hubiera, + tambin sern removidas), tipear: + + # make uninstall + + Finalmente, volver al usuario regular saliendo del modo + superusuario: + + # exit diff --git a/docs/es/LEEME.txt b/docs/es/LEEME.txt new file mode 100644 index 000000000..12c6fc754 --- /dev/null +++ b/docs/es/LEEME.txt @@ -0,0 +1,1346 @@ + Tux Paint + 0.9.2 + + Un programa de dibujo simple para ninos + + Copyright 2002 por Bill Kendrick + New Breed Software + + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + 14 de Junio de 2002 - 10 de Diciembre de 2002 + + ---------------------------------------------------------------------- + + Acerca de + + "Tux Paint" es un programa de dibujo para ninos chicos. Presenta una + interfaz simple con una tela de tamano fijo, y da acceso a las imagenes + previas mediante un navegador de miniaturas (sin acceder al sistema de + archivos subyacente). + + Al contrario de otros programas populares de dibujo como "The GIMP," + posee un conjunto de herramientas muy limitado. Sin embargo, proporciona + una interfaz mucho mas simple con agregados orientados a entretener a + los ninos, como efectos de sonido. + + ---------------------------------------------------------------------- + + Licencia: + + Tux Paint es un proyecto de Codigo Abierto, entregado bajo la licencia + GNU General Public License (GPL). Es libre y el 'codigo fuente' del + programa esta disponible. (Esto le permite a otros agregar funciones, + corregir errores y utilizar partes del programa en sus propios programas + de Codigo Abierto bajo licencia GPL.) + + Ver COPIADO.txt para el texto completo de la licencia GPL. + + ---------------------------------------------------------------------- + + Objetivos: + + Sencillo y Divertido + Tux Paint esta concebido para ser un programa de dibujo sencillo + para ninos chicos. No esta pensado como una herramienta de + dibujo de uso general. Si esta concebido para ser divertido y + facil de usar. Efectos de sonido y un personaje tipo dibujo + animado le permiten al usuario saber que esta sucediendo y + mentenerse entretenido. Tambien hay punteros de raton tipo + dibujo animado de formas extra grandes. + + Extensibilidad + Tux Paint es extensible. Pinceles y "sellos" con imagenes pueden + ser agregados y retirados. Por ejemplo, una maestra puede + agregar una coleccion de figuras de animales y pedirle a sus + alumnos que dibujen un ecosistema. Cada figura puede tener un + sonido asociado y textos descriptivos, los cuales se despliegan + cuando el nino selecciona la figura. + + Portabilidad + Tux Paint es portable a varias plataformas de computacion: + Windows, Macintosh, Linux, etc. La interfaz luce identica en + todas ellas. Tux Paint se ejecuta correctamente en sistemas + viejos (como Pentiums de 133MHz) y puede ser compilado para + correr mejor en sistemas lentos. + + Simplicidad + No existe acceso directo a las complicaciones subyacentes de la + computadora. La imagen actual es conservada cuando se sale del + programa y reaparece cuando este se vuelve a usar. Guardar las + imagenes no requiere saber como crear nombres de archivo o usar + el teclado. La apertura de las imagenes se realiza mediante su + seleccion de una coleccion de miniaturas de las propias + imagenes. El acceso a otros archivos de la computadora esta + restringido. + + ---------------------------------------------------------------------- + + Otra Documentacion + + Otra documentacion incluida con Tux Paint (en las carpetas/directorios + "docs/es" y "docs"): + + * AUTORES.txt + Lista de autores y contribuyentes + * CHANGES.txt + Sumario de los cambios entre cada version (en ingles) + * COPIADO.txt + Licencia de copia. (La licencia GPL) + * INSTALACION.txt + Instrucciones para la compilacion/instalacion, si corresponde + * PNG.txt + Notas sobre como crear imagenes en formato PNG para usar en Tux + Paint + * LEEME.txt + (Este archivo en version texto) + * TODO.txt + Lista de funciones pendientes o errores que necesitan ser arreglados + (en ingles) + + ---------------------------------------------------------------------- + + Usando Tux Paint + +Compilando Tux Paint + + Para compilar Tux Paint a partir de las fuentes, por favor referirse a + INSTALACION.txt. + + ---------------------------------------------------------------------- + +Cargando Tux Paint + + Usuarios de Linux/Unix + + Ejecutar el siguiente comando en el prompt de un shell (p.ej: "$"): + + $ tuxpaint + + Tambien es posible hacer un boton o icono para lanzarlo (p.ej: en + GNOME o KDE). Ver la documentacion del entorno de escritorio usado + para mas detalles... + + Si ocurriera algun error, se mostrara en la terminal (en "stderr"). + + ---------------------------------------------------------------------- + + Usuarios de Windows + + [Icon] + Tux Paint + + Simplemente hacer doble clic sobre el icono de "Tux Paint" en el + escritorio (el cual fue creado automaticamente por el instalador) o + doble clic sobre el icono del archivo "tuxpaint.exe" dentro de la + carpeta del 'Tux Paint' en la computadora. + + Si ocurriera algun error, sera guardado en un archivo llamado + "stderr.txt" en la carpeta del Tux Paint. + + Ver "INSTALACION.txt" para mas detalles sobre como personalizar el + icono de "Acceso Directo" a Tux Paint, que permite establecer de + forma sencilla las opciones del programa (mediantre la linea de + comandos). + + Para ejecutar Tux Paint y especificar opciones de linea de comandos + directamente, se necesitara ejecutar "tuxpaint.exe" desde una + ventana de Simbolo MSDOS. (Ver "INSTALACION.txt" para mas detalles.) + + ---------------------------------------------------------------------- + +Opciones + + Archivo de Configuracion + + Es posible crear un sencillo archivo de configuracion para el Tux + Paint, el que sera leido cada vez que se ejecuta el programa. + + El archivo es simplemente un archivo de texto conteniendo las + opciones que se desea habilitar: + + Usuarios de Linux + + El archivo que deberia ser creado se llama ".tuxpaintrc" y debera + residir en el directorio personal del usuario. ("~/.tuxpaintrc" o + "$HOME/.tuxpaintrc") + + Con anterioridad a que este archivo sea leido, un archivo de + configuracion global del sistema es leido. (Por defecto este + archivo no tiene opciones habilitadas.) Reside en: + + /etc/tuxpaint/tuxpaint.conf + + Es posible deshabilitar completamente su lectura, manteniendo las + preferencias por defecto (las cuales seran sobreescritas por las + del archivo ".tuxpaintrc" y/o por argumendos en la linea de + comandos) usando la opcion de linea de comandos: + + --nosysconfig + + Usuarios de Windows + + El archivo que deberia ser creado se llama "tuxpaint.cfg" y debera + residir en la carpeta del Tux Paint. + + Es posible usar el Bloc de Notas o WordPad para crear este + archivo. Asegurarse de guardarlo como Documento de Texto y que el + nombre del archivo no termine en ".txt"... + + Opciones Disponibles + + Las siguientes opciones pueden ser establecidas en el archivo de + configuracion. (Las opciones de la linea de comandos las sobre + escribiran. Ver mas abajo.) + + fullscreen=yes + Ejecuta el programa en modo pantalla completa, en vez de + en una ventana. + + nosound=yes + Deshabilita los efectos de sonido. + + noquit=yes + Deshabilita el boton "Salir" en pantalla. (Presionar la + tecla [Escape] o hacer clic sobre el boton de cerrar + ventana seguira funcionando.) + + noprint=yes + Deshabilita la impresion. + + printdelay=SEGUNDOS + Restringe la impresion de manera que esta pueda ocurrir + solo una vez cada SEGUNDOS segundos. + + printcommand=COMANDO + + (Solo Linux y Unix) + + Usa el comando COMANDO para imprimir un archivo PNG. Si no + se especifica, el comando por defecto es: + + pngtopnm | pnmtops | lpr + + Lo que convierte la PNG un archivo 'portable anymap' de + NetPBM, luego convierte eso a un archivo PostScript y + finalmente envia eso a la impresora utilizando el comando + "lpr". + + simpleshapes=yes + Deshabilita el modo rotacion en la herramienta Figuras. + Hacer clic, arrastrar y soltar sera todo lo necesario para + dibujar una figura. + + uppercase=yes + Todo el texto sera mostrado en mayusculas (p.ej.: "Pincel" + sera "PINCEL"). Util para ninos que pueden leer, pero que + hasta el momento solo han aprendido las letras mayusculas. + + grab=yes + + Tux Paint intentara 'retener' el raton y el teclado, de + modo que el raton quede confinado a la ventana del Tux + Paint y casi todo ingreso por teclado sea pasado + directamente al programa. + + Esto es util para deshabilitar acciones del sistema + operativo que podrian sacar al usuario fuera de Tux Paint, + como el ciclado de ventanas hecho con [Alt]-[Tab], + [Ctrl]-[Escape], etc. Esto resulta especialmente util en + modo pantalla completa. + + nowheelmouse=yes + Esto deshabilita el soporte para la rueda, en los ratones + que tienen. (Normalmente, la rueda desplaza el menu del + selector de la derecha.) + + keyboard=yes + Esto permite que las teclas de cursor del teclado sean + utilizadas para controlar el puntero del raton. (para + entornos donde no haya raton disponible.) + + Las teclas de [Cursor] mueven el puntero del raton. La + [Barra Espaciadora] actua como el boton del raton. + + saveover=yes + Esto deshabilita la consulta "?Guardar sobre la version + anterior...?" al guardar un archivo ya existente. Con esta + opcion, la version antigua sera automaticamente + reemplazada por la nueva, en todos los casos. + + saveover=new + Esto tambien deshabilita la consulta "?Guardar sobre la + version anterior...?" al guardar un archivo ya existente. + Esta opcion, sin embargo, siempre guardara un nuevo + archivo, en vez de sobreescribir la version antigua. + + saveover=ask + + (Esta opcion es redundante, al ser la opcion por defecto.) + + Al intentar guardar un dibujo ya existente, se consultara + antes si se va a guardar sobre la version anterior o no. + + lang=IDIOMA + + Ejecuta Tux Paint en uno de los idiomas soportados. Las + opciones actualmente disponibles para IDIOMA son: + + +-------------------------------------------------------------+ + |english |american-english | | (ingles de| + | | | | ee.uu.)| + |--------------------+------------------+---------+-----------| + | | | |(ingles del| + |british-english |british | | reino| + | | | | unido)| + |--------------------+------------------+---------+-----------| + |brazilian-portuguese|portuges-brazilian|brazilian| (portugues| + | | | | de brasil)| + |--------------------+------------------+---------+-----------| + |catalan |catala | | (catalan)| + |--------------------+------------------+---------+-----------| + |czech |cesky | | (checo)| + |--------------------+------------------+---------+-----------| + |danish |dansk | | (danes)| + |--------------------+------------------+---------+-----------| + |dutch | | | (holandes)| + |--------------------+------------------+---------+-----------| + |finnish |suomi | |(finlandes)| + |--------------------+------------------+---------+-----------| + |french |francais | | (frances)| + |--------------------+------------------+---------+-----------| + |german |deutsch | | (aleman)| + |--------------------+------------------+---------+-----------| + |hungarian |magyar | | (hungaro)| + |--------------------+------------------+---------+-----------| + |icelandic |islenska | | (islandes)| + |--------------------+------------------+---------+-----------| + |italian |italiano | | (italiano)| + |--------------------+------------------+---------+-----------| + |korean | | | (coreano)| + |--------------------+------------------+---------+-----------| + |norwegian |nynorsk | | (noruego)| + |--------------------+------------------+---------+-----------| + |spanish |espanol | | (espanol)| + |--------------------+------------------+---------+-----------| + |swedish |svenska | | (sueco)| + |--------------------+------------------+---------+-----------| + |turkish | | | (turco)| + +-------------------------------------------------------------+ + + ---------------------------------------------------------------------- + + Sobreescribiendo las Opciones de Configuracion del Sistema usando + .tuxpaintrc + + Si cualquiera de la opciones de arriba han sido fijadas en + "/etc/tuxpaint/tuxpaint.config", es posible sobreescribirlas en el + archivo de configuracion de cada usuario "~/.tuxpaintrc". + + Para las opciones de tipo verdadero/falso, como "noprint" y + "grab", es posible asumir simplemente que equivalen a 'no' en el + archivo "~/.tuxpaintrc": + + noprint=no + uppercase=no + + O es posible usar opciones similares a las opciones de linea de + comandos descriptas abaja. Por ejemplo: + + print=yes + mixedcase=yes + + ---------------------------------------------------------------------- + + Opciones de Linea de Comandos + + Tambien es posible enviar opciones en la linea de comandos al + ejecutar Tux Paint. + + --fullscreen + --nosound + --noquit + --noprint + --printdelay=SEGUNDOS + --simpleshapes + --uppercase + --grab + --nowheelmouse + --keyboard + --saveover + --saveovernew + --lang IDIOMA + Estas habilitan las opciones descriptas arriba. + + --windowed + --sound + --quit + --print + --printdelay=0 + --complexshapes + --mixedcase + --dontgrab + --mouse + --wheelmouse + --saveoverask + Estas opciones pueden ser utilizadas para sobreescribir + cualquier opcion incluida en el archivo de configuracion. + (Si la opcion no fue incluida en el(los) archivo(s) de + configuracion, no sera necesaria una opcion de + sobreescritura.) + + --locale localizacion + + Ejecuta Tux Paint en uno de los idiomas soportados. Ver la + seccion "Escogiendo un Idioma Distinto" abajo para obtener + los codigos de localizacion a ser utilizados (p.ej: + "de_DE@euro" para Aleman). + + (Si la localizacion ya esta establecida, mediante la + variable de entorno "$LANG", esta opcion no deberia ser + necesaria, pues Tux Paint se ajusta a las preferencias de + entorno, siempre que esto sea posible.) + + --nosysconfig + + Bajo Linux y Unix, esta opcion impide la lectura del + archivo de configuracion global del sistema: + "/etc/tuxpaint/tuxpaint.conf". + + Solamente el archivo personal de configuracion + "~/.tuxpaintrc" sera usado, si existiera. + + ---------------------------------------------------------------------- + + Opciones Informativas de Linea de Comandos + + Las siguientes opciones muestran texto informativo en pantalla. Sin + embargo Tux Paint no se llega a ejecutar realmente despues de esto. + + --version + Muestra el numero de version y fecha de la copia de + Tux Paint que se esta ejecutando. Tambien lista que + opciones de compilacion fueron usadas, en caso que se haya + usado alguna. (Ver INSTALACION.txt y FAQ.txt). + + --copying + Muestra una breve informacion acerca de la licencia de uso + y copia de Tux Paint. + + --usage + Muestra la lista de opciones de linea de comandos + disponibles. + + --help + Muestra una breve ayuda acerca de como usar Tux Paint. + + ---------------------------------------------------------------------- + + Escogiendo un Idioma Distinto + + Tux Paint ha sido traducido a varios idiomas. Para acceder a las + traducciones, es posible usar la opcion "--lang" en la linea de + comandos para fijar el idioma (p.ej: "--lang spanish") o usar la + opcion "lang=" en el archivo de configuracion (p.ej: + "lang=spanish"). + + Tux Paint tambien se adapta a la localizacion actual del entorno. + (Es posible sobreescribirla en la linea de comandos usando la opcion + "--locale" (ver arriba). + + Los siguientes idiomas son los soportados: + + +--------------------------------------------------------------+ + |Codigo de Localizacion| Idioma | Idioma | + | | (nombre nativo) |(nombre en espanol)| + |----------------------+-------------------+-------------------| + |C |English |Ingles | + |----------------------+-------------------+-------------------| + |ca_ES |Catal`a |Catalan | + |----------------------+-------------------+-------------------| + |cs_CZ |Cesky |Checo | + |----------------------+-------------------+-------------------| + |da_DK |Dansk |Danes | + |----------------------+-------------------+-------------------| + |de_DE@euro |Deutsch |Aleman | + |----------------------+-------------------+-------------------| + |en_GB |British English |Ingles Britanico | + |----------------------+-------------------+-------------------| + |es_ES@euro |Espanol |Espanol | + |----------------------+-------------------+-------------------| + |fi_FI@euro |Suomi |Finlandes | + |----------------------+-------------------+-------------------| + |fr_FR@euro |Franc,ais |Frances | + |----------------------+-------------------+-------------------| + |hu_HU |Magyar |Hungaro | + |----------------------+-------------------+-------------------| + |is_IS |Islenska |Islandes | + |----------------------+-------------------+-------------------| + |it_IT@euro |Italiano |Italiano | + |----------------------+-------------------+-------------------| + |ko_KR.UTF-8 (*) | |Coreano | + |----------------------+-------------------+-------------------| + |nn_NO |Norsk (nynorsk) |Noruego (Nynorsk) | + |----------------------+-------------------+-------------------| + |nl_NL@euro | |Holandes | + |----------------------+-------------------+-------------------| + |pt_BR |Portuges Brasileiro|Portugues Brasilero| + |----------------------+-------------------+-------------------| + |sv_SE@euro |Svenska |Sueco | + |----------------------+-------------------+-------------------| + |tr_TR@euro | |Turco | + +--------------------------------------------------------------+ + + (*) - Estos idiomas requieren sus propios tipos de letra + (fuentes), porque no se representan utilizando el conjunto Latino + de caracteres, como los otros. Ver Fuentes Especiales, abajo. + + Estableciendo la Localizacion del Entorno + + Cambiar la localizacion afectara muchas partes del entorno. + + Como se menciono arriba, ademas de permitir cambiar el idioma en + el momento de su ejecucion usando opciones de linea de comandos + ("--lang" y "--locale"), Tux Paint se ajusta a las preferencias + globales de localizacion del entorno. + + Si aun no se hubiera establecido la localizacion del entorno, lo + siguiente explicara brevemente como hacerlo: + + Usuarios de Linux/Unix + + Primero asegurarse de que la localizacion que se desea usar este + habilitada editando el archivo "/etc/locale.gen" del sistema y + luego ejecutando el programa "locale-gen" como root. + + Nota: Los usuarios de Debian podran simplemente ejecutar el + comando "dpkg-reconfigure locales". + + Luego, antes de ejecutar el Tux Paint, fijar la variable de + entorno "$LANG" a una de las localizaciones listadas arriba. (Si + se quiere que todos los programas que puedan ser traducidos lo + sean, es posible que se desee incluir lo siguiente en el guion + de entrada: p.ej: ~/.profile, ~/.bashrc, ~/.cshrc, etc.) + + Por ejemplo, en un shell tipo Bourne (como el BASH): + + export LANG=es_ES@euro ; \ + tuxpaint + + Y en un shell tipo C Shell (como el TCSH): + + setenv LANG es_ES@euro ; \ + tuxpaint + + ---------------------------------------------------------------------- + + Usuarios de Windows + + Tux Paint reconocera la localizacion actual y usara los archivos + apropiados por defecto. Por lo que esta seccion interesara + solamente a aquellos que esten intentando usar otro idioma. + + Lo mas sencillo es usar la opcion '--lang' en el acceso directo + (ver "INSTALACION.txt"). Sin embargo, utilizando una ventana de + Simbolo MSDOS, es tambien posible enviar un comando como este: + + set LANG=es_ES@euro + + ...el que establecera el idioma durante la duracion de esa + ventana DOS. + + Para algo mas permanente, intentar editar el archivo + 'autoexec.bat' de la computadora usando la herramienta "sysedit" + de Windows: + + Windows 95/98 + + 1. Hacer clic en el boton 'Inicio' y seleccionar 'Ejecutar...'. + 2. Escribir "sysedit" en el espacio 'Abrir:' (con o sin las + comillas). + 3. Presionar 'Aceptar'. + 4. Localizar la ventana del AUTOEXEC.BAT en el Editor de + Configuracion del Sistema. + 5. Agregar lo siguiente al final del archivo: + + set LANG=es_ES@euro + + 6. Cerrar el Editor de Configuracion del Sistema, respondiendo + que si a guardar los cambios. + 7. Reiniciar la maquina. + + Para afectar a la maquina entera y a todas las aplicaciones, + es posible usar el panel de control de "Configuracion + Regional": + + 1. Hacer clic en el boton 'Inicio' y seleccionar + 'Configuracion | Panel de Control'. + 2. Hacer doble clic en el globo de "Configuracion Regional". + 3. Seleccionar un idioma/region de la lista desplegable. + 4. Hacer clic en 'Aceptar'. + 5. Reiniciar la maquina cuando se indique. + + Fuentes Especiales + + Algunos idiomas requieren que sean instalados tipos de letra + especiales. Estos archivos de fuentes (que estan en formato + TrueType (TTF)), son demasiado grandes para ser incluidos en el + paquete del TuxPaint y estan disponibles por separado. (Ver la + tabla de arriba, bajo la seccion "Escogiendo un Idioma Distinto".) + + Al ejecutar Tux Paint en un idioma que requiere su propia fuente, + Tux Paint intentara cargar el archivo de la fuente desde el + directorio de fuentes del sistema ("fonts", bajo el subdirectorio + de dicha "localizacion"). El nombre del archivo corresponde a las + dos primeras letras en el codigo de la 'localizacion' del idioma + (p.ej: "ko" para Coreano, "jp" para Japones). + + Por ejemplo, bajo Linux o Unix, cuando Tux Paint es ejecutado en + Coreano (p.ej: con la opcion "--lang korean"), Tux Paint intentara + cargar el siguiente archivo de fuentes: + + /usr/share/tuxpaint/fonts/locale/ko.ttf + + Las fuentes para los idiomas soportados se pueden bajar desde el + sitio web del Tux Paint: + http://www.newbreedsoftware.com/tuxpaint/. (Buscar en la seccion + 'Fonts' en 'Download.') + + Bajo Unix y Linux, es posible usar el Makefile que viene con la + fuente para instalarla en la ubicacion apropiada. + + ---------------------------------------------------------------------- + +Pantalla de Titulo + + Mientras Tux Paint se esta cargando, aparecera una pantalla de + titulo/creditos. + + [Title Screenshot] + + Una vez que la carga se ha completado, presionar una tecla o hacer + clic con el raton para continuar (o, luego de aproximadamente + 30 segundos, la pantalla de titulo desaparecera automaticamente.) + + ---------------------------------------------------------------------- + +Pantalla Principal + + La pantalla principal esta dividida en las siguientes secciones: + + Lado Izquierdo: Barra de Herramientas + + La barra de herramientas contiene los controles de dibujo y + edicion. + +[Tools: Paint, Stamp, Lines, Shapes, Text, Magic, Undo, Redo, Eraser, New, + Open, Save, Print, Quit] + + Centro: Tela de Dibujo + + La parte mas grande de la pantalla, en el centro, es la tela + de dibujo. !Aca es, obviamente, donde se dibuja! + + [(Canvas)] + + Lado Derecho: Selector + + Dependiendo de la herramienta activa, el selector muestra + distintas cosas. p.ej: mientras la herramienta Pintar esta + activa, muestra los varios pinceles disponibles. Mientras la + herramienta Sellos esta activa, muestra las diferentes figuras + que pueden ser usadas. + + [Selectors - Brushes, Letters, Shapes, Stamps] + + Abajo: Colores + + Una paleta con los colores disponibles se muestra cerca de la + parte inferior de la pantalla. + + [Colors - Black, White, Red, Pink, Orange, Yellow, Green, Cyan, Blue, + Purple, Brown, Grey] + + Mas abajo: Area de Ayuda + + En la parte mas baja de la pantalla, Tux, el Pingu:ino de + Linux, da consejos y otras informaciones al dibujar. + + (For example: 'Pick a shape. Click to pick the center, drag, then let go +when it is the size you want. Move around to rotate it, and click to draw + it.) + + ---------------------------------------------------------------------- + +Herramientas Disponibles + + Herramientas de Dibujo + + Pintar (Pinceles) + + La herramienta Pintar permite dibujar a mano alzada, usando + distintos pinceles (elegidos en el Selector de la derecha) y + colores (elegidos en la paleta de Colores en la parte de + abajo). + + Si se mantiene presionado el boton del raton y se mueve, + este dibujara a medida que se mueve. + + A medida que se dibuja, se escucha un sonido. Cuanto mas + grande sea el pincel, mas grave sera el tono. + + ---------------------------------------------------------------------- + + Sellos (de Goma) + + La herramienta Sellos recuerda a sellos de goma o + calcomanias. Permite pegar imagenes pre-dibujadas o + fotografias (como una foto de un caballo, un arbol o la + Luna) sobre la tela. + + A medida que se mueve el raton, un contorno rectangular + acompana al raton, indicando donde sera ubicado el sello. + + Distintos sellos pueden tener diferentes efectos de sonido. + + ---------------------------------------------------------------------- + + Lineas + + Esta herramienta permite dibujar lineas rectas usando los + varios pinceles y colores que normalmente se utilizan con + Pintar. + + Hacer clic y mantener presionado para escoger el punto + inicial de la linea. A medida que se mueve el raton, una + 'banda elastica' fina indicara donde sera dibujada la linea. + + Soltar el boton para completar la linea. Se escuchara un + sonido tipo "!sproing!". + + ---------------------------------------------------------------------- + + Figuras + + Esta herramienta permite dibujar figuras simples, tanto + rellenas como huecas. + + Seleccionar una figura del selector de la derecha (circulo, + cuadrado, ovalo, etc.). + + En la tela, hacer clic y arrastrar para estirar la figura + desde su centro. Algunas figuras pueden cambiar su + proporcion p.ej: el rectangulo y el ovalo), otras no (p.ej: + el cuadrado y el circulo). + + Soltar el boton para terminar de estirar. + + Modo Normal + + Ahora es posible mover el raton sobre la tela + para rotar la figura. + + Hacer clic otra vez para que la figura se + dibuje usando el color actual. + + Modo de Figuras Simples + Si el modo de figuras simples esta activado + (opcion "--simpleshapes"), la figura se + dibujara sobre la tela al soltar el boton del + raton. (Sin el paso para la rotacion.) + + ---------------------------------------------------------------------- + + Texto + + Escoger un tipo de letra y un color. Hacer clic en la + pantalla y un cursor aparecera. Ingresar el texto que se + mostrara en la pantalla. + + Presionar [Enter] o [Intro] y el texto sera dibujado sobre + la imagen y el cursor se movera una linea hacia abajo. + + Hacer clic en otro lugar de la imagen y la linea de texto + actual se movera a ahi, donde se podra continuar la edicion. + + ---------------------------------------------------------------------- + + Magicas (Efectos Especiales) + + Las herramientas magicas son un conjunto de herramientas + especiales. Seleccionar los efectos "magicos" desde el + selector de la derecha y luego hacer clic arrastrando el + raton por la imagen para aplicar el efecto. + + Arcoiris + Esta herramienta es similar a Pintar, pero a + medida que se mueve el raton pasa por todos los + colores del arcoiris. + + Chispas + Esta herramienta dibuja chispas amarillas en la + imagen. + + Espejar + Al hacer clic con el raton sobre la imagen + usando el efecto magico "Espejar", la imagen + entera sera invertida horizontalmente, + transformandola en una imagen a espejo. + + Invertir + Similar a "Espejar". Hacer clic y la imagen + entera sera invertida verticalmente. + + Desenfocar + Esta herramienta deja la imagen borrosa por + donde se pase el raton. + + Bloques + Esta herramienta deja la imagen cuadriculada + ("pixelizada") donde se haya pasado el raton. + + Negativo + Esta herramienta invierte los colores en donde + se pase el raton. (p.ej: el blanco se vuelve + negro y viceversa.) + + Desvanecer + Esta herramienta desvanece los colores en donde + se arrastre el raton. (Hacerlo sobre el mismo + punto varias veces lo tornara finalmente + blanco.) + + Tiza + Esta herramienta hace que partes de la imagen + (donde se mueva el raton) luzcan como dibujadas + con tiza. + + Gotear + Esta herramienta hace que la pintura "gotee" en + donde se haya pasado el raton. + + Grueso + Esta herramienta hace que los colores mas + oscuros de la imagen se vuelvan mas gruesos por + donde se pase el raton. + + Fino + Similar a "Grueso", excepto que los colores mas + oscuros se vuelven mas finos (los colores mas + claros se vuelven mas gruesos). + + Rellenar + Esta herramienta inunda la imagen con un color. + Permite rellenar rapidamente partes de la + imagen, como si se tratara de un libro de + colorear. + + ---------------------------------------------------------------------- + + Goma de Borrar + + Esta herramienta es similar a Pintar. Donde se haga un clic + (o clic y arrastrar), la imagen sera borrada a blanco. + + A medida que el raton es movido, un gran cuadrado blanco + sigue al puntero, indicando que parte de la imagen sera + borrada. + + A medida que se borra, un sonido "chillonamente limpio" de + limpieza se escucha. + + ---------------------------------------------------------------------- + + Otros Controles + + Deshacer + + Hacer clic en esta herramienta deshara la ultima accion de + dibujo. !Hasta es posible deshacer mas de una vez! + + Nota: Tambien es posible presionar [Control]-[Z] en el + teclado para deshacer. + + ---------------------------------------------------------------------- + + Rehacer + + Hacer clic en esta herramienta rehara la accion de dibujo + que acabo de ser "deshecha" con el boton 'Deshacer'. + + Mientras no se vuelva a dibujar nada, !es posible rehacer + tantos pasos como se hayan "deshecho"!. + + Nota: Tambien es posible presionar [Control]-[R] en el + teclado para rehacer. + + ---------------------------------------------------------------------- + + Nuevo + + Hacer clic en el boton "Nuevo" comenzara un nuevo dibujo. + Antes de hacerlo se pedira una confirmacion de la decision. + + Nota: Tambien es posible presionar [Control]-[N] en el + teclado para comenzar un nuevo dibujo. + + ---------------------------------------------------------------------- + + Abrir + + Esto muestra una lista de todas las imagenes que han sido + guardadas. Si hubiera mas de las que entran en la pantalla, + usar las flechas "Arriba" y "Abajo" en las partes superior e + inferior de la lista para desplazarse por la lista de + imagenes. + + Hacer clic en una imagen para seleccionarla, luego... + + * Hacer clic en el boton verde "Abrir" en la parte + inferior izquierda de la lista para abrir la imagen + seleccionada. + + (Alternativamente, es posible hacer doble clic en el + icono de una imagen para abrirla.) + + * Hacer clic en el boton marron "Borrar" (la lata de + basura) en la parte inferior derecha de la lista para + borrar la imagen seleccionada. (Se pedira una + confirmacion.) + + * O hacer clic en el boton rojo "Atras" (flecha) en la + parte inferior derecha de la lista para cancelar y + regresar a la imagen que se estaba dibujando + previamente. + + Si se elige abrir un imagen y la imagen actual no habia sido + guardada, se consultara si se desea gurdarla o no. (Ver + "Guardar", mas abajo.) + + Nota: Tambien es posible presionar [Control]-[O] en el + teclado para obtener el dialogo 'Abrir'. + + ---------------------------------------------------------------------- + + Guardar + + Esto guarda tu imagen actual. + + Si no habia sido guardada previamente, creara una nueva + entrada en la lista de imagenes guardadas. (y creara un + nuevo archivo) + + Nota: No se hara ninguna pregunta (p.ej: sobre un nombre de + archivo). Simplemente guardara la imagen y se escuchara un + efecto de sonido tipo "obturador de camara". + + Si YA se habia guardado la imagen con anterioridad, o si era + una imagen abierta usando el comando "Abrir", se preguntara + antes si se desea sobreescribir la version vieja o crear una + nueva entrada (un nuevo archivo). + + (NOTA: Si una de las opciones: "saveover" o "saveovernew" + estuviera activa, no se consultara antes de guardar sobre + otra imagen. Ver la seccion "Opciones" de este documento, + mas arriba.) + + Nota: Tambien es posible presionar [Control]-[S] en el + teclado para guardar una imagen. + + ---------------------------------------------------------------------- + + Imprimir + + !Hacer clic sobre este boton para que la imagen se imprima! + + Deshabilitando la Impresion + + Si la opcion "noprint" fue activada (tanto con + "noprint=yes" en el archivo de configuracion de + Tux Paint, como usando "--noprint" en la linea + de comandos), el boton "Imprimir" estara + deshabilitado. + + Ver la seccion "Opciones" de este documento, + mas arriba. + + Restringiendo la Impresion + + Si la opcion "printdelay" fue activada (tanto + con "printdelay=SEGUNDOS" en el archivo de + configuracion, como usando + "--printdelay=SEGUNDOS" en la linea de + comandos), solo se podra imprimir una vez cada + SEGUNDOS segundos. + + Pro ejemplo, con "printdelay=60", se podra + imprimir solo una vez cada minuto. + + Ver la seccion "Opciones" de este documento, + mas arriba. + + Otras Opciones de Impresion + + (Linux y Unix solamente) + + El comando usado para imprimir es realmente una + serie de comandos que convierten la imagen PNG + a un archivo PostScript y lo envian a la + impresora: + + pngtopnm | pnmtops | lpr + + Este comando puede ser cambiado modificando el + valor "printcommand" en el archivo de + configuracion de Tux Paint. + + Ver la seccion "Opciones" de este documento, + mas arriba. + + ---------------------------------------------------------------------- + + Salir + + Haciendo clic en el boton "Salir", cerrando la ventana del + Tux Paint o presionando la tecla "Escape" se saldra de Tux + Paint. + + (NOTA: El boton "Salir" puede ser deshabilitado (p.ej: con + la opcion de linea de comandos "--noquit"), pero la tecla + [Escape] aun seguira funcionando. Ver la seccion "Opciones" + de este documento, mas arriba.) + + Primero se pedira confirmar la desicion de salir. + + Si se elige salir y y no se ha guardado la imagen actual, se + consultara si se desea guardarla. Si no fuera una nueva + imagen, entonces se consultara si se desea guardarla sobre + la version vieja o crear una nueva entrada. (Ver "Guardar" + arriba.) + + NOTA: !Si la imagen es guardada, sera re abierta + automaticamente la proxima vez que se use el Tux Paint! + + ---------------------------------------------------------------------- + + Abriendo Otras Imagenes en Tux Paint + + Como el dialogo 'Abrir' del Tux Paint solo muestra las imagenes creadas + en el propio Tux Paint, ?que hay que hacer si se quisieran cargar otras + imagenes o fotografias en Tux Paint para editarlas? + + Para hacer esto, simplemente se necesitaria convertir la imagen al + formato PNG (Portable Network Graphic) y ubicarla en el directorio donde + Tux Paint guarda sus imagenes. ("~/.tuxpaint/saved/" bajo Linux y Unix, + "userdata\saved\" bajo Windows.) + +Usando 'tuxpaint-import' + + Los usuarios de Linux y Unix pueden utilizar el guion de shell + "tuxpaint-import", que se instala al instalar Tux Paint. Este utiliza + algunas de las herramientas NetPBM para convertir la imagen + ("anytopnm"), reescalarla de forma que quepa en la tela del Tux Paint + ("pnmscale") y convertirla a PNG ("pnmtopng"). + + Tambien utiliza "date" para obtener la hora y fecha actuales, que es + la convencion que Tux Paint utiliza para nombrar los archivos + guardados. (Recuerda que nunca se pide un 'nombre de archivo' al + querer Guardar o Abrir imagenes!) + + Para usar 'tuxpaint-import', simplemente ejecutar el comando desde la + linea de comandos y proveerle de el(los) nombre(s) de el(los) + archivos(s) que se desean convertir. + + Seran convertidos y ubicados en el directorio de imagenes guardadas + del Tux Paint. (Nota: Si estas realizando esto para otro usuario - + p.ej: tu hijo, necesitaras asegurarte de ejecutar el comando usando su + cuenta.) + + Por ejemplo: + + $ tuxpaint-import abuela.jpg + abuela.jpg -> /home/username/.tuxpaint/saved/20020921123456.png + jpegtopnm: WRITING A PPM FILE + + La primera linea ("tuxpaint-import abuela.jpg") es el comando a + ejecutar. Las siguientes dos lineas es salida del programa mientras + esta trabajando. + + Ahora ya es posible cargar Tux Paint y una version de la imagen + original estara disponible en el dialogo 'Abrir'. !Simplemente hay que + hacer doble clic sobre su icono! + +Haciendolo Manualmente + + Los usuarios de Windows por el momento deberan realizar la conversion + manualmente. + + Cargar un programa grafico que sea capaz tanto de cargar la imagen + como de guardar archivos en formato PNG. (Ver "PNG.txt" para una lista + de programas sugeridos.) + + Reducir el tamano de la imagen a no mas de 448 pixels de ancho por no + mas de 376 pixels de alto. (el tamano maximo es de 448 x 376 pixels) + + Guardar la imagen en formato PNG. Es altamente recomendado nombrar el + archivo usando la fecha y hora actuales, porque esa es la convencion + utilizada por Tux Paint: + + AAAAMMDDhhmmss.png + + * AAAA = Ano + * MM = Mes (01-12) + * DD = Dia (01-31) + * HH = Hora, en formato de 24 horas (00-23) + * mm = Minuto (00-59) + * ss = Segundo (00-59) + + p.ej: + + 20020921130500 - para el 21 de Setiembre de 2002, a la 1:05:00 PM + + Ubicar este archivo PNG en el directorio de archivos 'guardados' del + Tux Paint. (Ver mas arriba.) + + Bajo Windows, esto es en la carpeta "userdata". + + ---------------------------------------------------------------------- + + Extendiendo al Tux Paint + + Si se quieren agregar o cambiar cosas tales como los Pinceles y Sellos + usados por el Tux Paint, es posible hacerlo de forma sencilla incluyendo + o removiendo archivos del disco duro. + + Nota: Se necesitara reiniciar el Tux Paint para que los cambios surtan + efecto. + +Donde van los archivos + + Archivos Estandar + + Tux Paint busca sus varios archivos de datos en su directorio + 'data'. + + Linux y Unix + + Donde va este directorio depende del valor fijado para + "DATA_PREFIX" al compilar Tux Paint. Ver INSTALACION.txt para mas + detalles. + + Por defecto, este directorio es: + + /usr/local/share/tuxpaint/ + + Si ha sido instalado desde un paquete, es mas probable: + + /usr/share/tuxpaint/ + + Windows + + Tux Paint busca una carpeta llamada 'data' en la misma carpeta en + que se encuentra el ejecutable. Esta es la carpeta que utilizo el + instalador al instalar Tux Paint, p.ej: + + "C:\Archivos de Programa\TuxPaint\data" + + ---------------------------------------------------------------------- + + Archivos Presonales + + Tambien es posible ubicar pinceles, sellos y tipos de letra en los + directorios personales y que el Tux Paint los utilice. + + Linux y Unix + + El directorio personal para cada usuario de Tux Paint es + "~/.tuxpaint/". + + Esto es, si el directorio personal fuera "/home/carlos", entonces + el directorio del Tux Paint seria "/home/carlos/.tuxpaint/". + + !No olvidar el punto (".") antes de la palabra 'tuxpaint'! + + Windows + + El directorio personal del Tux Paint se llama "userdata" y reside + en la misma carpeta que el ejecutable, p.ej: + + "C:\Archivos de Programa\TuxPaint\userdata" + + Para agregar pinceles, sellos y fuentes crear subcarpetas bajo el + directorio personal del Tux Paint llamadas "brushes", "stamps" y + "fonts", respectivamente. + + (Por ejemplo, si se hubiera creado un pincel llamado "flor.png", + deberia ser puesto en "~/.tuxpaint/brushes/" bajor Linux o Unix.) + + ---------------------------------------------------------------------- + +Pinceles + + Los pinceles utilizados para dibujar con las herramientas Pintar y + Lineas del Tux Paint son simplemente imagenes PNG en escala de grises. + + El alfa (transparencia) de la imagen PNG es utilizada para determinar + la forma del pincel, !lo que significa que la forma puede contener + 'anti-alias' y hasta ser parcialmente transparente! + + Las imagenes para los pinceles deberian tener un maximo de 40 pixeles + de ancho y 40 de alto. (el tamano maximo es 40 x 40.) + + Deberan simplemente ser ubicadas en el directorio "brushes". + + Nota: Si los nuevos pinceles aparecen todos como cuadrados solidos, + !es porque no se ha usado transparencia alfa! Ver el documento + "PNG.txt" para mas informacion y consejos. + + ---------------------------------------------------------------------- + +Sellos + + Todos los archivos de sellos van en el directorio "stamps". Es util + crear subdirectorios y sub-subdirectorios alli para organizar los + sellos. (Por ejemplo: es posible tener una carpeta "celebraciones" con + subcarpetas "noche de brujas" y "navidad".) + + Imagenes + + Los Sellos del Tux Paint pueden contener una serie de archivos + separados. El archivo que es requerido es, por supuesto, la imagen + en si misma. + + Los Sellos usados por el Tux Paint son imagenes PNG. Pueden ser en + colores o en escala de grises. El alfa (transparencia) de la PNG es + usado para determinar la forma de la imagen (de otro modo se + estamparia un gran rectangulo en el dibujo). + + Las PNGs pueden ser de cualquier tamano, pero en la practica, una de + 100 pixeles de ancho por 100 pixeles de alto (100x100) es bien + grande para el Tux Paint. + + Nota: Si los nuevos pinceles aparecen todos como cuadrados solidos, + !es porque no se ha usado transparencia alfa! Ver el documento + "PNG.txt" para mas informacion y consejos. + + ---------------------------------------------------------------------- + + Texto Descriptivo + + Archivos de texto (".TXT") con el mismo nombre de la PNG. (p.ej: la + descripcion de "imagen.png" se almacena en "imagen.txt" en el mismo + directorio.) + + Soporte de Idiomas + + Las lineas que comienzan con "xx=" (donde "xx" es uno de los + idiomas soportados; p.ej: "de" para Aleman, "fr" para Frances, + etc.) seran usadas bajo las correspondientes localizaciones + soportadas. + + Si no existe una traduccion para la localizacion del usuario, el + texto por defecto (en la primera linea, que deberia estar en + Ingles) sera usado. + + Usuarios de Windows + + Usar el Bloc de Notas o WordPad para editar/crear estos archivos. + Asegurarse de guardarlos como Documento de Texto y que tengan la + extension ".txt" al final del nombre de archivo... + + ---------------------------------------------------------------------- + + Efectos de Sonido + + Archivos WAVE (".WAV") con el mismo nombre que la PNG. (p.ej.: el + efecto de sonido de "imagen.png" sera el sonido "imagen.wav" en el + mismo directorio.) + + Soporte de Idiomas + + Para tener sonidos para las diferentes localizaciones (p.ej.: si + el sonido fuera alguien diciendo una palabra y se quisiera tener + versiones traducidas de esa palabra), se deben crear archivos WAV + con la etiqueta de la localizacion en el nombre del archivo, en la + siguiente forma: "SELLO_LOCALIZACION.wav" + + El efecto de sonido de "imagen.png", cuando Tux Paint se ejecuta + en Espanol, seria "imagen_es.wav". En Frances: "imagen_fr.wav". Y + asi sucesivamente... + + Si no puede ser abierto un efecto de sonido localizado, Tux Paint + intentara abrir el archivo de sonido 'por defecto'. (p.ej: + "imagen.wav") + + ---------------------------------------------------------------------- + + Opciones de los Sellos + + Aparte de darles una forma grafica, un texto descriptivo y un efecto + de sonido, tambien es posible dar a los sellos otros atributos. Para + hacer esto, se necesitara crear una 'archivo de datos' del sello. + + Un archivo de datos del sello es simplemente un archivo de texto que + contiene las opciones. + + El archivo tendra el mismo nombre que la imagen PNG, pero con una + extension ".dat". (p.ej.: el archivo de datos de "imagen.png", es el + archivo de texto "imagen.dat" en el mismo directorio.) + + Sellos Coloreados + + Los sellos pueden hacerse tanto "coloreables" como "tenibles". + + Coloreables + + Los sellos "coloreables" funcionan de forma similar a pinceles - + se escoge el sello para obtener la forma y luego se escoge el + color que se desea que tenga. (Los sellos de simbolos, como los + matematicos y musicales, son un ejemplo.) + + Nada de la imagen original es utilizado, excepto la + transparencia (el "canal alfa"). El color del sello es solido. + + Agregar el termino "colorable" al archivo de datos del sello. + + Tenibles + + Los sellos "tenibles" son similares a los "coloreables", excepto + que los detalles de la imagen original se preservan. (Para + decirlo mas tecnicamente, se utiliza la imagen original, pero su + tono es cambiado, basado en el color actualmente seleccionado.) + + Agregar el termino "tintable" al archivo de datos del sello. + + Usuarios de Windows + + Usar el Bloc de Notas o WordPad para editar/crear estos archivos. + Asegurarse de guardarlos como Documento de Texto y que tengan la + extension ".dat" al final, en vez de ".txt"... + + ---------------------------------------------------------------------- + +Tipos de Letra + + Las fuentes utilizadas por el Tux Paint son Fuentes TrueType (TTF). + + Simplemente hay que ubicarlas en el directorio "fonts". Tux Paint + cargara la fuente y proveera cuatro tamanos distintos en el 'Selector + de Fuentes' al usar la herramienta 'Texto'. + + ---------------------------------------------------------------------- + + Mas Informacion + + Por mas informacion, ver los otros documentos que vienen con Tux Paint. + + Si necesitas ayuda, sientete libre de contactarte con New Breed Software + (en ingles): + + http://www.newbreedsoftware.com/ + + Puede que tambien desees participar en las varias listas de correo de + Tux Paint: + + http://www.newbreedsoftware.com/tuxpaint/lists/ diff --git a/docs/es/PNG.txt b/docs/es/PNG.txt new file mode 100644 index 000000000..21acd9869 --- /dev/null +++ b/docs/es/PNG.txt @@ -0,0 +1,148 @@ +PNG.txt del Tux Paint + +Tux Paint - Un programa de dibujo simple para nios. + +Copyright 2002 por Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +27 de Junio de 2002 - 7 de Noviembre de 2002 + + +Acerca de las PNGs +------------------ + PNG es el formato de imgenes "Portable Network Graphic". Es un + estndar abierto, no gravado por ninguna patente (como el GIF). + Es un formato altamente comprimido (aunque sin provocar "prdidas" + como el JPEG - la prdida de calidad permite a los archivos ser ms + pequeos, pero introduce 'errores' en la imagen al ser guardada), + tambin soporta color de 24 bits (16,7 millones de colores) as como + un completo "canal alfa" - esto es, cada pixel puede tener un grado + variable de trasparencia. + + Por ms informacin, visitar: http://www.libpng.org/ + + Estas caractersticas (apertura, sin prdidas, compresin, + transparencia/alfa) lo hacen la mejor eleccin para el TuxPaint. + (El soporte para el formato PNG del Tux Paint es provisto por la + biblioteca de Cdigo Abierto SDL_Image, la cual a su vez lo obtiene + de la biblioteca libPNG.) + + Su soporte de gran cantidad de colores permite la utilizacin de + "sellos de goma" con imgenes de calidad fotogrfica en Tux Paint + y la tranparencia por alfa permite obtener "pinceles" de alta calidad. + + +Cmo Hacer PNGs +--------------- + La siguiente es una muy breve lista de algunas formas de crear PNGs o + convertir imgenes existentes a PNG. + + + Usuarios de Linux/Unix + ---------------------- + The GIMP + -------- + La mejor herramienta con qu crear imgenes PNG para usar en Tux Paint + es el "GNU Image Manipulation Program" (o simplemente "el GIMP"), un + programa intercativo de dibujo y edicin fotogrfica de alta calidad + de Cdigo Abierto. + + Probablemente ya est instalado en tu sistema Linux. Si no fuera as, + es casi seguro que est para instalar en el CD de instalacin o en el + sitio de descargas de tu distribucin. O de lo contrario en: + + http://www.gimp.org/ + + + Krita + ----- + Krita es una aplicacin de pintura y edicin de imgenes para KOffice. + + http://koffice.kde.org/krita/ + + + NetPBM + ------ + Las herramientas Portable Bitmap (conocidas en conjunto como "NetPBM") + son una coleccin herramientas de lnea-de-comandos de Cdigo Abierto + que convierten a y desde varios formatos, incluyendo: GIF, TIFF, BMP, + PNG y muchos ms. + + NOTA: Los formatos de NetPBM (Portable Bitmap: PBM, + Portable Greymap: PGM, Portable Pixmap: PPM y el abarcalo todo + Portable Any Map: PNM) no soportan alfa, por lo tanto cualquier + informacin de transparencia (p.ej.: de una GIF) se perder! + Mejor usa The GIMP! + + Probablemente ya est instalado en tu sistema Linux. Si no fuera as, + es casi seguro que est para instalar en el CD de instalacin o en el + sitio de descargas de tu distribucin. O de lo contrario en: + + http://netpbm.sourceforge.net/ + + + cjpeg/djpeg + ----------- + Los programas de lnea-de-comando "cjpeg" y "djpeg" convierten entre + el formato Portable Any Map (PNM) de NetPBM y JPEGs. + + Probablemente ya est instalado en tu sistema Linux. + (En Debian, est disponible en el paquete "libjpeg-progs".) + Si no fuera as, es casi seguro que est para instalar en el CD + de instalacin o en el sitio de descargas de tu distribucin. + O de lo contrario en: + + ftp://ftp.uu.net/graphics/jpeg/ + + + Usuarios de Windows + ------------------- + Canvas (Deneba) + http://www.deneba.com/products/canvas8/default2.html + + CorelDRAW (Corel) + http://www.corel.com/ + + Fireworks (Macromedia) + http://macromedia.com/software/fireworks/ + + Illustrator (Adobe) + http://www.adobe.com/products/illustrator/main.html + + Paint Shop Pro (Jasc) + http://www.jasc.com/products/psp/ + + Photoshop (Adobe) + http://www.adobe.com/products/photoshop/main.html + + + Usuarios de Macintosh + --------------------- + Canvas (Deneba) + http://www.deneba.com/products/canvas8/default2.html + + CorelDRAW (Corel) + http://www.corel.com/ + + Fireworks (Macromedia) + http://macromedia.com/software/fireworks/ + + GraphicConverter (Lemke Software) + http://www.lemkesoft.de/us_gcabout.html + + Illustrator (Adobe) + http://www.adobe.com/products/illustrator/main.html + + Photoshop (Adobe) + http://www.adobe.com/products/photoshop/main.html + + +Ms Informacin +--------------- + En el sitio libPNG hay una lista de editores y conversores de imagen que + soportan el formato PNG: + + http://www.libpng.org/pub/png/pngaped.html + http://www.libpng.org/pub/png/pngapcv.html + diff --git a/docs/es/html/LEEME.html b/docs/es/html/LEEME.html new file mode 100644 index 000000000..f2d2cf888 --- /dev/null +++ b/docs/es/html/LEEME.html @@ -0,0 +1,1376 @@ + +LEEME del Tux Paint + + + + + +

+


+ +0.9.2 + +

+

Un programa de dibujo simple para niños

+ +

Copyright 2002 por Bill Kendrick
+New Breed Software

+ +

bill@newbreedsoftware.com
+http://www.newbreedsoftware.com/tuxpaint/

+ +

14 de Junio de 2002 - 10 de Diciembre de 2002

+
+ +
+ +

Acerca de

+
+

"Tux Paint" es un programa de dibujo para niños chicos. Presenta una interfaz simple con una tela de tamaño fijo, y da acceso a las imágenes previas mediante un navegador de miniaturas (sin acceder al sistema de archivos subyacente).

+ +

Al contrario de otros programas populares de dibujo como "The GIMP," posee un conjunto de herramientas muy limitado. Sin embargo, proporciona una interfaz mucho más simple con agregados orientados a entretener a los niños, como efectos de sonido.

+
+ +
+ + +

Licencia:

+
+

Tux Paint es un proyecto de Código Abierto, entregado bajo la licencia GNU General Public License (GPL). Es libre y el 'código fuente' del programa está disponible. (Esto le permite a otros agregar funciones, corregir errores y utilizar partes del programa en sus propios programas de Código Abierto bajo licencia GPL.)

+ +

Ver COPIADO.txt para el texto completo de la licencia GPL.

+
+ +
+ + +

Objetivos:

+
+
+
Sencillo y Divertido
+
Tux Paint está concebido para ser un programa de dibujo sencillo para niños chicos. No está pensado como una herramienta de dibujo de uso general. Sí está concebido para ser divertido y fácil de usar. Efectos de sonido y un personaje tipo dibujo animado le permiten al usuario saber qué está sucediendo y mentenerse entretenido. También hay punteros de ratón tipo dibujo animado de formas extra grandes.
+
Extensibilidad
+
Tux Paint es extensible. Pinceles y "sellos" con imágenes pueden ser agregados y retirados. Por ejemplo, una maestra puede agregar una colección de figuras de animales y pedirle a sus alumnos que dibujen un ecosistema. Cada figura puede tener un sonido asociado y textos descriptivos, los cuales se despliegan cuando el niño selecciona la figura.
+ +
Portabilidad
+
Tux Paint es portable a varias plataformas de computación: Windows, Macintosh, Linux, etc. La interfaz luce idéntica en todas ellas. Tux Paint se ejecuta correctamente en sistemas viejos (como Pentiums de 133MHz) y puede ser compilado para correr mejor en sistemas lentos.
+ +
Simplicidad
+
No existe acceso directo a las complicaciones subyacentes de la computadora. La imagen actual es conservada cuando se sale del programa y reaparece cuando éste se vuelve a usar. Guardar las imágenes no requiere saber como crear nombres de archivo o usar el teclado. La apertura de las imágenes se realiza mediante su selección de una colección de miniaturas de las propias imágenes. El acceso a otros archivos de la computadora está restringido.
+
+
+ +
+ + +

Otra Documentación

+
+ Otra documentación incluída con Tux Paint (en las carpetas/directorios "docs/es" y "docs"): +
    +
  • AUTORES.txt
    + Lista de autores y contribuyentes + +
  • CHANGES.txt
    + Sumario de los cambios entre cada versión (en inglés) + +
  • COPIADO.txt
    + Licencia de copia. (La licencia GPL) + +
  • INSTALACION.txt
    + Instrucciones para la compilación/instalación, si corresponde + +
  • PNG.txt
    + Notas sobre cómo crear imágenes en formato PNG para usar en Tux Paint + +
  • LEEME.txt
    + (Este archivo en versión texto) + +
  • TODO.txt
    + Lista de funciones pendientes o errores que necesitan ser arreglados (en inglés) +
+
+ +
+ + +

Usando Tux Paint

+
+ +

Compilando Tux Paint

+
+ Para compilar Tux Paint a partir de las fuentes, por favor referirse a INSTALACION.txt.
+ +
+ +

Cargando Tux Paint

+
+

Usuarios de Linux/Unix

+
+

Ejecutar el siguiente comando en el prompt de un shell (p.ej: "$"):

+ +
+ $ tuxpaint +
+ +

También es posible hacer un botón o ícono para lanzarlo (p.ej: en GNOME o KDE). Ver la documentación del entorno de escritorio usado para más detalles...

+ +

Si ocurriera algún error, se mostrará en la terminal (en "stderr").

+
+ +
+ + +

Usuarios de Windows

+
+
+ [Icon]
+ Tux Paint +
+ +

Simplemente hacer doble clic sobre el ícono de "Tux Paint" en el escritorio (el cual fue creado automáticamente por el instalador) o doble clic sobre el ícono del archivo "tuxpaint.exe" dentro de la carpeta del 'Tux Paint' en la computadora.

+ +

Si ocurriera algún error, será guardado en un archivo llamado "stderr.txt" en la carpeta del Tux Paint.

+ +

Ver "INSTALACION.txt" para más detalles sobre cómo personalizar el ícono de "Acceso Directo" a Tux Paint, que permite establecer de forma sencilla las opciones del programa (mediantre la línea de comandos).

+ +

Para ejecutar Tux Paint y especificar opciones de línea de comandos directamente, se necesitará ejecutar "tuxpaint.exe" desde una ventana de Símbolo MSDOS. (Ver "INSTALACION.txt" para más detalles.)

+ +
+
+ + + + + + + +
+ +
+ + +

Opciones

+
+

Archivo de Configuración

+
+

Es posible crear un sencillo archivo de configuración para el Tux Paint, el que será leído cada vez que se ejecuta el programa.

+ +

El archivo es simplemente un archivo de texto conteniendo las opciones que se desea habilitar:

+ +

Usuarios de Linux

+
+

El archivo que debería ser creado se llama ".tuxpaintrc" y deberá residir en el directorio personal del usuario. ("~/.tuxpaintrc" o "$HOME/.tuxpaintrc")

+ +

Con anterioridad a que este archivo sea leído, un archivo de configuración global del sistema es leído. (Por defecto este archivo no tiene opciones habilitadas.) Reside en:

+ +
+ /etc/tuxpaint/tuxpaint.conf +
+ +

Es posible deshabilitar completamente su lectura, manteniendo las preferencias por defecto (las cuales serán sobreescritas por las del archivo ".tuxpaintrc" y/o por argumendos en la línea de comandos) usando la opción de línea de comandos:

+ +
+ --nosysconfig +
+
+ + +

Usuarios de Windows

+
+

El archivo que debería ser creado se llama "tuxpaint.cfg" y deberá residir en la carpeta del Tux Paint.

+ +

Es posible usar el Bloc de Notas o WordPad para crear este archivo. Asegurarse de guardarlo como Documento de Texto y que el nombre del archivo no termine en ".txt"...

+
+ + +

Opciones Disponibles

+
+

Las siguientes opciones pueden ser establecidas en el archivo de configuración. (Las opciones de la línea de comandos las sobre escribirán. Ver más abajo.)

+ +
+
fullscreen=yes
+
Ejecuta el programa en modo pantalla completa, en vez de en una ventana.
+ +
nosound=yes
+
Deshabilita los efectos de sonido.
+ +
noquit=yes
+
Deshabilita el botón "Salir" en pantalla. (Presionar la tecla [Escape] o hacer clic sobre el botón de cerrar ventana seguirá funcionando.)
+ +
noprint=yes
+
Deshabilita la impresión.
+ +
printdelay=SEGUNDOS
+
Restringe la impresión de manera que ésta pueda ocurrir sólo una vez cada SEGUNDOS segundos.
+ +
printcommand=COMANDO
+
+

(Sólo Linux y Unix)

+ +

Usa el comando COMANDO para imprimir un archivo PNG. Si no se especifica, el comando por defecto es:

+ +
+ pngtopnm | pnmtops | lpr +
+ +

Lo que convierte la PNG un archivo 'portable anymap' de NetPBM, luego convierte eso a un archivo PostScript y finalmente envía eso a la impresora utilizando el comando "lpr".

+
+ +
simpleshapes=yes
+
Deshabilita el modo rotación en la herramienta Figuras. Hacer clic, arrastrar y soltar será todo lo necesario para dibujar una figura.
+ +
uppercase=yes
+
Todo el texto será mostrado en mayúsculas (p.ej.: "Pincel" será "PINCEL"). Útil para niños que pueden leer, pero que hasta el momento sólo han aprendido las letras mayúsculas.
+ +
grab=yes
+
+

Tux Paint intentará 'retener' el ratón y el teclado, de modo que el ratón quede confinado a la ventana del Tux Paint y casi todo ingreso por teclado sea pasado directamente al programa.

+

Esto es útil para deshabilitar acciones del sistema operativo que podrían sacar al usuario fuera de Tux Paint, como el ciclado de ventanas hecho con [Alt]-[Tab], [Ctrl]-[Escape], etc. Esto resulta especialmente útil en modo pantalla completa.

+
+ +
nowheelmouse=yes
+
Esto deshabilita el soporte para la rueda, en los ratones que tienen. (Normalmente, la rueda desplaza el menú del selector de la derecha.)
+ +
keyboard=yes
+
Esto permite que las teclas de cursor del teclado sean utilizadas para controlar el puntero del ratón. (para entornos donde no haya ratón disponible.)

Las teclas de [Cursor] mueven el puntero del ratón. La [Barra Espaciadora] actúa como el botón del ratón.

+ +
saveover=yes
+
Esto deshabilita la consulta "¿Guardar sobre la versión anterior...?" al guardar un archivo ya existente. Con esta opción, la versión antigua será automáticamente reemplazada por la nueva, en todos los casos.
+ +
saveover=new
+
Esto también deshabilita la consulta "¿Guardar sobre la versión anterior...?" al guardar un archivo ya existente. Esta opción, sin embargo, siempre guardará un nuevo archivo, en vez de sobreescribir la versión antigua.
+ +
saveover=ask
+
+

(Esta opción es redundante, al ser la opción por defecto.)

Al intentar guardar un dibujo ya existente, se consultará antes si se va a guardar sobre la versión anterior o no.
+ +
lang=IDIOMA
+
+

Ejecuta Tux Paint en uno de los idiomas soportados. Las opciones actualmente disponibles para IDIOMA son:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
englishamerican-english (inglés de ee.uu.)
british-englishbritish (inglés del reino unido)
brazilian-portugueseportuges-brazilianbrazilian(portugués de brasil)
catalancatala (catalán)
czechcesky (checo)
danishdansk (danés)
dutch  (holandés)
finnishsuomi (finlandés)
frenchfrancais (francés)
germandeutsch (alemán)
hungarianmagyar (húngaro)
icelandicislenska (islandés)
italianitaliano (italiano)
korean  (coreano)
norwegiannynorsk (noruego)
spanishespanol (español)
swedishsvenska (sueco)
turkish  (turco)
+
+
+
+
+ +
+ +

Sobreescribiendo las Opciones de Configuración del Sistema usando .tuxpaintrc

+
+

Si cualquiera de la opciones de arriba han sido fijadas en "/etc/tuxpaint/tuxpaint.config", es posible sobreescribirlas en el archivo de configuración de cada usuario "~/.tuxpaintrc".

+ +

Para las opciones de tipo verdadero/falso, como "noprint" y "grab", es posible asumir simplemente que equivalen a 'no' en el archivo "~/.tuxpaintrc":

+ +
+ noprint=no
+ uppercase=no +
+ +

O es posible usar opciones similares a las opciones de línea de comandos descriptas abaja. Por ejemplo:

+ +
+ print=yes
+ mixedcase=yes +
+
+
+ +
+ +

Opciones de Línea de Comandos

+
También es posible enviar opciones en la línea de comandos al ejecutar Tux Paint. +
+
+
+ --fullscreen
+ --nosound
+ --noquit
+ --noprint
--printdelay=SEGUNDOS
+ --simpleshapes
+ --uppercase
+ --grab
+ --nowheelmouse
+ --keyboard
+ --saveover
+ --saveovernew
--lang IDIOMA
+
+
Estas habilitan las opciones descriptas arriba.
+ +
+ --windowed
+ --sound
+ --quit
+ --print
+ --printdelay=0
+ --complexshapes
+ --mixedcase
+ --dontgrab
+ --mouse
+ --wheelmouse
+ --saveoverask
+
+
Estas opciones pueden ser utilizadas para sobreescribir cualquier opción incluida en el archivo de configuración. (Si la opción no fue incluida en el(los) archivo(s) de configuración, no será necesaria una opción de sobreescritura.)
+ + +
--locale localización
+
+

Ejecuta Tux Paint en uno de los idiomas soportados. Ver la sección "Escogiendo un Idioma Distinto" abajo para obtener los códigos de localización a ser utilizados (p.ej: "de_DE@euro" para Alemán).

+ +

(Si la localización ya está establecida, mediante la variable de entorno "$LANG", esta opción no debería ser necesaria, pues Tux Paint se ajusta a las preferencias de entorno, siempre que esto sea posible.)

+
+ +
--nosysconfig
+
+

Bajo Linux y Unix, esta opción impide la lectura del archivo de configuración global del sistema: "/etc/tuxpaint/tuxpaint.conf".

+ +

Solamente el archivo personal de configuración "~/.tuxpaintrc" será usado, si existiera.

+
+
+
+
+ +
+

Opciones Informativas de Línea de Comandos

+
+

Las siguientes opciones muestran texto informativo en pantalla. Sin embargo Tux Paint no se llega a ejecutar realmente después de esto.

+ +
+
+
--version
+
Muestra el número de versión y fecha de la copia de Tux Paint que se está ejecutando. También lista que opciones de compilación fueron usadas, en caso que se haya usado alguna. (Ver INSTALACION.txt y FAQ.txt).
+ +
--copying
+
Muestra una breve información acerca de la licencia de uso y copia de Tux Paint.
+ +
--usage
+
Muestra la lista de opciones de línea de comandos disponibles.
+ +
--help
+
Muestra una breve ayuda acerca de cómo usar Tux Paint.
+
+
+
+
+ + +

Escogiendo un Idioma Distinto

+
+

Tux Paint ha sido traducido a varios idiomas. Para acceder a las traducciones, es posible usar la opción "--lang" en la línea de comandos para fijar el idioma (p.ej: "--lang spanish") o usar la opción "lang=" en el archivo de configuración (p.ej: "lang=spanish").

+ +

Tux Paint también se adapta a la localización actual del entorno. (Es posible sobreescribirla en la línea de comandos usando la opción "--locale" (ver arriba).

+ +

Los siguientes idiomas son los soportados:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Código de LocalizaciónIdioma
(nombre nativo)
Idioma
(nombre en español)
CEnglishInglés
ca_ESCatalàCatalán
cs_CZCeskyCheco
da_DKDanskDanés
de_DE@euroDeutschAlemán
en_GBBritish EnglishInglés Británico
es_ES@euroEspañolEspañol
fi_FI@euroSuomiFinlandés
fr_FR@euroFrançaisFrancés
hu_HUMagyarHúngaro
is_ISÍslenskaIslandés
it_IT@euroItalianoItaliano
ko_KR.UTF-8 (*) Coreano
nn_NONorsk (nynorsk)Noruego (Nynorsk)
nl_NL@euro Holandés
pt_BRPortugês BrasileiroPortugués Brasilero
sv_SE@euroSvenskaSueco
tr_TR@euro Turco
+ + (*) - Estos idiomas requieren sus propios tipos de letra (fuentes), porque no se representan utilizando el conjunto Latino de caracteres, como los otros. Ver Fuentes Especiales, abajo.

+ +

+ +

Estableciendo la Localización del Entorno

+
+

Cambiar la localización afectará muchas partes del entorno.

+ +

Como se mencionó arriba, además de permitir cambiar el idioma en el momento de su ejecución usando opciones de línea de comandos ("--lang" y "--locale"), Tux Paint se ajusta a las preferencias globales de localización del entorno.

+ +

Si aún no se hubiera establecido la localización del entorno, lo siguiente explicará brevemente cómo hacerlo:

+ +
Usuarios de Linux/Unix
+
+

Primero asegurarse de que la localización que se desea usar esté habilitada editando el archivo "/etc/locale.gen" del sistema y luego ejecutando el programa "locale-gen" como root.

+ +

Nota: Los usuarios de Debian podrán simplemente ejecutar el comando "dpkg-reconfigure locales".

+ +

Luego, antes de ejecutar el Tux Paint, fijar la variable de entorno "$LANG" a una de las localizaciones listadas arriba. (Si se quiere que todos los programas que puedan ser traducidos lo sean, es posible que se desee incluir lo siguiente en el guión de entrada: p.ej: ~/.profile, + ~/.bashrc, ~/.cshrc, etc.)

+ + +

Por ejemplo, en un shell tipo Bourne (como el BASH):

+ +
+ export LANG=es_ES@euro ; \
+ tuxpaint +
+ + +

Y en un shell tipo C Shell (como el TCSH):

+ +
+ setenv LANG es_ES@euro ; \
+ tuxpaint +
+
+ +
+ +
Usuarios de Windows
+
+

Tux Paint reconocerá la localización actual y usará los archivos apropiados por defecto. Por lo que esta sección interesará solamente a aquellos que estén intentando usar otro idioma.

+ +

Lo más sencillo es usar la opción '--lang' en el acceso directo (ver "INSTALACION.txt"). Sin embargo, utilizando una ventana de Símbolo MSDOS, es también posible enviar un comando como este:

+ +
+ set LANG=es_ES@euro +
+ +

...el que establecerá el idioma durante la duración de esa ventana DOS.

+ +

Para algo más permanente, intentar editar el archivo 'autoexec.bat' de la computadora usando la herramienta "sysedit" de Windows:

+ +
Windows 95/98
+
    +
  1. Hacer clic en el botón 'Inicio' y seleccionar 'Ejecutar...'.
  2. Escribir "sysedit" en el espacio 'Abrir:' (con o sin las comillas).
  3. Presionar 'Aceptar'.
  4. Localizar la ventana del AUTOEXEC.BAT en el Editor de Configuración del Sistema.
  5. Agregar lo siguiente al final del archivo: +
    + set LANG=es_ES@euro +
    + +
  6. Cerrar el Editor de Configuración del Sistema, respondiendo que sí a guardar los cambios.
  7. Reiniciar la máquina.
+ +
Para afectar a la máquina entera y a todas las aplicaciones, es posible usar el panel de control de "Configuración Regional":
+ +
    +
  1. Hacer clic en el botón 'Inicio' y seleccionar 'Configuración | Panel de Control'.
  2. Hacer doble clic en el globo de "Configuración Regional".
  3. Seleccionar un idioma/región de la lista desplegable.
  4. Hacer clic en 'Aceptar'.
  5. Reiniciar la máquina cuando se indique.
+ +
+
+ +

Fuentes Especiales

+
Algunos idiomas requieren que sean instalados tipos de letra especiales. Estos archivos de fuentes (que están en formato TrueType (TTF)), son demasiado grandes para ser incluidos en el paquete del TuxPaint y están disponibles por separado. (Ver la tabla de arriba, bajo la sección "Escogiendo un Idioma Distinto".)

Al ejecutar Tux Paint en un idioma que requiere su propia fuente, Tux Paint intentará cargar el archivo de la fuente desde el directorio de fuentes del sistema ("fonts", bajo el subdirectorio de dicha "localización"). El nombre del archivo corresponde a las dos primeras letras en el código de la 'localización' del idioma (p.ej: "ko" para Coreano, "jp" para Japonés).

Por ejemplo, bajo Linux o Unix, cuando Tux Paint es ejecutado en Coreano (p.ej: con la opción "--lang korean"), Tux Paint intentará cargar el siguiente archivo de fuentes:

/usr/share/tuxpaint/fonts/locale/ko.ttf + +

+ +

Las fuentes para los idiomas soportados se pueden bajar desde el sitio web del Tux Paint: + http://www.newbreedsoftware.com/tuxpaint/. (Buscar en la sección 'Fonts' en 'Download.')

Bajo Unix y Linux, es posible usar el Makefile que viene con la fuente para instalarla en la ubicación apropiada.

+

+ +
+
+ +
+ + +

Pantalla de Título

+
+

Mientras Tux Paint se está cargando, aparecerá una pantalla de título/créditos.

+ +
[Title Screenshot]
+ +

Una vez que la carga se ha completado, presionar una tecla o hacer clic con el ratón para continuar (o, luego de aproximadamente 30 segundos, la pantalla de título desaparecerá automáticamente.)

+
+ +
+ + +

Pantalla Principal

+
La pantalla principal está dividida en las siguientes secciones: +
+
Lado Izquierdo: Barra de Herramientas
+
+

La barra de herramientas contiene los controles de dibujo y edición.

+ +
[Tools: Paint, Stamp, Lines, Shapes, Text, Magic, Undo, Redo,
+      Eraser, New, Open, Save, Print, Quit]
+
+ +
Centro: Tela de Dibujo
+
+

La parte más grande de la pantalla, en el centro, es la tela de dibujo. ¡Acá es, obviamente, donde se dibuja!

+ +
[(Canvas)]
+
+ + +
Lado Derecho: Selector
+
+

Dependiendo de la herramienta activa, el selector muestra distintas cosas. p.ej: mientras la herramienta Pintar está activa, muestra los varios pinceles disponibles. Mientras la herramienta Sellos está activa, muestra las diferentes figuras que pueden ser usadas.

+ +
[Selectors - Brushes, Letters, Shapes, Stamps]
+
+ + +
Abajo: Colores
+
+

Una paleta con los colores disponibles se muestra cerca de la parte inferior de la pantalla.

+ +
[Colors - Black, White, Red, Pink, Orange, Yellow, Green, Cyan,
+      Blue, Purple, Brown, Grey]
+
+ + +
Más abajo: Área de Ayuda
+
+

En la parte más baja de la pantalla, Tux, el Pingüino de Linux, da consejos y otras informaciones al dibujar.

+ +
(For example: 'Pick a shape. Click to pick the center, drag, then
+      let go when it is the size you want.  Move around to rotate it, and
+      click to draw it.)
+
+
+
+ +
+ + +

Herramientas Disponibles

+
+

Herramientas de Dibujo

+
+
+
Pintar (Pinceles)
+
+ + +

La herramienta Pintar permite dibujar a mano alzada, usando distintos pinceles (elegidos en el Selector de la derecha) y colores (elegidos en la paleta de Colores en la parte de abajo).

+ +

Si se mantiene presionado el botón del ratón y se mueve, éste dibujará a medida que se mueve.

+ +

A medida que se dibuja, se escucha un sonido. Cuanto más grande sea el pincel, más grave será el tono.

+ +
+ +
+ +
+
+ + +
Sellos (de Goma)
+
+ + +

La herramienta Sellos recuerda a sellos de goma o calcomanías. Permite pegar imágenes pre-dibujadas o fotografías (como una foto de un caballo, un árbol o la Luna) sobre la tela.

+ +

A medida que se mueve el ratón, un contorno rectangular acompaña al ratón, indicando donde será ubicado el sello.

+ +

Distintos sellos pueden tener diferentes efectos de sonido.

+ +
+ +
+ +
+
+ + +
Líneas
+
+ + +

Esta herramienta permite dibujar líneas rectas usando los varios pinceles y colores que normalmente se utilizan con Pintar.

+ +

Hacer clic y mantener presionado para escoger el punto inicial de la línea. A medida que se mueve el ratón, una 'banda elástica' fina indicará donde será dibujada la línea.

+ +

Soltar el botón para completar la línea. Se escuchará un sonido tipo "¡sproing!".

+ +
+ +
+ +
+
+ + +
Figuras
+
+ + +

Esta herramienta permite dibujar figuras simples, tanto rellenas como huecas.

+ +

Seleccionar una figura del selector de la derecha (círculo, cuadrado, óvalo, etc.).

+ +

En la tela, hacer clic y arrastrar para estirar la figura desde su centro. Algunas figuras pueden cambiar su proporción p.ej: el rectángulo y el óvalo), otras no (p.ej: el cuadrado y el círculo).

+ +

Soltar el botón para terminar de estirar.

+ +
+
Modo Normal
+
+

Ahora es posible mover el ratón sobre la tela para rotar la figura.

+ +

Hacer clic otra vez para que la figura se dibuje usando el color actual.

+
+ +
Modo de Figuras Simples
+
Si el modo de figuras simples está activado (opción "--simpleshapes"), la figura se dibujará sobre la tela al soltar el botón del ratón. (Sin el paso para la rotación.)
+
+ +
+ +
+ +
+
+ + +
Texto
+
+ + +

Escoger un tipo de letra y un color. Hacer clic en la pantalla y un cursor aparecerá. Ingresar el texto que se mostrará en la pantalla.

+ +

Presionar [Enter] o [Intro] y el texto será dibujado sobre la imagen y el cursor se moverá una línea hacia abajo.

+ +

Hacer clic en otro lugar de la imagen y la línea de texto actual se moverá a ahí, donde se podrá continuar la edición.

+ +
+ +
+ +
+
+ + +
Mágicas (Efectos Especiales)
+
+ + +

Las herramientas mágicas son un conjunto de herramientas especiales. Seleccionar los efectos "mágicos" desde el selector de la derecha y luego hacer clic arrastrando el ratón por la imagen para aplicar el efecto.

+ +
+ +
+
Arcoiris
+
Esta herramienta es similar a Pintar, pero a medida que se mueve el ratón pasa por todos los colores del arcoiris.
+ +
Chispas
+
Esta herramienta dibuja chispas amarillas en la imagen.
+ +
Espejar
+
Al hacer clic con el ratón sobre la imagen usando el efecto mágico "Espejar", la imagen entera será invertida horizontalmente, transformándola en una imagen a espejo.
+ +
Invertir
+
Similar a "Espejar". Hacer clic y la imagen entera será invertida verticalmente.
+ +
Desenfocar
+
Esta herramienta deja la imagen borrosa por donde se pase el ratón.
+ +
Bloques
+
Esta herramienta deja la imagen cuadriculada ("pixelizada") donde se haya pasado el ratón.
+ +
Negativo
+
Esta herramienta invierte los colores en donde se pase el ratón. (p.ej: el blanco se vuelve negro y viceversa.)
+ +
Desvanecer
+
Esta herramienta desvanece los colores en donde se arrastre el ratón. (Hacerlo sobre el mismo punto varias veces lo tornará finalmente blanco.)
+ +
Tiza
+
Esta herramienta hace que partes de la imagen (donde se mueva el ratón) luzcan como dibujadas con tiza.
+ +
Gotear
+
Esta herramienta hace que la pintura "gotee" en donde se haya pasado el ratón.
+ +
Grueso
+
Esta herramienta hace que los colores más oscuros de la imagen se vuelvan más gruesos por donde se pase el ratón.
+ +
Fino
+
Similar a "Grueso", excepto que los colores más oscuros se vuelven más finos (los colores más claros se vuelven más gruesos).
+ +
Rellenar
+
Esta herramienta inunda la imagen con un color. Permite rellenar rapidamente partes de la imagen, como si se tratara de un libro de colorear.
+
+ +
+
+ + +
Goma de Borrar
+
+ + +

Esta herramienta es similar a Pintar. Donde se haga un clic (o clic y arrastrar), la imagen será borrada a blanco.

+ +

A medida que el ratón es movido, un gran cuadrado blanco sigue al puntero, indicando qué parte de la imagen será borrada.

+ +

A medida que se borra, un sonido "chillonamente limpio" de limpieza se escucha.

+ +
+
+
+
+ +
+ + +

Otros Controles

+
+
+
Deshacer
+
+ + +

Hacer clic en esta herramienta deshará la última acción de dibujo. ¡Hasta es posible deshacer más de una vez!

+ +

Nota: También es posible presionar [Control]-[Z] en el teclado para deshacer.

+ +
+ +
+
+ + +
Rehacer
+
+ + +

Hacer clic en esta herramienta rehará la acción de dibujo que acabó de ser "deshecha" con el botón 'Deshacer'.

+ +

Mientras no se vuelva a dibujar nada, ¡es posible rehacer tantos pasos como se hayan "deshecho"!.

+ +

Nota: También es posible presionar [Control]-[R] en el teclado para rehacer.

+ +
+ +
+
+ + +
Nuevo
+
+ + +

Hacer clic en el botón "Nuevo" comenzará un nuevo dibujo. Antes de hacerlo se pedirá una confirmación de la decisión.

+ +

Nota: También es posible presionar [Control]-[N] en el teclado para comenzar un nuevo dibujo.

+ +
+ +
+
+ + +
Abrir
+
+ + +

Esto muestra una lista de todas las imágenes que han sido guardadas. Si hubiera más de las que entran en la pantalla, usar las flechas "Arriba" y "Abajo" en las partes superior e inferior de la lista para desplazarse por la lista de imágenes.

+ +
+ +
+ +

Hacer clic en una imagen para seleccionarla, luego...

+ +
+
    +
  • Hacer clic en el botón verde "Abrir" en la parte inferior izquierda de la lista para abrir la imagen seleccionada. +

    (Alternativamente, es posible hacer doble clic en el ícono de una imagen para abrirla.)

    +
    +
  • Hacer clic en el botón marrón "Borrar" (la lata de basura) en la parte inferior derecha de la lista para borrar la imagen seleccionada. (Se pedirá una confirmación.) +


    +

    +
  • O hacer clic en el botón rojo "Atrás" (flecha) en la parte inferior derecha de la lista para cancelar y regresar a la imagen que se estaba dibujando previamente. +
    +
+
+ +

Si se elige abrir un imagen y la imagen actual no había sido guardada, se consultará si se desea gurdarla o no. (Ver "Guardar", más abajo.)

+ +

Nota: También es posible presionar [Control]-[O] en el teclado para obtener el diálogo 'Abrir'.

+ +
+ +
+
+ + +
Guardar
+
+ + +

Esto guarda tu imagen actual.

+ +

Si no había sido guardada previamente, creará una nueva entrada en la lista de imágenes guardadas. (y creará un nuevo archivo)

+ +

Nota: No se hará ninguna pregunta (p.ej: sobre un nombre de archivo). Simplemente guardará la imagen y se escuchará un efecto de sonido tipo "obturador de cámara".

+ +

Si YA se había guardado la imagen con anterioridad, o si era una imagen abierta usando el comando "Abrir", se preguntará antes si se desea sobreescribir la versión vieja o crear una nueva entrada (un nuevo archivo).

+ +
+ +

(NOTA: Si una de las opciones: "saveover" o "saveovernew" estuviera activa, no se consultará antes de guardar sobre otra imagen. Ver la sección "Opciones" de este documento, más arriba.)

+ +

Nota: También es posible presionar [Control]-[S] en el teclado para guardar una imagen.

+ +
+ +
+
+ + +
Imprimir
+
+ + +

¡Hacer clic sobre este botón para que la imagen se imprima!

+ +
+
Deshabilitando la Impresión
+
+

Si la opción "noprint" fue activada (tanto con "noprint=yes" en el archivo de configuración de Tux Paint, como usando "--noprint" en la línea de comandos), el botón "Imprimir" estará deshabilitado.

+ +

Ver la sección "Opciones" de este documento, más arriba.

+
+ + +
Restringiendo la Impresión
+
+

Si la opción "printdelay" fue activada (tanto con "printdelay=SEGUNDOS" en el archivo de configuración, como usando "--printdelay=SEGUNDOS" en la línea de comandos), sólo se podrá imprimir una vez cada SEGUNDOS segundos.

+ +

Pro ejemplo, con "printdelay=60", se podrá imprimir sólo una vez cada minuto.

+ +

Ver la sección "Opciones" de este documento, más arriba.

+
+ + +
Otras Opciones de Impresión
+
+

(Linux y Unix solamente)

+ +

El comando usado para imprimir es realmente una serie de comandos que convierten la imagen PNG a un archivo PostScript y lo envían a la impresora:

+ +
+ pngtopnm | pnmtops | lpr +
+ +

Este comando puede ser cambiado modificando el valor "printcommand" en el archivo de configuración de Tux Paint.

+

Ver la sección "Opciones" de este documento, más arriba.

+
+
+
+ +
+
+ + +
Salir
+
+ + +

Haciendo clic en el botón "Salir", cerrando la ventana del Tux Paint o presionando la tecla "Escape" se saldrá de Tux Paint.

+

(NOTA: El botón "Salir" puede ser deshabilitado (p.ej: con la opción de línea de comandos "--noquit"), pero la tecla [Escape] aún seguirá funcionando. Ver la sección "Opciones" de este documento, más arriba.)

+

Primero se pedirá confirmar la desición de salir.

+

Si se elige salir y y no se ha guardado la imagen actual, se consultará si se desea guardarla. Si no fuera una nueva imagen, entonces se consultará si se desea guardarla sobre la versión vieja o crear una nueva entrada. (Ver "Guardar" arriba.)

+ +

NOTA: ¡Si la imagen es guardada, será re abierta automáticamente la próxima vez que se use el Tux Paint!

+ +
+
+
+
+
+
+ +
+ + +

Abriendo Otras Imágenes en Tux Paint

+
+

Como el diálogo 'Abrir' del Tux Paint sólo muestra las imágenes creadas en el propio Tux Paint, ¿que hay que hacer si se quisieran cargar otras imágenes o fotografías en Tux Paint para editarlas?

+ +

Para hacer esto, simplemente se necesitaría convertir la imagen al formato PNG (Portable Network Graphic) y ubicarla en el directorio donde Tux Paint guarda sus imágenes. ("~/.tuxpaint/saved/" bajo Linux y Unix, "userdata\saved\" bajo Windows.)

+ + +

Usando 'tuxpaint-import'

+
+

Los usuarios de Linux y Unix pueden utilizar el guión de shell "tuxpaint-import", que se instala al instalar Tux Paint. Éste utiliza algunas de las herramientas NetPBM para convertir la imagen ("anytopnm"), reescalarla de forma que quepa en la tela del Tux Paint ("pnmscale") y convertirla a PNG ("pnmtopng").

+ +

También utiliza "date" para obtener la hora y fecha actuales, que es la convención que Tux Paint utiliza para nombrar los archivos guardados. (Recuerda que nunca se pide un 'nombre de archivo' al querer Guardar o Abrir imágenes!)

+ +

Para usar 'tuxpaint-import', simplemente ejecutar el comando desde la línea de comandos y proveerle de el(los) nombre(s) de el(los) archivos(s) que se desean convertir.

+ +

Serán convertidos y ubicados en el directorio de imágenes guardadas del Tux Paint. (Nota: Si estás realizando esto para otro usuario - p.ej: tu hijo, necesitarás asegurarte de ejecutar el comando usando su cuenta.)

+ +

Por ejemplo:

+ +
+ $ tuxpaint-import abuela.jpg
abuela.jpg -> /home/username/.tuxpaint/saved/20020921123456.png
+ jpegtopnm: WRITING A PPM FILE +
+ +

La primera línea ("tuxpaint-import abuela.jpg") es el comando a ejecutar. Las siguientes dos líneas es salida del programa mientras está trabajando.

+ +

Ahora ya es posible cargar Tux Paint y una versión de la imagen original estará disponible en el diálogo 'Abrir'. ¡Simplemente hay que hacer doble clic sobre su ícono!

+
+ + +

Haciéndolo Manualmente

+
+

Los usuarios de Windows por el momento deberán realizar la conversión manualmente.

+ +

Cargar un programa gráfico que sea capaz tanto de cargar la imagen como de guardar archivos en formato PNG. (Ver "PNG.txt" para una lista de programas sugeridos.)

+ +

Reducir el tamaño de la imagen a no más de 448 pixels de ancho por no más de 376 pixels de alto. (el tamaño máximo es de 448 x 376 pixels)

+ +

Guardar la imagen en formato PNG. Es altamente recomendado nombrar el archivo usando la fecha y hora actuales, porque esa es la convención utilizada por Tux Paint:

+ +
+ AAAAMMDDhhmmss.png +
+ +
    +
  • AAAA = Año
  • MM = Mes (01-12)
  • DD = Día (01-31)
  • HH = Hora, en formato de 24 horas (00-23)
  • mm = Minuto (00-59)
  • ss = Segundo (00-59)
+ +

p.ej:

+ +
+ 20020921130500 - para el 21 de Setiembre de 2002, a la 1:05:00 PM
+ +

Ubicar este archivo PNG en el directorio de archivos 'guardados' del Tux Paint. (Ver más arriba.)

+ +

Bajo Windows, esto es en la carpeta "userdata".

+
+
+ +
+ + +

Extendiendo al Tux Paint

+
+

Si se quieren agregar o cambiar cosas tales como los Pinceles y Sellos usados por el Tux Paint, es posible hacerlo de forma sencilla incluyendo o removiendo archivos del disco duro.

+ +

Nota: Se necesitará reiniciar el Tux Paint para que los cambios surtan efecto.

+ +

Dónde van los archivos

+
+

Archivos Estándar

+
+

Tux Paint busca sus varios archivos de datos en su directorio 'data'.

+ +

Linux y Unix

+
+

Dónde va este directorio depende del valor fijado para "DATA_PREFIX" al compilar Tux Paint. Ver INSTALACION.txt para más detalles.

+ +

Por defecto, este directorio es:

+ +
+ /usr/local/share/tuxpaint/ +
+ +

Si ha sido instalado desde un paquete, es más probable:

+ +
+ /usr/share/tuxpaint/ +
+ +
+ + +

Windows

+
+

Tux Paint busca una carpeta llamada 'data' en la misma carpeta en que se encuentra el ejecutable. Esta es la carpeta que utilizó el instalador al instalar Tux Paint, p.ej:

+ +
+ "C:\Archivos de Programa\TuxPaint\data"
+ +
+
+ +
+ + +

Archivos Presonales

+
+

También es posible ubicar pinceles, sellos y tipos de letra en los directorios personales y que el Tux Paint los utilice.

+ +

Linux y Unix

+
+

El directorio personal para cada usuario de Tux Paint es "~/.tuxpaint/".

+

Esto es, si el directorio personal fuera "/home/carlos", entonces el directorio del Tux Paint sería "/home/carlos/.tuxpaint/".

+

¡No olvidar el punto (".") antes de la palabra 'tuxpaint'!

+
+ + +

Windows

+
+

El directorio personal del Tux Paint se llama "userdata" y reside en la misma carpeta que el ejecutable, p.ej:

+ +
+ "C:\Archivos de Programa\TuxPaint\userdata"
+ +
+

Para agregar pinceles, sellos y fuentes crear subcarpetas bajo el directorio personal del Tux Paint llamadas "brushes", "stamps" y "fonts", respectivamente.

+

(Por ejemplo, si se hubiera creado un pincel llamado "flor.png", debería ser puesto en "~/.tuxpaint/brushes/" bajor Linux o Unix.)

+
+
+ +
+ + +

Pinceles

+
+

Los pinceles utilizados para dibujar con las herramientas Pintar y Líneas del Tux Paint son simplemente imágenes PNG en escala de grises.

+ + El alfa (transparencia) de la imagen PNG es utilizada para determinar la forma del pincel, ¡lo que significa que la forma puede contener 'anti-alias' y hasta ser parcialmente transparente! +

Las imágenes para los pinceles deberían tener un máximo de 40 pixeles de ancho y 40 de alto. (el tamaño máximo es 40 x 40.)

+

Deberán simplemente ser ubicadas en el directorio "brushes".

+ +

Nota: Si los nuevos pinceles aparecen todos como cuadrados sólidos, ¡es porque no se ha usado transparencia alfa! Ver el documento "PNG.txt" para más información y consejos.

+ +
+
+ +
+ + +

Sellos

+
+

Todos los archivos de sellos van en el directorio "stamps". Es útil crear subdirectorios y sub-subdirectorios allí para organizar los sellos. (Por ejemplo: es posible tener una carpeta "celebraciones" con subcarpetas "noche de brujas" y "navidad".)

+ +

Imágenes

+
+

Los Sellos del Tux Paint pueden contener una serie de archivos separados. El archivo que es requerido es, por supuesto, la imagen en sí misma.

+ + + +

Los Sellos usados por el Tux Paint son imágenes PNG. Pueden ser en colores o en escala de grises. El alfa (transparencia) de la PNG es usado para determinar la forma de la imagen (de otro modo se estamparía un gran rectángulo en el dibujo).

+ +

Las PNGs pueden ser de cualquier tamaño, pero en la práctica, una de 100 pixeles de ancho por 100 pixeles de alto (100x100) es bien grande para el Tux Paint.

+

Nota: Si los nuevos pinceles aparecen todos como cuadrados sólidos, ¡es porque no se ha usado transparencia alfa! Ver el documento "PNG.txt" para más información y consejos.

+
+
+ +
+ +

Texto Descriptivo

+
+

Archivos de texto (".TXT") con el mismo nombre de la PNG. (p.ej: la descripción de "imagen.png" se almacena en "imagen.txt" en el mismo directorio.)

+ +

Soporte de Idiomas

+
+

Las líneas que comienzan con "xx=" (donde "xx" es uno de los idiomas soportados; p.ej: "de" para Alemán, "fr" para Francés, etc.) serán usadas bajo las correspondientes localizaciones soportadas.

+

Si no existe una traducción para la localización del usuario, el texto por defecto (en la primera línea, que debería estar en Inglés) será usado.

+
+ +

Usuarios de Windows

+
+

Usar el Bloc de Notas o WordPad para editar/crear estos archivos. Asegurarse de guardarlos como Documento de Texto y que tengan la extensión ".txt" al final del nombre de archivo...

+
+
+ +
+ +

Efectos de Sonido

+
+

Archivos WAVE (".WAV") con el mismo nombre que la PNG. (p.ej.: el efecto de sonido de "imagen.png" será el sonido "imagen.wav" en el mismo directorio.)

+ +

Soporte de Idiomas

+
+

Para tener sonidos para las diferentes localizaciones (p.ej.: si el sonido fuera alguien diciendo una palabra y se quisiera tener versiones traducidas de esa palabra), se deben crear archivos WAV con la etiqueta de la localización en el nombre del archivo, en la siguiente forma: "SELLO_LOCALIZACIÓN.wav"

+ +

El efecto de sonido de "imagen.png", cuando Tux Paint se ejecuta en Español, sería "imagen_es.wav". En Francés: "imagen_fr.wav". Y así sucesivamente...

+ +

Si no puede ser abierto un efecto de sonido localizado, Tux Paint intentará abrir el archivo de sonido 'por defecto'. (p.ej: "imagen.wav")

+
+
+ +
+ +

Opciones de los Sellos

+
+

Aparte de darles una forma gráfica, un texto descriptivo y un efecto de sonido, también es posible dar a los sellos otros atributos. Para hacer esto, se necesitará crear una 'archivo de datos' del sello.

+ +

Un archivo de datos del sello es simplemente un archivo de texto que contiene las opciones.

+ +

El archivo tendrá el mismo nombre que la imagen PNG, pero con una extensión ".dat". (p.ej.: el archivo de datos de "imagen.png", es el archivo de texto "imagen.dat" en el mismo directorio.)

+ +

Sellos Coloreados

+
+

Los sellos pueden hacerse tanto "coloreables" como "teñibles".

+ +
Coloreables
+
+

Los sellos "coloreables" funcionan de forma similar a pinceles - se escoge el sello para obtener la forma y luego se escoge el color que se desea que tenga. (Los sellos de símbolos, como los matemáticos y musicales, son un ejemplo.)

+

Nada de la imagen original es utilizado, excepto la transparencia (el "canal alfa"). El color del sello es sólido.

+
+ +

Agregar el término "colorable" al archivo de datos del sello.

+
+ +
Teñibles
+
+

Los sellos "teñibles" son similares a los "coloreables", excepto que los detalles de la imagen original se preservan. (Para decirlo más tecnicamente, se utiliza la imagen original, pero su tono es cambiado, basado en el color actualmente seleccionado.)

+ +
+ +

Agregar el término "tintable" al archivo de datos del sello.

+
+
+ +

Usuarios de Windows

+
+

Usar el Bloc de Notas o WordPad para editar/crear estos archivos. Asegurarse de guardarlos como Documento de Texto y que tengan la extensión ".dat" al final, en vez de ".txt"...

+
+
+
+ +
+ + +

Tipos de Letra

+
+ + +

Las fuentes utilizadas por el Tux Paint son Fuentes TrueType (TTF).

+ +

Simplemente hay que ubicarlas en el directorio "fonts". Tux Paint cargará la fuente y proveerá cuatro tamaños distintos en el 'Selector de Fuentes' al usar la herramienta 'Texto'.

+ +
+
+
+ +
+ + +

Más Información

+
+

Por más información, ver los otros documentos que vienen con Tux Paint.

+ +

Si necesitas ayuda, siéntete libre de contactarte con New Breed Software (en inglés):

+ +
+ http://www.newbreedsoftware.com/ +
+ +

Puede que también desees participar en las varias listas de correo de Tux Paint:

+ +
+ http://www.newbreedsoftware.com/tuxpaint/lists/ +
+ +
+ + + diff --git a/docs/fi/AUTHORS.txt b/docs/fi/AUTHORS.txt new file mode 100644 index 000000000..6d921014f --- /dev/null +++ b/docs/fi/AUTHORS.txt @@ -0,0 +1 @@ +Please see "docs/AUTHORS.txt" diff --git a/docs/fi/COPYING.txt b/docs/fi/COPYING.txt new file mode 100644 index 000000000..96bdf3847 --- /dev/null +++ b/docs/fi/COPYING.txt @@ -0,0 +1,406 @@ + + [logo_menu.jpg] + + [Company] + News + Profile + Services + People + Contact + [Resources] + Licensing + Research + Links + GNU yleinen lisenssi (GPL lisenssi) + + This is an unofficial translation of the GNU General Public License + into Finnish. It was not published by the Free Software Foundation, + and does not legally state the distribution terms for software that + uses the GNU GPL--only the original English text of the GNU GPL does + that. However, we hope that this translation will help Finnish + speakers understand the GNU GPL better. + + Tm on GPL lisenssin epvirallinen knns suomeksi. Tt knnst + ei ole julkaissut Free Software Foundation eik se mrit + oikeudellisesti sitovasti GPL lisenssi kyttvien ohjelmien + levitysehtoja -- vain alkuperinen englanninkielinen GPL lisenssin + teksti on oikeudellisesti sitova. Toivomme kuitenkin, ett tm + knns auttaa suomenkielisi ymmrtmn GPL lisenssi paremmin. + + Versio 2, keskuu 1991 + + Tekijnoikeus 1989, 1991, Free Software Foundation, Inc. + 59 Temple Place Suite 330, Boston, MA 02111-1307, USA + + Knnksen versio 1.0, heinkuu 2001 + + Knns ja sovittaminen Suomen oikeusjrjestelmn: + Mikko Vlimki, Berkeley, CA + + Knnksen uusin versio ja listietoja on saatavilla osoitteesta: + http://www.turre.com/ + email: gpl@turre.com + + Alkuperinen englanninkielinen versio on osoitteessa: + http://www.gnu.org/ + + Tmn lisenssisopimuksen kirjaimellinen kopioiminen ja levittminen on + sallittu, mutta muuttaminen on kielletty. + + Johdanto + + Yleens tietokoneohjelmien lisenssisopimukset on suunniteltu siten, + ett ne estvt ohjelmien vapaan jakamisen ja muuttamisen. Sen sijaan + GPL lisenssi on suunniteltu takaamaan kyttjn vapaus jakaa ja + muuttaa ohjelmaa lisenssi varmistaa, ett ohjelma on vapaa kaikille + kyttjille. GPL lisenssi soveltuu posaan Free Software Foundationin + ohjelmia ja mihin tahansa muuhun ohjelmaan, jonka tekijt ja + oikeudenomistajat sitoutuvat sen kyttn. (Joihinkin Free Software + Foundationin ohjelmiin sovelletaan GPL lisenssin sijasta LGPL + lisenssi [GNU kirjastolisenssi]). Kuka tahansa voi kytt GPL + lisenssi. + + Kun tss Lisenssiss puhutaan vapaasta ohjelmasta, silloin ei + tarkoiteta hintaa. GPL lisenssi on nimittin suunniteltu siten, ett + kyttjlle taataan vapaus levitt kopioita vapaista ohjelmista (ja + pyyt halutessaan maksu tst palvelusta). GPL lisenssi takaa mys + sen, ett kyttj saa halutessaan ohjelman lhdekoodin, ett hn voi + muuttaa ohjelmaa tai kytt osia siit omissa vapaissa ohjelmissaan, + ja ett kaikkien niden toimien tiedetn olevan sallittuja. + + Jotta kyttjn oikeudet turvattaisiin, lisenssill asetetaan + rajoituksia, jotka estvt ket tahansa kieltmst nit oikeuksia + tai vaatimasta niiden luovuttamista. Nm rajoitukset merkitsevt + tiettyj velvoitteita jokaiselle kyttjlle, joka levitt + ohjelmakopioita tai muuttaa ohjelmaa. + + Jokaisen joka esimerkiksi levitt kopioita GPL lisenssin alaisesta + ohjelmasta, ilmaiseksi tai maksusta, on annettava kyttjille kaikki + oikeudet, jotka hnellkin on. Jokaisella kyttjll on oltava + varmasti mahdollisuus saada ohjelman lhdekoodi. Ohjelman kyttjille + on myskin esitettv tmn lisenssisopimuksen ehdot, jotta he + tietvt oikeutensa. + + Jokaisen oikeudet turvataan kahdella toimenpiteell: (1) ohjelma + suojataan tekijnoikeudella, ja (2) kyttjille tarjotaan tm + lisenssi, joka antaa laillisen luvan kopioida, levitt ja muuttaa + ohjelmaa. + + Edelleen, jokaisen tekijn ja Free Software Foundationin suojaamiseksi + on varmistettava, ett jokainen ymmrt, ett vapaalla ohjelmalla ei + ole takuuta. Jos joku muuttaa ohjelmaa ja levitt sen edelleen, + ohjelman vastaanottajien on tiedettv, ett heill ei ole + alkuperist ohjelmaa. Joten mik tahansa ongelma, jonka muut ovat + aikaansaaneet, ei vaikuta alkuperisen tekijn maineeseen. + + Ohjelmistopatentit uhkaavat jokaista vapaata ohjelmaa. On olemassa + vaara, ett vapaiden ohjelmien levittjt patentoivat ohjelmia sill + seurauksella, ett heill on ohjelmiin omistusoikeus. Tmn + vlttmiseksi jokainen patentti on joko lisensoitava ilmaiseksi + kaikille kyttjille tai jtettv kokonaan lisensoimatta. + + Seuraa tarkat ehdot vapaiden ohjelmien kopioimiselle, levittmiselle + ja muuttamiselle. + + Ehdot kopioimiselle, levittmiselle ja muuttamiselle + + 0.Tt Lisenssi sovelletaan kaikkiin ohjelmiin tai muihin teoksiin, + jotka sisltvt tekijnoikeuden haltijan ilmoituksen, ett teoksen + levittminen tapahtuu GPL lisenssin ehtojen mukaan. Ohjelma viittaa + kaikkiin tllisiin tietokoneohjelmiin ja muihin teoksiin. Ohjelmaan + perustuva teos tarkoittaa joko Ohjelmaa tai mit tahansa + tekijnoikeuslain mukaista jlkiperist teosta: toisin sanoen teosta, + joka sislt Ohjelman tai osan siit, kirjaimellisesti tai + muutettuna, tai toiselle kielelle knnettyn. (Tst eteenpin + knns sisltyy ksitteeseen muutos). "Lisenssin saaja" on se, jolle + ohjelma lisensoidaan. + + Tm lisenssi ei kata muita toimenpiteit kuin kopioimisen, + levittmisen ja muuttamisen. Ohjelman ajaminen ei ole kielletty. + Ohjelman tuloste on tmn Lisenssin alainen vain silloin, kun se + muodostaa Ohjelmaan perustuvan teoksen (riippumatta siit ajetaanko + Ohjelmaa vai ei). Milloin tuloste on Lisenssin alainen riippuu siit, + mit Ohjelma tekee. + + 1. Lisenssin saajalla on oikeus kopioida ja levitt sanatarkkoja + kopioita Ohjelman lhdekoodista sellaisena kuin se on saatu, mill + tahansa laitteella. Ehtona on, ett asianmukaisesti jokaisesta + kopiosta ilmenee kenell on siihen tekijnoikeus ja ett Ohjelmaan ei + ole takuuta; edelleen, kaikki viitaukset thn Lisenssiin ja + ilmoitukseen takuun puuttumisesta on pidettv koskemattomana; ja + viel, jokaiselle Ohjelman vastaanottajalle on annettava tm Lisenssi + ohjelman mukana. + + Lisenssin saaja voi pyyt maksun Ohjelman kopioimisesta ja voi + halutessaan myyd Ohjelmaan takuun. + + 2. Ohjelmakopion tai kopioiden tai mink tahansa osan muuttaminen on + sallittu. Kun ohjelmaa muutetaan, muodostuu Ohjelmaan perustuva teos. + Lisenssin saajalla on lupa kopioida ja levitt nit muutoksia ja + Ohjelmaan perustuvaa teosta ehdolla, ett ensinnkin Kohdan 1 + edellytykset tytetn ja lisksi viel seuraavat: + + a) Muuteltujen tiedostojen on sisllettv selke merkint, josta + ilmenee, kuka tiedostoja on muuttanut ja pivys, jolloin muutokset on + tehty. + + b) Jokainen teos, jonka Lisenssin saaja julkaisee tai levitt + edelleen, ja joka kokonaan tai osittain perustuu tai sislt osia + Ohjelmasta, on lisensoitava kokonaisuudessaan ilman maksua kaikille + kolmansille osapuolille tmn Lisenssin ehtojen mukaisesti. + + c) Jos muuteltu ohjelma lukee ajettaessa interaktiivisesti komentoja, + Lisenssin saajan on ohjelman kynnistyess normaaliin interaktiiviseen + kyttn saatettava nytlle tai tulostettavaksi ilmoitus, josta + selvi asianmukaisesti ohjelman tekijnoikeus ja ilmoitus, ettei + Ohjelmalla ole takuuta (tai vaihtoehtoisesti, ett Lisenssin saaja + mynt Ohjelmalle takuun) ja ett kyttjt voivat levitt ohjelmaa + edelleen niden ehtojen mukaisesti sek annettava kyttjille ohjeet, + miten he voivat nhd kopion tst Lisenssist. (Poikkeus: jos Ohjelma + itsessn on interaktiivinen muttei normaalisti tulosta tllist + ilmoitusta, myskn Lisenssin saajan tekemn Ohjelmaan perustuvan + teoksen ei tarvitse tulostaa ilmoitusta) + + Nm ehdot koskevat muuteltua teosta kokonaisuudessaan. Jos + yksilitvt osat tst teoksesta eivt ole johdettuja Ohjelmasta ja + ne voidaan perustellusti katsoa itsenisiksi ja erillisiksi teoksiksi, + silloin tm Lisenssi ja sen ehdot eivt koske nit osia, kun niit + levitetn erillisin teoksina. Mutta jos samoja osia levitetn osana + kokonaisuutta, joka on Ohjelmaan perustuva teos, tmn kokonaisuuden + levittminen on tapahduttava tmn Lisenssin ehtojen mukaan, jolloin + tmn lisenssin ehdot laajenevat kokonaisuuteen ja tten sen jokaiseen + osaan riippumatta siit, kuka ne on tehnyt ja mill lisenssiehdoilla. + + Eli tmn Kohdan tarkoitus ei ole saada oikeuksia tai ottaa pois + Lisenssin saajan oikeuksia teokseen, jonka hn on kokonaan + kirjoittanut; pikemminkin tarkoitus on kytt oikeutta kontrolloida + Ohjelmaan perustuvien jlkiperisteosten tai kollektiivisten teosten + levittmist. + + Lisksi pelkk toisen teoksen, joka ei perustu Ohjelmaan, liittminen + Ohjelman (tai Ohjelmaan perustuvan teoksen) kanssa samalle tallennus- + tai jakeluvlineelle ei merkitse sit, ett toinen teos tulisi tmn + Lisenssin sitomaksi. + + 3. Lisenssin saajalla on oikeus kopioida ja levitt Ohjelmaa (tai + siihen perustuvaa teosta, Kohdan 2 mukaisesti) objektikoodina tai + ajettavassa muodossa yll esitettyjen Kohtien 1 ja 2 mukaisesti + edellytten lisksi, ett yksi seuraavista ehdoista on tytetty: + + a) Ohjelman mukaan liitetn tydellinen koneella luettava lhdekoodi, + joka on levitettv yll mainittujen Kohtien 1 ja 2 ehtojen mukaisesti + vlineell, jota kytetn yleisesti ohjelmistojen jakeluun; tai + + b) Ohjelman mukaan liitetn vhintn kolme vuotta voimassa oleva + kirjallinen tarjous luovuttaa kelle tahansa kolmannelle osapuolle, + enintn lhdekoodin fyysisen levittmisen hinnalla, tydellinen + koneella luettava lhdekoodi, joka on levitettv yll mainittujen + Kohtien 1 ja 2 ehtojen mukaisesti vlineell, jota kytetn yleisesti + ohjelmistojen jakeluun; tai + + c) Ohjelman mukaan liitetn Lisenssin saajan tieto tarjouksesta, joka + koskee lhdekoodin levittmist. (Tm vaihtoehto on sallittu vain + ei-kaupalliseen levittmiseen ja sill ehdolla, ett ohjelma on saatu + objektikoodina tai ajettavassa muodossa yll mainitun alakohdan b + mukaisesti) + + Teoksen lhdekoodi tarkoittaa sen suositeltavaa muotoa muutosten + tekemist varten. Ajettavan teoksen tydellinen lhdekoodi tarkoittaa + kaikkea lhdekoodia kaikkiin teoksen sisltmiin moduleihin ja lisksi + kaikkiin sen mukana seuraaviin kyttliittymtiedostoihin sek + skripteihin, joilla hallitaan ajettavan teoksen asennusta ja + kntmist. Kuitenkin erityisen poikkeuksena levitetyn lhdekoodin + ei tarvitse sislt mitn sellaista, mik yleens levitetn (joko + lhdekoodi- tai binrimuodossa) kyttjrjestelmn pkomponenttien + (kntj, kernel, jne.) mukana, joiden pll teosta ajetaan, ellei + tllinen komponentti tule ajettavan teoksen mukana. + + Jos ajettavan tai objektikoodin levittminen tehdn tarjoamalla psy + tietyss paikassa olevaan kopioon, tllin tarjoamalla vastaavasti + psy samassa paikassa olevaan lhdekoodiin luetaan lhdekoodin + levittmiseksi, vaikka kolmansia osapuolia ei pakotettaisi kopioimaan + lhdekoodia objektikoodin mukana. + + 4. Ohjelman kopioiminen, muuttaminen, lisensointi edelleen tai + Ohjelman levittminen muuten kuin tmn Lisenssin ehtojen mukaisesti + on kielletty. Kaikki yritykset muulla tavoin kopioida, muuttaa, + lisensoida edelleen tai levitt Ohjelmaa ovat ptemttmi ja + johtavat automaattisesti tmn Lisenssin mukaisten oikeuksien + pttymiseen. Sen sijaan ne, jotka ovat saaneet kopioita tai oikeuksia + Lisenssin saajalta tmn Lisenssin ehtojen mukaisesti, eivt menet + saamiaan lisensoituja oikeuksia niin kauan kuin he noudattavat nit + ehtoja. + + 5. Lisenssin saajalta ei vaadita tmn Lisenssin hyvksymist, koska + siit puuttuu allekirjoitus. Kuitenkaan mikn muu ei salli Lisenssin + saajaa muuttaa tai levitt Ohjelmaa tai sen jlkiperisteosta. Nm + toimenpiteet ovat lailla kiellettyj siin tapauksessa, ett Lisenssin + saaja ei hyvksy tt Lisenssi. Niinp muuttamalla tai levittmll + Ohjelmaa (tai Ohjelmaan perustuvaa teosta) Lisenssin saaja ilmaisee + hyvksyvns tmn Lisenssin ja kaikki sen ehdot sek edellytykset + Ohjelman ja siihen perustuvien teosten kopioimiselle, levittmiselle + ja muuttamiselle. + + 6. Aina kun Ohjelmaa (tai Ohjelmaan perustuvaa teosta) levitetn, + vastaanottaja saa automaattisesti alkuperiselt tekijlt lisenssin + kopioida, levitt ja muuttaa Ohjelmaa niden ehtojen ja edellytysten + sitomina. Vastaanottajalle ei saa asettaa mitn lisrajoitteita tss + annettujen oikeuksien kytst. Lisenssin saajalla ei ole vastuuta + valvoa noudattavatko kolmannet osapuolet tt Lisenssi. + + 7. Jos oikeuden pts tai vite patentin loukkauksesta tai jokin muu + syy (rajoittumatta patenttikysymyksiin) asettaa Lisenssin saajalle + ehtoja (olipa niiden alkuper sitten tuomio, sopimus tai jokin muu), + jotka ovat vastoin nit lisenssiehtoja, ne eivt anna oikeutta + poiketa tst Lisenssist. Jos levittminen ei ole mahdollista siten, + ett samanaikaisesti toimitaan sek tmn Lisenssin ett joidenkin + muiden rajoittavien velvoitteiden mukaisesti, tllin Ohjelmaa ei saa + lainkaan levitt. Jos esimerkiksi jokin patenttilisenssi ei salli + kaikille niille, jotka saavat Ohjelman Lisenssin saajalta joko suoraan + tai epsuorasti, Ohjelman levittmist edelleen ilman rojaltimaksuja, + tllin ainut tapa tytt sek patenttilisenssin ett tmn Lisenssin + ehdot on olla levittmtt Ohjelmaa lainkaan. + + Jos jokin osa tst kohdasta katsotaan ptemttmksi tai + mahdottomaksi vahvistaa oikeudessa joissakin tietyiss olosuhteissa, + silloin tt kohtaa on tarkoitus soveltaa ptevin osin ja muissa + olosuhteissa kokonaisuudessaan. + + Tmn kohdan tarkoitus ei ole johtaa siihen, ett Lisenssin saaja + rikkoisi mitn patenttia tai muuta varallisuussoikeutta tai vitt + mitn niden oikeuksien ptevyydest; tmn kohdan ainoana + tarkoituksena on suojata vapaiden ohjelmien levitysjrjestelmn + yhtenisyys, joka on luotu kyttmll yleisi lisenssej. Monet ovat + antaneet arvokkaan panoksensa mit erilaisimpiin ohjelmiin, joita + levitetn tss jrjestelmss luottaen sen soveltamisen pysyvyyteen; + on jokaisen tekijn ja lahjoittajan ptsvallassa haluaako hn + levitt ohjelmaa jossakin muussa jrjestelmss ja Lisenssin saaja ei + voi vaikuttaa thn valintaan. + + Tmn kohdan tarkoituksena on tehd tysin selvksi se, mik on tmn + Lisenssin muiden osien seuraus. + + 8. Jos patentit tai tekijnoikeudella suojatut kyttliittymt + rajoittavat Ohjelman levittmist tai kytt joissakin valtioissa, + Ohjelman alkuperinen tekij, joka lisensoi ohjelmaansa tll + Lisenssill, voi asettaa nimenomaisia maantieteellisi + levitysrajoituksia, jolloin levittminen on sallittu joko mukaan- tai + poislukien nm valtiot. Tllisess tapauksessa nm rajoitukset + otetaan huomioon kuin ne olisi kirjoitettu tmn Lisenssin sekaan. + + 9. Free Software Foundation voi julkaista korjattuja tai uusia + versioita GPL lisenssist aika ajoin. Niden uusien versioiden henki + on yhtenev nykyisen version kanssa, mutta ne saattavat erota + yksityiskohdissa ottaen huomioon uusia ongelmia ja huolenaiheita. + + Jokaiselle versiolle annetaan ne muista erottava versionumero. Jos + Ohjelma kytt tmn Lisenssin tietty versiota tai mit tahansa + myhemp versiota, Lisenssin saaja saa valita, kyttk sit tai + jotakin Free Software Foundationin julkaisemaa myhemp versiota + Lisenssist. Jos Ohjelma ei mainitse mit versiota tst Lisenssist + se kytt, on sallittua valita mik tahansa versio, jonka Free + Software Foundation on koskaan julkaissut. + + 10. Jos Lisenssin saaja haluaa ottaa osia Ohjelmasta mukaan muihin + vapaisiin ohjelmiin, joiden levitysehdot ovat erilaiset, hnen tulee + kirjoittaa tekijlle ja kysy lupaa. Jos ohjelman tekijnoikeuden + omistaa Free Software Foundation, on kirjoitettava heille; he tekevt + joskus poikkeuksia. Free Software Foundationin ptsten ohjenuorana + on kaksi pmr; silytt kaikista heidn vapaista ohjelmista + johdettujen ohjelmien vapaa asema ja yleisesti kannustaa ohjelmien + jakamiseen ja uudelleen kyttn. + + Ei takuuta + + 11. Koska tm Ohjelma on lisensoitu ilmaiseksi, tlle Ohjelmalle ei + mynnet takuuta lain sallimissa rajoissa. Ellei tekijnoikeuden + haltija kirjallisesti muuta osoita, Ohjelma on tarjolla selaisena kuin + se on ilman minknlaista takuuta, ilmaistua tai hiljaista, sislten, + muttei tyhjentvsti, hiljaisen takuun kaupallisesti hyvksyttvst + laadusta ja soveltuvuudesta tiettyyn tarkoitukseen. Lisenssin saajalla + on kaikki riski Ohjelman laadusta ja suorituskyvyst. Jos ohjelma + osoittautuu virheelliseksi, Lisenssin saajan vastuulla ovat kaikki + huolto- ja korjauskustannukset. + + 12. Ellei laista tai kirjallisesta hyvksynnst muuta johdu, + tekijnoikeuden haltija ja kuka tahansa kolmas osapuoli, joka voi + muuttaa tai levitt ohjelmaa kuten edell on sallittu, eivt ole + missn tilanteessa vastuussa Lisenssin saajalle yleisist, + erityisist, satunnaisista tai seurauksellisista vahingoista + (sislten, muttei tyhjentvsti, tiedon katoamisen, tiedon + vristymisen, Lisenssin saajan tai kolmansien osapuolten menetykset + ja ohjelman puutteen toimia mink tahansa toisen ohjelman kanssa), + jotka aiheutuvat ohjelman kytst tai siit, ett ohjelmaa ei voi + kytt, siinkin tapauksessa, ett tekijnoikeuden haltija tai kolmas + osapuoli olisi maininnut kyseisten vahinkojen mahdollisuudesta. + + Ehtojen loppu + + Miten nit ehtoja voi soveltaa uusiin ohjelmiin? + + Jos uuden ohjelman kehittj haluaa, ett yleis saa siit suurimman + mahdollisen hydyn, silloin paras keino psta thn pmrn on + tehd ohjelmasta vapaa, jolloin kuka tahansa voi niden ehtojen + mukaisesti muuttaa ja levitt sit edelleen. + + Tmn mahdollistamiseksi ohjelmaan tulee list seuraavat ilmoitukset. + On turvallisinta liitt ne jokaisen lhdekooditiedoston alkuun, jotta + takuun puuttuminen ky tehokkaimmin selville; lisksi jokaisessa + tiedostossa tulisi olla vhintnkin tekijnoikeus rivi sek viite, + mist tydellinen tekijnoikeusilmoitus on saatavilla. + + Yksi rivi, josta ilmenee ohjelman nimi ja mit se tekee. + Tekijnoikeus (C) yyyy tekijn nimi + + Tm ohjelma on vapaa; tt ohjelmaa on sallittu levitt edelleen ja + muuttaa GNU yleisen lisenssin (GPL lisenssin) ehtojen mukaan + sellaisina kuin Free Software Foundation on ne julkaissut; joko + Lisenssin version 2, tai (valinnan mukaan) mink tahansa myhemmn + version mukaisesti. + + Tt ohjelmaa levitetn siin toivossa, ett se olisi hydyllinen, + mutta ilman mitn takuuta; ilman edes hiljaista takuuta kaupallisesti + hyvksyttvst laadusta tai soveltuvuudesta tiettyyn tarkoitukseen. + Katso GPL lisenssist lis yksityiskohtia. + + Tmn ohjelman mukana pitisi tulla kopio GPL lisenssist; jos nin ei + ole, kirjoita osoitteeseen Free Software Foundation Inc., 59 Temple + Place Suite 330, Boston, MA 02111-1307, USA. + + Lopuksi lisys, miten tekijn saa yhteyden shk- ja paperipostilla. + + Jos ohjelma on interaktiivinen, siihen tulee list esimerkiksi + seuraavanlainen lyhyt ilmoitus, joka tulostuu kun se kynnistyy + interaktiiviseen tilaan: + + Gnomovision versio 69, Tekijnoikeus (C) vuosi tekijn nimi. + Gnomovisionilla ei ole mitn takuuta; nhdksesi yksityiskohdat + kirjoita "nyt t". Tm on vapaa ohjelma ja sen levittminen edelleen + on sallittu tietyin ehdoin; nhdksesi yksityiskohdat kirjoita "nyt + c". + + Mielikuvituksellisten komentojen "nyt t" ja "nyt c" tulee nytt + asiaankuuluvat kohdat GPL lisenssist. Luonnollisesti kytetyt + komennot voivat olla jotakin muuta kuin "nyt t" tai "nyt c"; ne + voivat olla jopa hiirell painettavia tai valikkotoimintoja mik + sitten sopiikaan ohjelmaan. + + Tekijn tulee saada tynantajalta (jos hn tyskentelee ohjelmoijana) + tai koulultaan, jos sellainen on, allekirjoitus otsikolla + tekijnoikeuden luovutus ohjelmaan, jos se on tarpeellinen. Tss on + esimerkki, jota voi kytt nimet muuttamalla: + + Tten Yoyodine, Inc. luovuttaa kaikki tekijnoikeudet James Hackerin + kirjoittamaan ohjelmaan "Gnomovision" (joka tekee ohituksia + kntjiin). + + Ty Coonin allekirjoitus, 1.4.1989 + Ty Coon, Vicen pjohtaja + + Tm GPL lisenssi ei salli ohjelman ottamista osaksi yksinoikeudella + omistettuja ohjelmia. Jos ohjelma on aliohjelmakirjasto, voi olla + kytnnllisemp, ett yksinoikeudella omistetut ohjelmat saavat + linkitt kirjastoon. Jos tm halutaan sallia, silloin tulee kytt + GNU kirjastolisenssi (LGPL) tmn lisenssin sijasta. + + (C) 2000-02 Turr Legal Consulting diff --git a/docs/fi/FAQ.txt b/docs/fi/FAQ.txt new file mode 100644 index 000000000..63d4d9c81 --- /dev/null +++ b/docs/fi/FAQ.txt @@ -0,0 +1 @@ +Please see "docs/FAQ.txt" diff --git a/docs/fi/INSTALL.txt b/docs/fi/INSTALL.txt new file mode 100644 index 000000000..8778c7b73 --- /dev/null +++ b/docs/fi/INSTALL.txt @@ -0,0 +1 @@ +Please see "docs/INSTALL.txt" diff --git a/docs/fi/PNG.txt b/docs/fi/PNG.txt new file mode 100644 index 000000000..78db305c1 --- /dev/null +++ b/docs/fi/PNG.txt @@ -0,0 +1 @@ +Please see "docs/PNG.txt" diff --git a/docs/fi/README.txt b/docs/fi/README.txt new file mode 100644 index 000000000..f3cfcb9b7 --- /dev/null +++ b/docs/fi/README.txt @@ -0,0 +1 @@ +Please see "docs/README.txt" diff --git a/docs/fr/AUTHORS.txt b/docs/fr/AUTHORS.txt new file mode 100644 index 000000000..aa965f543 --- /dev/null +++ b/docs/fr/AUTHORS.txt @@ -0,0 +1 @@ +Veuillez voir le "docs/AUTHORS.txt" diff --git a/docs/fr/COPIER.txt b/docs/fr/COPIER.txt new file mode 100644 index 000000000..d772ac2d5 --- /dev/null +++ b/docs/fr/COPIER.txt @@ -0,0 +1,488 @@ + + Retour L'association Le projet GNU Articles Activits Actions + FSF France Miroir GNU + + Traduction de la GPL + + Table des matires + + 1. Notice d'accompagnement de la traduction non officielle + conserver dans toute reproduction de cette traduction + 2. GNU GENERAL PUBLIC LICENSE (TRADUCTION NON OFFICIELLE) + 3. Prambule + 4. Conditions d'exploitation portant sur la duplication, la + distribution et la modification + 5. ABSENCE DE GARANTIE + 6. Comment appliquer ces dispositions a vos nouveaux programmes? + _________________________________________________________________ + +Notice d'accompagnement de la traduction non officielle conserver dans toute + reproduction de cette traduction + + This is an unofficial translation of the GNU General Public License + into french. It was not published by the Free Software Foundation, and + does not legally state the distribution terms for software that uses + the GNU GPL--only the original English text of the GNU GPL does that. + However, we hope that this translation will help french speakers + understand the GNU GPL better. + + Ceci est une traduction non officielle de la GNU General Public + License en franais. Elle n'a pas t publie par la Free Software + Foundation, et ne dtermine pas les termes de distribution pour les + logiciels qui utilisent la GNU GPL--seul le texte anglais original de + la GNU GPL en a le droit. Cependant, nous esprons que cette + traduction aidera les francophones mieux comprendre la GPL. + + Cette traduction est sous Copyright 2001 APRIL (http://www.april.org). + La version la plus jour de ce document est disponible sur + http://www.april.org/gnu/gpl_french.html + + Il est permis tout le monde de reproduire et distribuer des copies + conformes de cette traduction, mais aucune modification ne doit y tre + apporte, et la prsente notice doit tre prserve. + Nous autorisons la FSF apporter toute modification qu'elle jugera + ncessaire pour rendre la traduction plus claire. + + GNU GENERAL PUBLIC LICENSE (TRADUCTION NON OFFICIELLE) + + Version 2, juin 1991 + + Copyright (C) 1989, 1991, Free Software Foundation Inc. 675 Mass Ave, + Cambridge, MA02139, Etats-Unis. + + Il est permis tout le monde de reproduire et distribuer des copies + conformes de ce document de licence, mais aucune modification ne doit + y tre apporte. + + Prambule + + Les licences relatives la plupart des logiciels sont destines + supprimer votre libert de les partager et de les modifier. Par + contraste, la licence publique gnrale GNU General Public License + veut garantir votre libert de partager et de modifier les logiciels + libres, pour qu'ils soient vraiment libres pour tous leurs + utilisateurs. La prsente licence publique gnrale s'applique la + plupart des logiciels de la Free Software Foundation, ainsi qu' tout + autre programme dont les auteurs s'engagent l'utiliser. (Certains + autres logiciels sont couverts par la Licence Publique Gnrale pour + Bibliothques GNU la place). Vous pouvez aussi l'appliquer vos + programmes. + + Quand nous parlons de logiciels libres, nous parlons de libert, non + de gratuit. Nos licences publiques gnrales veulent vous garantir : + * que vous avez toute libert de distribuer des copies des logiciels + libres (et de facturer ce service, si vous le souhaitez) ; + * que vous recevez les codes sources ou pouvez les obtenir si vous + le souhaitez ; + * que vous pouvez modifier les logiciels ou en utiliser des lments + dans de nouveaux programmes libres ; + * et que vous savez que vous pouvez le faire. + + Pour protger vos droits, nous devons apporter des restrictions, qui + vont interdire quiconque de vous dnier ces droits, ou de vous + demander de vous en dsister. Ces restrictions se traduisent par + certaines responsabilits pour ce qui vous concerne, si vous + distribuez des copies de logiciels, ou si vous les modifiez. + + Par exemple, si vous distribuez des copies d'un tel programme, + gratuitement ou contre une rmunration, vous devez transfrer aux + destinataires tous les droits dont vous disposez. Vous devez vous + garantir qu'eux-mmes, par ailleurs, reoivent ou peuvent recevoir le + code source. Et vous devez leur montrer les prsentes dispositions, de + faon qu'ils connaissent leurs droits. + + Nous protgeons vos droits en deux tapes : + 1. Nous assurons le droit d'auteur (copyright) du logiciel, et + 2. Nous vous proposons cette licence, qui vous donne l'autorisation + lgale de dupliquer, distribuer et/ou modifier le logiciel. + + De mme, pour la protection de chacun des auteurs, et pour notre + propre protection, nous souhaitons nous assurer que tout le monde + comprenne qu'il n'y a aucune garantie portant sur ce logiciel libre. + Si le logiciel est modifi par quelqu'un d'autre puis transmis des + tiers, nous souhaitons que les destinataires sachent que ce qu'ils + possdent n'est pas l'original, de faon que tous problmes introduits + par d'autres ne se traduisent pas par une rpercussion ngative sur la + rputation de l'auteur original. + + Enfin, tout programme libre est en permanence menac par des brevets + de logiciels. Nous souhaitons viter le danger que des + sous-distributeurs d'un programme libre obtiennent titre individuel + des licences de brevets, avec comme consquence qu'ils ont un droit de + proprit sur le programme. Pour viter cette situation, nous avons + fait tout ce qui est ncessaire pour que tous brevets doivent faire + l'objet d'une concession de licence qui en permette l'utilisation + libre par quiconque, ou bien qu'il ne soit pas concd du tout. + + Nous prsentons ci-dessous les clauses et dispositions concernant la + duplication, la distribution et la modification. + + Conditions d'exploitation portant sur la duplication, la distribution et la + modification + + 1. Le prsent contrat de licence s'applique tout programme ou autre + ouvrage contenant un avis, appos par le dtenteur du droit de + proprit, disant qu'il peut tre distribu au titre des + dispositions de la prsente Licence Publique Gnrale. Ci-aprs, + le "Programme" dsigne l'un quelconque de ces programmes ou + ouvrages, et un "ouvrage fond sur le programme" dsigne soit le + programme, soit un ouvrage qui en drive au titre de la loi sur le + droit d'auteur ; plus prcisment, il s'agira d'un ouvrage + contenant le programme ou une version de ce dernier, soit mot + mot, soit avec des modifications et/ou traduit en une autre langue + (ci-aprs, le terme "modification" englobe, sans aucune + limitation, les traductions qui en sont faites). Chaque titulaire + de licence sera appel "concessionnaire". + Les activits autres que la duplication, la distribution et la + modification ne sont pas couvertes par la prsente licence ; elles + n'entrent pas dans le cadre de cette dernire. L'excution du + programme n'est soumise aucune restriction, et les rsultats du + programme ne sont couverts que si son contenu constitue un ouvrage + fond sur le programme (indpendamment du fait qu'il a t ralis + par excution du programme). La vracit de ce qui prcde dpend + de ce que fait le programme. + 2. Le concessionnaire peut dupliquer et distribuer des copies mot + mot du code source du programme tel qu'il les reoit, et ce sur un + support quelconque, du moment qu'il appose, d'une manire + parfaitement visible et approprie, sur chaque exemplaire, un avis + appropri de droits d'auteur (Copyright) et de renonciation + garantie ; qu'il maintient intacts tous les avis qui se rapportent + la prsente licence et l'absence de toute garantie ; et qu'il + transmet tout destinataire du programme un exemplaire de la + prsente licence en mme temps que le programme. + Le concessionnaire peut facturer l'acte physique de transfert d'un + exemplaire, et il peut, sa discrtion, proposer en change d'une + rmunration une protection en garantie. + 3. Le concessionnaire peut modifier son ou ses exemplaires du + programme ou de toute portion de ce dernier, en formant ainsi un + ouvrage fond sur le programme, et dupliquer et distribuer ces + modifications ou cet ouvrage selon les dispositions de la section + 1 ci-dessus, du moment que le concessionnaire satisfait aussi + toutes ces conditions : + + a. Le concessionnaire doit faire en sorte que les fichiers modifis + portent un avis, parfaitement visible, disant que le + concessionnaire a modifi les fichiers, avec la date de tout + changement. + b. Le concessionnaire doit faire en sorte que tout ouvrage qu'il + distribue ou publie, et qui, en totalit ou en partie, contient le + programme ou une partie quelconque de ce dernier ou en drive, + soit concd en bloc, titre gracieux, tous tiers au titre des + dispositions de la prsente licence. + c. Si le programme modifi lit normalement des instructions + interactives lors de son excution, le concessionnaire doit, quand + il commence l'excution du programme pour une telle utilisation + interactive de la manire la plus usuelle, faire en sorte que ce + programme imprime ou affiche une annonce, comprenant un avis + appropri de droits d'auteur, et un avis selon lequel il n'y a + aucune garantie (ou autrement, que le concessionnaire fournit une + garantie), et que les utilisateurs peuvent redistribuer le + programme au titre de ces dispositions, et disant l'utilisateur + comment visualiser une copie de cette licence (exception : si le + programme par lui-mme est interactif mais n'imprime normalement + pas une telle annonce, l'ouvrage du concessionnaire se fondant sur + le programme n'a pas besoin d'imprimer une annonce). + + Les exigences ci-dessus s'appliquent l'ouvrage modifi pris en bloc. + Si des sections identifiables de cet ouvrage ne drivent pas du + programme et peuvent tre considres raisonnablement comme + reprsentant des ouvrages indpendants et distincts par eux-mmes, + alors la prsente licence, et ses dispositions, ne s'appliquent pas + ces sections quand le concessionnaire les distribue sous forme + d'ouvrages distincts. Mais quand le concessionnaire distribue ces + mmes sections en tant qu'lment d'un tout qui reprsente un ouvrage + se fondant sur le programme, la distribution de ce tout doit se faire + conformment aux dispositions de la prsente licence, dont les + autorisations, portant sur d'autres concessionnaires, s'tendent la + totalit dont il est question, et ainsi chacune de ces parties, + indpendamment de celui qu'il a crite. + + Ainsi, cette section n'a pas pour but de revendiquer des droits ou de + contester vos droits sur un ouvrage entirement crit par le + concessionnaire ; bien plus, l'intention est d'exercer le droit de + surveiller la distribution d'ouvrages drive ou collective se fondant + sur le programme. + + De plus, un simple assemblage d'un autre ouvrage ne se fondant pas sur + le programme, avec le programme (ou avec un ouvrage se fondant sur le + programme) sur un volume d'un support de stockage ou distribution, ne + fait pas entrer l'autre ouvrage dans le cadre de la prsente licence. + + Le concessionnaire peut dupliquer et distribuer le programme (ou un + ouvrage se fondant sur ce dernier, au titre de la Section 2), en code + objet ou sous une forme excutable, au titre des dispositions des + Sections 1 et 2 ci-dessus, du moment que le concessionnaire effectue + aussi l'une des oprations suivantes : + a. Lui joindre le code source complet correspondant, exploitable par + une machine, code qui doit tre distribu au titre des Sections 1 + et 2 ci-dessus sur un support couramment utilis pour l'change de + logiciels ; ou bien + b. Lui joindre une offre crite, dont la validit se prolonge pendant + au moins 3 ans, de transmettre un tiers quelconque, pour un + montant non suprieur au cot pour le concessionnaire, de + ralisation physique de la distribution de la source, un + exemplaire complet, exploitable par une machine, du code source + correspondant, qui devra tre distribu au titre des dispositions + des Sections 1 et 2 ci-dessus sur un support couramment utilis + pour l'change des logiciels ; ou bien + c. Lui joindre les informations que le concessionnaire a reues, pour + proposer une distribution du code source correspondant (cette + variante n'est autorise que pour la distribution non commerciale, + et seulement si le concessionnaire a reu le programme sous forme + excutable ou sous forme d'un code objet, avec une telle offre, + conformment l'alina b) ci-dessus). + + Le code source d'un ouvrage reprsente la forme prfre de l'ouvrage + pour y effectuer des modifications. Pour un ouvrage excutable, le + code source complet reprsente la totalit du code source pour tous + les modules qu'il contient, plus tous fichiers de dfinitions + d'interface associs, plus les informations en code machine pour + commander la compilation et l'installation du programme excutable. + Cependant, titre d'exceptions spciales, le code source distribu + n'a pas besoin de comprendre quoi que ce soit qui est normalement + distribu (sous forme source ou sous forme binaire) avec les + composants principaux (compilateur, noyau de systme d'exploitation, + etc.) du systme d'exploitation sur lequel est excut le programme + excutable, moins que le composant, par lui-mme, soit joint au + programme excutable. + + Si la distribution de lexcutable ou du code objet est ralise de + telle sorte qu'elle offre d'accder une copie partir d'un lieu + dsign, alors le fait d'offrir un accs quivalent la duplication + du code source partir de ce mme lieu s'entend comme distribution du + code source, mme si des tiers ne sont pas contraints de dupliquer la + source en mme temps que le code objet. + + Le concessionnaire ne peut dupliquer, modifier, concder en + sous-licence ou distribuer le programme, sauf si cela est expressment + prvu par les dispositions de la prsente licence. Toute tentative + pour autrement dupliquer, modifier, concder en sous-licence ou + distribuer le programme est rpte nulle, et met automatiquement fin + aux droits du concessionnaire au titre de la prsente licence. + Cependant, les parties qui ont reu des copies, ou des droits, de la + part du concessionnaire au titre de la prsente licence, ne verront + pas expirer leur contrat de licence, tant que ces parties agissent + d'une manire parfaitement conforme. + + Il n'est pas exig du concessionnaire qu'il accepte la prsente + licence, car il ne l'a pas signe. Cependant, rien d'autre n'octroie + au concessionnaire l'autorisation de modifier ou de distribuer le + programme ou ses ouvrages drivs. Ces actions sont interdites par la + loi si le concessionnaire n'accepte pas la prsente licence. En + consquence, par le fait de modifier ou de distribuer le programme (ou + un ouvrage quelconque se fondant sur le programme), le concessionnaire + indique qu'il accepte la prsente licence, et qu'il a la volont de se + conformer toutes les clauses et dispositions concernant la + duplication, la distribution ou la modification du programme ou + d'ouvrages se fondant sur ce dernier. + + Chaque fois que le concessionnaire redistribue le programme (ou tout + ouvrage se fondant sur le programme), le destinataire reoit + automatiquement une licence de l'metteur initial de la licence, pour + dupliquer, distribuer ou modifier le programme, sous rserve des + prsentes clauses et dispositions. Le concessionnaire ne peut imposer + aucune restriction plus pousse sur l'exercice, par le destinataire, + des droits octroys au titre des prsentes. Le concessionnaire n'a pas + pour responsabilit d'exiger que des tiers se conforment la prsente + licence. + + Si, en consquence une dcision de justice ou une allgation + d'infraction au droit des brevets, ou pour toute autre raison (qui + n'est pas limite des problmes de proprits industrielles), des + conditions sont imposes au concessionnaire (par autorit de justice, + par convention ou autrement), qui entrent en contradiction avec les + dispositions de la prsente licence, elles n'exemptent pas le + concessionnaire de respecter les dispositions de la prsente licence. + Si le concessionnaire ne peut procder la distribution de faon + satisfaire simultanment ces obligations au titre de la prsente + licence et toutes autres obligations pertinentes, alors, en + consquence de ce qui prcde, le concessionnaire peut ne pas procder + du tout la distribution du programme. Par exemple, si une licence de + brevet ne permettait pas une redistribution du programme, sans + redevances, par tous ceux qui reoivent des copies directement ou + indirectement par l'intermdiaire du concessionnaire, alors le seul + moyen par lequel le concessionnaire pourrait satisfaire tant cette + licence de brevet qu' la prsente licence, consisterait s'abstenir + compltement de distribuer le programme. + + Si une partie quelconque de cette section est considre comme nulle + ou non excutoire dans certaines circonstances particulires, le reste + de cette section est rput s'appliquer, et la section dans son + ensemble est considre comme s'appliquant dans les autres + circonstances. + + La prsente section n'a pas pour objet de pousser le concessionnaire + enfreindre tous brevets ou autres revendications droit de proprit, + ou encore contester la validit de une ou plusieurs quelconques de + ces revendications ; la prsente section a pour objet unique de + protger l'intgrit du systme de distribution des logiciels libres, + systme qui est mis en oeuvre par les pratiques lies aux licences + publiques. De nombreuses personnes ont apport une forte contribution + la gamme tendue des logiciels distribus par ce systme, en + comptant sur l'application systmatique de ce systme ; c'est + l'auteur/donateur de dcider s'il a la volont de distribuer le + logiciel par un quelconque autre systme, et un concessionnaire ne + peut imposer ce choix. + + La prsente section veut rendre parfaitement claire ce que l'on pense + tre une consquence du reste de la prsente licence. + + Si la distribution et/ou l'utilisation du Programme est restreinte + dans certains pays, sous l'effet de brevets ou d'interfaces prsentant + un droit d'auteur, le dtenteur du droit d'auteur original, qui soumet + le Programme aux dispositions de la prsente licence, pourra ajouter + une limitation expresse de distribution gographique excluant ces + pays, de faon que la distribution ne soit autorise que dans les pays + ou parmi les pays qui ne sont pas ainsi exclus. Dans ce cas, la + limitation fait partie intgrante de la prsente licence, comme si + elle tait crite dans le corps de la prsente licence. + + La Free Software Foundation peut, de temps autre, publier des + versions rvises et/ou nouvelles du General Public License. Ces + nouvelles versions seront analogues, du point de vue de leur esprit, + la prsente version, mais pourront en diffrer dans le dtail, pour + rsoudre de nouveaux problmes ou de nouvelles situations. + + Chaque version reoit un numro de version qui lui est propre. Si le + programme spcifie un numro de version de la prsente licence, qui + s'applique cette dernier et " toute autre version ultrieure", le + concessionnaire a le choix de respecter les clauses et dispositions de + cette version, ou une quelconque version ultrieure publie par la + Free Software Foundation. Si le programme ne spcifie pas de numro de + version de la prsente licence, le concessionnaire pourra choisir une + version quelconque publie tout moment par la Free Software + Foundation. + + Si le concessionnaire souhaite incorporer des parties du programme + dans d'autres programmes libres dont les conditions de distribution + sont diffrentes, il devrait crire l'auteur pour demander son + autorisation. Pour un logiciel soumis droit d'auteur par la Free + Software Foundation, il devra crire la Free Software Foundation ; + nous faisons quelquefois des exceptions cette rgle. Notre dcision + va tre guide par le double objectif de protger le statut libre de + tous les drivs de nos logiciels libres, et de favoriser le partage + et la rutilisation des logiciels en gnral. + + ABSENCE DE GARANTIE + + COMME LA LICENCE DU PROGRAMME EST CONCEDEE A TITRE GRATUIT, IL N'Y + AUCUNE GARANTIE S'APPLIQUANT AU PROGRAMME, DANS LA MESURE AUTORISEE + PAR LA LOI EN VIGUEUR. SAUF MENTION CONTRAIRE ECRITE, LES DETENTEURS + DU DROIT D'AUTEUR ET/OU LES AUTRES PARTIES METTENT LE PROGRAMME A + DISPOSITON "EN L'ETAT", SANS AUCUNE GARANTIE DE QUELQUE NATURE QUE CE + SOIT, EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS SANS LIMITATION, LES + GARANTIES IMPLICITES DE COMMERCIALISATION ET DE L'APTITUDE A UN OBJET + PARTICULIER. C'EST LE CONCESSIONNAIRE QUI PREND LA TOTALITE DU RISQUE + QUANT A LA QUALITE ET AUX PERFORMANCES DU PROGRAMME. SI LE PROGRAMME + SE REVELAIT DEFECTUEUX, C'EST LE CONCESSIONNAIRE QUI PRENDRAIT A SA + CHARGE LE COUT DE L'ENSEMBLE DES OPERATIONS NECESSAIRES D'ENTRETIEN, + REPARATION OU CORRECTION. + + 12. EN AUCUN CAS, SAUF SI LA LOI EN VIGUEUR L'EXIGE OU SI UNE + CONVENTION ECRITE EXISTE A CE SUJET, AUCUN DETENTEUR DE DROITS + D'AUTEUR, OU AUCUNE PARTIE AYANT LE POUVOIR DE MODIFIER ET/OU DE + REDISTRIBUER LE PROGRAMME CONFORMEMENT AUX AUTORISATIONS CI-DESSUS, + N'EST RESPONSABLE VIS-A-VIS DU CONCESSIONNAIRE POUR CE QUI EST DES + DOMMAGES, Y COMPRIS TOUS DOMMAGES GENERAUX, SPECIAUX, ACCIDENTELS OU + INDIRECTS, RESULTANT DE L'UTILISATION OU DU PROGRAMME OU DE + L'IMPOSSIBILITE D'UTILISER LE PROGRAMME (Y COMPRIS, MAIS SANS + LIMITATION, LA PERTE DE DONNEES, OU LE FAIT QUE DES DONNEES SONT + RENDUES IMPRECISES, OU ENCORE LES PERTES EPROUVEES PAR LE + CONCESSIONNAIRE OU PAR DES TIERS, OU ENCORE UN MANQUEMENT DU PROGRAMME + A FONCTIONNER AVEC TOUS AUTRES PROGRAMMES), MEME SI CE DETENTEUR OU + CETTE AUTRE PARTIE A ETE AVISE DE LA POSSIBILITE DE TELS DOMMAGES. + + FIN DES CONDITIONS D'EXPLOITATION + _________________________________________________________________ + + Comment appliquer ces dispositions a vos nouveaux programmes? + + Si le concessionnaire dveloppe un nouveau programme, et s'il en + souhaite l'utilisation la plus large possible dans le public, le + meilleur moyen d'y arriver est d'en faire un logiciel libre, que tout + le monde pourra redistribuer et modifier au titre des prsentes + dispositions. + + Dans ce but, il convient de rattacher au programme les avis suivants. + Le moyen le plus sr consiste les rattacher au dbut de chaque + fichier source, pour avertir le plus efficacement possible de + l'exclusion de garantie ; et chaque fichier doit comporter au moins la + ligne "copyright", et un pointeur indiquant o est localise la + totalit de l'avis. + + Une ligne pour donner le nom du programme et une ide de ce qu'il + fait. + + Copyright (C) 19yy nom de l'auteur + + Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou + le modifier conformment aux dispositions de la Licence Publique + Gnrale GNU, telle que publie par la Free Software Foundation ; + version 2 de la licence, ou encore ( votre choix) toute version + ultrieure. + + Ce programme est distribu dans l'espoir qu'il sera utile, mais SANS + AUCUNE GARANTIE ; sans mme la garantie implicite de COMMERCIALISATION + ou D'ADAPTATION A UN OBJET PARTICULIER. Pour plus de dtail, voir la + Licence Publique Gnrale GNU . + + Vous devez avoir reu un exemplaire de la Licence Publique Gnrale + GNU en mme temps que ce programme ; si ce n'est pas le cas, crivez + la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, + Etats-Unis. + + Ajoutez aussi des informations sur le moyen permettant d'entrer en + contact avec vous par courrier lectronique (e-mail) et courrier + normal. + + Si le programme est interactif, prvoyez en sortie un court avis, tel + que celui qui est prsent ci-dessous, lors du dmarrage en mode + interactif. + + Gnomovision version 69, Copyright (C) 19 yy nom de l'auteur + + Gnomovision est livr absolument SANS AUCUNE GARANTIE ; pour plus de + dtail, tapez "show w". Il s'agit d'un logiciel libre, et vous avez le + droit de le redistribuer dans certaines conditions ; pour plus de + dtail, tapez "show c". + + Les instructions hypothtiques + "show w" et "show c" doivent prsenter les parties appropries de la + Licence Publique Gnrale. Bien videmment, les instructions que vous + utilisez peuvent porter d'autres noms que "show w" et "show c" ; elles + peuvent mme correspondre des clics de souris ou des lments d'un + menu, selon ce qui convient votre programme. + + Si ncessaire, vous devrez aussi demander votre employeur (si vous + travaillez en tant que programmeur) ou votre ventuelle cole ou + universit, de signer une "renonciation droit d'auteur" concernant + le programme. En voici un chantillon (il suffit de modifier les noms) + : + + Yoyodyne, Inc., par la prsente, renonce tout intrt de droits + d'auteur dans le programme "Gnomovision" (qui fait des passages au + niveau des compilateurs) crit par James Hacker. + + Signature de Ty Coon + , 1^er avril 1989 + + Ty Coon, President of Vice + + La prsente Licence Publique Gnrale n'autorise pas le + concessionnaire incorporer son programme dans des programmes + propritaires. Si votre programme est une bibliothque de + sous-programmes, vous pouvez considrer comme plus intressant + d'autoriser une dition de liens des applications propritaires avec + la bibliothque. Si c'est ce que vous souhaitez, vous devrez utiliser + non pas la prsente licence, mais la Licence Publique Gnrale pour + Bibliothques GNU. + + + Niveau suprieur | Gnr le 26/11/2001 par Olivier Berger + Sauf mention contraire indique plus haut, le prsent document est + soumis aux conditions d'exploitation suivantes : + + Copyright 2001 APRIL + Ce document peut tre reproduit par n'importe quel moyen que ce soit, + pourvu qu'aucune modification ne soit effectue et que cette notice + soit prserve. diff --git a/docs/fr/FAQ.txt b/docs/fr/FAQ.txt new file mode 100644 index 000000000..542c5bbe4 --- /dev/null +++ b/docs/fr/FAQ.txt @@ -0,0 +1 @@ +Veuillez voir le "docs/FAQ.txt" diff --git a/docs/fr/INSTALL.txt b/docs/fr/INSTALL.txt new file mode 100644 index 000000000..167b6ddaf --- /dev/null +++ b/docs/fr/INSTALL.txt @@ -0,0 +1 @@ +Veuillez voir le "docs/INSTALL.txt" diff --git a/docs/fr/PNG.txt b/docs/fr/PNG.txt new file mode 100644 index 000000000..4d8df6a7e --- /dev/null +++ b/docs/fr/PNG.txt @@ -0,0 +1 @@ +Veuillez voir le "docs/PNG.txt" diff --git a/docs/fr/README.txt b/docs/fr/README.txt new file mode 100644 index 000000000..724c1154e --- /dev/null +++ b/docs/fr/README.txt @@ -0,0 +1 @@ +Veuillez voir le "docs/README.txt" diff --git a/docs/html/README.html b/docs/html/README.html new file mode 100644 index 000000000..82008a1c9 --- /dev/null +++ b/docs/html/README.html @@ -0,0 +1,2054 @@ + +Tux Paint README + + + + + +
+


+ +0.9.10 + +

+

A simple drawing program for children

+ +

Copyright 2003 by Bill Kendrick
+New Breed Software

+ +

bill@newbreedsoftware.com
+http://www.newbreedsoftware.com/tuxpaint/

+ +

June 14, 2002 - February 22, 2003

+
+ +
+ +

About

+
+

"Tux Paint" is a drawing program for young children. + It provides a simple interface and fixed canvas size, and provides + access to previous images using a thumbnail browser (e.g., no access to + the underlying file-system).

+ +

Unlike popular drawing programs like "The GIMP," it has a very limited + tool-set. However, it provides a much simpler interface, + and has entertaining, child-oriented additions such as sound effects.

+
+ +
+ + +

License:

+
+

Tux Paint is an Open Source project, Free Software + released under the GNU General Public License (GPL). It is free, and + the 'source code' behind the program is available. (This allows + others to add features, fix bugs, and use parts of the program in their + own GPL'd software.)

+ +

See COPYING.txt for the full text of the GPL license.

+
+ +
+ + +

Objectives:

+
+
+
Easy and Fun
+
+ Tux Paint is meant to be a simple drawing program for young children. + It is not meant as a general-purpose drawing tool. It is meant to + be fun and easy to use. Sound effects and a cartoon character help let + the user know what's going on, and keeps them entertained. + There are also extra-large cartoon-style mouse pointer shapes. +
+ +
Extensibility
+
+ Tux Paint is extensible. Brushes and "rubber stamp" shapes can be + dropped in and pulled out. For example, a teacher can drop in a + collection of animal shapes and ask their students to draw an + ecosystem. Each shape can have a sound which is played, and + textual facts which are displayed, when the child selects the shape. +
+ +
Portability
+
+ Tux Paint is portable among various computer platforms: + Windows, Linux, etc. The interface looks the same among + them all. Tux Paint runs suitably well on older systems (like a + Pentium 133), and can be built to run better on slow systems. +
+ +
Simplicity
+
+ There is no direct access to the computer's underlying intricacies. + The current image is kept when the program quits, and reappears when + it is restarted. Saving images requires no need to create filenames + or use the keyboard. Opening an image is done by selecting it from + a collection of thumbnails. Access to other files on the computer is + restricted. +
+
+
+ +
+ + +

Other Documentation

+
+ Other documentation included with Tux Paint (in the "docs" + folder/directory) include: + +
    +
  • AUTHORS.txt
    + List of authors and contributors + +
  • CHANGES.txt
    + Summary of changed between releases + +
  • COPYING.txt
    + Copying license (The GPL) + +
  • INSTALL.txt
    + Instructions for compiling/installing, when applicable + +
  • PNG.txt
    + Notes on creating PNG format images for use in Tux Paint + +
  • README.txt
    + (This file) + +
  • TODO.txt
    + A list of pending features or bugs needing fixed +
+
+ +
+ + +

Using Tux Paint

+
+ +

Building Tux Paint

+
+ To compile Tux Paint from source, please refer to INSTALL.txt. +
+ +
+ +

Loading Tux Paint

+
+

Linux/Unix Users

+
+

Run the following command at a shell prompt (e.g., "$"):

+ +
+ $ tuxpaint +
+ +

It is also possible to make a launcher button or icon + (e.g. in GNOME or KDE). See your desktop environment's + documentation for details...

+ +

If any errors occur, they will be displayed on the terminal + (to "stderr").

+
+ +
+ + +

Windows Users

+
+
+ [Icon]
+ Tux Paint +
+ +

Simply double-click the "Tux Paint" icon on the desktop + (which was created for you by the installer), or double-click the + "tuxpaint.exe" icon in the 'Tux Paint' folder on your computer.

+ +

If any errors occur, they will be stored in a file named + "stderr.txt" in the Tux Paint folder.

+ +

See "INSTALL.txt" for details on customizing the 'Shortcut' icon to + Tux Paint, which lets you easily set program options (via the + command-line).

+ +

To run Tux Paint and provide command-line options directly, you + will need to run "tuxpaint.exe" from an MSDOS Prompt window. + (See "INSTALL.txt" for details.)

+ +
+
+ + + + + + + +
+ +
+ + +

Options

+
+

Configuration File

+
+

You can create a simple configuration file for Tux Paint, which it + will read each time you start it up.

+ +

The file is simply a plain text file containing the options + you want enabled:

+ +

Linux Users

+
+

The file you should create is called ".tuxpaintrc" + and it should be placed in your home directory. + (a.k.a. "~/.tuxpaintrc" or + "$HOME/.tuxpaintrc")

+ +

Before this file is read, a system-wide configuration file is + read. (By default, this configuration has no settings enabled.) + It is located at:

+ +
+ /etc/tuxpaint/tuxpaint.conf +
+ +

You can disable reading of this file altogether, leaving the + settings as defaults (which can then be overridden by your + ".tuxpaintrc" file and/or command-line arguments) + by using the command-line option:

+ +
+ --nosysconfig +
+
+ + +

Windows Users

+
+

The file you should create is called + "tuxpaint.cfg" and it + should be placed in Tux Paint's folder.

+ +

You can use NotePad or WordPad to create this file. + Be sure to save it as Plain Text, and make sure the filename + doesn't have ".txt" at the end...

+
+ + +

Available Options

+
+

The following settings can be set in the configuration file. + (Command-line settings will override these. See below.)

+ +
+
fullscreen=yes
+
+ Run the program in full screen mode, rather than in a window. +
+ +
800x600=yes
+
+ Run the program at 800x600 resolution (EXPERIMENTAL), rather + than the smaller 640x480 resolution. +
+ +
nosound=yes
+
+ Disable sound effects. +
+ +
noquit=yes
+
+ Disable the on-screen "Quit" button. + (Pressing the [Escape] key or clicking the window's close + button still works.) +
+ +
noprint=yes
+
+ Disable the printing feature. +
+ +
printdelay=SECONDS
+
+ Restrict printing so that printing can occur only once every + SECONDS seconds. +
+ +
printcommand=COMMAND
+
+

(Linux and Unix only)

+ +

Use the command COMMAND to print a PNG file. + If not set, the default command is:

+ +
+ pngtopnm | pnmtops | lpr +
+ +

Which converts the PNG to a NetPBM 'portable anymap', + then converts that to a PostScript file, and finally + sends that to the printer, using the "lpr" command.

+
+ +
printcfg=yes +
+

(Windows only)

+ +

Tux Paint will use a printer configuration file when printing. + Push the [ALT] key while clicking the 'Print' button in + Tux Paint to cause a Windows print dialog window to appear.

+ +

(Note: This only works when not running Tux Paint in + fullscreen mode.) Any configuration changes made in this dialog + will be saved to the file "userdata/print.cfg", and + used again, as long as the "printcfg" option is set.

+
+ +
simpleshapes=yes
+
+ Disable the rotation step of the 'Shape' tool. + Click, drag and release is all that will be needed to draw a shape. +
+ +
uppercase=yes
+
+ All text will be rendered only in uppercase (e.g., "Brush" will + be "BRUSH"). Useful for children who can read, but who have only + learned uppercase letters so far. +
+ +
grab=yes
+
+

Tux Paint will attempt to 'grab' the mouse and keyboard, so + that the mouse is confined to Tux Paint's window, and nearly all + keyboard input is passed directly to it.

+ +

This is useful to disable operating system actions that could get + the user out of Tux Paint [Alt]-[Tab] window cycling, + [Ctrl]-[Escape], etc. This is especially useful in + fullscreen mode.

+
+ +
nowheelmouse=yes
+
+ This disables support for the wheel on mice that have it. + (Normally, the wheel will scroll the selector menu on the right.) +
+ +
keyboard=yes
+
+

This allows the keyboard arrow keys to be used + to control the mouse pointer. (e.g., for mouseless environments.)

+ +

The [Arrow] keys move the mouse pointer. + [Space] acts as the mouse button.

+
+ +
nooutlines=yes
+
+

In this mode, much simpler outlines and 'rubber-band' lines are + displayed when using the Lines, Shapes, + Stamps and Eraser tools.

+ +

This can help when Tux Paint is run on very slow computers, + or displayed on a remote X-Window display.

+
+ +
savedir DIRECTORY
+
+

Use this option to change where Tux Paint saves pictures. + By default, this is "~/.tuxpaint/saved/" under Linux + and Unix, and "userdata\" under Windows.

+ +

This can be useful in a Windows lab, where Tux Paint is + installed on a server, and children run it from workstations. + You can set savedir to be a folder in their home + directory. (e.g., "H:\tuxpaint\")

+ +

Note: When specifying a Windows drive (e.g., + "H:\"), you must also specify a subdirectory.

+
+ +
saveover=yes
+
+ This disables the "Save over the old version...?" prompt when + saving an existing file. With this option, the older version + will always be replaced by the new version, automatically. +
+ +
saveover=new
+
+ This also disables the "Save over the old version...?" prompt + when saving an existing file. This option, however, will always + save a new file, rather than overwrite the older version. +
+ +
saveover=ask
+
+

(This option is redundant, since this is the default.)

+ + When saving an existing drawing, you will be first asked whether + to save over the older version or not. +
+ +
lang=LANGUAGE
+
+

Run Tux Paint in one of the supported languages. + Possible choice for LANGUAGE currently include:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
englishamerican-english 
british-englishbritish 
brazilian-portugueseportuges-brazilianbrazilian
catalancatala 
chinese  
czechcesky 
danishdansk 
dutch  
finnishsuomi 
frenchfrancais 
germandeutsch 
greek  
hungarianmagyar 
icelandicislenska 
indonesianbahasa-indonesia 
italianitaliano 
japanese  
korean  
norwegiannynorsk 
polishpolski 
portugueseportugues 
romanian  
spanishespanol 
slovak  
swedishsvenska 
turkish  
+
+
+
+
+ +
+ +

Overriding System Config. Options using .tuxpaintrc

+
+

If any of the above options are set in + "/etc/tuxpaint/tuxpaint.config", + you can override them in your own + "~/.tuxpaintrc" file.

+ +

For true/false options, like "noprint" and + "grab", you can simply say they equal 'no' in + your "~/.tuxpaintrc" file:

+ +
+ noprint=no
+ uppercase=no +
+ +

Or, you can use options similar to the command-line override + options described below. For example:

+ +
+ print=yes
+ mixedcase=yes +
+
+
+ +
+ +

Command-Line Options

+
+ Options can also be issued on the command-line when you start + Tux Paint. + +
+
+
+ --fullscreen
+ --800x600
+ --nosound
+ --noquit
+ --noprint
+ --printdelay=SECONDS
+ --printcfg
+ --simpleshapes
+ --uppercase
+ --grab
+ --keyboard
+ --nooutlines
+ --nowheelmouse
+ --savedir DIRECTORY
+ --saveover
+ --saveovernew
+ --lang LANGUAGE
+
+
+ These enable or correspond to the configuration file options + described above. +
+ +
+ --windowed
+ --640x480
+ --sound
+ --quit
+ --print
+ --printdelay=0
+ --noprintcfg
+ --complexshapes
+ --mixedcase
+ --dontgrab
+ --mouse
+ --outlines
+ --wheelmouse
+ --saveoverask
+
+
+ These options can be used to override any settings made in + the configuration file. (If the option isn't set in the + configuration file(s), no overriding option is necessary.) +
+ + +
--locale locale
+
+

Run Tux Paint in one of the support languages. + See the "Choosing a Different Language" section below for the + locale strings (e.g., "de_DE@euro" for German) to + use.

+ +

(If your locale is already set, e.g. with the "$LANG" + environment variable, this option is not necessary, + since Tux Paint honors your environment's setting, + if possible.)

+
+ +
--nosysconfig
+
+

Under Linux and Unix, this prevents the system-wide configuration + file, "/etc/tuxpaint/tuxpaint.conf", from being read.

+ +

Only your own configuration file, "~/.tuxpaintrc", + if it exists, will be used.

+
+
+
+
+ +
+ + +

Command-Line Informational Options

+
+

The following options display some informative text on the screen. + Tux Paint doesn't actually start up and run afterwards, however.

+ +
+
+
--version
+
+ Display the version number and date of the copy of Tux Paint + you are running. It also lists what, if any, compile-time + options were set. (See INSTALL.txt and FAQ.txt). +
+ +
--copying
+
+ Show brief license information about copying Tux Paint. +
+ +
--usage
+
+ Display the list of available command-line options. +
+ +
--help
+
+ Display brief help on using Tux Paint. +
+
+
+
+ +
+ + +

Choosing a Different Language

+
+

Tux Paint has been translated into a number of languages. + To access the translations, you can use the "--lang" + option on the command-line to set the language (e.g. + "--lang spanish") + or use the "lang=" setting in the configuration file + (e.g., "lang=spanish").

+ +

Tux Paint also honors your environment's current locale. + (You can override it on the command-line using the + "--locale" option (see above).)

+ +

The following languages are supported:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Locale CodeLanguage
+ (native name)
Language
+ (English name)
C English
ca_ESCatalanCatalà
cs_CZCeskyCzech
da_DKDanskDanish
de_DE@euroDeutschGerman
el_GR.UTF8 (*) Greek
en_GB British English
es_ES@euroEspañolSpanish
fi_FI@euroSuomiFinnish
fr_FR@euroFrançaisFrench
hu_HUMagyarHungarian
id_IDBahasa IndonesiaIndonesian
is_ISÍslenskaIcelandic
it_IT@euroItalianoItalian
ja_JP.UTF-8 (*) Japanese
ko_KR.UTF-8 (*) Korean
nn_NONorsk (nynorsk)Norwegian Nynorsk
nl_NL@euro Dutch
pl_PLPolskiPolish
pt_BRPortugês BrazileiroBrazilian Portuguese
pt_PTPortugêsPortuguese
ro_RO Romanian
sk_SKSlovak 
sv_SE@euroSvenskaSwedish
tr_TR@euro Turkish
zh_CN Chinese (Simplified)
+ + (*) - These languages require their own fonts, since they + are not represented using a Latin character set, like the others. + See Special Fonts, below.

+ +

+ +

Setting Your Environment's Locale

+
+

Changing your locale will affect much of your environment.

+ +

As stated above, along with letting you choose the language at + runtime using command-line options ("--lang" and + "--locale"), + Tux Paint honors the global locale setting in your environment.

+ +

If you haven't already set your environment's locale, the following + will briefly explain how:

+ +
Linux/Unix Users
+
+

First, be sure the locale you want to use is enabled by + editing the file "/etc/locale.gen" on your system and + then running the program "locale-gen" as root.

+ +

Note: Debian users may be able to simply run the command + "dpkg-reconfigure locales".

+ +

Then, before running Tux Paint, set your "$LANG" + environment variable to one of the locales listed above. (If you + want all programs that can be translated to be, you may wish to place + the following in your login script; e.g. ~/.profile, + ~/.bashrc, ~/.cshrc, etc.)

+ + +

For example, in a Bourne Shell (like BASH):

+ +
+ export LANG=es_ES@euro ; \
+ tuxpaint +
+ + +

And in a C Shell (like TCSH):

+ +
+ setenv LANG es_ES@euro ; \
+ tuxpaint +
+
+ +
+ +
Windows Users
+
+

Tux Paint will recognize the current locale and use the + appropriate files by default. So this section is only for people + trying different languages.

+ +

The simplest thing to do is to use the '--lang' + switch in the shortcut (see "INSTALL.txt"). However, by using + an MSDOS Prompt window, it is also possible to issue a command + like this:

+ +
+ set LANG=es_ES@euro +
+ +

...which will set the language for the lifetime of that DOS + window.

+ +

For something more permanent, try editing your computer's + 'autoexec.bat' file using Windows' "sysedit" + tool:

+ +
Windows 95/98
+
    +
  1. Click on the 'Start' button, and select 'Run...'. +
  2. Type "sysedit" into the 'Open:' box (with or without quotes). +
  3. Click 'OK'. +
  4. Locate the AUTOEXEC.BAT window in the System Configuration + Editor. +
  5. Add the following at the bottom of the file: + +
    + set LANG=es_ES@euro +
    + +
  6. Close the System Configuration Editor, answering yes to save + the changes. +
  7. Restart your machine. +
+ +
+ To affect the entire machine, and all applications, + it is possible to use the "Regional Settings" control panel: +
+ +
    +
  1. Click on the 'Start' button, and select + 'Settings | Control Panel'. +
  2. Double click on the "Regional Settings" globe. +
  3. Select a language/region from the drop down list. +
  4. Click 'OK'. +
  5. Restart your machine when prompted. +
+ +
+
+ +

Special Fonts

+
+ Some languages require special fonts be installed. These font + files (which are in TrueType format (TTF)), are much too large to + include with the Tux Paint download, and are available + separately. (See the table above, under the + "Choosing a Different Language" section.)

+ + When running Tux Paint in a language that requires its own font, + Tux Paint will try to load the font file from its system-wide + "fonts" directory (under a + "locale" subdirectory). The name of the file + corresponds to the first two letters in the 'locale' code of the + language (e.g., "ko" for Korean, "ja" for Japanese, + "zh" for Chinese).

+ + For example, under Linux or Unix, when Tux Paint is run in Korean + (e.g., with the option "--lang korean"), + Tux Paint will attempt to load the following font file:

+ +

+ /usr/share/tuxpaint/fonts/locale/ko.ttf +

+ + You can download fonts for supported languages from Tux Paint's + website, + + http://www.newbreedsoftware.com/tuxpaint/. + (Look in the 'Fonts' section under 'Download.')

+ + Under Unix and Linux, you can use the Makefile that comes + with the font to install the font in the appropriate location.

+

+ +
+
+ +
+ + +

Title Screen

+
+

When Tux Paint first loads, a title/credits screen will appear.

+ +
[Title Screenshot]
+ +

Once loading is complete, press a key or click on the mouse to continue. + (Or, after about 30 seconds, the title screen will go away + automatically.)

+
+ +
+ + +

Main Screen

+
+ The main screen is divided into the following sections: + +
+
Left Side: Toolbar
+
+

The toolbar contains the drawing and editing controls.

+ +
[Tools: Paint, Stamp, Lines, Shapes, Text, Magic, Undo, Redo,
+      Eraser, New, Open, Save, Print, Quit]
+
+ +
Middle: Drawing Canvas
+
+

The largest part of the screen, in the center, is the drawing + canvas. This is, obviously, where you draw!

+ +
[(Canvas)]
+
+ + +
Right Side: Selector
+
+

Depending on the current tool, the selector shows different + things. e.g., when the Paint Brush tool is selected, it shows + the various brushes available. When the Rubber Stamp tool + is selected, it shows the different shapes you can use.

+ +
[Selectors - Brushes, Letters, Shapes, Stamps]
+
+ + +
Lower: Colors
+
+

A palette of available colors are shown near the bottom of the + screen.

+ +
[Colors - Black, White, Red, Pink, Orange, Yellow, Green, Cyan,
+      Blue, Purple, Brown, Grey]
+
+ + +
Bottom: Help Area
+
+

At the very bottom of the screen, Tux, the Linux Penguin, + provides tips and other information while you draw.

+ +
(For example: 'Pick a shape. Click to pick the center, drag, then
+      let go when it is the size you want.  Move around to rotate it, and
+      click to draw it.)
+
+
+
+ +
+ + +

Available Tools

+
+

Drawing Tools

+
+
+
Paint (Brush)
+
+ + +

The Paint Brush tool lets you draw freehand, using various + brushes (chosen in the Selector on the right) and colors + (chosen in the Color palette towards the bottom).

+ +

If you hold the mouse button down, and move the mouse, it will + draw as you move.

+ +

As you draw, a sound is played. The bigger the brush, the + lower the pitch.

+ +
+ +
+ +
+
+ + +
Stamp (Rubber Stamp)
+
+ + +

The Stamp tool is like a rubber stamp, or stickers. It lets you + paste pre-drawn or photographic images (like a picture of a horse, + or a tree, or the moon) in your picture.

+ +

As you move the mouse around, an outline follows the + mouse, showing where the stamp will be placed.

+ +

Different stamps can have different sound effects.

+ +
+ +
+ +
+
+ + +
Lines
+
+ + +

This tool lets you draw straight lines using the various + brushes and colors you normally use with the Paint Brush.

+ +

Click the mouse and hold it to choose the starting point of the + line. As you move the mouse around, a thin 'rubber-band' line + will show where the line will be drawn.

+ +

Let go of the mouse to complete the line. A "sproing!" sound will + play.

+ +
+ +
+ +
+
+ + +
Shapes
+
+ + +

This tool lets you draw some simple filled, and un-filled shapes.

+ +

Select a shape from the selector on the right (circle, square, + oval, etc.).

+ +

In the canvas, click the mouse and hold it to stretch the shape + out from where you clicked. Some shapes can change proportion + (e.g., rectangle and oval), others cannot (e.g., square and circle).

+ +

Let go of the mouse when you're done stretching.

+ +
+
Normal Mode
+
+

Now you can move the mouse around the canvas to rotate the + shape.

+ +

Click the mouse button again and the shape will be drawn in the + current color.

+
+ +
Simple Shapes Mode
+
+ If simple shapes are enabled (e.g., with the + "--simpleshapes" option), + the shape will be drawn on the canvas when you let go of the + mouse button. (There's no rotation step.) +
+
+ +
+ +
+ +
+
+ + +
Text
+
+ + +

Choose a font (from the 'Letters' available on the right) and a color + (from the color palette near the bottom). Click on the screen and a + cursor will appear. Type text and it will show up on the screen.

+ +

Press [Enter] or [Return] and the text will be drawn + onto the picture and the cursor will move down one line.

+ +

Click elsewhere in the picture and the current line of text will + move there, where you can continue editing.

+ +
+ +
+ +
+
+ + +
Magic (Special Effects)
+
+ + +

The 'Magic' tool is actually a set of special tools. Select one of + the "magic" effects from the selector on the right, and then + click and drag around the picture to apply the effect.

+ +
+ +
+
Rainbow
+
+ This is similar to the paint brush, but as you move the mouse + around, it goes through all of the colors in the rainbow. +
+ +
Sparkles
+
+ This draws glowing yellow sparkles on the picture. +
+ +
Mirror
+
+ When you click the mouse in your picture with the "Mirror" + magic effect selected, the entire image will be reversed, + turning it into a mirror image. +
+ +
Flip
+
+ Similar to "Mirror." Click and the entire image will be turned + upside-down. +
+ +
Blur
+
+ This makes the picture fuzzy wherever you drag the mouse. +
+ +
Blocks
+
+ This makes the picture blocky looking ("pixelated") wherever + you drag the mouse. +
+ +
Negative
+
+ This inverts the colors wherever you drag the mouse. + (e.g., white becomes black, and vice versa.) +
+ +
Fade
+
+ This fades the colors wherever you drag the mouse. + (Do it to the same spot many times, and it will eventually become + white.) +
+ +
Chalk
+
+ This makes parts of the picture (where you move the mouse) + look like a chalk drawing. +
+ +
Drip
+
+ This makes the paint "drip" wherever you move the mouse. +
+ +
Thick
+
+ This makes the darker colors in the picture become thicker + wherever you drag the mouse. +
+ +
Thin
+
+ Similar to "Thick," except dark colors become thinner + (light colors become thicker). +
+ +
Fill
+
+ This floods the picture with a color. It lets you quickly + fill parts of the picture, as if it were a coloring book. +
+
+ +
+
+ + +
Eraser
+
+ + +

This tool is similar to the Paint Brush. Wherever you click + (or click and drag), the picture will be erased to white.

+ +

As you move the mouse around, a very large square outline follows + the pointer, showing what part of the picture will be erased to + white.

+ +

As you erase, a "squeaky clean" eraser/wiping sound is played.

+ +
+
+
+
+ +
+ + +

Other Controls

+
+
+
Undo
+
+ + +

Clicking this tool will undo the last drawing action. You can + even undo more than once!

+ +

Note: You can also press [Control]-[Z] on the keyboard to + undo.

+ +
+ +
+
+ + +
Redo
+
+ + +

Clicking this tool will redo the drawing action you just "undid" + with the 'Undo' button.

+ +

As long as you don't draw again, you can redo as many times as you + had "undone!"

+ +

Note: You can also press [Control]-[R] on the keyboard to + redo.

+ +
+ +
+
+ + +
New
+
+ + +

Clicking the "New" button will start a new drawing. + You will first be asked whether you really want to do this.

+ +

Note: You can also press [Control]-[N] on the keyboard to start + a new drawing.

+ +
+ +
+
+ + +
Open
+
+ + +

This shows you a list of all of the pictures you've saved. + If there are more than can fit on the screen, use the "Up" + and "Down" arrows at the top and bottom of the list to scroll + through the list of pictures.

+ +
+ +
+ +

Click a picture to select it, then...

+ +
+
    +
  • + + +

    Click the green "Open" button at the lower left of the list to + load the selected picture.

    + +

    (Alternatively, you can double-click a picture's icon to load + it.)

    + +
    + +
  • + + +

    Click the brown "Erase" (trash can) button at the lower right of + the list to erase the selected picture. (You will be asked to + confirm.)

    + +
    + +
  • + + +

    Or click the red "Back" arrow button at the lower right of the + list to cancel and return to the picture you were drawing.

    + +
    +
+
+ +

If choose to open a picture, and your current drawing hasn't been + saved, you will be prompted as to whether you want to save it or not. + (See "Save," below.)

+ +

Note: You can also press [Control]-[O] on the keyboard to get + the 'Open' dialog.

+ +
+ +
+
+ + +
Save
+
+ + +

This saves your current picture.

+ +

If you haven't saved it before, it will create a new entry in + the list of saved images. (i.e., it will create a new file)

+ +

Note: It won't ask you anything (e.g., for a filename). + It will simply save the picture, and play a "camera shutter" sound + effect.

+ +

If you HAVE saved the picture before, or this is a picture you + just loaded using the "Open" command, you will first be asked + whether you want to save over the old version, or create a new + entry (a new file).

+ +
+ +

(NOTE: If either the "saveover" or + "saveovernew" options are set, it won't ask before saving + over. See the "Options" section of this document, above.)

+ +

Note: You can also press [Control]-[S] on the keyboard to + save.

+ +
+ +
+
+ + +
Print
+
+ + +

Click this button and your picture will be printed!

+ +
+
Disabling Printing
+
+

If the "noprint" option was set (either with + "noprint=yes" in Tux Paint's configuration file, + or using "--noprint" on the + command-line), the "Print" button will be disabled.

+ +

See the "Options" section of this document, above.

+
+ + +
Restricting Printing
+
+

If the "printdelay" option was used (either with + "printdelay=SECONDS" in the configuration file, + or using "--printdelay=SECONDS" on the + command-line), you can only print once every SECONDS + seconds.

+ +

For example, with "printdelay=60", you can print only + once a minute.

+ +

See the "Options" section of this document, above.

+
+ + +
Printing Command
+
+

(Linux and Unix only)

+ +

The command used to print is actually a set of commands that + convert a PNG to a PostScript and send it to the printer:

+ +
+ pngtopnm | pnmtops | lpr +
+ +

This command can be changed by setting the "printcommand" value + in Tux Paint's configuration file.

+ +

See the "Options" section of this document, above.

+
+ + +
Printer Settings
+
+

(Windows only)

+ +

By default, Tux Paint simply prints to the default + printer with default settings when the 'Print' button is + pushed.

+ +

However, if you hold the [ALT] key on the keyboard + while pushing the button, as long as you're not in fullscreen mode, + a Windows print dialog will appear, where you can change the + settings.

+ +

You can have the printer configuration changes stored + by using the "printcfg" option, either by using + "--printcfg" on the command-line, or + "printcfg=yes" in Tux Paint's own configuration + file ("tuxpaint.cfg").

+ +

If the "printcfg" option is used, printer settings will + be loaded from the file "userdata/print.cfg". + Any changes will be saved there as well.

+ +

See the "Options" section of this document, above.

+
+ +
+
+ +
+
+ + +
Quit
+
+ + +

Clicking the "Quit" button, closing the Tux Paint window, or + pushing the "Escape" key will quit Tux Paint.

+ +

(NOTE: The "Quit" button can be disabled (e.g., with the + "--noquit" command-line option), but the [Escape] + key will still work. See the "Options" section of this document, + above.)

+ +

You will first be prompted as to whether you really want to quit.

+ +

If you choose to quit, and you haven't saved the current picture, + you will first be asked if wish to save it. If it's not a new image, + you will then be asked if you want to save over the old version, + or create a new entry. (See "Save" above.)

+ +

NOTE: If the image is saved, it will be reloaded automatically + the next time you run Tux Paint!

+ +
+
+
+
+
+
+ +
+ + +

Loading Other Pictures into Tux Paint

+
+

Since Tux Paint's 'Open' dialog only displays pictures you created with + Tux Paint, what if you want to load some other picture or photograph + into Tux Paint to edit?

+ +

To do so, you simply need to convert the picture into + a PNG (Portable Network Graphic) image file, and place it in Tux Paint's + "saved" directory. ("~/.tuxpaint/saved/" under Linux and Unix, + "userdata\saved\" under Windows.)

+ + +

Using 'tuxpaint-import'

+
+

Linux and Unix users can use the "tuxpaint-import" + shell script which gets installed when you install Tux Paint. + It uses some NetPBM tools to convert the image ("anytopnm"), + resize it so that it will fit in Tux Paint's canvas + ("pnmscale"), and convert it to a PNG + ("pnmtopng").

+ +

It also uses the "date" command to get the current time and + date, which is the file-naming convention Tux Paint uses for saved + files. (Remember, you are never asked for a 'filename' when you go to + Save or Open pictures!)

+ +

To use 'tuxpaint-import', simply run the command from a + command-line prompt and provide it the name(s) of the file(s) you wish + to convert.

+ +

They will be converted and placed in your Tux Paint 'saved' + directory. (Note: If you're doing this for a different user - e.g., + your child, you'll need to make sure to run the command under their + account.)

+ +

Example:

+ +
+ $ tuxpaint-import grandma.jpg
+ grandma.jpg -> /home/username/.tuxpaint/saved/20020921123456.png
+ jpegtopnm: WRITING A PPM FILE +
+ +

The first line ("tuxpaint-import grandma.jpg") is the + command to run. The following two lines are output from the program while + it's working.

+ +

Now you can load Tux Paint, and a version of that original picture + will be available under the 'Open' dialog. Just double-click its icon!

+
+ + +

Doing it Manually

+
+

Windows users must currently do the conversion manually.

+ +

Load a graphics program that is capable of both loading your picture + and saving a PNG format file. (See the documentation file "PNG.txt" + for a list of suggested software, and other references.)

+ +

Reduce the size of the image to no wider than 448 pixels across and + no taller than 376 pixels tall. (i.e., the maximum size + is 448 x 376 pixels)

+ +

Save the picture in PNG format. It is highly recommended that you + name the filename using the current date and time, since that's + the convention Tux Paint uses:

+ +
+ YYYYMMDDhhmmss.png +
+ +
    +
  • YYYY = Year +
  • MM = Month (01-12) +
  • DD = Day (01-31) +
  • HH = Hour, in 24-hour format (00-23) +
  • mm = Minute (00-59) +
  • ss = Second (00-59) +
+ +

e.g.:

+ +
+ 20020921130500 - for September 21, 2002, 1:05:00pm +
+ +

Place this PNG file in your Tux Paint 'saved' directory. + (See above.)

+ +

Under Windows, this is in the "userdata" folder.

+
+
+ +
+ + +

Extending Tux Paint

+
+

If you wish to add or change things like Brushes and Rubber Stamps + used by Tux Paint, you can do it fairly easily by simply putting + or removing files on your hard disk.

+ +

Note: You'll need to restart Tux Paint for the changes to take + effect.

+ +

Where Files Go

+
+

Standard Files

+
+

Tux Paint looks for its various data files in its + 'data' directory.

+ +

Linux and Unix

+
+

Where this directory goes depends on what value was set for + "DATA_PREFIX" when Tux Paint was built. See + INSTALL.txt for details.

+ +

By default, though, the directory is:

+ +
+ /usr/local/share/tuxpaint/ +
+ +

If you installed from a package, it is more likely:

+ +
+ /usr/share/tuxpaint/ +
+ +
+ + +

Windows

+
+

Tux Paint looks for a directory called 'data' in the same + directory as the executable. This is the directory that the + installer used when installing Tux Paint e.g.:

+ +
+ C:\Program Files\TuxPaint\data +
+ +
+
+ +
+ + +

Personal Files

+
+

You can also create brushes, stamps and fonts in your own directory + for Tux Paint to find.

+ +

Linux and Unix

+
+

Your personal Tux Paint directory is + "~/.tuxpaint/".

+ +

That is, if your home directory is "/home/karl", then + your Tux Paint directory is + "/home/karl/.tuxpaint/".

+ +

Don't forget the period (".") before the + 'tuxpaint'!

+
+ + +

Windows

+
+

Your personal Tux Paint directory is named "userdata" and + is in the same directory as the executable e.g.:

+ +
+ C:\Program Files\TuxPaint\userdata +
+ +
+ + +

To add brushes, stamps and fonts, create subdirectories under + your personal Tux Paint directory named + "brushes", "stamps" and + "fonts", respectively.

+ +

(For example, if you created a brush named "flower.png", + you would put it in "~/.tuxpaint/brushes/" under Linux or + Unix.)

+
+
+ +
+ + +

Brushes

+
+

The brushes used for drawing with the 'Brush' and 'Lines' tools in + Tux Paint are simply greyscale PNG images.

+ + + +

The alpha (transparency) of the PNG image is used to determine the shape + of the brush, which means that the shape can be 'anti-aliased' and even + partially-transparent!

+ +

Brush images should be no wider than 40 pixels across and + no taller than 40 pixels high. (i.e., the maximum size + can be 40 x 40.)

+ +

Just place them in the "brushes" directory.

+ +

Note: If your new brushes all come out as solid squares or rectangles, + it's because you forgot to use alpha transparency! See the documentation + file "PNG.txt" for more information and tips.

+ +
+
+ +
+ + +

Stamps

+
+

All stamp-related files go in the "stamps" directory. + It's useful to create subdirectories and sub-subdirectories + there to organize the stamps. (For example, you can have a + "holidays" folder with "halloween" and + "christmas" sub-folders.)

+ +

Images

+
+

Rubber Stamps in Tux Paint can be made up of a number of separate + files. The one file that is required is, of course, the picture + itself.

+ + + +

The Stamps used by Tux Paint are PNG pictures. They can be + full-color or greyscale. The alpha (transparency) of the PNG is + used to determine the actual shape of the picture (otherwise you'll + stamp a large rectangle on your drawings).

+ +

The PNGs can be any size, but in practice, a 100 pixels wide by + 100 pixels tall (100 x 100) is quite large for + Tux Paint.

+ +

Note: If your new stamps all have solid rectangular-shaped outlines + of a solid color (e.g., white or black), it's because you forgot to use + alpha transparency! See the documentation file "PNG.txt" for more + information and tips.

+ +
+
+ +
+ +

Description Text

+
+

Text (".TXT") files with the same name as the PNG. + (e.g., "picture.png"'s description is stored in + "picture.txt" in the same directory.)

+ +

The first line of the text file will be used as the default + description of the stamp's image.

+ +

Language Support

+
+

Additional lines can be added to the text file to provide + translations of the description, to be displayed when Tux Paint + is running in a different locale (like French or Spanish).

+ +

There are three ways of placing translated descriptions in + a stamp's ".txt" file. In each case, the beginning + of the line should correspond to the locale code of the language + in question (e.g., "de" for German, + "fr" for French, etc.).

+ +
    +
  • Lines beginning with "xx=" + (where "xx" is the locale code) will be + considered plain ASCII. That is, any special characters on the + line will be interpreted literally.

    + +

    For example, "es=¡Niños!", will come + out literally as "¡Niños!"

    + +
  • Lines beginning with "xx.esc=" can contain + special 'escape sequences' which allow you to create a + description using special ASCII characters (like "á" and + "þ") without the need to figure out how to get those + characters in the file with whatever editor you chose to use.

    + +

    The escape sequences are identical to those used in HTML + to display ASCII characters 161 through 255. The sequence begins + with a "&" (ampersand), and ends with a + ";" (semicolon). See the documentation file + "ESCAPES.txt" for a list of escapable characters.

    + +

    For example, "es.esc=&iexcl;Ni&ntilde;os!", + will come out as "¡Niños!"

    + +

    Note: As in HTML, if you want an actual ampersand ("&") + in your description when using the "xx.esc" method, + you'll need to escape it: "&amp;".

    + +

  • Lines beginning with "xx.utf8=" can be + used to use UTF-8 encoded text for the description's translation. + You'll need an editor capable of saving UTF-8 encoded files.

    +

+ +

If no translation is available for the language Tux Paint + is currently running in, the default string (the first line, which + is typically in English) is used.

+
+ +

Windows Users

+
+

Use NotePad or WordPad to edit/create these files. + Be sure to save them as Plain Text, and make sure they have + ".txt" at the end of the filename...

+
+
+ +
+ +

Sound Effects

+
+

WAVE (".WAV") files with the same name as the PNG. + (e.g., "picture.png"'s sound effect is the sound + "picture.wav" in the same directory.)

+ +

Language Support

+
+

For sounds for different locales (e.g., if the sound is someone saying + a word, and you want translated versions of the word said), + also create WAV files with the locale's label in the filename, in + the form: "STAMP_LOCALE.wav"

+ +

"picture.png"'s sound effect, when Tux Paint is run + in Spanish mode, would be "picture_es.wav". + In French mode, "picture_fr.wav". And so on...

+ +

If no localized sound effect can be loaded, Tux Paint will + attempt to load the 'default' sound file. + (e.g., "picture.wav")

+
+
+ +
+ +

Stamp Options

+
+

Aside from a graphical shape, a textual description, and a sound effect, + stamps can also be given other attributes. To do this, you need + to create a 'data file' for the stamp.

+ +

A stamp data file is simply a text file containing the options.

+ +

The file has the same name as the PNG image, but a ".dat" + extension. (e.g., "picture.png"'s data file is the text + file "picture.dat" in the same directory.)

+ +

Colored Stamps

+
+

Stamps can be made to be either "colorable" or "tintable."

+ +
Colorable
+
+

"Colorable" stamps they work much like brushes - you pick the stamp + to get the shape, and then pick the color you want it to be. + (Symbol stamps, like the mathematical and musical ones, are an + example.)

+ +

Nothing about the original image is used except the transparency + ("alpha" channel). The color of the stamp comes out solid.

+ +
+ +

Add the word "colorable" to the stamp's data + file.

+
+ +
Tinted
+
+

"Tinted" stamps are similar to "colorable" ones, except the + details of the original image are kept. (To put it technically, + the original image is used, but its hue is changed, based on the + currently-selected color.)

+ +
+ +

Add the word "tintable" to the stamp's data + file.

+
+
+ +

Windows Users

+
+

You can use NotePad or WordPad to create these file. + Be sure to save it as Plain Text, and make sure the filename + has ".dat" at the end, and not ".txt"...

+
+
+
+ +
+ + +

Fonts

+
+ + +

The fonts used by Tux Paint are TrueType Fonts (TTF).

+ +

Simply place them in the "fonts" directory. + Tux Paint will load the font and provide four different sizes + in the 'Letters' selector when using the 'Text' tool.

+ +
+
+
+ +
+ + +

More Information

+
+

For more information, see the other documentation files that come + with Tux Paint.

+ +

If you need help, feel free to contact New Breed Software:

+ +
+ http://www.newbreedsoftware.com/ +
+ +

You may also wish to participate in the numerous Tux Paint mailing + lists:

+ +
+ http://www.newbreedsoftware.com/tuxpaint/lists/ +
+ +
+ + + diff --git a/docs/html/images/brush_edit.png b/docs/html/images/brush_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..cb709021d23561b1314184ae5eca94953a1db30b GIT binary patch literal 15229 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/canvas.jpg b/docs/html/images/canvas.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0545cb03252abe2d7564e33cd150ef3f08be3181 GIT binary patch literal 12005 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/colors.jpg b/docs/html/images/colors.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e2a2d8de42e8c883a7cfc674cae21387f2d4663 GIT binary patch literal 10585 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 U5bNWJ8UO$Q07*qoM6N<$f?qe?T>t<8 literal 0 HcmV?d00001 diff --git a/docs/html/images/ex_lines.png b/docs/html/images/ex_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..cc29e86482f881349ef807404ed9b2c5a83a35a2 GIT binary patch literal 1446 zcmV;X1zGxuP)abfMoS zKZ<^NlX*^>5+7h9OhkM@nv&<89a}JcDqCF_3&tm~{h?w0gV9L)z(UGxGS5jqyBrpZ zczGd?RSztr+|%{^yxbwM;_OW4aCGE0IeVztZT5hz4I=WK(TKb`L@=4tu*`_qz>vCn~pl>3}Ckzm(|Jja-dFKm6bqY%BD9CGo@lxj^17lN4OlF<*zfanE#!4Yd0vtsjtrIM zK@#8afIKJJfVux9@eL1%_XMUNNm|0}1xfk|)0-r|vEEyleIbc&thWa+8y0+$gvFyY z6_jz=mY}sT8>97pWko4m~ee98K70^ z&Lh?%9W!qd>yt#&w>aFq#XMSya8_*77}!{LCRIp413^F9Dc!osX|IG_8R))1;OA{a~shlCxt2nB}(Y;p0;>%C6}sW~KUACFh8w~-3cbV$JIx|Vl%@WYxDMTcl~WO;`Ne_pFP zM1v#+%!Aw_?DW}61r-Y95T)KaW0)e3-&{AG;T)nw60ng;cxebTs6+I+Bn?erhIWV^ zNg`um%zTNk*D%jXjDkZ{`&|v(^Vbmz+1KOjFw<~|D#_xfg_PSFsbCkI=SIP!e&@1* zJI)M(TlkexD*JWOo-JR5l*)eU)3uNV`4z=G6;!8=8tuKVD8XC2IwFZDOlc}eCLNNl z)x$452---ZLvnJ?KeyYPcLh^{q_s|m6fh5Oq~nBx8Jc9>J-(gI$ET)MD#%|!NeZ$U zCN|x-c!eWb?Qk&Q@&CBAVT)H&1u|Ki)&KeaNIlAaU&Q@jB?>WJYaQZvKB3DNuht|b z4smx2=$8H7s2xe6!xAZ${WjHtq?bdzc7B1Hl5EFtt!_HN8qD^+F+1rHBo zB=elp)7M~aIAAubc_~Kgr?kStl#z^M77JFEm1VK$;I$uNVd~^vLp*O6FxJz_yM|D} zSWm&^rN?6<)$(iS&r1Kj3MR#^;SzbpdSx&>Dcwn4mr^eIB6NM_hN)n3yEXjlq~(y8 ze~VyR%lGe&?FuHdjLGDcUIdeKuG;4M^r8n=b^L*NGL%ku1 z4Cd(Akx1(eNn|jcuVL#GN$O&~!O(qo)F+bs7wZj%j*kXI?(f}Knx2^il7#u3?26Ix z>z2_m*%k9SN#fq6XVbNr`bV;Xew+L#`Xx;M3)M#|PL;L%^8f$<07*qoM6N<$f=uhR AF_1)>FFMZ}7T6A>d2Cn8!PPDG4A^t*>xffy07 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 N002ovPDHLkV1l}V-qZj9 literal 0 HcmV?d00001 diff --git a/docs/html/images/ex_shapes.png b/docs/html/images/ex_shapes.png new file mode 100644 index 0000000000000000000000000000000000000000..d65ef344b1cc3c6caad79e9e229ea6bec9e2be4d GIT binary patch literal 2017 zcmbW2`#%$k8^0~=#bfDnxP?^OL8f`9GRL+xnMIDZV0{{SZR~nV6 zjP*)IKvk69;tW4d86Y8a7b;-mmz6%cRiq>^4vl>Z08rEVCE(!O)HNkk<+?JQRR`f{ zn2LTvIKNd%PPkIZ-ig;|O76!0O~ZD_EMuW)C|GG&s5uErQh=r@=9*|@l5y{LEE){P zLZ&m&U@RDn#-gE0ZH8)+Sfwbu3$CE`{PFT1%lq_Q_1LKYoO-71zUQB%gjAw`Sfw zkBq%NwbJ7yZhG<)D44y=EWevrpy`VDyyijTTeX{ZFv<>T0^E0=&?>jUzFHw3U?x%W zFPlLDJD=g>?+Ik@QTf3|AC|R5p1843;~C-57O@(r=pI~l)kYM1t@`)((DmzYFF9vL z=FPy2K2Dt)r!Edv*5LDlONhInfW5HSIYp9k6AYIONbD%`mV1}OdLB$bOb+t5+zPY6 z;=5>)+@}qc1b++UDvIyT?L7}l?C@IlUGTPGpc?Ei7dF5$w&G8YYb0iC`c#H+AoQ~G$G*c$nQq|^k+Sa8kaOjv+TD^LnMsC+_B8uMKu%=D4|^C$amnlhcz4SBfQ)*-W9{61RA`vwQ$Qb z?M|x9lqyfu>>@737(dCBlAmu)n(f~!e-I|U3+o9GB6qn&r&asadD5d}0?1b1A_cm` z7<0;oTr%5uCHi%`dsek0ayv#%C7H3JYZ#dr+Gu5GH6ZistiiX&iHDQ*nn6;rQ$u?N z)pq4s1!E?nW1?dYIX_X_%ltm17IykFlTQ3mU+N;bv^N0t*$7bT7rdJP>g_kP0v}L4%QLs+ zYm)w9v+36Dsar5z_xgNOdNFDT>*sw@1vo@=a5LB1jx$#upQ#}9>|;lg1Zxbony5~mpk$7V7wmD8=L`iV?CBlNUDv{XFK6I0EldlHIh`)7N-;NV| zKb}Sv=+yPwBq!;BkMan|^AG_6uQIvZm6H+(=(4S{#mFN+2VqzRq*GOi!ibPCE{QKG z1L^2kkBcod%d-sy&XMgS%kBG?tv5BQ{CyTv*M?*>*2FYLmcvM%E*r-?&| zbwZD`>Q5fY)Q&SbB-DN3rQ70RpSET*@uy{;!4Sp?)lfe{QRo@qFC2#^CYOi~OkTBmLD0A3_IA4Y}ga{p6>EW2o5t z{S^+D4@3&ym`mLojjt-ZZnL{VTICM?q1`F%^Y0=8C(kB>Y`U*yr6*7)jrgX3px zDN0V9ePK6n+72$NMBI`nJM`k_;z(g6(>Ir%b>U3h^R26Tr|0kN zzmMR04+|ZhX+_1E)jW2mc^z|6OAaG4tVsMg9`aP6#kanTC1!7r$1}kBPqKdAR*C$v Z?fmFpQiUwrMfr>YuFme%TBoDD{{jiLhOhtt literal 0 HcmV?d00001 diff --git a/docs/html/images/ex_stamps.png b/docs/html/images/ex_stamps.png new file mode 100644 index 0000000000000000000000000000000000000000..f0fedf0509e90863fb60731d7253e9c564858049 GIT binary patch literal 29926 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 RUMm0q002ovPDHLkV1j;3^z8ru literal 0 HcmV?d00001 diff --git a/docs/html/images/ex_tintable.png b/docs/html/images/ex_tintable.png new file mode 100644 index 0000000000000000000000000000000000000000..1a10b7cefc70f6ff99dfe728c6afac3d8d067481 GIT binary patch literal 12933 zcmV;0GJ4I4P)V>IGcGYOVIUwaWs|-!((U!jo=a38a5g)8t?SvkGJ1uQ}Pdq zl)ZI(ehY;H20cB4_xnCSzTfA0-zh1r`1Sa=d^msIZ{XMCJs9G>x{->b_4D5v-G2no zap>0?j_WzjuUE;hV!UT4zVyeBEkF0Ax(^@)fUE?~!*~0YpmEn1rIhd03;lY$eU#pl zxVW;k@WoHfkM3dOCWJ#}7`KcRNI^QlDdF8z^KP5WoAGlra8@=(@{q->8 zy|Km9&p)kGHn*t^(+o%lL(vhNzAZ@8Xt82e{?zdbf;lhK`Mp4vSKXUKEm5a;5L8qDh1(Ie!qk``eCE4RrWWV|@QV=BoQc(A^UwxNWh|(ba z`tgS*@BEx_uSU}cpMLtOg+&^5q$CIk0yOxN6kO>Gak5^!w_cz1{XkrggE{x;qk#~? z@#BDMwd!+oqE-{vb*o?fxKR`@{p&Md`TNI|MroW9fLq2J!YMIXrS4~O(ct6_WrkSy z@m(sz*-N`1gj>$gYE%d$Qe=KL zkj#uSwij;*ouYIWBaOY9Asm2qkM%2z@1uHi5Z*L#&&q^S8m$=;>HaVo1AoOwHukk8y`37G0uPYC7mK1q{tvN*u=Xi zO*f|Q6G(iQPkfN3UB~7cV}GH_e!xO#5RG?P*+llj#WyxpGLF``fBVV zhAwEB1pz78HL#uk-fp1S$iC8vhgq-3_?NnAMf_B-BBIfjXdZA_&)BRWxAFT3}bfbAp5}>;>H%6+eAs0_;^E^AsVCfhVWh1hJt9|l4!~d;Q~xi3E^ceVKNq!R>Aqai%co1Ao9 zmtVrTArzO+oiaf&9Y7(fH3J@=r{-md_I9!f%q=febfWCL8A=oH;=B0nRTOI;r>IkQ z5Q0Q!yrPt%6u9&w-i+u)bT|0)1I*9kN)kn)a7+Y^u71}FA#q?gp(Jo!gp{pTb8*SQ zV?2^ULR$0EP`7{bVG?G*w}xvjC>o-$AiKERgeM#2qH!|&S zAJ>m!nx;$NebJx@S$NYab)Wfhd^h{m0G#_iCod zskIcHkZ80^0$xhckbi^O-c@NL|?O`C^_sT#4$<2cFaz~uBIO$1S1kH>8Diu z`d?mDb_z^h>OgFRTns(v!tJmh_S*odEZE9osS5LGAeYdEH3*>w5`0M3JMCwl?L6}= z)xh7spK8^gni7uV&mRsBAC@=3VXhy=UUxm}MTX8BEJH;gnXMxnx-o&wfHBxeky&As zP#LDTL#VO~OgL0JyNPh9d0F1;3dx8hQ6SLPwv<9hYE>S3m_`FB(2&HWpcP7yXi`nA z*bGq-VML;`gh*?46e&2O_S!}s>WmGg_PZimIVWMx&QxR#PFV=GwX?`ZO~YW!&pmLV zZ68?x0W;9p4E33_U2F8>%lIG<&erd~yZM>VTnC)jkK*R5D|tSdIS7gBp}`T#ml=%<8&m?y;0odUhEy2vly#2|q%aHjgYkXZ zI0EZJjV<;dwqF8Va4jKmKtc@KrnL#|hx70asKO^;6de0RU~^%yv#_}OkH1{`(1brV zRlD=JKQ-k|PrL5`)EhwY^>+Sq(nqIER&h#12~LUSF6n@=y_xoApmIvoyzJ*QYb8-6itLKiv~T_gL} zpk`mKR*0R6#dRJo!FS;d+zCDehN9S*s<-0k!cu%;Y4f?~&0=yq=~kNcD1^t7@F-Ow%oAIZmiDz0?HAr43$M$!tzISuty} z2JpxcURvRWWfs=yR_jUG#g!x)SI`Sd5}Hk#lSCn5FUxllh1S`!zZ?>FDGRCrn;}Y( zYFvR)M0G+G)9DyL?7iAH9@fyu}q8>LQDZ0k2a)9qUnZ(&ktyS&W(nttoI} z(ayer5R^sTyl9@trjW!+$Lmge9oPgcy%FHweWL!@W1`u-0b5*OGyX77aN^yJMVLrw zh=+O5cu`}r%U%BXFX%)W_b|_0*`(W}wig7)r#U*oLYpVuCS}2HLYkryQusiV4^7h7 zbi2IL;(c|>f)eyol7uo0!1oENxGq;B{%nC%14I$7WO9PbA)7vl_N8=V<$wz{*tEWM z9%>MR2NWDB*57t*P*irJi>XZrbvw%jjJCbffeIv0hZ*RA4_$kQw2}{;&;-|4l;bd{nd~XH>l6aRu638q;UF`7W!c~HS%}!e(4}6nn zKZ$e!q|5vSPecI<1}TX~CsYG&YoIk+v8#Ed&5*>G2#J6p!Dh&aWRIVD$=5opEaUk& zf?mjhSw8tmzI}?;3bC4Lw~8~8SozIB*n&pEI&+VzpSGWxPq6k}6W@g{T-Q zxpj;^f_}=DA_y{Ox~q73fph1GB2F?YN7*r`*sR$2QehFL;EMAh z3*mX@?z<>lc0D7yykY1;($5|-x{P7{jY_7*O;%BwCtl{%>eb84I6j%x8jm(T+ zL|JyTqGbDEK&rEl=6N`fBpHiHHHqfZ3a(_}kSOYP97t2N;(H5x?J2?t72yb?7$Io2 zN#WKpe&+#{3SRnFJ_QP@P_rtGh89ThENtC^G6#h4BCOfqXF}zt=0_J#!;E)WcItcRUV!-)bF}66x*xIVb~Lp4l-A1>@w-&4KcotC?V-n z_gU=l^dhU5Gy6*inWY{a!y6*$bI(U{%b5=6mhoL`9--n=Qo(^;4JnBxO^FrTG5wS@ zMYy;rjRt!pQN&FFLXg569scwb|NJH1=(3|3kWJdK;DzTneh2f1&A(k+Yo|8k2&fk3 z*Q6nBn|Z1Ngoa?e2#av#8w*YU#GjJvs)$G%s zh5Mie9vp;&5E@zB3b4M_);opgMi$`d0zp~mm59F1^3oB> zM`utmeub$?M(d2$_~r{Fx^nSijzJ2cHMQ6xSA$s_uEwnsI|nbqvX$tZg5uMGFT?K_ z!k&a0EW@TPY~_+{+uFU+gVtfzDvX|ui|cR^HXwx>1Tbb3)DVuGyr&4qb)wi^Z+k*!5;7c%V7leYAT_1Iu*5>ZCT_CAF z2%!NL3(^9dDR}8N1Q5X_D43pXj@yWM{V0Y%S&ueDw~SNDlovp0dOK7{0MY>~o0+E- z4iDVU$^D#e@q2%of%?c1S|OL-0PtPr8noY}u`koU&b`99SNK-7iqmCpK$@TwWlf^k z)wq(GSsa0iaRf_C{Lxdq+NPf{NZA+g@6GbJ4zaJo>MC)>ho;b)_tkl|&C*4ph}N2W z=8Ux3Tb>O@HuoE~q0Z3u=inuqd8YQ_Nw@=CXu^~wmkQd@hIKd#ZK%OPXo7?d8(*6_ z;R6LdScV3Ka1PEv4>WjIJ;+mH4ULU%k}mbKeV-OTttKKmy?mY_a(h=)&cy2X(XaOhUP{(UaIPIz(* zDS0!bpOR=wDPhQV%*+99sgWpRMYqehzs*{URC9Qq`|oFJ8X>q6@;^SriM#MT9{D}~ zYK8yrEc<7ujnZn->(wrYT?lM-P!%k47A9=?F(#OYH=|`Af(clM9?Zf)s6iVpLINFF zgk?+TL+C;qK50{!NqE}EKkU+J!`ETezAko6R0=gtBL~iW?!Wh^-`c)=Jt(R;%K3iY zfdL%8EenuQLfy~G7t=KYNwmY6HKd>$bLdtsyq;x4H7}Fs9zMdEHJ<+gtCu-+E0^8? zN8kq}nr@dwqasE;NU7H;3$&u$=E5SvA=OMw^7)5ocUWAY)ncW^(PN}3zxPP?M!$ES zk4(`RqcO((;nAm_5;n_7?QELmKUw%sUnnRqN8vM;tv>?`@HuF~33$<_Crj3t@?n5n z1O*R)h8oOUAf-)Vy7mp|!V|rM#}+m^&iohmz8#V4vc*?cP3yj~MMK`_$7u$c0+$Xj z8#WBUHIL5L)nanp=jqf-vw#_2fdlm$_U5C}o4*-h!R znV3Wh`Wi>jSx3W;#`pQ}9%RJhbDu-HBnf|Oj!zurt6v2uJKR#`=77}}A8b;BwYKbZ z0@$$CLy_%S+;OLya>+$umRIB4Kr{LtimFkg3|?hw*sf&ZV+(L zu8$A^zd$Zs>zs37gspVCL*m#!dD3q--y;-%c+tc>-^DFw!OyUJZ2Ob3MPrx3LG9wZ zbmQ!=Yj1LJjL9l9qqf(k#9V{vT2>hGn@xrUi3UhDj$n||*<^YK>9ZXH^m+)`ia2qC zkI%8uMS$yq!+&s)6waSVfM4O{Np>`c=J@1E?mEF^kBeAot7;lCdK07-YqZt7&Go zXks@;X_^7vP*&MD9p47U$to+GSG97b*?$YmU1nVt+Klhx_#{#gYMu3$?rLx{;j~fb z_Svlb+Y1@3)9Els*+0WgRlfNmL5=O0AmHCW$hTf3ijY32zSB(Sb)cD?E2SbIad&M0Hv@ozL40OAohy(sIWQHrrTy^xZFBN*{$wGe_qO0!8>@XZ$y0x7s{91Us87a!r$GK-5GI#{ge z<}&v|sM=iAO!O+;4dW2Pik++zpbK_60~4?W&p{pTwQX>h;9)oo9Sgi!F(w$h1;(N* zilGJ4x6wMWX=(&h|K(3N#H%Q7zOsDr|9mX@{_|odHl+!pYUcPEQek+4fzaq}21rx> zbxIj>`GbZ^E^TC$DHAN0yH{bBBI^f8Q#NBd5m7=9x9bG-QFtK));mH{_~Uka3#33QtWs$^L0B+ z+7#auC^l_=C}GJ?x(9Rc9n0$t$us%RefF|r@D1oe3y#A#t$rOrU|V~7*VZP5)o~L0 z24rE8RpHR*9+W@313g2r_u5MPyU)~pJojo74O|U%22`^vG4Fdb8{33~H>tSUF^Yi3<}jn>+L2jD>fj=?gVvHte7MYjbF+k&-OPyi_O zC?^GUbD_e4U}olLL3kBK9d!el^;^WdY;0vnm`2meFxXmzDPovXFt$3Fx4|X-49?{) zV|%mf^J20q#W^|Io12L~G}*eXq4rkUO|$AmU$YgFCtLJUwC`GFUcw2F$+x1&(%=rE{zbQNq@YA#whLL5{(#D>=n3v<) zwfrx?7zk`xv1yaiz&HGW(=Fy2_%5L$RP=Ue%+D=Y2E0(H4g$0G zK6CIm)S(L@d5{sH5m5x1fyVQ3 z1tm=hq@-kS>7X?w7(fbpe6(i7#SgOQRsuXpqKQ=S!_{LK7av${se;g)ulm5w2nAPW zoRvXN6!QDXLWs>>&)Ld@`L$zZ7spaPb8*Egc0dnK!M%2h%>|o_%YjHE%NE7I5 zw8jxQfF=be%?#A^Gln4!_yPa&yUfm*uAJ&?oxF)AvR}SU3uPhZ<<)#)`%Z;T4k;Kh zg%YvJ9(&+hN!nZxK?^qR3u$|?fv|3$ZoGHX-hTyF;J9ThT^n~pyN0l>$>xV(vMJ~1 z-w}$=o*GacA&}W-e51UWPW!xXxH6ozo0@_~IzS2j3G1K(e{bsZ|c&#?y;* zBB%tE9d;6~#OM^^LW+>=@iVts77P@?*ch%P+(aepDh8kwyBYz)!SflU^izJc%HcVh zP1f4pR^-{Xd}U*d@uF$r|I~$wtF|@$yhfOZNeM5&kpeJ2oPb5!Xk#GUgbthrGsh;T z_N)z^u&9_`(jTgv@`Mt|w!-2IChm@z7x&p67{|Q3vMO=+Fy!eVtxJB>;g|T+v7$0f?+E zu{l9woG7H#qTNPm1niO2>bN1op%;;+Y{$5QlPCG|mt05W&G})mW7B%b97V6t=aTcq zJXKNlSuI$zR~p(r2~9X-%{sF2Y!SN9fXH^%gtpdUT*3xuI0RiAET^FbPut!&ZACc1 zwb@M`O&iC5reyP06s6}YM@ES(y`2pW$Ws}v* z%+|T{!>lZxQ#aSMp0+_s9N~Z~*;OELAXN+rN-zWh_66L2kPlAq${L+6(qpqrUjvlQ zhEf0^YqiTpKPSivn2?}N?fXtyPHXwf(C5BhK-9@858>yWw*;5hvy)M2+qT& z;cj@rx@FgDtqPWG0&E&wXF*x_Zu;K#!$mMn7GJd0F6^Sgw#DZC#HK79?4PbZ{O~VC zvHZvvvf7Q&-j@iO*`o4|CV{8{#z05wz?eAx& z&ywHl-a5^`fDy^i5Gm{`5=F^jSFxjrRpv-`6lIqZ=oD|5`WPP^M-1V><&f=!WQScv zTH;45{MK)=x-z-+{SWKZIJ8aET5Q#sZE#`70#*hIH^USR+nR=HfXh+D0{px1EDS>c zKY1=?^Hj=;xZ0!Cp0&Rf$rS&wnKH$xRhz=NvQ z>L&j2qqScY6e;Scv!8nO#k0@DMjr6;T2j)#dRk3hO*DMbJZ?JS%%KeCVk7YclJl=I zTL(DUKDRu5gdo5lW3@qAVL0M3CNUb=q$498_P>o83 zwHAN1!b1;j{HP`V)wz0Mn@ecT!YxRn(mrU=YCyfPl_Iv@(oCz#7^mS9gb>3rC^!jC zYol0cO@j*)FjZ*GG2HZ%a0iT9R@w!?vE{?C&>`nT#rpgWa6DN*a^x36$ThY&2b4+-3-%6EDlt@Mr%xa$JM?x)`fO|ZgUk>Apvz^& zbdCK<=lPM}OeZIhBMiGpi6`+!a2$rpl**Kc7!1&wC}LaD3wh%WE_d0A(J3Py$u5av zXPZIF07?U*h$}rlet1{PWB>f6Ti_PB4Q>J#_QD7Z!N6kU*hx>X?SL}ITDG)d7xq9G zZi9Q^FJK+Et^WB6Ou-2lg4f_p7=;G>Cj2(M0bna*GwS%7|y{qj6e!~ zYv}u+4nFLIanr>0{`&mCI92(`N8SmF*HHTAZyxP@|C!<$3fV@ebxee2JV9=ZE@J-t8Hl7-KnNA+}L{Cs&^V1FjpWsiDintLgu1vs+?CAYc~6x z`JW&D`P%8vL@|B!ykUpNF=BP_c=sAmu}P`n9f6Fs;9OE3oa!WlSclgTL<1eBlXV$2B>x5m#>Y0)CQ&QMXvR{3lG-3-zJmLtQQVGCxg-5s& z-zQP1Bs=5AFm_jR<_z`v%O5{{9TUZcB;A9eh-<>*6`jCkmj z?U+O{NCAc=TMi;c#nA#z zj$Q9qPn$QO=7NB-b6qK*n>!r=XKdS2e%lZ>tT9c)Jyv5g*6doF&Tno6@m0%$ib9gf zYpS`@2GNk1{okJojvjsI5MF~~x4qH{lbrk+Y0YqdBd3|P)99!`H_i;s9MhMVL=5Di zx_Tl}zMZ&pSw~Z|49un(MG0Jq0|S+18vPU@(ZVl$}G*BaRrPnVOndbNutg z^?kvzlnteP3suqbTzhziE?7*i2IR9}?1}>dSb|Bo+fw*8_~tAWI0MVJ-Bef@@}-cA z1BNnQv`MeBq&`oZEB0*!AphIXH1GWds_D-|(G(?&C~6$0=`1w`DN}MXW}3Hg7=ZI( zDpNW4&mFQMAx?>Sa*DAALjvIf>?XJlxHy_!MWPvKAZrHK4z9wH?2(|^Rsbaj1SJRQ z6K&9o*iNYUyt=L~T<|@KQo2CEr3Ej(cCT-GZ8*%UjKxi8sZEQ{fDiLFX)>(C7^vyv zUWA6_EuKwu^NLCbmhE{PSPv0cD-0~CbrAR5J^6(%yjuvbLD3&=8vCnx_JqrV%w`Vd zGYFZkwc=5lrhIQ$e}1S&uJRawE5k(13E~LPXF%2#oG5w`y(p_1Von=UIN*6C>gpC- zt=T703L%KoY-3^^v7>PWWv9NfI=>lmZD7lrR?-556bg!gJ^n4W=tj0&WtM^u9XJJD zxEt!WhuF}*yfgS5XsAKc?j_cCH*3pEtjen7d11L)*jp2f)*9b<_BtTE2F0LOH|Dsp zb@iCxyv&r#-1+I4Mj6Ok8nJ?asZZq@5M=23E@?HO-KG){RKQ_7=8a9l5Utr(neg3* zJs!g@N)bm8BLu?5lQ`fC;)p9fdLdgq5{-&UH6wB=>_p%d+M;614i)q)S&S_<+Pd7- zdQ`_6UsNbvnef@Rk@YA{!l*@B*~_M_=X}|=wz~G^;=&m^*cPdZT@W(w-}wi>bA1qA zgCbC``JsyPV`#eZRfMpt!TZvL9rip_nb$c|-nT|pQTMsy_(^ddI8 zc#;%0yQCWF?aF>vE%l>EwE82y51|O?Im6uKdWpoUqhWL)(^u-%^ptlc_O#iYI3Kc%$z9!_U7r zC<~v>(F_Sn4r$7;$WARXG^3vqM`(@KC`F<&aZYQ;p<`FNacJvyCtGYw z5P1;)I`hWDKxPc=%uR+nPj^#Ct^(*vtuF9vzd71+=@-I_pG&ySSOLM$yUiPf~P%w8Z z!t;531Ff&t8c7i@Lk_8?7gBbR9zuYitVvR?#Ox;AI>sPnC&3krc*Kg5LrR8XU*k9m zHf$S9UOUv*P>gTv+7bs=%*?UOE6hnj_t7?)^sSL?!Yb^C6Shgfx5{l)=&~`Vnz;73 zhfSDSh_7D{9@ z(!1ffy+d9<3E-vmPH_Hw{T&o8-YJU0tK^ns$e$U8{wsSft+~LYsV0%>#xyEdQz4_* zm@jj1QFi>skIyd&7;o@qk2iaKc#7B7*;c41!_P#%t(ak#UCoZ>a!5a=(O}30a0I5w zL;BQ5i6pT?Yx*fWs%F*BdLd%@);)TK?v1#RwJO_wNa08?QK0{3-+iTU^o4I#)2Cq0 zHmOQ`hveE6DTX7k-#)!+oq-E2=)l7N_J=2K48^N84ZscFzxFSmlIWzL6(#a2vGJwb z`sx{{=0v{!AZsA53^OdUXAPBs?5KsCJ*1%Q;FK7M(&FKJ@I2HGj^N6hID#ZWr|j`4 zIc!C!nB6{GJ>Kl`#s>YA;SoM|fbxLUVW80o14A792*ChS&G2wCEbdxs8+j~-aXY65 ziD65w4YYko?Vc$ICM>8Wh`@YEgoXh~*b4#dwOr7({L-<}cNJQ23A!+_#a;)-LBem? zT4o9rTLK>f4Nn`*_Tmq`ieLY^y^247Tw{y=XmjRwUs`+eWRtFG_tu4@q4ORpLmN!` zV>TdGhObh4-zDD7B4U1GstKRfas;No2Es0#4M@@21~$PU%}%6M35iC4Cm}^jh6O@r z1xS?ulwG7?NaFeEr0WWx0bLu4+(J~7g*pbd&&6=c{7@TFP2fB?>x?rMKxP5OyZiQ-9wTcvt!DpslXc{g6vpnqe7yQKCVP- zqL501UPM2^0rMebr4%$nf;|D6NGozRve4T}p%N4o%1>DD>Rt<8uF{$3y0(C&Y*-c7 z&YHG`ds9;0Z!a)kvjw$1SKeFj479Ed-sk?{ODC@v#cMpO8M4|4wMbt*FVY?36{TQU zFf6E!uuo>EFc=f83{!c3bK=nPj~>5&;+`+O|8L)a<<%cVKWQ5XbGh7TI%$eZ*_b@Q zR>ZbKYj$_pNk|e@On8MjCh4=Au%iI>21Gra63!5{8p2`7MVn(i`UrtjX2fIPK3oBV zd;jcvu5Ar9-5cA5g!4`7LX8!cY=T;cF>qjutVFC}7c`8(NC8pvy$rrhGRxLuj{q1rDf;~2g^_fFs`J03iBo-AD7Y7#U z+#gEVEkwk!g=)yc)__slsBbWKEgvnz>+ls=00)Kv7_(ik#yNL?xT<$|ChoZ7-Ji?RXf@^ zSmTyWinM;y_;>z?$D&}AZkJ0dEG^LsGqJ|d`60=W!1Jh7xT(r*4T373#FLa=-rPiK z;)t!7?HKIInj>EAO79Q8{_OZ>xCZNmMz{P+*}T!S!gm$w(1g)z`C@F-THmryGto%_ z``l6I+qkhhYPGQA!no+O@SQ^1?Ac5>uqjx!rKIc}`1_we^7!NLs=oO1K8ZnVo%Yt# zBt}U0riN2~7xx7&efJw@pZFaTW$0s+u(6e8No%)GpZ=Xkqnqkn4r#U6?9yIGr))=* zMb_cCFJP}vrQ$isMAY7&b`JDb#$R7Kd(+HwAGxPnt`J3Rb~8k6@9_BM=I@?4d;3~D zh85c^stVLXS`DQFRT#6jVjkJF(rZ-EaZH%ZwRK_5G2a2{7EU7bYz05>?>3DZq3w)H z?Ky#!f@GfqY4Wc_|I_CW{G;E0Z&1APp`!5ISMLiioHCN0*#cm?0-}UxAAF)Sd5~Vn zW=Jn&y_4C2Vo{6meC*}m{Z(~GjhrjjgwdiIZ> zZpO-NVQF7`f`usboCQ|N3}9*Q;BzNW*4Ek&e)Wm)+8r8i8L~h$rPb$hF(FTMbE(0% z0o5;vx)dZ_X`O^FJaV+t{yE!D-!gu=C<19;Z~WlQr9b`S)qnAI<57)Pko0+Z?yhfr z>i5}6OpU_tbtnJoWw8^FC*3LC8N1RME#cM1E4NPjH;?&alYV{D-COhCHz|Zz-t2z* zJEzZgLsW#)>?ZURB1J!8E8hQF=d<5iIMD4HC38JLrUG={9$xV`J~F-b!RE@xW?CPc zRh5eA*P1?e=Dx3dHQ3nLv@%dy;QMC8Rw&1k2haAAR$$B;nQPs0zLiH8J_tZu+x3$c z?9!W>oP74{-hl(}aFT!NDCQ$D4Kolxe!o_6jDvMOPrN0WgNcr>KD+PZy~ zpq3rInVm>3@O`wdt*$)s*#{}mlHB-mWi_(iRTg-KZ$CCA_oz9g!Tu_)#jp6M%rQK0 zf9;7U-qnW&{_0Q!k}KV{fAwtZ|9-N!zLI~CiZePjdf<*=tcj5Ij~)(g+yBmQ*y@Fk zURZi=t*rp1=yr*E;1I`1@4hpqXS<;qq@6w9`YpAWKQgWMc$>{;I_$EyLdnT??d&F$ z9E8A?kdmfy$UV5#`_%vXxc;++;y%{Mmaas>D>^nQH70Ai*(&x-&3t!GVvp!Zt(f5E z@RuEKu6l6nKYm;`8t-;uf2Amz5v?yTe&z0Nw=?s}FZ!d++JWOgE7yI8BUI|X zGiOe%tPqCT$J@A)UWg+yJ2N^vAZ6C+%wwfk_6#WcEpgFu2q|RE7NhK!3&E|t+t31nD%pxBj`oG6pf%Zxpc<7eHCYPbnM8H>g<8a)RaFpC92h5*~c3H z4Mg#mI>Lp8b93{$5b%P#Ps}~_)GyW4e&P5vitlV>IGcGYOVIUwmr6wg{l>;T@@j;AzD?aW2K8a7BR|F6s3%{fKWy$Ls1k_ z7SSl8G(!=ClqCU~$auzejq9C)F~{Znyg$xyOcEy!iMIW*pWYvL@9y`x_g>ELz0bv_ zn>t3Lt2cDbA2DH~fMD=4U+L;q-ieoH!{O|O3s-}E{;&j82a}!iq-R2=%;bpK=MS+% zKE0wW_tGpmnS?+{>m3L)(UafydLDNb(zD3diJtyo??Bl5n5*3Do-0nKK^OXh1XL_? zt3`@7tWS-wLO9s>jfFQtu?u~{Y=dUcVF2N1A~u{@CGE1`%PWwkk%@IBFWl%UpJ`QV|PGGV_DH6{4LY=2@ z29$XN`oFlWC>$8$2Cz2+C z$WE$Yb-r+_ied-l^sKMv{Oa#N6OBgP&ar7%reUN2B7MZvlSCslEoXnjp6##gHXj)A zSTu{8$YE3JOhPzF%u}3B;Sx-C$`19Jk4}hrA{q(x|Kpla#TY&fk&+-vJ}`uX5(Z7p z35S9mr(0caHvmJ|0|Eb%rOPJeFq41{R3y}SLKLy$AlNg591aEhzqs;d!+roYD}2nk z3zGyvq*RntO zxfRUE;bON4#ggP;Rv0#hjZ9?r4b81>0Cb@0do`E*5$kv?Yy=y#!sK8gnu4?a<*hBP zZQ0y4&uuvON&73ic2CNo(h@g7%tSUwK&DV&$P^?%HZT*Amvi_JjcYg7b#}B_rhzH^W;(o&{mxyLnE90pLbKsW`<6r{}Q)D+zteUOxpDL4g} zED&?W$=tqlvD-8ZGXO;4}vapwtAS*lzeT&4n`dM-w^0LbVGxMoXIGVWU zndoJ+;r!pr0013rr`Bz(o0Rik@UrH28%`ZNk}!;C*F8Ux^Pl#zz|Fx^$BqEdVw#>b zCvpn)veU8F^}YBAN;Y&I*4mp!Z07v%i?#!XIc-t78ECvxnEdj>}8?A zjou5Lp0bK?aOl!!=hxQ#Y$At7eTuR^#SRGNp>pmoAF!ef|0|ZQVF!qbiOCLtBxE6+ zw$^6v;)*rv>i`UE@ku$;ds#FR9`g5ZeyRS*frjBkJY#1w_p*S0@bbm;jUS!~_y+-K zUq^*gJc^g?e{bKGm+FlNI)K1nU!~9YXkK=3@6M-xu(oQ&s;U*Mn)bd9Aa;AmSGja% zUUp-kKO7pW{ZTD|eYzOG`t6Ks+8(RWSoEJKJ_DaMNG=lNT(C z%kA#{+r?2kn}L@degDwV^&3?yS2gc{XY>au0d)PfWBY4wjORF2P8#MzK4l~8nT>n* zy#A}VH;m5lkx=l|iKBuT)_%q&6=_&Lm9Rrq@^YGf*YNE6jb&vO*%#bbxg-<}#_mL! zlyRKAUUsylY00wX&upyAE&=7=sszySN&A}THUNcs**kCU0&wudlerVpnUlx6I?qMF zjF=NRllxRS6g<@U_8Y%x%%v1BDg_X_708Tw0bUjk1zZ2rQlE9g(Wu?@Lbhe&IJCs; zh8?*+^+9vfo?q5WiO%*m(}Y!ey1P5u+W;JGZtCgoHcS}l@m@BLW0=^#cekgke9KSk zvz%uQAO zJ5|Ay-7gg8Q%T)4?WdH}#1``7t64M6#t^fc42XskIMF-Lb69XPC%@)U|00009a7bBm000W` z000W`0Ya=am;e9-bxA})RCwCGmP<%0XB5Yi$s`&RHJbPgM!7z!h@fB+7edr@>&5SL7$lvdBy`Gh0SCq?*pKs6L0M*^LnpQG`bni^8j!|>|*`udmOq`Rc_@kckZWFS+g zm~7DoaX-ix?nr@r;Zez&me*x86G>Qn4Q5Z3YO|_BU*Wj)`B(DGSD92=(WF6^DDZIr z5laY^QbhVf)X8LeKd5{kkPc34p@@7Dwfy?K{Dt58*`|6PzE4?PBl@Zl^@!4ip&ysa z70a4-aX9a)b~e>HEK-VcLszL-BK?4)+@zw@1-X1;Bb;0ExJr zPA3bgB!Ia3Jp23mySlpc!1MF-JRxLmZcZeT6PC&)eFP{ zH8wWVBz%U3hV-)wmgoVj7K=`w>+9>quv%GJxw^XIn5r{|=;-JuaXULZ*Vfhm(;sIa zmWow?2e}gza$tjc4f7S5@xg%#X3@^hPG4Ui+32}_J@yMl$CXBjD>FSkO^*4~8{R!0 z5A9{)^?DuK0eOPVq$9mL`ULm76cGoqI-P8 z=tLn7iB1NCgM)lBQI6PjWQ_^Nosf$I2*K&cZ@!Vl=H@0^0*q{EHRJj0>`dSl0}vj# zZf$M#_VyaSg{G|DA%U5(ySqy>__u*@kB^U!j*d)!%f`mWPEJnLJPU}v{Q&^l!*t?Il<@!n002ovPDHLkV1lKNUg!V- literal 0 HcmV?d00001 diff --git a/docs/html/images/open_back.png b/docs/html/images/open_back.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5d5b25756663e9106f9ae37d5e5bc420ec39a6 GIT binary patch literal 1966 zcmV;f2T}NmP)wotC@2~pFqH!p{P9NH~ zvSUNvL&mBz@A>!gaOkIfK(B2znLPX;AiFYy@oL4n{|Hc1lrz~`<^(6Ipnv0R1A`C= zyT?65il%-a(DlvDf2thHlPJGV{|1r+S+75DLYt9cemQ0_KL+T_;_m)F^i!Sibms9p z`usk!vCpr~fXS&o-QV-u^#P#E@l6K&(eT9&Km$N%+q>-NT$SE3Jztiqd`6+_1PkE@ z0aDQ`Vcp;V4xW}PrjrcN?~fr<&opAuh(8EVcf`7X4`%%SxC3b3G{aOUc(VW+%|rqH zPRLB4-&VnmbkM@QX>Ong^kuQk)Z;~in2Boawm2%S=yM28xKjt;5JEMoiE6Y02A5u% z-F#W_+qD4vG0*pN(5M0`YM}3&cHcCO8DO3p=T3qG1}YdJny)e7k9h~EsVa6g5wb0g z%EGMal^TvFpJUR6$9G1Xsw$Gn<|8FDSqr|0lGg7jDZsMloWj+aZ%;tesV4)sw`xAp z83J?>g+JH%e-%*7 z48c%j2T-#K%h&D2#?E=sv}=g8o6v4TYZl_WBv&Y%E6*Ge1l^nY=UP~=_ZLM}I@0BO zu6NNWOuScU%+_t&oK~wCR3WHPI%kK`WWAQ~+T>?+?C#MhBwwhbEnatwKJgw{G)?{O zWmCJc@~mTKuB7nVNF~ayn<(nQWgM#E`K8I{cvXa_y8i!4I29ZO)OIaaiApVOQ-q+Y z0LpaJ!gF2k?HJ6Kuc!Fdak)A#93X@gdwT%2Aj7T-MCfa=q$GpKmm_L8s+e-5#mE)T zIVkdNAwUDInZZO=`)C46v>~jtAZ^Yp>6EG9BZ@t4EPR;A6vob#XYK|q5}7vdn$f_7 z5Y13aR!dR4KcbDuwjPp>JqjLtw595@ZQk462{#wzY-8H#+;~6nZ7~^6NV&4@jG!i6 zWnt08`il}#?L8}+i#)#UQ)iIJvh3=o(W#|&(u9t>!p21li5`Mk7hjD0Qkk(_>}v9( za((XaL{HI2E*(dsfjZ1ZJcQnGgViKkkfJn-dHbmFSiH955LV8+-45m?iK=E8eq&)| z{h?d`?~j%4RY4=FcvUa7?nBO#aBYi9iX9yl#Y=st zu*bUo9L)c6b*hpuL=ja{w+RW^ASx;zn)IW$7osYl-97v-R~{ztcsZu7$1n9>@|r2n zC&Phm=aj#b)rP?6L5dEL4w)-WJ?=zhS)KcN(=5!YKEqG+WDX6I(1>Lvmx2`_MciSu z>x(HOm@&#yZzAu=-CT}ufDoQvnN|<7I znY}>;i@5Vba8BDEX-uT<*IU2K9^BoEv^i%qh!(TrL`^9ZUH# z!cf7;0dTOr(@`PuM+=Hvjaf35B3K2W{i z#1*2zCt#W}AjP5Kr(KS1+&zWr^IKLWCMpciw@RPtwO^ZHd;-R2S&lrUOE1fdviZP3 zd-(RS?!5Q&)1CVx5)1)Yuk3Pc(6s@3{@=^Asf(V@)23eamEnD6$Fi;x=t8K=EI!3< z6n6e^*6Nq+5~9Y)Ij=wSyyFU3Z-JM(^`ZgPy!14`i5`IT)u?4-H-#Esr? z7LBf2?7BP>hX7Vfmn!hA{q7d`&+N=Kk@Nyq*46Z-?j{~^Wp?J4=S9xhsfmNt<|iXt1ik#Q8bZh(`?&}hzSO_ znO|=KQLTN%^6wP~XB4tUcK_BIlrQywd!kyt)am^>gnV+6*_m6JJ+v)g(JW%%BUIb( z3%eiA|8c!~X$rH{R{HG2BTxucQ4Zi9LI7sY%{QTmgo_dwH}&9U!({hTr_nS4Sf3X} z0yL_Vi-NC1 zAA^no0_Jo3*F)HBE2-}$5d=3<{pXCEo5S({0y}K?fRrdjcmMzZ07*qoM6N<$f@QD6 A!~g&Q literal 0 HcmV?d00001 diff --git a/docs/html/images/open_dialog.jpg b/docs/html/images/open_dialog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6871620decdb8e8ddec4fd08f984eb6f7f89c3d1 GIT binary patch literal 7407 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/open_erase.png b/docs/html/images/open_erase.png new file mode 100644 index 0000000000000000000000000000000000000000..5de37808f49d702fd4416ccfd13bd56787992821 GIT binary patch literal 2538 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/saveover.png b/docs/html/images/saveover.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b90ed4c6303bc6e48357c7846c596aa475e615 GIT binary patch literal 3348 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/stamp_edit.png b/docs/html/images/stamp_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..250744ef712149f15c2464ab7fddbd5aaa394221 GIT binary patch literal 17139 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 IM6N<$f)0|ebN~PV literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_magic.png b/docs/html/images/tool_magic.png new file mode 100644 index 0000000000000000000000000000000000000000..5e51a84bf946a001c2d687e66d11a761418ce107 GIT binary patch literal 2777 zcmV;~3MTc5P)B$} zrNhCY`-x$vMF53Ki|Xfg-}b%=)b||rT5hVdDFng*4Dpd+2I5Pk51ve$ZK`Ndow8H) zMsJ04?f5lh2YBERKn~DSbMMB1b6`y^A`AO!cQ&byhUT*(SGPj$=)lMse+~ZBot`I zs3QO~D-Z%Y$1bDhVERZY5hCpuZ#|Du(?s@gx?kVEVt_ej;vIWhiDqkn0?v__avt-% zsVr{@+HHs2gxzPc?d;HMHj$phd+X7B*AYrsa9(WJYbIHDObQQRT#|*%&|Pe z5EM%lgcv11SpWp`y@GcZX}gL>27vpfcaTt#Lx|*#7;1sSXGOZc$L7WZsH z8qlTjVvEaHuF!a~O(rWSd{$P`Y&=gGJ3>m>7xGwk4q>Qh2NLhN!`g!t4)z+@7YbZo zzK?0<0{cfeL(B%g%6yQdkCdp?9yl|gc?VD|R6xSk<|eiIMKDIG*MFl@oyRnD)E2I@ z{rm|aurCx7vq!;BAcA9wl!|_9t1Im7)B!m7V~>vOf-xF1ty07Dl+O%#C%q?4p<|OI zP{L31(>ZFhx8G!{QllMifrNkQx^6xJ~o-ZK{`Ql&30KRu1>5jb)mNe!_st zY)zThmx+2v_S<^=fP~}si_8q-F;SPkSPW2fL^1Kd> z`Zkr>DwdVk^#^}6X&<(z&0p@n+9|TRvBuWp^(6RjmzZC?9z-G;h4dI-DkYntwTGD-Hh25{p-E zCNSti6juIEL133OOfmJb~5t&7N-r>6W++&3;r zi8bKt1hDzb8XNywNz~0;tg`&m&j=wR>U2>-M5@nF3yH)sO$;eznoPtDA5_uS#b1sD?HgA5OasIY6K z&iP?v7!H&WFq*X@uwqXPup;A4j7s zj{#EejEvfRFr?b3$nr7kXGG`=;bc9Cf=Nrc5%xRpQuV#yZ{4_-0B;ux++Tl;$VN01 zp_Pr`bc*r^F)Vc?QVCZ1L3*h$bPBXDBbD8-A}d&Z^px`S z%m9^TgeSPphJGN114oWwHiVII3-uYlKqRa#m>eDE^#H)V;P2eL#=+iR0{rsb`&0&k z52#}RegN86_(GieP#x@!A%sAlNDWpUZ^JE%vhpA+50YCqud%hcnE=1K_6xPS`Lj)6 z1lc#h)D4v|q*g)*fguENLXswl16-Oie|Bfue!i6e5AehCU8-~QfAL*w0JRrWn9KwW znHdpv4mh8Q(WZC7v+P83w~=^W`tdg3E&cG9p!cq=F$D|(Ff#%p6U&xq&Ii&bgqMdZAUDo9E{8-M<7}uh}a`@?x3E3Jf!z?uYx&B~i|FRwd>a7MYr^0Fbxsvki)i ze+o@w7|pD}u*_tr)LFMj!t8gJmx96&6fYDKfX*s|eMBG(sUr}8WrjP@6Ds3(;$Fa? z`U?-eo;Ix1&t_IIgrPKv%WQsx>4_2b&||&Q`C&@u2XO6g%E0+f**VKph8_aQo$r51 zd9->@-H3vT)*h_%?f1XR{+m9L&5z%H(-LAH0{VXQGIOy?b7u!YE79DkGgGbV1wK}} z`pp;VccQ)Edv+tlJOp5mMHl68V7W4b({Ael5{c7pQ=Xa8&*9(I%U@8+4ePSDdgo8u zOSxg)zEiL3|1VW0DdmQl&W$ivDa9a1@2^CFSu216R?bXldilmOuHz)Mb{&WBZY(G2 zzQ6nxJM}udop?NC@$8flLBbLO f+Z34D!9D*APzAVlCQp)Y00000NkvXXu0mjfbKpi7 literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_new.png b/docs/html/images/tool_new.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e764f3ef5ff68da7d4f2c8a9df346b0c9a8b8c GIT binary patch literal 2711 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 FV1gX89Sr~g literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_paint.png b/docs/html/images/tool_paint.png new file mode 100644 index 0000000000000000000000000000000000000000..4910a67820c65cbae1f2bcadf7c440e49586fb78 GIT binary patch literal 1944 zcmV;J2WR++P);`&V)$ev0FEZh@JCxD7)mE|oON#r_~H60=L{}!b<%?ov`VP$z~Po+I; zO>|sVVfQ05Zy<^0u1$Rge}iy^^k<7n68V3+hMCr2_EZ`)1UR;Z3S9kuKmc6ZN`DsG zm}1VJO4qRlfEs5JASXnG(FFXEznZ8hJc((^`f{jZ2;9SE1uQiF*ks0 z+me${M=`LxaQMgoXhNI6_KxG4Tg=?eW$(h#kyJC37s{Z4AQE8yEIsRB#Yf)k_Uc7N zH^C;3HrstyfryNmyigrL6^dtN^yGxN!YBDjl7~FYyvvny?ylBz0GsxwJj&DU%Jl`maAVrCGv5X3tJ_2lq)W^;q2Y<^YcjVq41o$to%o9xsF(%SRq-RGsCdfvyR9{|mzRNmxd5>Jo($7Nvt{}< zD5V$`ggSPobkb4I099K5W6p|0pNOLSLmaJHsnzvJ=m6Ztr~s;(BnGP^i&72ni#qx1 zi;tjT=J4A#O%D0riF>hFF1;~01pUIIPk*Ucm^sCWDMf7={{>{p!y*5fExnaHpRc~U zBxM+FPI1)cse#ovp%ry(0Fln%Re@LU7fRzevBO0Z&0(5|aSeM3Al9*X^CU{K`kpKxI zY8>~TZ0{na)cQ6~ejKvLWd3#OdH%SnN!zOChz02w*Qv$~!OYZXlfgs=S!W=0pf{4G z$zi{9|CoC#fAKF%N*Ql$40YpNpavm`sPWn>#H48gAPNJT z(DwUbdEo$fNb`YWX8@rK3Q#dKkzfdPbB!yAhOXw}h8XH3+R$;q)hf$UB9c=pzS~5% zfqGHV-DW&=3|H-(O{mc{Ij1`-e2Kp&ggSnSh$citdVxj)rd0N1;o9m&=|vWRU>!2^ z`ZjtCjuu^`D=QDto2uoK)3q&-UC|F#{@tWZvce1k(^4UR9|USM4dXFsGu5O1L+K+ zquLb4TBE&1-R56%a4h1s}Pm^GZW!Sn3-EARtJXhypr`ruMPZMAxhF=-bA0 zmPLVIn}k_MWW^Am3JhrLb=4Lifiu1GAvALZsLl4lZq;=x^`e67_3Fwuo%vHvAKDQJ z8aD?J(OI3S9mh36)7m)vIJk~wPf5Kf@5*0CG1u!(tk(e_IsCRUJ#Vy*P~V*P3_(bu zQq!ir(}Xa05QW!1A6ZVNxAMa%HlzBN%QQ*6E5A$FuSmQ8(gD*{BS~~-*ly#-NK-)V za|eKWQM>z%GbPi~Bw2c1yxD#TO@9g6nG9$`qTLV<(z`D60*C*mWm)cb+irT>w(SS& zk3qpJ`mGdBU=uWoz6^-qM6U6X#ft7831=a55m(Eu~9&e znZEF^Us3L0avIv|jJKvl)VR5`rB9zn7CQcQxVw+N3)i-7cRqg?*(j9uq5=`Dso82Y zV$WpJ&U!DBzhHCd%_{>~6GfAS^G`&`WJIS)!#Hiq1xV`@V z#alx$Dv)UXbpi;0V@s}BZ;akP5Dsp_?Oi;#rFXfqYjPl!e%$+7w-MgRd&M-+;ibBNyyivbXk eElEyBZvPM6%A(LDsROkD0000ZJk-Pi3i zhTTm93|`Jt`l^sPo~S^5+hV)b?qW7Y5Cbsegkid5YqSkYcbjc^C{Jm)(A96mJFIuA z3%n_gEA##7t~^OnO4DdrsKY>!?N*yh{U(JAQ4CQJ*s!s+9kGBZ!q`Z`vHTg5wxO{T zRl*cu=EiWu>=9VoZ`u*?0t{WsgY8Us)--Y{Ph-dO^H6Ec_M0}tgL$7PqChhgIs%wE zK?Jn@d8z#1{vGPI+Ohd1C+I`X)XXg7Q+H7Z%2%SRXir@E5IJa2xsW6_pp>G#@`&M)u`YhE0*b4UMq{-dFBkxO?WpwuFhGAuf`2@pEIyb+ zL>L(zM}J7?tJf-Qzo;`>8fWmIV<|GbX)mlm`+fW+*JUD6xCR`@C)S%5>Y&YNsnnC- zdedU<#|6YRx&QrAz#H;__P-0^xjf7UwzKkiEdGlcXK8nnIX-bOT72kO|L%7y^r`_5 z?o1*gtZzO~p$_9aP4R1!2ETfB0 zI+}w9UVAKaj|yU5R3A zv_Ycx+e$kgNTTps5LvHNl-c-sky^C^!0>1ZNzqtq&Bjj)0BpagGySh3Vwya9`aBfx zfeej=q997@P?P!dFdQIm__$5{PeHP7>l28z>6_Q6RVxe*4lO(eL!i%@NDL4Onzh$tdc25M zirMeWEdBDtNiwCl^Y3dcm*=qdnvr*EPd1R8kiVEm1jcVpF?xNR?H6@+cN)GNN2X^` zN%XqzXwGf^ul2F5RG^o*7WY201fdk7wWS5B6$eat`4Ni?bIx*aYjjFj`Uc9m76vB1 zonh+MeI`pqlv4cOeCvR-ajIa)*-UEfZYtfWHJZF>lF?cR+WCp=f)0VtdQD(@;u_V; z2E$*C^6b@H3PVHw9AXHjX-1mlB-+9!I(N?Xt!DsCmWpKk&X4&U03RO7!15)4Y6k{C)lB(4(inb7^RVj&^{n z4(LPYIb2c=?G!3M_A8NBZZ$gLe!(l9f}aZ*uv~tCQi_M=@`-}&BHKywW~1TC*6yj0t}6%uGLdD; z5I1Rsted=I1PNoB!HvM&t!b_dUF6%zZ%$SL15DFIYwgR=8s54fu`3-R<7?$vzAt$8 znGH|}ilO32FiB)}mJ@6+GBSobP@%aKu(`MlF@gz#~>DTJSB=BVi;EU&DMzRChN#tS90Nua5Bx!C(+t%~fSZ}PZ z{&2fJ`E}3nNQ=qn0w2TVVa@;)`hzp4?pjiU{`gdFGefj(~k=W8^Ym-Tw$ zxYt%!7W^@ALNz>h5(02Cq0ldZ0vM1VFe93VuQ-zE##oVjp%Ce-Rw~TS&-3%`RfNX64eP!T_ z$h`SNfvv_)q%ZzGPT}!ea}Rw5jwIW`1i%Let4BV>e7}2u_Tn&hADU>L(bPUc9EJ*r4oU$5~aWjI*Ga4@DS z05DWA(YB`JS>TL*UdtgMs%-qX5@Rw zG3G!{7`)KE6HEPPkKMLrU&WL-Yx2OG!eBlbL#hG*>JTiYLkEkqQp8=bL@1bonM>#V YKhSi?_2E*cNdN!<07*qoM6N<$f(e$ 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_redo.png b/docs/html/images/tool_redo.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd40a4308eada7fd5dfcfcff92f5345d0d60ef7 GIT binary patch literal 2530 zcmV<82_5!{P)^da8FvDb# z#Vpdi#|#+~=F#D8n)i6kWKoMOYLP{S9;)fbEfVUIqAm%2NYRH}@)qa*tv{XaWG3Hs zb=`aZeShco@BD7nXYbycm8O)l*B*&+eDzXc4Q zho6}CECkTFXyg64Hn)AQ0NsOt13#SUEQLT=fF*usnlU1cjzHWG z8Yxe=2|9w_VNnPv1lKm2g>5g;I(QKl$P2)!+Yp%vKL(vA9gdWu)pT(#HcmCBRk!IK z2B{w^tvPrR(rnoC1?cBYM*y-c5CU}cajtwcQE09Cy1mKH&I9Cm$#VG=ny^4tB|SY2FjA>6qyqSX zN;?Sv%S4>xIT7Kk7!G|dUG~zs^hBL$ULgeNEED;`v;YwVFI8cXEDLlL3-b|BM9%Z`7a)8!Jt$V0 z5JkGy=@-yiVy}cdQH?B|9FZ!SbM41*e z8a2_J3)KR3T3I+vLh5NQrN&4hOcIQrX*Fc%A0U?{>+S2*R_e&|vN@)>9z+_nD$J9v zn~m(}@_p(Q;*`ohjhj2WGNHZJ-cvsp8OCT#U zXYbh>8j-VtBGg1<9Zm8E5}QwaiS)mKr4v{uiydpimqT2yXw&`u1Dw?+j~?Emx#r<* zTt$8^QEwDGKi$P?y08@QcCyY}VEzQKE$Cy7m3g?x2&OhK5T)$? zeNeALJa0ClsMm_EZ+}28OFErh!skPTl(hePorcq**X@{yRF>HWMS!K@*yuo8u`Y5U zRckn>wa#ohb=;VAj(jP(#PlU72|>5Jhxb)Gy-%*-xsSKL4omRUz3&hRuHCvrtL3u$ z%a4G@zEDSvhi1Nb9WlkBz%3C$Ypj`+o+Mba=RS3(mHAp?|MBMP2&08~6O(YO(Q}r~?R4S`1@p-X(dq2*)p{FyL7l6$ zV(aD>kN)|P&f{HN*W>Ed>)5u9Qi{&rE_!l|eSR4tog)vaXIeV03Ypo!L}5AdiTQ|v z`sQWBe*XYbme_ObK7rF{0x(!RV7Y+l>q?wwoM6+4?JangivyouV1eZazG z?pOqioYbV|lMT#IN@7YtwQAE^xwMdc9@4HMD`wZnqX6em&9u#RJ!%)7oC)fTPZV>o zbjmFg!u+>{m1VkQihKc)kr#zNcEvvZ@h;NrJp750CGZdX{P6etrcA_y!n}Lx#Mh#j zbbO#oc&3>-whl`Ofu87;tcbl`6k_izRWY4zPe8l9X^09z@M1u(*Tr=`!clwCliYy7NQaPiy@a#P=gb9I~D06<9URZ1T{T}|o0rf8$wANgtcgFXs^Qu3qSXh?I z0!!uuSaf7ImD#KivMf_mN?v=Y*CGG?_byJW$@Q(josD#k{KBd^$5ECAmMx2+GR?Yk zgka8lB4L@7E@IW%c8wdizE6pq6^qM#fv|KMfdFioXuv9VEY!rOUf_>Gp(f57kQHkH z%SbY>G+wKIKJ%>hMUC}uu5;t|_a97Z_52ctuTFe9WN?B8ZD}_896isR=KyLIkxS*~?c=-&lfUWv2lwxC#l6UCb&1vL5?9=dJh*>1ZO^woxPNzM{B)ly z?!^TnWiKFV6_E*m1$I>yBweJu4R@8T?~C^TaC@8f<|g~&H|&q!(B9nS;r2EFH?RH$ zAZ^>*-JO|px=;RDA*9CK>}pm!r-tIJNP34M0LR279rGP|-r^6pw^P!2JnME-QUH&8 zhck1&w@+j^0r1vvO^^y;SK83!+h!UA2`u&$`|BI$>%8XCa%vVoaOzG{=GfjTM=db*K4aFM^-{^($aBlPtdB zt`ZD~5W%G{y_vRY!k51E*too!PP=h=l}lfGxqdp%_J-p^0RWtuL`RzA#F?kgB`w!f zVLSKlrO&p$HBP;D;d9n57~6gP^bmlbcYiIkwZGZS$i(9B#>(s&ZQ+kS2BBuGriA#^NXSb;!=BG!p#T7C s0)f)GZwNn?AaTMHf|?Y_^5UNV2eOYE_6`SRwEzGB07*qoM6N<$f)=*rw*UYD literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_save.png b/docs/html/images/tool_save.png new file mode 100644 index 0000000000000000000000000000000000000000..4746659d1a4117c933e4267f2377af97e2ee6464 GIT binary patch literal 3075 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 BkEj3u literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_text.png b/docs/html/images/tool_text.png new file mode 100644 index 0000000000000000000000000000000000000000..ca770d6135f62fe619f7ffcb265ce47c92e37dfa GIT binary patch literal 2474 zcmV;b303xqP)1KO( z(_b7p=Q+=x@9*#PdwypwoSvSZGJ<-ZqTTgTN~6)Ey8R&}2(~R0=N;zq_Q-x0MlsO* z$)opQ|D0iGNr1V_4(`YKq3?$>(Cm10x_+j!ErM8pCBHMwkOGYkKF&2_{?OoW)fEa0#os)K z4jIr1L3*zg1O~kY;Q1=rX;Xj$-fJUky=YK>wneYgiQ3#NmG?HsegqT@9*xHHjTS6` zm%hr5vOxcmg|7}3H?DmGK*_Ce?;jhPKHjSX?5P~~w2wM8fuUHcpno|F+_Q=7Ws(8^ z&ETL=Wg=;fSn&Aa?dY+$*B-jy^406Wb*}wo;Wq;VjCmwS1qM@cjy`6K!0deeF3~`Z z+1f*A2I%g$>Fvj6p$>h{;^T!syJzY*NXF!JYHXhkr8ER!spG*+Q=-_U0SRL7c(Q&U zd)mQv9K4W`_I{iBxvX=xTaD;`>Qeqa>|dvS&;o*33mT0&)>yt8AsQ*8LiWC85N8t}X>wQn9r4&4D-%?4j? zK20&90p%aCxqhGCeg}KniN>^FGd>{aaU2zRz-Xg|b^gETMYy9sq@so5871G*;~4Az$HvMJy0Y*nF}M!0Mef zv!w(1Ts~H#?;`^T9RE$66wWOaQ|}AK^3btQ9={9{V_>82sg6y7G|8Z@obA; zXNT&_P42Bdj0X1sG#Yj8-?#xlcdt!lX*rsqv)@WFnp8leQBN}`pj7$@8#8Il2n%#% zhB|&1fTfM1V#$Znum5Wsfa;A~Apl8BAYs?uYd`heZO0~5ET^5X+wMm9)f@N1V3CMw zM@Pmltk~Xl05Yy4E9j>e8qHY7IxVO_+d}z1)z5E|o5{ycP0VC@F}C?`yOlB#|Fw~5 zp;St>t3#jdC;tRs<@Q}>XPnGjot>R9WJ(kXd)*e>o9h`95@NTFrD_SauO1l*t=@`& z4-QWHKp!wbdp9J(RpVw*BYdAA`+)9PwLK&qsCt8~l=UZ*g?twAO3*UapguyfMnHTtDD0L=I zRwk@a16YQWQAgu`1?=-{e`TlH9Jx@*b@}Gme||6A@!BKEu_dm|q*0aA&03*FQ}??=+i~T$g&SmY#obEwbJ?h%v>$+>C9^ zCcvC}ehugVQ(ry(4hT&oY+EWX;JtjAdM^FhP51rPHRAk#?p+K3%;#-%pgHMF;5UAy zx%qcv7K literal 0 HcmV?d00001 diff --git a/docs/html/images/tool_undo.png b/docs/html/images/tool_undo.png new file mode 100644 index 0000000000000000000000000000000000000000..453b1b82e1364f4d5385af8aaf2b758771928721 GIT binary patch literal 2431 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/tools.jpg b/docs/html/images/tools.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09ca82d246495b131d27751aba374365a85909a2 GIT binary patch literal 10862 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/tuxpaint-title.jpg b/docs/html/images/tuxpaint-title.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df577e154246f1f326076fcc4717abe79e2b42a8 GIT binary patch literal 16788 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 Z`44PX6GsOu&u{<$002ovPDHLkV1oKy3G4s> literal 0 HcmV?d00001 diff --git a/docs/hu/AUTHORS.txt b/docs/hu/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/hu/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/hu/COPYING.txt b/docs/hu/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/hu/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/hu/FAQ.txt b/docs/hu/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/hu/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/hu/INSTALL.txt b/docs/hu/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/hu/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/hu/PNG.txt b/docs/hu/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/hu/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/hu/README.txt b/docs/hu/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/hu/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/is/AUTHORS.txt b/docs/is/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/is/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/is/COPYING.txt b/docs/is/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/is/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/is/FAQ.txt b/docs/is/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/is/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/is/INSTALL.txt b/docs/is/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/is/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/is/PNG.txt b/docs/is/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/is/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/is/README.txt b/docs/is/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/is/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/it/AUTHORS.txt b/docs/it/AUTHORS.txt new file mode 100644 index 000000000..b8011a2a3 --- /dev/null +++ b/docs/it/AUTHORS.txt @@ -0,0 +1 @@ +Veda prego "docs/AUTHORS.txt" diff --git a/docs/it/COPIATURA.txt b/docs/it/COPIATURA.txt new file mode 100644 index 000000000..1a671d772 --- /dev/null +++ b/docs/it/COPIATURA.txt @@ -0,0 +1,403 @@ + +Questa una traduzione italiana non ufficiale della Licenza Pubblica +Generica GNU. Non pubblicata dalla Free Software Foundation e non +ha valore legale nell'esprimere i termini di distribuzione del +software che usa la licenza GPL. Solo la versione originale in inglese +della licenza ha valore legale. Ad ogni modo, speriamo che questa +traduzione aiuti le persone di lingua italiana a capire meglio il +significato della licenza GPL. + + This is an unofficial translation of the GNU General Public + License into Italian. It was not published by the Free + Software Foundation, and does not legally state the + distribution terms for software that uses the GNU GPL--only + the original English text of the GNU GPL does that. However, + we hope that this translation will help Italian speakers + understand the GNU GPL better. + + + + LICENZA PUBBLICA GENERICA (GPL) DEL PROGETTO GNU + Versione 2, Giugno 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Traduzione curata da gruppo Pluto, da ILS e dal gruppo italiano di +traduzione GNU. Ultimo aggiornamento 19 aprile 2000. + +Chiunque pu copiare e distribuire copie letterali di questo documento +di licenza, ma non ne permessa la modifica. + + Preambolo + +Le licenze della maggior parte dei programmi hanno lo scopo di +togliere all'utente la libert di condividere e modificare il +programma stesso. Viceversa, la Licenza Pubblica Generica GNU intesa +a garantire la libert di condividere e modificare il software libero, +al fine di assicurare che i programmi siano liberi per tutti i loro +utenti. Questa Licenza si applica alla maggioranza dei programmi +della Free Software Foundation e ad ogni altro programma i cui autori +hanno deciso di usare questa Licenza. Alcuni altri programmi della +Free Software Foundation sono invece coperti dalla Licenza Pubblica +Generica Minore. Chiunque pu usare questa Licenza per i propri +programmi. + +Quando si parla di software libero (free software), ci si riferisce +alla libert, non al prezzo. Le nostre Licenze (la GPL e la LGPL) +sono progettate per assicurarsi che ciascuno abbia la libert di +distribuire copie del software libero (e farsi pagare per questo, se +vuole), che ciascuno riceva il codice sorgente o che lo possa ottenere +se lo desidera, che ciascuno possa modificare il programma o usarne +delle parti in nuovi programmi liberi e che ciascuno sappia di potere +fare queste cose. + +Per proteggere i diritti dell'utente, abbiamo bisogno di creare delle +restrizioni che vietino a chiunque di negare questi diritti o di +chiedere di rinunciarvi. Queste restrizioni si traducono in certe +responsabilit per chi distribuisce copie del software e per chi lo +modifica. + +Per esempio, chi distribuisce copie di un programma coperto da GPL, +sia gratis sia in cambio di un compenso, deve concedere ai destinatari +tutti i diritti che ha ricevuto. Deve anche assicurarsi che i +destinatari ricevano o possano ottenere il codice sorgente. E deve +mostrar loro queste condizioni di licenza, in modo che essi conoscano +i propri diritti. + +Proteggiamo i diritti dell'utente in due modi: (1) proteggendo il +software con un copyright, e (2) offrendo una licenza che dia il +permesso legale di copiare, distribuire e modificare il Programma. + +Inoltre, per proteggere ogni autore e noi stessi, vogliamo assicurarci +che ognuno capisca che non ci sono garanzie per i programmi coperti da +GPL. Se il programma viene modificato da qualcun altro e +ridistribuito, vogliamo che gli acquirenti sappiano che ci che hanno +non l'originale, in modo che ogni problema introdotto da altri non +si rifletta sulla reputazione degli autori originari. + +Infine, ogni programma libero costantemente minacciato dai brevetti +sui programmi. Vogliamo evitare il pericolo che chi ridistribuisce un +programma libero ottenga la propriet di brevetti, rendendo in pratica +il programma cosa di sua propriet. Per prevenire questa evenienza, +abbiamo chiarito che ogni brevetto debba essere concesso in licenza +d'uso a chiunque, o non avere alcuna restrizione di licenza d'uso. + +Seguono i termini e le condizioni precisi per la copia, la +distribuzione e la modifica. + + LICENZA PUBBLICA GENERICA GNU + TERMINI E CONDIZIONI PER LA COPIA, LA DISTRIBUZIONE E LA MODIFICA + + 0. Questa Licenza si applica a ogni programma o altra opera che +contenga una nota da parte del detentore del copyright che dica che +tale opera pu essere distribuita sotto i termini di questa Licenza +Pubblica Generica. Il termine "Programma" nel seguito si riferisce ad +ogni programma o opera cos definita, e l'espressione "opera basata +sul Programma" indica sia il Programma sia ogni opera considerata +"derivata" in base alla legge sul copyright; in altre parole, un'opera +contenente il Programma o una porzione di esso, sia letteralmente sia +modificato o tradotto in un'altra lingua. Da qui in avanti, la +traduzione in ogni caso considerata una "modifica". Vengono ora +elencati i diritti dei beneficiari della licenza. + +Attivit diverse dalla copiatura, distribuzione e modifica non sono +coperte da questa Licenza e sono al di fuori della sua influenza. +L'atto di eseguire il Programma non viene limitato, e l'output del +programma coperto da questa Licenza solo se il suo contenuto +costituisce un'opera basata sul Programma (indipendentemente dal fatto +che sia stato creato eseguendo il Programma). In base alla natura del +Programma il suo output pu essere o meno coperto da questa Licenza. + + 1. lecito copiare e distribuire copie letterali del codice +sorgente del Programma cos come viene ricevuto, con qualsiasi mezzo, +a condizione che venga riprodotta chiaramente su ogni copia una +appropriata nota di copyright e di assenza di garanzia; che si +mantengano intatti tutti i riferimenti a questa Licenza e all'assenza +di ogni garanzia; che si dia a ogni altro destinatario del Programma +una copia di questa Licenza insieme al Programma. + + possibile richiedere un pagamento per il trasferimento fisico di una +copia del Programma, anche possibile a propria discrezione +richiedere un pagamento in cambio di una copertura assicurativa. + + 2. lecito modificare la propria copia o copie del Programma, o +parte di esso, creando perci un'opera basata sul Programma, e copiare +o distribuire tali modifiche o tale opera secondo i termini del +precedente comma 1, a patto che siano soddisfatte tutte le condizioni +che seguono: + + a) Bisogna indicare chiaramente nei file che si tratta di copie + modificate e la data di ogni modifica. + + b) Bisogna fare in modo che ogni opera distribuita o pubblicata, + che in parte o nella sua totalit derivi dal Programma o da parti + di esso, sia concessa nella sua interezza in licenza gratuita ad + ogni terza parte, secondo i termini di questa Licenza. + + c) Se normalmente il programma modificato legge comandi + interattivamente quando viene eseguito, bisogna fare in modo che + all'inizio dell'esecuzione interattiva usuale, esso stampi un + messaggio contenente una appropriata nota di copyright e di + assenza di garanzia (oppure che specifichi il tipo di garanzia che + si offre). Il messaggio deve inoltre specificare che chiunque pu + ridistribuire il programma alle condizioni qui descritte e deve + indicare come reperire questa Licenza. Se per il programma di + partenza interattivo ma normalmente non stampa tale messaggio, + non occorre che un'opera basata sul Programma lo stampi. + +Questi requisiti si applicano all'opera modificata nel suo complesso. +Se sussistono parti identificabili dell'opera modificata che non siano +derivate dal Programma e che possono essere ragionevolmente +considerate lavori indipendenti, allora questa Licenza e i suoi +termini non si applicano a queste parti quando queste vengono +distribuite separatamente. Se per queste parti vengono distribuite +all'interno di un prodotto che un'opera basata sul Programma, la +distribuzione di quest'opera nella sua interezza deve avvenire nei +termini di questa Licenza, le cui norme nei confronti di altri utenti +si estendono all'opera nella sua interezza, e quindi ad ogni sua +parte, chiunque ne sia l'autore. + +Quindi, non nelle intenzioni di questa sezione accampare diritti, n +contestare diritti su opere scritte interamente da altri; l'intento +piuttosto quello di esercitare il diritto di controllare la +distribuzione di opere derivati dal Programma o che lo contengano. + +Inoltre, la semplice aggregazione di un'opera non derivata dal +Programma col Programma o con un'opera da esso derivata su di un mezzo +di memorizzazione o di distribuzione, non sufficente a includere +l'opera non derivata nell'ambito di questa Licenza. + + 3. lecito copiare e distribuire il Programma (o un'opera basata su +di esso, come espresso al comma 2) sotto forma di codice oggetto o +eseguibile secondo i termini dei precedenti commi 1 e 2, a patto che +si applichi una delle seguenti condizioni: + + a) Il Programma sia corredato del codice sorgente completo, in una + forma leggibile da calcolatore, e tale sorgente sia fornito + secondo le regole dei precedenti commi 1 e 2 su di un mezzo + comunemente usato per lo scambio di programmi. + + b) Il Programma sia accompagnato da un'offerta scritta, valida per + almeno tre anni, di fornire a chiunque ne faccia richiesta una + copia completa del codice sorgente, in una forma leggibile da + calcolatore, in cambio di un compenso non superiore al costo del + trasferimento fisico di tale copia, che deve essere fornita + secondo le regole dei precedenti commi 1 e 2 su di un mezzo + comunemente usato per lo scambio di programmi. + + c) Il Programma sia accompagnato dalle informazioni che sono state + ricevute riguardo alla possibilit di ottenere il codice sorgente. + Questa alternativa permessa solo in caso di distribuzioni non + commerciali e solo se il programma stato ottenuto sotto forma di + codice oggetto o eseguibile in accordo al precedente comma B. + +Per "codice sorgente completo" di un'opera si intende la forma +preferenziale usata per modificare un'opera. Per un programma +eseguibile, "codice sorgente completo" significa tutto il codice +sorgente di tutti i moduli in esso contenuti, pi ogni file associato +che definisca le interfacce esterne del programma, pi gli script +usati per controllare la compilazione e l'installazione +dell'eseguibile. In ogni caso non necessario che il codice sorgente +fornito includa nulla che sia normalmente distribuito (in forma +sorgente o in formato binario) con i principali componenti del sistema +operativo sotto cui viene eseguito il Programma (compilatore, kernel, +e cos via), a meno che tali componenti accompagnino l'eseguibile. + +Se la distribuzione dell'eseguibile o del codice oggetto effettuata +indicando un luogo dal quale sia possibile copiarlo, permettere la +copia del codice sorgente dallo stesso luogo considerata una valida +forma di distribuzione del codice sorgente, anche se copiare il +sorgente facoltativo per l'acquirente. + + 4. Non lecito copiare, modificare, sublicenziare, o distribuire +il Programma in modi diversi da quelli espressamente previsti da +questa Licenza. Ogni tentativo di copiare, modificare, sublicenziare +o distribuire il Programma non autorizzato, e far terminare +automaticamente i diritti garantiti da questa Licenza. D'altra parte +ogni acquirente che abbia ricevuto copie, o diritti, coperti da questa +Licenza da parte di persone che violano la Licenza come qui indicato +non vedranno invalidata la loro Licenza, purch si comportino +conformemente ad essa. + + 5. L'acquirente non tenuto ad accettare questa Licenza, +poich non l'ha firmata. D'altra parte nessun altro documento +garantisce il permesso di modificare o distribuire il Programma o i +lavori derivati da esso. Queste azioni sono proibite dalla legge per +chi non accetta questa Licenza; perci, modificando o distribuendo il +Programma o un'opera basata sul programma, si indica nel fare ci +l'accettazione di questa Licenza e quindi di tutti i suoi termini e le +condizioni poste sulla copia, la distribuzione e la modifica del +Programma o di lavori basati su di esso. + + 6. Ogni volta che il Programma o un'opera basata su di esso vengono +distribuiti, l'acquirente riceve automaticamente una licenza d'uso da +parte del licenziatario originale. Tale licenza regola la copia, la +distribuzione e la modifica del Programma secondo questi termini e +queste condizioni. Non lecito imporre restrizioni ulteriori +all'acquirente nel suo esercizio dei diritti qui garantiti. Chi +distribuisce programmi coperti da questa Licenza non e' comunque +tenuto a imporre il rispetto di questa Licenza a terzi. + + 7. Se, come conseguenza del giudizio di un tribunale, o di una +imputazione per la violazione di un brevetto o per ogni altra ragione +(non limitatamente a questioni di brevetti), vengono imposte +condizioni che contraddicono le condizioni di questa licenza, che +queste condizioni siano dettate dalla corte, da accordi tra le parti o +altro, queste condizioni non esimono nessuno dall'osservazione di +questa Licenza. Se non possibile distribuire un prodotto in un modo +che soddisfi simultaneamente gli obblighi dettati da questa Licenza e +altri obblighi pertinenti, il prodotto non pu essere affatto +distribuito. Per esempio, se un brevetto non permettesse a tutti +quelli che lo ricevono di ridistribuire il Programma senza obbligare +al pagamento di diritti, allora l'unico modo per soddisfare +contemporaneamente il brevetto e questa Licenza e' di non distribuire +affatto il Programma. + +Se una qualunque parte di questo comma ritenuta non valida o non +applicabile in una qualunque circostanza, deve comunque essere +applicata l'idea espressa da questo comma; in ogni altra circostanza +invece deve essere applicato questo comma nel suo complesso. + +Non nelle finalit di questo comma indurre gli utenti ad infrangere +alcun brevetto n ogni altra rivendicazione di diritti di propriet, +n di contestare la validit di alcuna di queste rivendicazioni; lo +scopo di questo comma unicamente quello di proteggere l'integrit +del sistema di distribuzione dei programmi liberi, che viene +realizzato tramite l'uso di licenze pubbliche. Molte persone hanno +contribuito generosamente alla vasta gamma di programmi distribuiti +attraverso questo sistema, basandosi sull'applicazione fedele di tale +sistema. L'autore/donatore pu decidere di sua volont se preferisce +distribuire il software avvalendosi di altri sistemi, e l'acquirente +non pu imporre la scelta del sistema di distribuzione. + +Questo comma serve a rendere il pi chiaro possibile ci che crediamo +sia una conseguenza del resto di questa Licenza. + + 8. Se in alcuni paesi la distribuzione o l'uso del Programma sono +limitati da brevetto o dall'uso di interfacce coperte da copyright, il +detentore del copyright originale che pone il Programma sotto questa +Licenza pu aggiungere limiti geografici espliciti alla distribuzione, +per escludere questi paesi dalla distribuzione stessa, in modo che il +programma possa essere distribuito solo nei paesi non esclusi da +questa regola. In questo caso i limiti geografici sono inclusi in +questa Licenza e ne fanno parte a tutti gli effetti. + + 9. All'occorrenza la Free Software Foundation pu pubblicare +revisioni o nuove versioni di questa Licenza Pubblica Generica. Tali +nuove versioni saranno simili a questa nello spirito, ma potranno +differire nei dettagli al fine di coprire nuovi problemi e nuove +situazioni. + +Ad ogni versione viene dato un numero identificativo. Se il Programma +asserisce di essere coperto da una particolare versione di questa +Licenza e "da ogni versione successiva", l'acquirente pu scegliere se +seguire le condizioni della versione specificata o di una successiva. +Se il Programma non specifica quale versione di questa Licenza deve +applicarsi, l'acquirente pu scegliere una qualsiasi versione tra +quelle pubblicate dalla Free Software Foundation. + + 10. Se si desidera incorporare parti del Programma in altri +programmi liberi le cui condizioni di distribuzione differiscano da +queste, possibile scrivere all'autore del Programma per chiederne +l'autorizzazione. Per il software il cui copyright detenuto dalla +Free Software Foundation, si scriva alla Free Software Foundation; +talvolta facciamo eccezioni alle regole di questa Licenza. La nostra +decisione sar guidata da due finalit: preservare la libert di tutti +i prodotti derivati dal nostro software libero e promuovere la +condivisione e il riutilizzo del software in generale. + + + NON C' GARANZIA + + 11. POICH IL PROGRAMMA CONCESSO IN USO GRATUITAMENTE, NON C' +GARANZIA PER IL PROGRAMMA, NEI LIMITI PERMESSI DALLE VIGENTI LEGGI. +SE NON INDICATO DIVERSAMENTE PER ISCRITTO, IL DETENTORE DEL COPYRIGHT +E LE ALTRE PARTI FORNISCONO IL PROGRAMMA "COS COM'", SENZA ALCUN +TIPO DI GARANZIA, N ESPLICITA N IMPLICITA; CI COMPRENDE, SENZA +LIMITARSI A QUESTO, LA GARANZIA IMPLICITA DI COMMERCIABILIT E +UTILIZZABILIT PER UN PARTICOLARE SCOPO. L'INTERO RISCHIO CONCERNENTE +LA QUALIT E LE PRESTAZIONI DEL PROGRAMMA DELL'ACQUIRENTE. SE IL +PROGRAMMA DOVESSE RIVELARSI DIFETTOSO, L'ACQUIRENTE SI ASSUME IL COSTO +DI OGNI MANUTENZIONE, RIPARAZIONE O CORREZIONE NECESSARIA. + + 12. N IL DETENTORE DEL COPYRIGHT N ALTRE PARTI CHE POSSONO +MODIFICARE O RIDISTRIBUIRE IL PROGRAMMA COME PERMESSO IN QUESTA +LICENZA SONO RESPONSABILI PER DANNI NEI CONFRONTI DELL'ACQUIRENTE, A +MENO CHE QUESTO NON SIA RICHIESTO DALLE LEGGI VIGENTI O APPAIA IN UN +ACCORDO SCRITTO. SONO INCLUSI DANNI GENERICI, SPECIALI O INCIDENTALI, +COME PURE I DANNI CHE CONSEGUONO DALL'USO O DALL'IMPOSSIBILIT DI +USARE IL PROGRAMMA; CI COMPRENDE, SENZA LIMITARSI A QUESTO, LA +PERDITA DI DATI, LA CORRUZIONE DEI DATI, LE PERDITE SOSTENUTE +DALL'ACQUIRENTE O DA TERZI E L'INCAPACIT DEL PROGRAMMA A INTERAGIRE +CON ALTRI PROGRAMMI, ANCHE SE IL DETENTORE O ALTRE PARTI SONO STATE +AVVISATE DELLA POSSIBILIT DI QUESTI DANNI. + + FINE DEI TERMINI E DELLE CONDIZIONI + + Appendice: come applicare questi termini a nuovi programmi + +Se si sviluppa un nuovo programma e lo si vuole rendere della maggiore +utilit possibile per il pubblico, la cosa migliore da fare rendere +tale programma libero, cosicch ciascuno possa ridistribuirlo e +modificarlo sotto questi termini. + +Per fare questo, si inserisca nel programma la seguente nota. La cosa +migliore da fare mettere la nota all`inizio di ogni file sorgente, +per chiarire nel modo pi efficiente possibile l'assenza di garanzia; +ogni file dovrebbe contenere almeno la nota di copyright e +l'indicazione di dove trovare l'intera nota. + + + Copyright (C) + + Questo programma software libero; lecito redistribuirlo o + modificarlo secondo i termini della Licenza Pubblica Generica GNU + come pubblicata dalla Free Software Foundation; o la versione 2 + della licenza o (a propria scelta) una versione successiva. + + Questo programma distribuito nella speranza che sia utile, ma + SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di + NEGOZIABILIT o di APPLICABILIT PER UN PARTICOLARE SCOPO. Si + veda la Licenza Pubblica Generica GNU per avere maggiori dettagli. + + Questo programma deve essere distribuito assieme ad una copia + della Licenza Pubblica Generica GNU; in caso contrario, se ne pu + ottenere una scrivendo alla Free Software Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Si aggiungano anche informazioni su come si pu essere contattati +tramite posta elettronica e cartacea. + +Se il programma interattivo, si faccia in modo che stampi una breve +nota simile a questa quando viene usato interattivamente: + + Orcaloca versione 69, Copyright (C) anno nome dell'autore + Orcaloca non ha ALCUNA GARANZIA; per dettagli usare il comando `show g'. + Questo software libero, e ognuno libero di ridistribuirlo secondo + certe condizioni; usare il comando `show c' per i dettagli. + +Gli ipotetici comandi "show g" e "show c" mostreranno le parti +appropriate della Licenza Pubblica Generica. Chiaramente, i comandi +usati possono essere chiamati diversamente da "show g" e "show c" e +possono anche essere selezionati con il mouse o attraverso un men, o +comunque sia pertinente al programma. + +Se necessario, si deve anche far firmare al proprio datore di lavoro +(per chi lavora come programmatore) o alla propria scuola, per chi +studente, una "rinuncia al copyright" per il programma. Ecco un +esempio con nomi fittizi: + + Yoyodinamica SPA rinuncia con questo documento ad ogni diritto sul + copyright del programma `Orcaloca' (che svolge dei passi di + compilazione) scritto da Giovanni Smanettone. + + , 1 April 3000 + Primo Tizio, Presidente + +I programmi coperti da questa Licenza Pubblica Generica non possono +essere incorporati all'interno di programmi proprietari. Se il +proprio programma una libreria di funzioni, pu essere pi utile +permettere di collegare applicazioni proprietarie alla libreria. Se +si ha questa intenzione consigliamo di usare la Licenza Pubblica +Generica Minore GNU (LGPL) invece di questa Licenza. diff --git a/docs/it/FAQ.txt b/docs/it/FAQ.txt new file mode 100644 index 000000000..83a55b6ba --- /dev/null +++ b/docs/it/FAQ.txt @@ -0,0 +1 @@ +Veda prego "docs/FAQ.txt" diff --git a/docs/it/INSTALL.txt b/docs/it/INSTALL.txt new file mode 100644 index 000000000..ce0aa56ea --- /dev/null +++ b/docs/it/INSTALL.txt @@ -0,0 +1 @@ +Veda prego "docs/INSTALL.txt" diff --git a/docs/it/PNG.txt b/docs/it/PNG.txt new file mode 100644 index 000000000..ced12226b --- /dev/null +++ b/docs/it/PNG.txt @@ -0,0 +1 @@ +Veda prego "docs/PNG.txt" diff --git a/docs/it/README.txt b/docs/it/README.txt new file mode 100644 index 000000000..149efbf43 --- /dev/null +++ b/docs/it/README.txt @@ -0,0 +1 @@ +Veda prego "docs/README.txt" diff --git a/docs/ko/AUTHORS.txt b/docs/ko/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/ko/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/ko/COPYING.txt b/docs/ko/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/ko/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/ko/FAQ.txt b/docs/ko/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/ko/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/ko/INSTALL.txt b/docs/ko/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/ko/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/ko/PNG.txt b/docs/ko/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/ko/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/ko/README.txt b/docs/ko/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/ko/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/nl/AUTHORS.txt b/docs/nl/AUTHORS.txt new file mode 100644 index 000000000..6d921014f --- /dev/null +++ b/docs/nl/AUTHORS.txt @@ -0,0 +1 @@ +Please see "docs/AUTHORS.txt" diff --git a/docs/nl/COPYING_nl.txt b/docs/nl/COPYING_nl.txt new file mode 100644 index 000000000..86e698efd --- /dev/null +++ b/docs/nl/COPYING_nl.txt @@ -0,0 +1,340 @@ +English disclaimer +This is an unofficial translation of the GNU General +Public License into Dutch. It was not published by the Free Software +Foundation, and does not legally state the distribution terms for software +that uses the GNU GPL--only the original English text of the GNU GPL does +that. However, we hope that this translation will help Dutch speakers +understand the GNU GPL better. + +Nederlandse waarschuwing +Dit is een niet officile vertaling van de GNU Algemene Publieke Licentie in +het Nederlands. Deze licentie is niet gepubliceerd door de Free Software +Foundation, de condities van software onder de GPL hieronder zijn niet +rechtsgeldig. Enkel de originele Engelse tekst van de GNU GPL bevat geldige +richtlijnen. Daarentegen hopen we dat deze vertaling de Nederlandstaligen helpt +om de GNU GPL beter te begrijpen. + +Auteursrecht (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Het is eenieder toegestaan om dit licentiedocument te kopiren en er letterlijke +kopien van te verspreiden, er wijzigingen in maken is echter niet toegestaan. + + Voorwoord + +De licenties van de meeste software zijn zo opgesteld om U het recht te +ontnemen om die software te delen en te wijzigen. Hier tegenover staat de +GNU Algemene Publieke Licentie, die bedoeld is om U de vrijheid te garanderen +dat U de software kan delen en wijzigen -- om er zeker van te zijn dat de +software vrij is voor alle gebruikers. Deze Algemene Publieke Licentie is van +toepassing op het merendeel van de Free Software Foundation's software en van +alle andere programma's waarvan de auteur ze plaatst onder deze licentie. +(Sommige software van de Free Software Foundation is gedekt door de GNU Algemene +Minder Publieke Licentie). U kan deze ook toepassen op uw eigen programma's. + +Wanneer we het hebben over vrije software, dan hebben we het over vrijheid, niet +prijs. Onze Algemene Publieke Licentie laat u toe om kopien te verspreiden van +vrije software (en dat U geld kan vragen voor deze dienst) en dat U er de +broncode van hebt of kan krijgen als U dat wenst, dat U de software kan wijzigen +of er delen van kan gebruiken in nieuwe vrije programma's en dat U weet dat U +deze dingen kan doen. + +Om deze rechten te beschermen, moeten we verbieden dat iemand U deze rechten +ontzegt of vraagt deze op te geven. Deze restricties brengen enkele +verantwoordelijkheden mee indien U kopien van de software verspreidt of de +software wijzigt. + +Bijvoorbeeld, als U kopien van zulk programma verspreidt, +kostenloos of voor een vergoeding, dan moet U de personen die de software +ontvangen al de rechten geven die U hebt. U moet uzelf ervan verzekeren dan ook +zij de broncode ontvangen of kunnen verkrijgen. U moet hen ook deze licentie +tonen zodat ze hun rechten kennen. + + We beschermen uw rechten met twee stappen +(1) de software wordt auteursrechtelijk beschermd, en +(2) we bieden U deze licentie die U de legale toestemming geeft om de software +te kopiren, te verspreiden en/of te wijzigen. + +Alsook willen we voor de +bescherming van de auteur en onszelf iedereen ervan verzekeren dat er geen +garantie is voor deze vrije software. Als de software gewijzigd is door iemand +anders en doorgegeven, dan willen we dat de ontvanger weet dat wat ze ontvangen +hebben niet het origineel is, zodat problemen veroorzaakt door anderen geen +effect hebben op de reputatie van de oorspronkelijke auteur. + +Ten laatste, elk vrij programma wordt voortdurend bedreigd door software +patenten. We wensen het gevaar te vermijden dat de verdelers van een vrij +programma uiteindelijk een patent verkrijgen op het programma en het daarmee in +eigendom van een particulier brengen. Om dit te vermijden, hebben we het +duidelijk gemaakt dat elk patent in licentie gegeven moet zijn voor eenieders +vrij gebruik, oftewel helemaal niet in licentie gegeven mag zijn. + +De exacte bepalingen en condities om te kopiren, verspreiden en wijzigen volgen +hieronder. + + GNU ALGEMENE PUBLIEKE LICENTIE + BEPALINGEN EN VOORWAARDEN OM TE KOPIREN, VERSPREIDEN EN WIJZIGEN + +0. Deze licentie is van toepassing op elk programma of ander werk dat een notie +bevat van de eigenaar die zegt dat het verspreid mag worden onder de bepalingen +van deze licentie. Het "Programma", verder in de tekst, verwijst naar eender +zulk programma of werk, en een "werk gebaseerd op het programma" verwijst naar +het Programma of eender welk ander afgeleid werk onder de wet van het +auteursrecht: dit wil zeggen, een werk dat het Programma of een deel ervan +bevat, letterlijk oftewel gewijzigd en/of vertaald naar een andere taal. +(Hierna vallen vertalingen zonder beperking onder de term "wijziging".) +Elke licentiehouder wordt geadresseerd als "u". + +Andere handelingen dan kopiren, +verspreiden en wijzigen zijn niet gedekt door deze licentie; hiervoor is deze +licentie niet bedoeld. De handeling om het Programma uit te voeren is niet +gelimiteerd, en de uitvoer van het Programma is enkel gedekt als de inhoud +bestaat uit een werk gebaseerd op het Programma (onafhankelijk of deze uitvoer +gemaakt is door het Programma uit te voeren). Of dit waar is hangt af van wat +het Programma doet. + +1. U mag letterlijke exemplaren verspreiden van de programma broncode en deze +kopiren zoals U deze ontvangt, in eender welke vorm, op voorwaarde dat U ervoor +oplet dat U op elke kopie de gepaste auteursrechten en afwijzing van garantie +vermeldt; hou alle referenties naar deze licentie en naar het ontbreken van +garantie intact ;en geef aan elke andere ontvanger van het Programma een kopie +van deze licentie, bijgevoegd bij het Programma. + +U mag een honorarium vragen voor de fysische daad van het afleveren van een +kopie, en U mag indien U dat wenst een garantie bescherming bieden voor een +honorarium. + +2. U mag uw kopie of kopijen van het Programma, of een deel van het Programma, +wijzigen, daarbij een werk gebaseerd op het Programma vormend. U mag deze +wijzigingen kopiren en verspreiden onder de bepalingen van Paragraaf 1 +hierboven, indien U ook aan al deze voorwaarden voldoet: + +a) U moet in de gewijzigde bestanden duidelijk vermelden dat U het bestand +gewijzigd hebt en de datum waarop U dat gedaan hebt. + +b) U moet elk werk dat U publiceert of verspreidt en dat volledig of +gedeeltelijk bestaat uit het Programma, of daarvan een afgeleid werk is, +als een geheel in licentie geven, zonder kosten, aan alle derde partijen onder +de bepalingen van deze Licentie. + +c) Indien het gewijzigde Programma normaal gezien interactief parameters +inleest, dan moet U er voor zorgen dat wanneer het Programma zonder deze +parameters gestart wordt, het een boodschap weergeeft met een gepast +auteursrechtbericht en een mededeling dat er geen garantie is (of anders, dat +U een garantie voorziet) en dat gebruikers het Programma mogen verspreiden onder +deze voorwaarden. De boodschap moet de gebruiker ook duidelijk maken hoe hij een +kopij van deze Licentie kan bekijken. (Uitzondering : als het Programma zelf +interactief is en normaal geen boodschap toont, dan is het niet vereist dat uw +werk gebaseerd op dit Programma zulk een boodschap weergeeft. + +Deze vereisten zijn van toepassing op het werk als een geheel. Als herkenbare +stukken van dat werk niet afgeleid zijn van het Programma, en redelijkerwijs +onafhankelijk beschouwd kunnen worden, dan is deze licentie, en zijn bepalingen, +niet van toepassing op die delen als U die als aparte werken verspreidt. +Maar als U die zelfde delen verspreidt als deel van een geheel dat een werk is +gebaseerd op het Programma, dan moet de verspreiding van het geheel op de +bepalingen van deze licentie geschieden, dewelke's vergunningen voor andere +licentiehouders zich uitbreiden tot het volledige geheel, en dus tot elke deel +van het werk, onafhankelijk van wie het geschreven heeft. + +Dus, het is niet de bedoeling van deze sectie om uw rechten op te eisen of te +wedijveren om uw rechten op werk dat geheel door uzelf geschreven is, het is +eerder de bedoeling het recht controle uit te oefenen mogelijk te maken op de +verspreiding van afgeleide of collectieve werken gebaseerd op het Programma. + +Daarenboven, de bundeling van een werk niet gebaseerd op het Programma met het +Programma (of met een werk gebaseerd op het Programma) op een opslagmedium +of verspreidingsmedium brengt het ander werk niet onder deze licentie. + +3. U mag het Programma, of een werk gebaseerd op het Programma, +zie paragraaf 2, verspreiden en kopiren, in binaire of uitvoerbare vorm onder +de bepalingen van paragraaf 1 en 2 hierboven, op voorwaarde dat U aan een van +de volgende voorwaarden voldoet : + +a) Voeg een volledige overeenkomende broncode bij, leesbaar door computers, +verspreid onder de bepalingen van de paragrafen 1 en 2, op een medium dat +gebruikelijk is voor het uitwisselen van software; of, + +b) Voeg een voor minstens 3 jaar geldige, geschreven, offerte bij, om de +complete overeenstemmende broncode, op een medium dat hiervoor gebruikelijk is, +voor Computers leesbaar, verspreidbaar onder de bepalingen van de paragrafen 1 +en 2 hierboven, aan elke derde partij te leveren, voor een vergoeding die niet +meer bedraagt dan de kost om de broncode te kopiren. + +c) Voeg de informatie bij die U ontving betreffende het aanbod om de bijpassende +broncode te verkrijgen. (Dit alternatief is enkel toegestaan voor niet +commercile verspreiding en enkel als U het programma in binaire of uitvoerbare +vorm ontving met zulk een aanbod, in overeenstemming met subparagraaf b +erboven.) De broncode van een werk is de vorm van het werk waaraan voorkeur +wordt gegeven om er wijzigingen in aan te brengen. Voor een uitvoerbaar werk +betekent volledige broncode alle code van alle modules waar het werk uit +bestaat, en daarbovenop alle definitie bestanden van de interface(s) en alle +scripts om het programma te compileren en het uitvoerbare bestand te +installeren. Als een speciale uitzondering moet de verspreide broncode niets +bevatten dat normaal verspreid (in broncode of uitvoerbare vorm ) wordt met de +hoofdcomponenten (compiler, kernel, enz...) van het besturingssysteem op dewelke +het Programma draait, tenzij die component bij het uitvoerbare bestand zit. + +Als verspreiding van een uitvoerbaar bestand of binaire code mogelijk gemaakt +wordt door toegang tot het kopiren van een vooraf bepaalde plaats, dan telt het +mogelijk maken de broncode van diezelfde plaats te kopiren als het verspreiden +van de broncode, zelfs indien het mee kopiren van de broncode optioneel is. + +4. U mag het Programma niet kopiren, wijzigen, verder in licentie geven of +verspreiden behalve zoals expliciet vermeld in deze licentie. Eender welke +poging om het programma op een andere manier te kopiren, wijzigen, verder in +licentie geven of verspreiden is ongeldig en verklaart automatisch uw rechten +bepaald in deze licentie nietig. Derde partijen die kopien of rechten van U +hebben ontvangen onder deze licentie blijven hun rechten behouden zolang ze de +voorwaarden niet schenden. + +5. U bent niet verplicht deze licentieovereenkomst te accepteren, aangezien U +deze niet ondertekend hebt. Echter, niets anders geeft U de toestemming om het +Programma of werken gebaseerd op het Programma te wijzigen of te verspreiden. +Deze daden zijn door de wet verboden als U deze licentieovereenkomst niet +accepteert. Daarom geeft u aan dat door het Programma te verspreiden of te +wijzigen, U deze licentie, en al zijn voorwaarden en bepalingen in verband met +kopiren, wijzigen of verspreiden van het Programma, of werken gebaseerd op het +Programma, accepteert om dat te kunnen doen. + +6. Elke keer U het Programma (of een werk gebaseerd op het Programma) +verspreidt, krijgt de ontvanger automatisch een licentie van de originele +licentiehouder om het Programma te kopiren, verspreiden of wijzigen, +onderworpen aan deze bepalingen en voorwaarden. U mag de ontvanger geen +beperkingen opleggen om de rechten uit te oefenen die hierin bepaald zijn. + +7. Als door gevolg van een rechterlijke uitspraak of beweringen van +patentenschending of door eender welke andere reden (niet beperkt tot +patentenproblemen) U bepalingen worden opgelegd (door rechterlijk bevel, +overeenkomst, of op andere wijze) die in tegenspraak zijn met bepalingen in deze +licentie, dan sluit dat U niet uit om aan de voorwaarden van deze licentie te +voldoen. Als U het Programma niet kan verspreiden en daarbij zowel aan tegelijk +de bepalingen van deze licentie als aan andere relevante verplichtingen kan +voldoen, dan mag U als gevolg daarvan het Programma helemaal niet verspreiden. +Bijvoorbeeld, als een patent licentieovereenkomst niet zou toestaan dat het +programma zonder het betalen van royalty's vrij verspreid mag worden door zij +die het Programma direct van U verkrijgen en zij die het indirect door U +verkrijgen, dan is de enige manier om zowel daaraan als aan deze licentie te +voldoen dat U zich compleet onthoudt van het verspreiden van het Programma. + +Als een deel van dit artikel ongeldig wordt geacht, of het kan niet afgedwongen +worden onder bepaalde omstandigheden dan is het de bedoeling dat het overwicht +van dit artikel van toepassing is. In andere omstandigheden geldt dit artikel +volledig. + +Het is niet het doel van dit artikel om u er toe aan te zetten om patenten, +of andere aanspraken van bezit, te schenden of de geldigheid van zulke +aanspraken aan te vechten. Het enige doel van dit artikel is om de integriteit +te beschermen van het vrije software verspreidingssysteem, dat wordt +toegepast door middel van Publieke Licentie praktijken. Veel mensen hebben +royale bijdragen geleverd aan het systeem van vrije software rekenend op +de betrouwbaarheid van zijn toepassing. Het is aan de auteur/donor om te +bepalen of hij of zij bereidt is om software te verspreiden door middel +van een ander systeem en een gelicensieerde kan die keuze niet afdwingen. + +Dit artikel is bedoeld om zeer duidelijk te maken wat geloofd wordt een gevolg +te zijn van de rest van deze licentie. + +8. Als de verspreiding of het gebruik van het Programma gelimiteerd is in +bepaalde landen, door patenten of door samenwerking van auteursrechthouders, +dan mag de oorspronkelijke auteursrechthouder die het Programma onder deze +licentie plaatste een expliciete geografische beperking toevoegen zodat +verspreiding enkel toegestaan is in of tussen landen die niet uitgesloten zijn. +In dat geval bevat deze licentie de beperking alsof ze in de kern van deze +licentie geschreven was. + +9. De Free Software Foundation mag gereviseerde en/of nieuwe versies van de +Algemene Publieke Licentie uitbrengen van tijd tot tijd. Zulke nieuwe versies +zullen gelijkaardig in karakter zijn in vergelijking met de huidige versie maar +kunnen in details verschillen om nieuwe problemen of aangelegenheden te +behandelen. Elke versie krijgt een expliciet versienummer mee. Als het Programma +een versie van deze licentie specificeert waarop het van toepassing is en "elke +volgende versie", dan hebt U de keuze om de bepalingen en voorwaarden van die +licentie te volgen, of van eender welke versie die later uitgegeven werd door de +Free Software Foundation. Als het programma geen versie nummer van de licentie +specificeert, dan mag U de bepalingen en voorwaarden volgen van eender welke +versie ooit uitgegeven door de Free Software Foundation. + +10. Indien U delen van het Programma wil invoegen in andere vrije Programma's +dewelke's verspreidingsvoorwaarden anders zijn, dan moet U de auteur van dat +programma om toestemming vragen. Voor software waarvan het auteursrecht bij +de Free Software Foundation rust, schrijf naar de Free Software Foundation; we +maken hier soms uitzonderingen op. Onze beslissing zal geleid worden door onze +twee hoofddoelen om de vrije status van de afgeleiden van onze vrije software te +vrijwaren en om het delen en hergebruiken van software in het algemeen te +promoten. + +11. OMDAT HET PROGRAMMA ZONDER KOSTEN IN LICENTIE GEGEVEN WORDT, IS ER GEEN +GARANTIE VOOR HET PROGRAMMA, VOOR ZOVER MOGELIJK BINNEN DE GELDENDE WETGEVING. +UITGEZONDERD WANNEER HET EXPLICIET GESCHREVEN STAAT LEVEREN DE +AUTEURSRECHTHOUDERS HET PROGRAMMA "ZOALS HET IS", ZONDER EENDER WELKE GARANTIE, +EXPLICIET UITGEDRUKT OF IMPLICIET BEDOELD, ZOALS, MAAR NIET GELIMITEERD TOT, +DE IMPLICIETE GARANTIES VAN VERKOOPBAARHEID EN GESCHIKTHEID VOOR EEN BEPAALD +DOEL. HET VOLLEDIGE RISICO BETREFFENDE DE KWALITEIT EN DE PRESTATIES VAN HET +PROGRAMMA LIGT BIJ U. MOCHT HET PROGRAMMA DEFECT BLIJKEN DAN DRAAGT U DE +KOSTEN VAN ALLE BENODIGDE DIENSTEN, REPARATIES OF CORRECTIES. + +12. IN GEEN ENKEL GEVAL, TENZIJ VEREIST DOOR DE GELDENDE WET, OF SCHRIFTELIJK +OVEREENGEKOMEN ZAL DE AUTEURSRECHTHOUDER, OF EENDER WELKE DERDE PARTIJ DIE HET +PROGRAMMA MAG WIJZIGEN EN/OF VERSPREIDEN ZOALS TOEGESTAAN HIERBOVEN, +VERANTWOORDELIJK KUNNEN WORDEN GEACHT TEGENOVER U BETREFFENDE ALGEMENE, +SPECIALE, UITZONDERLIJKE OF RESULTERENDE SCHADE DIE VOORTVLOEIT UIT +HET GEBRUIK, OF DE ONKUNDIGHEID OM HET PROGRAMMA TE GEBRUIKEN +(INCLUSIEF, MAAR NIET GELIMITEERD TOT HET VERLIES VAN GEGEVENS, +GEGEVENS DIE CORRUPT WORDEN, OF VERLIEZEN GELEDEN DOOR U OF DERDE PARTIJEN OF +EEN FALING VAN HET PROGRAMMA OM SAMEN TE WERKEN MET ANDERE PROGRAMMA'S), +ZELFS INDIEN DE AUTEURSRECHTHOUDER OF EEN ANDERE PARTIJ GENFORMEERD WAS +OVER DE MOGELIJKHEID TOT ZULKE SCHADE. + +EINDE VAN DE BEPALINGEN EN VOORWAARDEN + +Hoe deze bepalingen op uw nieuwe Programma's toepassen. + +Als U een nieuw Programma ontwikkelt en U wenst dat het van het grootst mogelijk +nut is voor iedereen, dan is de beste manier om dit te bereiken door het +Programma vrije software te maken dewelke iedereen kan verspreiden en wijzigen +onder deze bepalingen. +Om dit te doen, voeg volgende boodschap toe aan het Programma. Het is het +veiligst om ze in te voegen aan het begin van elk bronbestand, dit om het +ontbreken van garantie duidelijk te maken; en elk bestand zou minstens de +"auteursrecht" lijn en een directief naar waar de volledige boodschap gevonden +kan worden moeten bevatten. + + +Auteursrecht (C) +Dit Programma is vrije software; U kan het verspreiden en/of wijzigen onder de +bepalingen van de GNU Algemene Publieke Licentie, zoals uitgegeven door de Free +Software Foundation; oftewel versie 2 van de Licentie,of (naar vrije keuze) een +latere versie. +Dit Programma is verspreid met de hoop dat het nuttig zal zijn maar +ZONDER EENDER WELKE GARANTIE; zelfs zonder de impliciete garantie van +VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU Algemene +Publieke Licentie voor meer details. +U zou een kopie van de GNU Algemene Publieke Licentie ontvangen moeten +hebben samen met dit Programma; indien dit niet zo is, schrijf naar +de Free Software Foundation, Inc., +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Voeg ook informatie bij hoe men U kan contacteren via e-mail en gewone post. +Als het Programma interactief is, laat het een korte boodschap tonen zoals +deze wanneer het in interactieve modus start: + +Fiscus versie 69, Auteursrecht (C) +Fiscus komt met ABSULUUT GEEN GARANTIE; voor details typ 'toon w'. Dit is +vrije software en het is U toegestaan deze te verspreiden onder +bepaalde voorwaarden;typ 'toon c' voor meer details. + +U zou ook uw werkgever (indien U als programmeur werkt) of uw school, indien die +er is, om een "auteursrecht afwijzing" te laten tekenen voor het Programma, +indien nodig. Hier is een voorbeeld; wijzig de namen: + +Yoyodyne, NV., verwerpt hier alle auteursrechtlijk interesses in het Programma +Fiscus (dat belastingsaangiften invult) geschreven door James Hacker. +, 21 April 1984 Ty Coon, Vice voorzitter. + +Deze Algemene Publieke Licentie laat niet toe dat het Programma verwerkt wordt +in een commercieel programma. Als uw Programma een subroutine bibliotheek is, +dan kan U het misschien nuttige beschouwen om toe te staan dat uw Programma +gelinkt word met commercile programma's. Als dat is wat U wil doen, +dan moet U de GNU Algemene Minder Publieke Licentie gebruiken in plaats van +deze licentie. + diff --git a/docs/nl/FAQ.txt b/docs/nl/FAQ.txt new file mode 100644 index 000000000..21b32ac5d --- /dev/null +++ b/docs/nl/FAQ.txt @@ -0,0 +1,422 @@ +FAQ.txt voor Tux Paint + +Tux Paint - Een tekenprogramma voor kinderen. + +Copyright 2002 Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +14 september 2002 - 28 september 2002 + +(Nederlands: Geert , 19 november 2002) + + +Veel gestelde vragen (FAQ): +--------------------------- + Waarom zijn er niet verschillende groottes gum te selecteren? + ------------------------------------------------------------- + De gum is bedoeld om snel grote delen van de tekening te wissen. + + De gum maakt grote delen van de tekening wit. U krijgt hetzelfde resultaat + door met de kwast (verschillende groottes en vormen) de tekening te + overschilderen met een witte kleur! + + + Alle tekst is in hoofdletters! + ------------------------------ + De "Caps Lock" toets staat aan. + + Heeft u Tux Paint van de commando-regel gestart vergewis u dan dat u niet de + "--uppercase" optie heeft meegegeven. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--uppercase" optie kan ook op + deze wijze ingeschakeld staan. + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "uppercase=yes". + + Verwijder eenvoudig deze regel of start Tux Paint van de commando-regel met + de extensie: "--mixedcase", dit zal dan de oudere instellingen + overschrijven. + + + Ik krijg de foutmelding "You can't print yet!" als ik wil printen! + ------------------------------------------------------------------ + De "print delay" optie staat aan. U kunt alleen elke X seconden printen. + + Heeft U Tux Paint van de commando-regel gestart, vergewis u dan dat u niet + de "--printdelay=..." optie heeft meegegeven. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--printdelay=..." optie kan + ook op deze wijze ingeschakeld staan. + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "printdelay=...". + + Verwijder eenvoudig deze regel of stel de 'delay value' op 0 (geen + wachttijd), of verklein de ingestelde waarde. (Voor meer informatie zie + de README.txt). U kunt Tux Paint ook starten met de commando-regel optie: + "--printdelay=0", dit zal dan de oudere instellingen overschrijven. + U hoeft dan niet meer te wachten tussen de verschillende prints. + + + Ik kan NIET printen! De print-knop is grijs! + --------------------------------------------- + De "no print" optie staat aan. + + Heeft U Tux Paint van de commando-regel gestart, vergewis u dan dat u niet + de "--noprint" optie heeft meegegeven. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--noprint" optie kan ook op + deze wijze ingeschakeld staan. + + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "noprint=yes". + + Verwijder eenvoudig deze regel of start Tux Paint met de optie: "--print", + Dit overschrijft de eerdere instellingen. + + + Als Tux Paint in full-screen mode werkt en ik druk ALT-TAB, gaat het venster + op zwart! + ---------------------------------------------------------------------------- + Helaas is dit een fout in de SDL library. Sorry. + + + Als Tux Paint in full-screen mode werkt heeft het grote randen eromheen. + ------------------------------------------------------------------------ + Linux gebruikers - De X-Window server is niet ingesteld om met een + schermresolutie van 640 x 480 te werken. + (Dit kan handmatig ingesteld worden door op + [Ctrl]-[Alt]-[KeyPad Plus] of -[KeyPad Minus] te drukken.) + + Uw monitor moet deze resolutie wel ondersteunen en deze moet als zodanig + ingesteld staan in uw X server configuratie. + + Controleer hiervoor de "Display" subsectie of de "Screen" sectie van uw + XFree86 configuratie file ("/etc/X11/XF86Config-4" of + "/etc/X11/XF86Config". Dit is afhankelijk van de versie van XFree86 die u + gebruikt). + + Voeg "640x480" toe bij de "Modes" regel. + (Bijvoorbeeld de "Display" subsectie die de 16-bit kleur diepte bevat + ("Depth 16"), dit is wat Tux Paint tracht te gebruiken.) + + Bijvoorbeeld: + + Modes "1280x1024" "1024x768" "800x600" "640x480" + + NB sommige Linux distributies hebben gereedschappen om deze instellingen te + vergemakkelijken. Debian gebruikers typen het commando + "dpkg-reconfigure xserver-xfree86" als root. + + + Er is geen geluid! + ------------------ + Op de eerste plaats de meest eenvoudige zaken: + + * Heeft de computer een geluidskaart? + * Zijn de luidsprekers op de juiste wijze aangesloten? + * Het volume staat hard genoeg? + * Staat het volume in de geluidsmixer goed? + * Zijn er andere programma's die geluid gebruiken? (Deze + kunnen het geluid van Tux Paint blokkeren) + + Is aan alle bovenstaande eisen voldaan dan is Tux Paint mogelijk gestart met + de "no sound" optie of misschien zelfs gecompileerd zonder + geluidsondersteuning. + + Om dit te controleren typt u op de commando-regel: + + tuxpaint --version + + Als u dan, temidden van alle andere informatie, ziet staan "Sound disabled" + dan betekent dit dat deze versie van Tux Paint geen geluid heeft. Compileer + Tux Paint opnieuw en verzeker u ervan dat de "nosound" optie niet + ingeschakeld is. (met andere woorden NIET "make nosound") Zorg dat de + SDL_mixer library beschikbaar is! + + Heeft U Tux Paint van de commando-regel gestart, vergewis u dan dat u niet + de "--nosound" optie heeft meegegeven. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--nosound" optie kan ook op + deze wijze ingeschakeld staan. + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "nosound=yes". + + Verwijder eenvoudig deze regel of start Tux Paint met de optie: "--sound", + Dit overschrijft de eerdere instellingen. + + + Het geluid klinkt raar. + ----------------------- + Dit kan te maken hebben met hoe SDL en de SDL_mixer werden opgestart. Met + name welke buffer groottes gekozen werden. + + Stuur in dat geval een e-mail naar mij met de details van uw computer. + (Operating systeem en versie, soundkaart, welke versie van Tux Paint etc. + Dit kunt u te weten komen door "tuxpaint --version op de commando-regel te + typen. + + + Stempel thumbnails in het stempel keuzeblok zien minder goed uit. + ----------------------------------------------------------------- + Tux Paint werd waarschijnlijk gecompileerd met de snellere, lage kwaliteit + thumbnail code ingeschakeld. Het commando: "tuxpaint --version" kan hier + uitkomst bieden. Ziet u de tekst: "Low Quality Thumbnails enabled", + dan is dit het geval. + + Het opnieuw compileren van Tux Paint biedt hier uitkomst. Verwijder de + regel: + + #define LOW_QUALITY_THUMBNAILS + + uit de "tuxpaint.c" file in de "src" directory. + + + Het Magic "Fill" gereedschap ziet er minder goed uit. + ----------------------------------------------------- + Tux Paint vergelijkt waarschijnlijk de precieze pixel kleuren bij het + vullen. Dit gaat sneller maar ziet er niet zo goed uit. + Het commando: "tuxpaint --version" kan hier + uitkomst bieden. Ziet u de tekst: "Low Quality Flood Fill enabled", + dan is dit het geval. + + Het opnieuw compileren van Tux Paint biedt hier uitkomst. Verwijder de + regel: + + #define LOW_QUALITY_FLOOD_FILL + + uit de "tuxpaint.c" file in de "src" directory. + + + De tekeningen in het 'Open' dialoog venster zien er minder goed uit + ------------------------------------------------------------------- + "Low Quality Thumbnails" is waarschijnlijk ingeschakeld. + Zie het hoofdstuk: Stempel thumbnails. + + + De kleur-keuze knoppen zien er minder goed uit, het zijn geen mooie knoppen! + ---------------------------------------------------------------------------- + Tux Paint werd waarschijnlijk gecompileerd met de lage kwaliteit + knoppen code ingeschakeld. Het commando: "tuxpaint --version" kan hier + uitkomst bieden. Ziet u de tekst: "Low Quality Color Selector enabled", + dan is dit het geval. + + + Het opnieuw compileren van Tux Paint biedt hier uitkomst. Verwijder de + regel: + + #define LOW_QUALITY_COLOR_SELECTOR + + uit de "tuxpaint.c" file in de "src" directory. + + + Tux Paint draait in Full Screen mode - Ik wil Tux Paint binnen een venster! + --------------------------------------------------------------------------- + De "fullscreen" optie is ingeschakeld. + + Start u Tux Paint van de commando-regel, verzeker u dan dat de + "--fullscreen" optie niet meegegeven werd. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--fullscreen" optie kan ook + op deze wijze ingeschakeld staan. + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "fullscreen=yes". + + Verwijder eenvoudig deze regel of start Tux Paint met de optie: + "--windowed", Dit overschrijft de eerdere instellingen. + + + Tux Paint produceert rare tekst op het scherm of in een tekst file + ------------------------------------------------------------------- + Sommige boodschappen zijn normaal maar als Tux Paint een veelvoud van + meldingen geeft (bijvoorbeeld een lijst van alle namen van elke stempel + afbeelding), dan is het programma waarschijnlijk gecompileerd met de debug + optie ingeschakeld. + + Opnieuw compileren biedt hier uitkomst. Verwijder de regel: + + #define DEBUG + + uit de "tuxpaint.c" file in de "src" directory. + + + Stempels zien er uit als rechthoeken + ------------------------------------ + Tux Paint werd gecompileerd met de lage kwaliteit stempel vormen. + + Compileer Tux Paint opnieuw en verwijder de regel: + + + #define LOW_QUALITY_STAMP_OUTLINE + + uit de "tuxpaint.c" file in de "src" directory. + + + Tux Paint verschijnt in een vreemde taal! + ----------------------------------------- + Zorg ervoor dat de locale setting correct is. + Zie ook het hoofdstuk "Tux Paint schakelt niet naar de juiste taal. + + + Tux Paint schakelt niet naar de juiste taal. + ------------------------------------- + + Linux en Unix gebruikers: Verzeker u dat de locale beschikbaar is + ----------------------------------------------------------------- + Controleer de "/etc/locale.gen" file. Kijk in de README.txt file voor + de locales die Tux Paint gebruikt (in het bijzonder als u de "--lang" + optie gebruikt). + + NB: Debian gebruikers kunnen het commando "dpkg-reconfigure locales" + op de commando-regel uitvoeren. + + Gebruikt u de "--lang" commando-regel optie + ------------------------------------------- + Probeer de "--locale" commando-regel optie of de locale instellingen + van uw operating systeem (bijvoorbeeld de "$LANG" omgevingsvariabele), en + e-mail mij uw bevindingen. + + Gebruikt u de "--locale" commando-regel optie + --------------------------------------------- + Werkt dit niet e-mail mij dan uw bevindingen. + + Gebruikt u de operating Systeem's locale + ---------------------------------------- + Werkt dit niet e-mail mij dan uw bevindingen. + + + Tux Paint overschrijft altijd mijn oude tekening! + ------------------------------------------------- + De "save over" optie is ingeschakeld. (Dit schakelt het dialoogvenster + uit dat normaal zou verschijnen als u op 'Save' klikt) + + Start u Tux Paint van de commando-regel, Verzeker u dan dat u niet de + "--saveover" optie meegeeft. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--saveover" optie kan ook op + deze wijze ingeschakeld staan. + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "saveover=yes". + + Verwijder eenvoudig deze regel of start Tux Paint met de optie: + "--saveoverask", Dit overschrijft de eerdere instellingen. + + Zie ook het hoofdstuk "Tux Paint bewaart altijd een nieuwe tekening!". + + + Tux Paint bewaart altijd een nieuwe tekening! + --------------------------------------------- + De "nooit overschrijven" optie is ingeschakeld. (Dit schakelt het + dialoogvenster uit dat zou verschijnen als u op 'Save' klikt uit.) + + Start u Tux Paint van de commando-regel, Verzeker u dan dat u niet de + "--saveovernew" optie meegeeft. + + Heeft u Tux Paint gestart door te dubbel klikken op een icoon, controleer + dan de eigenschappen van het icoon zelf. De "--saveovernew" optie kan ook + op deze wijze ingeschakeld staan. + + Is het bovenstaande niet het geval controleer dan de Tux Paint's + configuratie file ("~/.tuxpaintrc" onder Linux en Unix, + ("tuxpaint.cfg" onder Windows) voor de regel met: "saveover=new". + + Verwijder eenvoudig deze regel of start Tux Paint met de optie: + "--saveoverask", Dit overschrijft de eerdere instellingen. + + Zie ook het hoofdstuk Tux Paint overschrijft altijd mijn oude tekening! + + Tux Paint gebruikt opties die ik niet opgegeven heb.! + ----------------------------------------------------- + Tux Paint kijkt altijd eerst naar de configuratie files voor opties. + + Unix en Linux + ------------- + Onder Unix en Linux kijkt het programma eerst naar de systeem + configuratie file: + + /etc/tuxpaint/tuxpaint.conf + + Dan pas kijkt het programma naar de persoonlijke configuratie file: + + ~/.tuxpaintrc + + Als allerlaatste wordt pas gekeken naar commando-regel opties. + + Windows + ------- + Onder Windows kijkt Tux Paint eerst naar de configuratie file: + + tuxpaint.cfg + + Dan pas naar opties die op de commando-regel worden meegegeven. + + + Dit betekent dat instellingen, gemaakt in de configuratie files + overschreven kunnen worden door opdrachten op de commando-regel. + + Bijvoorbeeld als "/etc/tuxpaint/tuxpaint.conf" het geluid uitschakelt: + + nosound=yes + + Dan kunt u het geluid weer inschakelen door deze optie toe te voegen aan de + ".tuxpainrc" file: + + sound=yes + + Of door de commando-regel optie: + + --sound mee te geven. + + + Linux en Unix gebruikers kunnen de systeem configuratie + file uitschakelen door op de commando-regel de optie: + + --nosysconfig mee te geven. + + Tux Paint kijkt dan alleen naar de "~/.tuxpaintrc" file en de + commando-regel opties. + + + De muis aanwijzer laat sporen achter! + ------------------------------------- + Zowel onder Windows als onder Linux (in de fullscreen mode) heeft de + SDL library een fout welke sporen achterlaat op het scherm. + + Totdat er een oplossing is voor dit probleem gebruikt u beter de fullscreen + niet en schakelt u de bijzondere muis aanwijzers uit met de optie: + + nofancycursors=yes + + Of door de commando-regel optie: + + --nofancycursors mee te geven. + + +Help / Contact +-------------- + Vragen die hier niet worden beantwoord? Laat het me weten! + + bill@newbreedsoftware.com + + of stuur een e-mail naar de 'tuxpaint-dev' mailing lijst: + + http://www.newbreedsoftware.com/tuxpaint/lists/ + diff --git a/docs/nl/INSTALL.txt b/docs/nl/INSTALL.txt new file mode 100644 index 000000000..1f7afcbcf --- /dev/null +++ b/docs/nl/INSTALL.txt @@ -0,0 +1,294 @@ +INSTALL.txt voor Tux Paint + +Tux Paint - Een tekenprogramma voor kinderen. + +Copyright 2002, Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +27 Juni 2002 - 5 november 2002 + +(Nederlands: Geert , 20 november 2002) + + +Nodig: +------ + Windows gebruikers: + ------------------- + De Windows versie van Tux Paint wordt geleverd als een executable file. + Hierin zitten alle libraries (in ".DLL" vorm). + + libSDL + ------ + Tux Paint benodigt de Simple DirectMedia Layer Library (libSDL), + een Open Source multimedia programming library beschikbaar onder de + GNU Lesser General Public License (LGPL). + + Samen met libSDL heeft Tux Paint een aantal andere 'hulp' libraries nodig: + SDL_Image (voor grafische files), SDL_TTF (voor True Type Fonts + ondersteuning) en optioneel de SDL_Mixer (voor geluidseffecten). + + Linux/Unix gebruikers: + ---------------------- + De SDL libraries zijn beschikbaar als source-code, of als RPM of als + Debian pakket voor de verschillende Linux distributies. Ze zijn als + download beschikbaar van: + + libSDL: http://www.libsdl.org/ + SDL_Image: http://www.libsdl.org/projects/SDL_image/ + SDL_TTF: http://www.libsdl.org/projects/SDL_ttf/ + SDL_Mixer: http://www.libsdl.org/projects/SDL_mixer/ [OPTIONEEL] + + Meestal zijn ze echter gewoon beschikbaar op uw Linux distributie + CD, of via pakket onderhoud managers als het Debian "apt-get"). + + NB: Installeer ook "-devel" versies van de pakketten.(Dus beide pakketten + "SDL-1.2.4.rpm" EN "SDL-1.2.4-devel.rpm") + + Andere Libraries: + ----------------- + Tux Paint maakt ook nog gebruik van een aantal andere LGPL libraries. + Onder Linux moeten deze genstalleerd worden. Ze zullen meestal al op uw + systeem aanwezig zijn of zijn beschikbaar op de CD van uw Linux distributie. + + libPNG + ------ + Tux Paint gebruikt het PNG (Portable Network Graphics) formaat voor de + data files. SDL_image heeft hiervoor libPNG nodig. + + http://www.libpng.org/pub/png/libpng.html + + FreeType2 + --------- + Tux Paint gebruikt de TTF (True Type Font) fonts voor tekst. + SDL_ttf heeft hiervoor de FreeType2 library nodig. + + http://www.freetype.org/ + + gettext + ------- + Tux Paint gebruikt uw locale settings van uw systeem samen met de + "gettext" library om de verschillende talen te ondersteunen (bijvoorbeeld + Spaans). Hiervoor moet u de gettext library installeren. + + http://www.gnu.org/software/gettext/ + + NetPBM Tools [OPTIONEEL] + ------------------------ + Onder Linux en Unix worden de NetPBM gereedschappen veel gebruikt om te + printen (Een PNG file wordt gegenereerd door TuxPaint en weer + geconverteerd naar een PostScript formaat door gebruik te maken van de + 'pngtopnm' and 'pnmtops' NetPBM commando-regel gereedschappen.) + + http://netpbm.sourceforge.net/ + + +Compileren en Installatie: +-------------------------- + Tux Paint wordt uitgegeven onder de GNU General Public License (GPL) + (zie "COPYING.txt" voor meer details), daarom is de 'source code' van het + programma bijgevoegd. + + Windows gebruikers: + ------------------- + Compileren: + ----------- + Tux Paint wordt geleverd als een voor-gecompileerd pakket voor Windows. + [Eventuele informatie over het hercompileren voor Windows zal + in de toekomst hier verschijnen. Tot die tijd moet u het op eigen kracht + doen.] + + Installeren: + ------------ + Dubbel-klik op het Tux Paint installatie programma (.EXE file) en + volg de instructies. + + Eerst wordt u gevraagd om in te stemmen met de GPL licentie. + (Deze kunt u terugvinden als de General Public License (GPL), zie + hiervoor de "COPYING.txt".) + + Het programma vraagt u of snelkoppelingen in het Windows Start Menu en op + de desktop naar Tux Paint wilt. Beide opties zijn standaard aangevinkt. + + Vervolgens wordt u gevraagd op welke plaats u Tux Paint wilt installeren. + Indien er voldoende plaats aanwezig is zou de standaard map goed moeten + zijn. Is dit niet het geval, kiest u dan een andere plaats. + + Na deze vraag hoeft u alleen nog maar op 'installeren' te klikken. + Tux Paint doet de rest! + + Het veranderen van de eigenschappen van de snelkoppeling. + --------------------------------------------------------- + Om de programma instellingen te veranderen klikt u met de rechter + muis-toets op de TuxPaint snelkoppeling en kiest u 'Eigenschappen' + uit het menu. + + Controleer of de 'snelkoppeling' tab is geselecteerd en bekijk het doel + van de snelkoppeling. Hier staat bijvoorbeeld: + + "C:\Program Files\TuxPaint\TuxPaint.exe" + + U kunt nu commando-regel opties toevoegen, welke uitgevoerd worden + als u op het icoontje klikt. + + Om bijvoorbeeld Tux Paint in de 'fullscreen' mode te laten starten, + met eenvoudige vormen ( geen roteer optie) en in het Nederlands voegt + u de volgende opties toe: + + "C:\Program Files\TuxPaint\TuxPaint.exe" -f -s --lang dutch + + (Zie de "README.txt" voor een volledige lijst van commando-regel opties.) + + Maakt u een fout of, nog erger, als het venster verdwijnt dan drukt u + Ctrl-Z of [ESC] om zaken ongedaan te maken. Het venster zal zich dan + sluiten zonder dat de veranderingen uitgevoerd werden. (Niet op de + "Apply" knop drukken!). + + Bent u klaar dan klikt u op "OK." + + Als er iets fout gaat + --------------------- + Als u op het icoontje klikt om TuxPaint te starten en er gebeurt niets + dan zijn de commando-regel opties waarschijnlijk fout. Bekijk dan met een + eenvoudige tekstverwerker (Notepad o.i.d.) de file 'stderr.txt' in de + TuxPaint map. + + Deze file bevat een omschrijving van wat er fout is gegaan. In de meeste + gevallen zal dit iets zijn in de stijl van een hoofdletter waar er geen + hoort, een letter vergeten, een streepje teveel of te weinig etc. + + + Linux/Unix Gebruikers: + ---------------------- + Compileren: + ----------- + NB: Op dit moment ondersteunt Tux Paint niet autoconf/automake dus is er + geen "./configure" script. (Sorry!) Compileren zou echter eenvoudig + moeten zijn, vooropgesteld dat TuxPaint al de nodige libraries kan vinden. + + Om het programma van de source-code te compileren typt u eenvoudig + het volgende commando: + + $ make + + Het geluid uitschakelen bij het compileren: + ------------------------------------------- + Heeft u geen geluidskaart of wilt u het programma gebruiken zonder geluid + dan heeft het geen zin om de geluidsondersteuning te installeren. + De SDL_mixer hoeft dan ook niet aanwezig te zijn op uw systeem. + U kunt dan make als volgt uitvoeren: + + $ make nosound + + + U krijgt foutmeldingen: + ----------------------- + Krijgt u foutmeldingen tijdens het compileren controleer dan of alle + genoemde libraries op uw systeem aanwezig zijn. Gebruikt u + voor-gecompileerde pakketten zoals de RPM's bij RedHat en de DEBs bij + Debian installeer dan ook de corresponderende "-dev" of "-devel" + pakketten. Anders kunt u Tux Paint (en andere programma's) niet + compileren. + + Installeren: + ------------ + Vooropgesteld dat er geen fouten zijn opgetreden bij het compileren, kunt + u nu Tux Paint installeren. Onder Linux moet dit gebeuren door de 'root' + gebruiker (superuser). U kunt naar "root" overschakelen door: + + $ su te typen + + Geef het "root" password en u bent ingelogd als hoofdgebruiker + (met een prompt die eruit ziet als "#"). Om het programma te installeren + typt u: + + # make install + + Bent u klaar dan kunt u de 'superuser' mode verlaten door: + + # exit te typen. + + + NB: Standaard plaatst TuxPaint de "tuxpaint", executable in + "/usr/local/bin/". De data files (afbeeldingen, geluiden etc.) + komen in "/usr/local/share/tuxpaint/". + + + Waar gaan de bestanden naar toe + ------------------------------- + U kunt met de 'PREFIX' variabele in de Makefile instellen waar de + bestanden naar toe gaan. "PREFIX" is de basis waar alle bestanden + naartoe gaan. Standaard ingesteld op "/usr/local". + + Andere variabelen zijn: + BIN_PREFIX + Waar het bestand "tuxpaint" terecht komt. + (Standaard is "$(PREFIX)/bin" bijvoorbeeld: "/usr/local/bin") + + DATA_PREFIX + Waar de data files (geluid, afbeeldingen, borstels, stempels etc.) + terecht komen en waar TuxPaint bij het opstarten zal zoeken. + (Standaard ingesteld op "$(PREFIX)/share/tuxpaint") + + DOC_PREFIX + Waar de documentatie files geplaatst worden (de "docs" directory). + (Standaard "$(PREFIX)/share/doc/tuxpaint") + + MAN_PREFIX + Waar de 'man pages' terecht komen. (De standaard is: + "$(PREFIX)/share/man") + + ICON_PREFIX $(PREFIX)/share/pixmaps + X11_ICON_PREFIX $(PREFIX)/X11R6/include/X11/pixmaps + GNOME_PREFIX $(PREFIX)/share/gnome/apps/Graphics + KDE_PREFIX $(PREFIX)/share/applnk/Graphics + Waar de iconen voor KDE en GNOME terecht komen. + + LOCALE_PREFIX + Waar de vertaalde pagina's van Tux Paint naar toe gaan. + (Standaard ingesteld op "$(PREFIX)/share/locale/") + (Uiteindelijk komen deze bestanden in de locale's directory + (bijvoorbeeld, "es" voor Spaans), binnen de "LC_MESSAGES" + subdirectory.) + + +Tux Paint verwijderen: +---------------------- + Windows + ------- + Gebruik makend van de Uninstaller + --------------------------------- + Als u de snelkoppeling in het Start Menu genstalleerd heeft dan kunt u + "Uninstall" kiezen in de Tuxpaint folder. Er opent zich een venster + waarin u om bevestiging gevraagd wordt. Weet u het zeker, klik dan op + de 'Uninstall' knop. + + Wanneer de bestanden verwijderd zijn klikt u eenvoudig op de 'sluiten' + knop. + + U kunt TuxPaint ook verwijderen in het de 'software' afdeling van het + configuratie scherm. + + NB: Omdat de afbeeldingen gemaakt met Tux Paint opgeslagen worden in de + map 'userdata' wordt deze map niet verwijderd. + + + Linux + ----- + In de source file directory van TuxPaint (de map waarin u Tux Paint + compileerde), kunt u de 'Makefile' gebruiken om Tux Paint te verwijderen. + Standaard kan dit alleen gebeuren door de "root" gebruiker ('superuser'). + (Zie ook de installatieprocedure voor meer informatie.) + + U schakelt over naar "root" door het volgende commando te typen: + + $ su + + Geef vervolgens het "root" password op. De prompt is een "#"). + Om alle standaard bestanden te verwijderen typt u: + + # make uninstall + + Na deze actie wordt u weer gewone gebruiker door het commando: + + # exit diff --git a/docs/nl/PNG.txt b/docs/nl/PNG.txt new file mode 100644 index 000000000..eafc5ed37 --- /dev/null +++ b/docs/nl/PNG.txt @@ -0,0 +1,142 @@ +PNG.txt voor Tux Paint + +Tux Paint - Een tekenprogramma voor kinderen. + +Copyright 2002 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +27 Juni 2002 - 7 november 2002 + +(Nederlands: Geert , 19 november 2002) + + +Over PNG's +---------- + PNG is het Portable Network Graphic formaat. Het is een open standaard, + niet belast door patenten (zoals het GIF formaat). Het is een formaat + met een hoge compressie waarbij het geen afbreuk doet aan de kwaliteit (zoals + het JPEG formaat wel doet.) Het PNG formaat ondersteunt een 24-bit + kleurdiepte (16.7 miljoen kleuren) maar ook een "alpha kanaal" - D.w.z. dat + elke pixel een variabele graad van transparantie kan hebben. + + Voor meer informatie kijkt u op: http://www.libpng.org/ + + De bovengenoemde functies (open standaard, kwaliteitsbehoud, compressie en + transparantie / alpha) maken dit formaat tot de beste keus voor Tux Paint. + (Tux Paint ondersteunt het PNG formaat door het Open Source SDL_Image library, + welk op zijn beurt weer ondersteund wordt door de libPNG library.) + + Ondersteuning voor de vele kleuren maakt fotokwaliteit "stempels" mogelijk. + De alpha transparantie laat hoge kwaliteit kwasten toe. + + +Introductie tot het maken van PNG's files. +------------------------------------------ + Het volgende is een korte introductie tot het maken van PNG files + en hoe bestaande afbeeldingen omgezet kunnen worden naar het PNG formaat. + + + Linux/Unix gebruikers + --------------------- + De GIMP + ------- + Het beste gereedschap om PNG afbeeldingen te maken voor gebruik in + Tux Paint is het GNU Image Manipulation Program ("De GIMP"). + Het Open Source alternatief voor afbeelding en fotobewerking. + (Ook beschikbaar voor Windows) + + Hoogstwaarschijnlijk is het al op uw systeem aanwezig, anders is het + beschikbaar op CD zo niet dan van de download site van uw distributie. + Of van: + + http://www.gimp.org/ + + + Krita + ----- + Krita is een teken- en afbeeldings bewerkingsprogramma voor KOffice. + + http://koffice.kde.org/krita/ + + + NetPBM + ------ + De Portable Bitmap tools (samen bekend als "NetPBM") is een + verzameling van Open Source commando-regel gereedschappen welke + omzetten van en naar andere formaten. GIF, TIFF, BMP, PNG, en vele andere. + + NB: Het NetPBM formaat (Portable Bitmap: PBM, + Portable Greymap: PGM, Portable Pixmap: PPM, en het Portable Any Map: PNM) + ondersteunen geen alpha kanalen. Dus elke vorm van transparantie gaat + verloren. Gebruik daarom de GIMP! + + Hoogstwaarschijnlijk is NetBPM al op uw systeem aanwezig, anders is het + beschikbaar op CD of van de download site van uw distributie. Of van: + + http://netpbm.sourceforge.net/ + + + cjpeg/djpeg + ----------- + De "cjpeg" en "djpeg" commando-regel programma's converteren tussen + het NetPBM Portable Any Map (PNM) formaat en het JPEG formaat. + + Het is waarschijnlijk al aanwezig op uw systeem. + (Bij de Debian distributie is het beschikbaar in het pakket + "libjpeg-progs".) Zo niet is het beschikbaar op uw installatie CD of + als download van de distributie website. Anders: + + ftp://ftp.uu.net/graphics/jpeg/ + + + Windows gebruikers + ------------------ + Canvas (Deneba) + http://www.deneba.com/products/canvas8/default2.html + + CorelDRAW (Corel) + http://www.corel.com/ + + Fireworks (Macromedia) + http://macromedia.com/software/fireworks/ + + Illustrator (Adobe) + http://www.adobe.com/products/illustrator/main.html + + Paint Shop Pro (Jasc) + http://www.jasc.com/products/psp/ + + Photoshop (Adobe) + http://www.adobe.com/products/photoshop/main.html + + + Macintosh gebruikers + -------------------- + Canvas (Deneba) + http://www.deneba.com/products/canvas8/default2.html + + CorelDRAW (Corel) + http://www.corel.com/ + + Fireworks (Macromedia) + http://macromedia.com/software/fireworks/ + + GraphicConverter (Lemke Software) + http://www.lemkesoft.de/us_gcabout.html + + Illustrator (Adobe) + http://www.adobe.com/products/illustrator/main.html + + Photoshop (Adobe) + http://www.adobe.com/products/photoshop/main.html + + +Meer Info. +---------- + De libPNG website geeft een lijst van editors en omzetters die + het PNG formaat ondersteunen: + + http://www.libpng.org/pub/png/pngaped.html + http://www.libpng.org/pub/png/pngapcv.html + diff --git a/docs/nl/README.txt b/docs/nl/README.txt new file mode 100644 index 000000000..f3cfcb9b7 --- /dev/null +++ b/docs/nl/README.txt @@ -0,0 +1 @@ +Please see "docs/README.txt" diff --git a/docs/nn/AUTHORS.txt b/docs/nn/AUTHORS.txt new file mode 100644 index 000000000..6d921014f --- /dev/null +++ b/docs/nn/AUTHORS.txt @@ -0,0 +1 @@ +Please see "docs/AUTHORS.txt" diff --git a/docs/nn/COPYING.txt b/docs/nn/COPYING.txt new file mode 100644 index 000000000..d3ed06dd5 --- /dev/null +++ b/docs/nn/COPYING.txt @@ -0,0 +1 @@ +Please see "docs/COPYING.txt" diff --git a/docs/nn/FAQ.txt b/docs/nn/FAQ.txt new file mode 100644 index 000000000..63d4d9c81 --- /dev/null +++ b/docs/nn/FAQ.txt @@ -0,0 +1 @@ +Please see "docs/FAQ.txt" diff --git a/docs/nn/INSTALLERING.txt b/docs/nn/INSTALLERING.txt new file mode 100644 index 000000000..ad5f7d05f --- /dev/null +++ b/docs/nn/INSTALLERING.txt @@ -0,0 +1,288 @@ +INSTALLERING.txt for Tux Paint + +Tux Paint - eit enkelt teikneprogram for dei yngste. + +Copyright 2002 Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +27. juli 2002 - 5. november 2002 + + +SYSTEMKRAV +---------- + Windows + ------- + Windows-versjonen av Tux Paint inneheld alle dei ndvendige + bibliotekfilene (i .DLL-format), s du treng ikkje lasta + ned noko meir. + + libSDL + ------ + Tux Paint brukar Simple DirectMedia Layer Library (libSDL), + som er eit multimedieprogrammeringsbibliotek tilgjengeleg som + open kjeldekode under GNU Lesser General Public License (LGPL). + + Tux Paint treng g fleire SDL-hjelpebibliotek: + SDL_Image (for grafikk), SDL_TTF (for skriftsttte) og + SDL_Mixer (valfritt - for lydeffektar). + + Linux/Unix + ---------- + Kjeldekoden og RPM- og Debian-pakkar av SDL-biblioteka er tilgjengeleg. + Du kan lasta ned alle filene fr: + + libSDL: http://www.libsdl.org/ + SDL_Image: http://www.libsdl.org/projects/SDL_image/ + SDL_TTF: http://www.libsdl.org/projects/SDL_ttf/ + SDL_Mixer: http://www.libsdl.org/projects/SDL_mixer/ (valfritt) + + Dei flgjer g ofte med Linux-distribusjonar (enten p + installasjons-CD-en eller gjennom pakkehandteringsprogramvare, + som apt-get i Debian). + + Merk: Srg for installera -devel-utgvene av pakkane du installerer, + i tillegg til standardutgvene. Installer for eksempel bde + SDL-1.2.4.rpm og SDL-1.2.4-devel.rpm. + + Andre bibliotek + --------------- + Tux Paint brukar g fleire andre frie LGPL-baserte bibliotek. + Dei er vanlegvis allereie installert under Linux, eller enkelet + tilgjengeleg fr distribusjonen du brukar. + + libPNG + ------ + Tux Paint brukar PNG-formatet (Portable Network Graphics) for + grafikkfiler. libPNG m vera installert for at SDL_image skal + fungera. + + http://www.libpng.org/pub/png/libpng.html + + FreeType2 + --------- + Tux Paint brukar skrifter i TTF-format (TrueType) for + skriva tekst. + SDL_ttf treng FreeType2-biblioteket. + + http://www.freetype.org/ + + gettext + ------- + Tux Paint brukar lokaleinnstillingane saman med gettext-biblioteket + for visa brukargrensesnittet p fleire sprk. Du m ha gettext- + biblioteket installert. + + http://www.gnu.org/software/gettext/ + + NetPBM-verktya (valfritt) + -------------------------- + NetPBM-verktya blir brukt for utskrift under Linux og Unix. + (Tux Paint lagar eit PNG-bilete, som s blir konvertert til + PostScript-format ved hjelp av kommandolinjeprogramma pngtopnm + og pnmtops.) + + http://netpbm.sourceforge.net/ + + +Kompilering og installering +--------------------------- + D Tux Paint er gjeven ut under GNU General Public License (GPL) + (sj COPYING.txt for meir informasjon), flgjer kjeldekoden med. + + Windows + ------- + Kompilering + ----------- + Tux Paint kjem ferdigkompliert for Windows, s du slepp kompilera + programmet p eiga hand. [Det vil komma informasjon om kompilering + p Windows her - med tid og stunder. I mellomtida fr du prva + klara deg p sjlv.] + + Installering + ------------ + Kjr installasjonsfila (.exe-fila) og flg instruksjonane. + + Frst m du godta lisensen. (Det er GNU General Public License (GPL), + som g er tilgjengeleg i COPYING.txt.) + + Du blir s spurt om du vil installera snarvegar til Tux Paint i + Start-menyen og p skrivebordet. (Dette blir gjort som standard.) + + S m du velja kor du vil leggja Tux Paint. Standardmappa er grei, + s lenge du har nok diskplass. + + Til slutt trykkjer du berre p Install for installera programmet! + + Endra p innstillingane fr snarvegen + ------------------------------------- + Hgreklikk p Tux Paint-snarvegen, og vel Egenskapar nedst fr + menyen som dukkar opp. + + Srg for at Snarvei-fanen er valt i dialogvindauget, sj p + Mlmappe-feltet. Her skal det st noko liknande: + + C:\Programfiler\TuxPaint\TuxPaint.exe + + Du kan no leggja til kommandolinjeval som blir tatt i + bruk nr du brukar ikonet. + + Eksempel: Viss du vil kjra programmet i fullskjerm, med enkle + figurar (utan rotasjon) og p nynorsk, legg du til vala for dette + etter TuxPaint.exe: + + C:\Programfiler\TuxPaint\TuxPaint.exe -f -s --lang nynorsk + + (Sj LESMEG.txt for ei oversikt over kommandolinjevala du kan bruka.) + + Viss du skrive noko galt, eller all teksten forsvinn, kan du angra + med Ctrl + Z, eller bruka Escape-tasten til lukka dialogvindauget + utan lagra endringane (med mindre du har trykt p Bruk-knappen!) + + Nr du er ferdig, trykkjer du OK. + + Viss noko gr galt + ------------------ + Viss ingenting skjer nr du brukar snarvegen, er det sannsynlegvis + fordi nokre av kommandolinjevala er feil. Opna eit Utforsker-vindauge + som fr, og leit etter ei fil som heiter stderr.txt i mappa der + Tux Paint-programmet ligg. + + Denne fila inneheld informasjon om kva som gjekk galt. Vanlegvis + er berre store bokstavar nr du skulle brukt sm, eller ein + manglande bindestrek (-). + + + Linux/Unix + ---------- + Kompilering + ----------- + Merk: Tux Paint stttar ikkje autoconf/automake, s det finst + ingen ./configure-skript du kan kjra. Men kompileringa skal + uansett g lett, s lenge alle dei ndvendige tilleggsbiblioteka + er installerte. + + Skriv flgjande fr kommandolinja for kompilera programmet: + + $ make + + Sl av lydsttta ved kompilering + -------------------------------- + Viss du ikkje har noko lydkort, eller fretrekkjer bruka programmet + utan lyd (og utan SDL-mixer-biblioteket), kan du kjra make med + mlet nosound: + + $ make nosound + + + Ved feil + -------- + Viss du opplever feil ved kompileringa, br du sjekka at du har alle + dei ndvendige tilleggsbiblioteka installert. Om du brukar ferdigpakka + versjonar av biblioteka (som RPM-filer under RedHat og DEB-filer + under Debian), m du srgja for ha tilhrande -dev- eller -devel- + pakkar g. Elles kan du ikkje kompilera Tux Paint (eller andre program) + fr kjeldekoden. + + + Installering + ------------ + Viss ingen feil har oppsttt, kan du no installera programmet p + systemet. Som standard m dette gjerast som rotbrukar (superuser). + Byt til rotbrukar med kommandoen: + + $ su + + Skriv s inn passordet. Du er no rotbrukar (med ledeteksten #). Du + kan s skriva flgjande for installera programmet og datafilene: + + # make install + + Til slutt br du bytta tilbake til vanleg brukar: + + # exit + + + Merk: Som standard blir kjrefila tuxpaint lagt i katalogen + /usr/local/bin/. Datafilene (bilete, lydeffektar og liknande) + blir lagt i katalogen /usr/local/share/tuxpaint/. + + + Velja filplassering + ------------------- + Du kan velja kor filene skal leggjast ved bruka PREFIX- + variablane i Makefile. PREFIX er grunnkatalogen som alle + filene blir lagt under, og er som standard /usr/local. + + Andre variablar + --------------- + BIN_PREFIX + Katalogen til kjrefila tuxpaint. + (Standard: $(PREFIX)/bin, alts /usr/local/bin) + + DATA_PREFIX + Katalogen til datafilene (lydeffektar, grafikk, penslar, + stempel og skrifter). + (Standard: $(PREFIX)/share/tuxpaint) + + DOC_PREFIX + Katalogen til dokumentasjonskatalogen (docs-katalogen). + (Standard: $(PREFIX)/share/doc/tuxpaint) + + MAN_PREFIX + Katalogen til man-sida for Tux Paint. + (Standard: $(PREFIX)/share/man) + + ICON_PREFIX $(PREFIX)/share/pixmaps + X11_ICON_PREFIX $(PREFIX)/X11R6/include/X11/pixmaps + GNOME_PREFIX $(PREFIX)/share/gnome/apps/Graphics + KDE_PREFIX $(PREFIX)/share/applnk/Graphics + Katalogen til ikona og programstartarane (for GNOME og KDE). + + LOCALE_PREFIX + Katalogen til omsetjingsfilene for Tux Paint. + (Standard: $(PREFIX)/share/locale/) + (Filene blir lagt i eigne katalogar for kvart lokale, i + LC_MESSAGES under lokalekatalogane, som nn for + nynorskomsetjinga.) + + +Avinstallering +-------------- + Windows + ------- + Viss du installerte snarvegane i Start-menyen (standard), gr du berre + til TuxPaint-mappa og vel Uninstall. Det dukkar opp eit dialogvindauge + som ber deg stadfesta at du vil avinstallera Tux Paint. Viss du er sikker + p at du vil fjerna programmet, trykkjer du p Uninstall-knappen. + + Nr avinstalleringa er fullfrt, trykkjer du p Close-knappen. + + Du kan g bruka oppfringa TuxPaint (remove only) i Legg til / fjern + programmer i Kontrollpanel. + + Merk: D teikningar blir lagra i same mappe som Tux Paint-programmet er + installert i, blir ikkje denne mappa og userdata-undermappa fjerna. + + + Linux + ----- + Du kan bruka eit Makefile-ml i kjeldefilkatalogen (der du + kompilerte Tux Paint) til avinstallera programmet. + Som standard m du gjera dette som rotbrukar (superuser). + (Sj installasjonshjelpen ovanfor for meir informasjon.) + + Byt til rotbrukar med kommandoen: + + $ su + + Skriv s inn passordet for rotbrukaren. Du skal no vera logga + inn som rotbrukar (med ledeteksten #). For avinstallera + programmet med datafilene (standardstempla blir g fjerna viss + dei finst), skriv du: + + # make uninstall + + Til slutt br du logga ut og tilbake til vanleg brukar: + + # exit \ No newline at end of file diff --git a/docs/nn/PNG.txt b/docs/nn/PNG.txt new file mode 100644 index 000000000..78db305c1 --- /dev/null +++ b/docs/nn/PNG.txt @@ -0,0 +1 @@ +Please see "docs/PNG.txt" diff --git a/docs/nn/README.txt b/docs/nn/README.txt new file mode 100644 index 000000000..f3cfcb9b7 --- /dev/null +++ b/docs/nn/README.txt @@ -0,0 +1 @@ +Please see "docs/README.txt" diff --git a/docs/pt_br/AUTORES.txt b/docs/pt_br/AUTORES.txt new file mode 100644 index 000000000..339f1451f --- /dev/null +++ b/docs/pt_br/AUTORES.txt @@ -0,0 +1,157 @@ +AUTORES.txt do Tux Paint + +Tux Paint - Um programa de desenho para crianas, fcil de usar. + +Copyright (c) 2002 por Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + + +17 de junho de 2002 - 25 de setembro de 2002 + + +* Projeto e programao: + + Bill Kendrick + New Breed Software + http://www.newbreedsoftware.com/ + + Algoritmo de preenchimento de imagens baseado + na descrio do livro "Computer Graphics: C Version," + (c) Prentice Hall 1997 de Donald Hearn e M. Pauline Baker. + [ NOTA: Atualmente no utilizado. ] + + Cdigo de preenchimento "Flood fill" baseado no exemplo da Wikipedia: + http://www.wikipedia.org/wiki/Flood_fill/C_example + de Damian Yerrick - http://www.wikipedia.org/wiki/Damian_Yerrick + + +* Grficos + + * Botes da Interface - Criados com o script "AquaPro", utilizando o GIMP + Copyright (C) 2001 Denis Bodor + + * cones da Interface - Criados por Bill Kendrick utilizando o GIMP + + * Desenho animado do "Tux," o pinguim do Linuxi criado por + Sam "Criswell" Hart + O Tux foi originalmente criado por Larry Ewing + http://www.isc.tamu.edu/~lewing/linux/ + + * Pincis criados utilizando o GIMP + http://www.gimp.org/ + + * Carimbos + * Bill Kendrick + Smbolos musicais e matemticos + + Algumas frutas e vegetais + + + * Projeto GOVIA + Justin Zeigler + http://govia.osef.org/ + + Moedas Americanas, Flores, Bandeiras + + + * Figuras Espaciais - NASA e NSSDC - http://nssdc.gsfc.nasa.gov/ + + + * Outras Frutas e Vegeais + - George Wong + http://www.botany.hawaii.edu/faculty/wong/BOT135/LECT06.HTM + - MarketplaceFood.com + http://www.marketplacefood.com/weekly_specials.html + + +* Fonts + + * "efont-serif.ttf" por Electronic Font Open Laboratory + http://openlab.ring.gr.jp/efont/serif/ + GPL'd, Copyright 2000-2001 Kazuhiko + + * "default_font.ttf" "FreeSans.ttf" do Free UCS Outline Fonts. + http://www.freesoftware.fsf.org/freefont/ + GPL'd, Copyright 2002 Primoz Peterlin + et al + + +* Sons + + * Vrios gravados por Bill Kendrick + * Ladrilhos - Cartuchos de jogos de Nintendo sendo empilhados. + * Borrando - Raspando o microfone sobre a almofada de mouse. + * Giz - Raspando o microfone sobre o peruca. + * Escurecendo - Sapo cantando. + + * Muitos outros foram obtidos de vrias fontes na internet. + + * Editados com o SOX + http://sox.sourceforge.net/ + + * Edited com o Audacity + http://www.audacity.org/ + + +* Tradues + + * Alemo + Fabian Franz + + * Dinamarqus + Rasmus Erik Voel Jensen + + * Espanhol + Gabriel Gazzan + + * Finlands + Tarmo Toikkanen + + * Francs + Jacques Chion + Charles Vidal + + * Holands + Herman Bruyninckx + + * Islands + Pjetur G. Hjaltason + + * Italiano + Marco Milanesi + + * Noruegus + Karl Ove Hufthammer + + * Polons (breve) + Jacek Poplawski + + * Portugus Brasileiro + Daniel Jos Viana + Dedicado minha amada filha Scarlet + + * Sueco + Daniel Andersson + + * Turco + Doruk Fisek + + +* Portagem e Criao de Pacotes + + * Verso Windows 32-bits + John Popplewell + + * Pacote Debian + Ben Armstrong + + +* Suporte / Testes + + Tux4Kids.org, Sam Hart (Tux4Kids project manager) + Muitos outros na comunidade! (Testes, correo de bugs, comentrios, kudos) + + +Veja ainda: MUDANAS.txt + diff --git a/docs/pt_br/COPYING_pt_BR.txt b/docs/pt_br/COPYING_pt_BR.txt new file mode 100644 index 000000000..f73ace6ba --- /dev/null +++ b/docs/pt_br/COPYING_pt_BR.txt @@ -0,0 +1,379 @@ + LICENA PBLICA GERAL GNU + Verso 2, junho de 1991 + + This is an unofficial translation of the GNU General Public License + into Brazilian Portuguese. It was not published by the Free Software + Foundation, and does not legally state the distribution terms for + software that uses the GNU GPL -- only the original English text of + the GNU GPL does that. However, we hope that this translation will + help Brazilian Portuguese speakers understand the GNU GPL better. + + Esta uma traduo no-oficial da Licena Pblica Geral GNU ("GPL + GNU") para o portugus do Brasil. Ela no foi publicada pela Free +Software Foundation, e legalmente no afirma os termos de distribuio + de software que utiliza a GPL GNU -- apenas o texto original da GPL + GNU, em ingls, faz isso. Contudo, esperamos que esta traduo ajude + aos que utilizam o portugus do Brasil a entender melhor a GPL GNU. + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, + Cambridge, MA 02139, USA + +A qualquer pessoa permitido copiar e distribuir cpias desse +documento de licena, desde que sem qualquer alterao. + + Introduo + + As licenas de muitos software so desenvolvidas para restringir sua +liberdade de compartilh-lo e mud-lo. Contrria a isso, a Licena +Pblica Geral GNU pretende garantir sua liberdade de compartilhar e +alterar software livres -- garantindo que o software ser livre e +gratuito para os seus usurios. Esta Licena Pblica Geral aplica-se +maioria dos software da Free Software Foundation e a qualquer outro +programa cujo autor decida aplic-la. (Alguns outros software da FSF +so cobertos pela Licena Pblica Geral de Bibliotecas, no entanto.) +Voc pode aplic-la tambm aos seus programas. + + Quando nos referimos a software livre, estamos nos referindo a +liberdade e no a preo. Nossa Licena Pblica Geral foi desenvolvida +para garantir que voc tenha a liberdade de distribuir cpias de +software livre (e cobrar por isso, se quiser); que voc receba o +cdigo-fonte ou tenha acesso a ele, se quiser; que voc possa mudar o +software ou utilizar partes dele em novos programas livres e +gratuitos; e que voc saiba que pode fazer tudo isso. + + Para proteger seus direitos, precisamos fazer restries que impeam +a qualquer um negar estes direitos ou solicitar que voc deles +abdique. Estas restries traduzem-se em certas responsabilidades para +voc, se voc for distribuir cpias do software ou modific-lo. + + Por exemplo, se voc distribuir cpias de um programa, gratuitamente +ou por alguma quantia, voc tem que fornecer aos recebedores todos os +direitos que voc possui. Voc tem que garantir que eles tambm +recebam ou possam obter o cdigo-fonte. E voc tem que mostrar-lhes +estes termos para que eles possam conhecer seus direitos. + + Ns protegemos seus direitos em dois passos: (1) com copyright do +software e (2) com a oferta desta licena, que lhe d permisso legal +para copiar, distribuir e/ou modificar o software. + + Alm disso, tanto para a proteo do autor quanto a nossa, +gostaramos de certificar-nos que todos entendam que no h qualquer +garantia nestes software livres. Se o software modificado por algum +mais e passado adiante, queremos que seus recebedores saibam que o que +eles obtiveram no original, de forma que qualquer problema +introduzido por terceiros no interfira na reputao do autor +original. + + Finalmente, qualquer programa ameaado constantemente por patentes +de software. Queremos evitar o perigo de que distribuidores de +software livre obtenham patentes individuais, o que tem o efeito de +tornar o programa proprietrio. Para prevenir isso, deixamos claro que +qualquer patente tem que ser licenciada para uso livre e gratuito por +qualquer pessoa, ou ento que nem necessite ser licenciada. + + Os termos e condies precisas para cpia, distribuio e +modificao se encontram abaixo: + + LICENA PBLICA GERAL GNU + TERMOS E CONDIES PARA CPIA, DISTRIBUIO E MODIFICAO + + 0. Esta licena se aplica a qualquer programa ou outro trabalho que +contenha um aviso colocado pelo detentor dos direitos autorais +informando que aquele pode ser distribudo sob as condies desta +Licena Pblica Geral. O "Programa" abaixo refere-se a qualquer +programa ou trabalho, e "trabalho baseado no Programa" significa tanto +o Programa em si como quaisquer trabalhos derivados, de acordo com a +lei de direitos autorais: isto quer dizer um trabalho que contenha o +Programa ou parte dele, tanto originalmente ou com modificaes, e/ou +traduo para outros idiomas. (Doravante o processo de traduo est +includo sem limites no termo "modificao".) Cada licenciado +mencionado como "voc". + +Atividades outras que a cpia, a distribuio e modificao no esto +cobertas por esta Licena; elas esto fora de seu escopo. O ato de +executar o Programa no restringido e o resultado do Programa +coberto apenas se seu contedo contenha trabalhos baseados no Programa +(independentemente de terem sido gerados pela execuo do +Programa). Se isso verdadeiro depende do que o programa faz. + + 1. Voc pode copiar e distribuir cpias fiis do cdigo-fonte do +Programa da mesma forma que voc o recebeu, usando qualquer meio, +deste que voc conspcua e apropriadamente publique em cada cpia um +aviso de direitos autorais e uma declarao de inexistncia de +garantias; mantenha intactas todos os avisos que se referem a esta +Licena e ausncia total de garantias; e fornea a outros +recebedores do Programa uma cpia desta Licena, junto com o Programa. + + 2. Voc pode modificar sua cpia ou cpias do Programa, ou qualquer +parte dele, assim gerando um trabalho baseado no Programa, e copiar e +distribuir essas modificaes ou trabalhos sob os temos da seo 1 +acima, desde que voc tambm se enquadre em todas estas condies: + + a) Voc tem que fazer com que os arquivos modificados levem avisos + proeminentes afirmando que voc alterou os arquivos, incluindo a + data de qualquer alterao. + + b) Voc tem que fazer com que quaisquer trabalhos que voc + distribua ou publique, e que integralmente ou em partes contenham + ou sejam derivados do Programa ou de suas partes, sejam + licenciados, integralmente e sem custo algum para quaisquer + terceiros, sob os termos desta Licena. + + c) Se qualquer programa modificado normalmente l comandos + interativamente quando executados, voc tem que fazer com que, + quando iniciado tal uso interativo da forma mais simples, seja + impresso ou mostrado um anncio de que no h qualquer garantia + (ou ento que voc fornece a garantia) e que os usurios podem + redistribuir o programa sob estas condies, ainda informando os + usurios como consultar uma cpia desta Licena. (Exceo: se o + Programa em si interativo mas normalmente no imprime estes + tipos de anncios, seu trabalho baseado no Programa no precisa + imprimir um anncio.) + +Estas exigncias aplicam-se ao trabalho modificado como um todo. Se +sees identificveis de tal trabalho no so derivadas do Programa, e +podem ser razoavelmente consideradas trabalhos independentes e +separados por si s, ento esta Licena, e seus termos, no se aplicam +a estas sees quando voc distribui-las como trabalhos em +separado. Mas quando voc distribuir as mesmas sees como parte de um +todo que trabalho baseado no Programa, a distribuio como um todo +tem que se enquadrar nos termos desta Licena, cujas permisses para +outros licenciados se estendem ao todo, portanto tambm para cada e +toda parte independente de quem a escreveu. + +Desta forma, esta seo no tem a inteno de reclamar direitos os +contestar seus direitos sobre o trabalho escrito completamente por +voc; ao invs disso, a inteno a de exercitar o direito de +controlar a distribuio de trabalhos, derivados ou coletivos, +baseados no Programa. + +Adicionalmente, a mera adio ao Programa de outro trabalho no +baseado no Programa (ou de trabalho baseado no Programa) em um volume +de armazenamento ou meio de distribuio no faz o outro trabalho +parte do escopo desta Licena. + + 3. Voc pode copiar e distribuir o Programa (ou trabalho baseado +nele, conforme descrito na Seo 2) em cdigo-objeto ou em forma +executvel sob os termos das Sees 1 e 2 acima, desde que voc +faa um dos seguintes: + + a) O acompanhe com o cdigo-fonte completo e em forma acessvel + por mquinas, que tem que ser distribudo sob os termos das Sees + 1 e 2 acima e em meio normalmente utilizado para o intercmbio de + software; ou, + + b) O acompanhe com uma oferta escrita, vlida por pelo menos trs + anos, de fornecer a qualquer um, com um custo no superior ao + custo de distribuio fsica do material, uma cpia do + cdigo-fonte completo e em forma acessvel por mquinas, que tem + que ser distribudo sob os termos das Sees 1 e 2 acima e em meio + normalmente utilizado para o intercmbio de software; ou, + + c) O acompanhe com a informao que voc recebeu em relao + oferta de distribuio do cdigo-fonte correspondente. (Esta + alternativa permitida somente em distribuio no comerciais, e + apenas se voc recebeu o programa em forma de cdigo-objeto ou + executvel, com oferta de acordo com a Subseo b acima.) + +O cdigo-fonte de um trabalho corresponde forma de trabalho +preferida para se fazer modificaes. Para um trabalho em forma +executvel, o cdigo-fonte completo significa todo o cdigo-fonte de +todos os mdulos que ele contm, mais quaisquer arquivos de definio +de "interface", mais os "scripts" utilizados para se controlar a +compilao e a instalao do executvel. Contudo, como exceo +especial, o cdigo-fonte distribudo no precisa incluir qualquer +componente normalmente distribudo (tanto em forma original quanto +binria) com os maiores componentes (o compilador, o "kernel" etc.) do +sistema operacional sob o qual o executvel funciona, a menos que o +componente em si acompanhe o executvel. + +Se a distribuio do executvel ou cdigo-objeto feita atravs da +oferta de acesso a cpias de algum lugar, ento ofertar o acesso +equivalente a cpia, do mesmo lugar, do cdigo-fonte equivale +distribuio do cdigo-fonte, mesmo que terceiros no sejam compelidos +a copiar o cdigo-fonte com o cdigo-objeto. + + 4. Voc no pode copiar, modificar, sub-licenciar ou distribuir o +Programa, exceto de acordo com as condies expressas nesta +Licena. Qualquer outra tentativa de cpia, modificao, +sub-licenciamento ou distribuio do Programa no valida, e +cancelar automaticamente os direitos que lhe foram fornecidos por +esta Licena. No entanto, terceiros que de voc receberam cpias ou +direitos, fornecidos sob os termos desta Licena, no tero suas +licenas terminadas, desde que permaneam em total concordncia com +ela. + + 5. Voc no obrigado a aceitar esta Licena j que no a +assinou. No entanto, nada mais o dar permisso para modificar ou +distribuir o Programa ou trabalhos derivados deste. Estas aes so +proibidas por lei, caso voc no aceite esta Licena. Desta forma, ao +modificar ou distribuir o Programa (ou qualquer trabalho derivado do +Programa), voc estar indicando sua total aceitao desta Licena +para faz-los, e todos os seus termos e condies para copiar, +distribuir ou modificar o Programa, ou trabalhos baseados nele. + + 6. Cada vez que voc redistribuir o Programa (ou qualquer trabalho +baseado nele), os recebedores adquiriro automaticamente do +licenciador original uma licena para copiar, distribuir ou modificar +o Programa, sujeitos a estes termos e condies. Voc no poder impor +aos recebedores qualquer outra restrio ao exerccio dos direitos +ento adquiridos. Voc no responsvel em garantir a concordncia de +terceiros a esta Licena. + + 7. Se, em conseqncia de decises judiciais ou alegaes de +infringimento de patentes ou quaisquer outras razes (no limitadas a +assuntos relacionados a patentes), condies forem impostas a voc +(por ordem judicial, acordos ou outras formas) e que contradigam as +condies desta Licena, elas no o livram das condies desta +Licena. Se voc no puder distribuir de forma a satisfazer +simultaneamente suas obrigaes para com esta Licena e para com as +outras obrigaes pertinentes, ento como conseqncia voc no poder +distribuir o Programa. Por exemplo, se uma licena de patente no +permitir a redistribuio, livre de "royalties", do Programa, por +todos aqueles que receberem cpias direta ou indiretamente de voc, +ento a nica forma de voc satisfazer a ela e a esta Licena seria a +de desistir completamente de distribuir o Programa. + +Se qualquer parte desta seo for considerada invlida ou no +aplicvel em qualquer circunstncia particular, o restante da seo se +aplica, e a seo como um todo se aplica em outras circunstncias. + +O propsito desta seo no o de induzi-lo a infringir quaisquer +patentes ou reivindicao de direitos de propriedade outros, ou a +contestar a validade de quaisquer dessas reivindicaes; esta seo +tem como nico propsito proteger a integridade dos sistemas de +distribuio de software livres, o que implementado pela prtica de +licenas pblicas. Vrias pessoas tm contribudo generosamente e em +grande escala para os software distribudos usando este sistema, na +certeza de que sua aplicao feita de forma consistente; fica a +critrio do autor/doador decidir se ele ou ela est disposto a +distribuir software utilizando outro sistema, e um licenciado no pode +impor qualquer escolha. + +Esta seo destina-se a tornar bastante claro o que se acredita ser +conseqncia do restante desta Licena. + + 8. Se a distribuio e/ou uso do Programa so restringidos em certos +pases por patentes ou direitos autorais, o detentor dos direitos +autorais original, e que colocou o Programa sob esta Licena, pode +incluir uma limitao geogrfica de distribuio, excluindo aqueles +pases de forma a tornar a distribuio permitida apenas naqueles ou +entre aqueles pases ento no excludos. Nestes casos, esta Licena +incorpora a limitao como se a mesma constasse escrita nesta Licena. + + 9. A Free Software Foundation pode publicar verses revisadas e/ou +novas da Licena Pblica Geral de tempos em tempos. Estas novas +verses sero similares em esprito verso atual, mas podem diferir +em detalhes que resolvem novos problemas ou situaes. + +A cada verso dada um nmero distinto. Se o Programa especifica um +nmero de verso especfico desta Licena que se aplica a ele e a +"qualquer nova verso", voc tem a opo de aceitar os termos e +condies daquela verso ou de qualquer outra verso publicada pela +Free Software Foundation. Se o programa no especifica um nmero de +verso desta Licena, voc pode escolher qualquer verso j publicada +pela Free Software Foundation. + + 10. Se voc pretende incorporar partes do Programa em outros +programas livres cujas condies de distribuio so diferentes, +escreva ao autor e solicite permisso. Para o software que a Free +Software Foundation detm direitos autorais, escreva Free Software +Foundation; s vezes ns permitimos excees a este caso. Nossa +deciso ser guiada pelos dois objetivos de preservar a condio de +liberdade de todas as derivaes do nosso software livre, e de +promover o compartilhamento e reutilizao de software em aspectos +gerais. + + AUSNCIA DE GARANTIAS + + 11. UMA VEZ QUE O PROGRAMA LICENCIADO SEM NUS, NO H QUALQUER +GARANTIA PARA O PROGRAMA, NA EXTENSO PERMITIDA PELAS LEIS +APLICVEIS. EXCETO QUANDO EXPRESSADO DE FORMA ESCRITA, OS DETENTORES +DOS DIREITOS AUTORAIS E/OU TERCEIROS DISPONIBILIZAM O PROGRAMA "NO +ESTADO", SEM QUALQUER TIPO DE GARANTIAS, EXPRESSAS OU IMPLCITAS, +INCLUINDO, MAS NO LIMITADO A, AS GARANTIAS IMPLCITAS DE +COMERCIALIZAO E AS DE ADEQUAO A QUALQUER PROPSITO. O RISCO TOTAL +COM A QUALIDADE E DESEMPENHO DO PROGRAMA SEU. SE O PROGRAMA SE +MOSTRAR DEFEITUOSO, VOC ASSUME OS CUSTOS DE TODAS AS MANUTENES, +REPAROS E CORREES. + + 12. EM NENHUMA OCASIO, A MENOS QUE EXIGIDO PELAS LEIS APLICVEIS OU +ACORDO ESCRITO, OS DETENTORES DOS DIREITOS AUTORAIS, OU QUALQUER OUTRA +PARTE QUE POSSA MODIFICAR E/OU REDISTRIBUIR O PROGRAMA CONFORME +PERMITIDO ACIMA, SERO RESPONSABILIZADOS POR VOC POR DANOS, INCLUINDO +QUALQUER DANO EM GERAL, ESPECIAL, ACIDENTAL OU CONSEQENTE, +RESULTANTES DO USO OU INCAPACIDADE DE USO DO PROGRAMA (INCLUINDO, MAS +NO LIMITADO A, A PERDA DE DADOS OU DADOS TORNADOS INCORRETOS, OU +PERDAS SOFRIDAS POR VOC OU POR OUTRAS PARTES, OU FALHAS DO PROGRAMA +AO OPERAR COM QUALQUER OUTRO PROGRAMA), MESMO QUE TAL DETENTOR OU +PARTE TENHAM SIDO AVISADOS DA POSSIBILIDADE DE TAIS DANOS. + + FIM DOS TERMOS E CONDIES + + Como Aplicar Estes Termos aos Seus Novos Programas + + Se voc desenvolver um novo programa, e quer que ele seja utilizado +amplamente pelo pblico, a melhor forma de alcanar este objetivo +torn-lo software livre que qualquer um pode redistribuir e alterar, +sob estes termos. + + Para isso, anexe os seguintes avisos ao programa. mais seguro +anex-los logo no incio de cada arquivo-fonte para reforarem mais +efetivamente a inexistncia de garantias; e cada arquivo deve possuir +pelo menos a linha de "copyright" e uma indicao de onde o texto +completo se encontra. + + + Copyright (C) + + Este programa software livre; voc pode redistribu-lo e/ou + modific-lo sob os termos da Licena Pblica Geral GNU, conforme + publicada pela Free Software Foundation; tanto a verso 2 da + Licena como (a seu critrio) qualquer verso mais nova. + + Este programa distribudo na expectativa de ser til, mas SEM + QUALQUER GARANTIA; sem mesmo a garantia implcita de + COMERCIALIZAO ou de ADEQUAO A QUALQUER PROPSITO EM + PARTICULAR. Consulte a Licena Pblica Geral GNU para obter mais + detalhes. + + Voc deve ter recebido uma cpia da Licena Pblica Geral GNU + junto com este programa; se no, escreva para a Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. + +Inclua tambm informaes sobre como contact-lo eletronicamente e por +carta. + +Se o programa interativo, faa-o mostrar um aviso breve como este, +ao iniciar um modo interativo: + + Gnomovision verso 69, Copyright (C) ano nome do autor + O Gnomovision no possui QUALQUER GARANTIA; para obter mais + detalhes digite `show w'. Ele software livre e voc est + convidado a redistribui-lo sob certas condies; digite `show c' + para obter detalhes. + +Os comandos hipotticos `show w' e `show c' devem mostrar as partes +apropriadas da Licena Pblica Geral. Claro, os comandos que voc usar +podem ser ativados de outra forma que `show w' e `show c'; eles podem +at ser cliques do mouse ou itens de um menu -- o que melhor se +adequar ao programa. + +Voc tambm deve obter do seu empregador (se voc trabalha como +programador) ou escola, se houver, uma "declarao de ausncia de +direitos autorais" sobre o programa, se necessrio. Aqui est um +exemplo; altere os nomes: + + Yoyodyne, Inc., aqui declara a ausncia de quaisquer direitos + autorais sobre o programa `Gnomovision' (que executa interpretaes + em compiladores) escrito por James Hacker. + + , 1o. de abril de 1989 + Ty Con, Vice-presidente + +Esta Licena Pblica Geral no permite incorporar seu programa em +programas proprietrios. Se seu programa uma biblioteca de +sub-rotinas, voc deve considerar mais til permitir ligar aplicaes +proprietrias com a biblioteca. Se isto o que voc deseja, use a +Licena Pblica Geral de Bibliotecas GNU, ao invs desta Licena. diff --git a/docs/pt_br/FAQ.txt b/docs/pt_br/FAQ.txt new file mode 100644 index 000000000..63d4d9c81 --- /dev/null +++ b/docs/pt_br/FAQ.txt @@ -0,0 +1 @@ +Please see "docs/FAQ.txt" diff --git a/docs/pt_br/INSTALL.txt b/docs/pt_br/INSTALL.txt new file mode 100644 index 000000000..8778c7b73 --- /dev/null +++ b/docs/pt_br/INSTALL.txt @@ -0,0 +1 @@ +Please see "docs/INSTALL.txt" diff --git a/docs/pt_br/PNG.txt b/docs/pt_br/PNG.txt new file mode 100644 index 000000000..78db305c1 --- /dev/null +++ b/docs/pt_br/PNG.txt @@ -0,0 +1 @@ +Please see "docs/PNG.txt" diff --git a/docs/pt_br/README.txt b/docs/pt_br/README.txt new file mode 100644 index 000000000..36b20531c --- /dev/null +++ b/docs/pt_br/README.txt @@ -0,0 +1,998 @@ +README.txt for Tux Paint + +Tux Paint - A simple drawing program for children. + +Copyright 2002 by Bill Kendrick +bill@newbreedsoftware.com +http://www.newbreedsoftware.com/tuxpaint/ + +June 14, 2002 - September 25, 2002 + + +About: +------ + Tux Paint is a drawing program for young children. (Say, 3-10 years old.) + It is mainly being developed to fill an educational/edutainment need + for the Open Source "Linux" operating system, but is compatible with + many other platforms, including Windows, MacOS, BeOS, other Unix variants, + etc. + + +License: +-------- + Tux Paint an Open Source project, released under the + GNU General Public License (GPL). It is free, and the 'source code' + behind the program is available. (This allows others to add features, + fix bugs, and use parts of the program in their own GPL'd Open Source + software.) + + See COPYING.txt for the full text of the GPL license. + + +Objectives: +----------- + Easy and Fun + ------------ + Tux Paint is meant to be a simple drawing program for young children. + It is not meant as a general-purpose drawing tool. It IS meant to be + fun and easy to use. Sound effects and a cartoon character help let + the user know what's going on, and keeps them entertained. + There are also extra-large cartoon-style mouse pointer shapes. + + Extensibility + ------------- + Tux Paint is extensible. Brushes and "rubber stamp" shapes can be + dropped in and pulled out. For example, a teacher can drop in a + collection of animal shapes and ask their students to draw an + ecosystem. Each shape can have a sound which is played, and + textual facts which are displayed, when the child selects the shape. + + Portability + ----------- + Tux Paint is portable among various computer platforms: + Windows, Macintosh, Linux, etc. The interface looks the same among + them all. Tux Paint runs suitably well on older systems (like a + Pentium 133), and can be built to run better on slow systems. + + Simplicity + ---------- + There is no direct access to the computer's underlying intricacies. + The current image is kept when the program quits, and reappears when + it is restarted. Saving images requires no need to create filenames + or use the keyboard. Opening an image is done by selecting it from + a collection of thumbnails. + + +Other Documentation +------------------- + Other documentation included with Tux Paint (in the "docs" folder/directory) + include: + + AUTHORS.txt - List of authors and contributors + CHANGES.txt - Summary of changed between releases + COPYING.txt - Copying license (The GPL) + INSTALL.txt - Instructions for compiling/installing, when applicable + PNG.txt - Notes on creating PNG format images for use in Tux Paint + README.txt - (This file) + TODO.txt - A list of pending features or bugs needing fixed + + +Using Tux Paint +--------------- + Building Tux Paint + ------------------ + To compile Tux Paint from source, please refer to INSTALL.txt. + + + Loading Tux Paint + ----------------- + Linux/Unix Users + ---------------- + Run the following command at a shell prompt (e.g., "$"): + + $ tuxpaint + + It is also possible to make a launcher button or icon + (e.g. in GNOME or KDE). See your desktop environment's + documentation for details... + + If any errors occur, they will be displayed on the terminal + (to "stderr"). + + + Windows Users + ------------- + Simply double-click the "tuxpaint.exe" icon in the Tux Paint + folder. + + If any errors occur, they will be stored in a file named + "stderr.txt" in the Tux Paint folder. + + See "INSTALL.txt" for details on making a 'Shortcut' icon to Tux Paint, + which lets you easily set command-line options. + + To run Tux Paint and provide command-line options directly, you will + need to run "tuxpaint.exe" from an MSDOS Prompt window. + (See "INSTALL.txt" for details.) + + + Macintosh Users + --------------- + Simply double-click the "Tux Paint" icon in the Tux Paint + folder. + + [ how to issue comamnd-line options under MacOS? Option-double-click? ] + + + Options + ------- + Configuration File + ------------------ + You can create a simple configuration file for Tux Paint, which it + will read each time you start it up. + + The file is simply a plain text file containing the options + you want enabled: + + fullscreen=yes + -------------- + Run the program in full screen mode, rather than in a window. + + nosound=yes + ----------- + Disable sound effects. + + noquit=yes + ---------- + Disable the on-screen "Quit" button. + (Pressing the "Escape" key or clicking the window close button + still works. + + noprint=yes + ----------- + Disable the printing feature. + + printdelay=SECONDS + ------------------ + Restrict printing so that printing can occur only once every + SECONDS seconds. + + printcommand=COMMAND + -------------------- + Use the command COMMAND to print a PNG file. + If not set, the default command is: + + pngtopnm | pnmtops | lpr + + Which converts the PNG to a NetPBM 'portable anymap', + then converts that to a PostScript file, and finally + sends that to the printer, using the "lpr" command. + + simpleshapes=yes + ---------------- + Disable rotation mode in shape tool. Click, drag, release is + all that's needed to draw a shape. + + uppercase=yes + ------------- + All text will be rendered only in uppercase (e.g., "Brush" will + be "BRUSH"). Useful for children who can read, but who have only + learned uppercase letters so far. + + grab=yes + -------- + Tux Paint will attempt to 'grab' the mouse and keyboard, so that + the mouse is confined to Tux Paint's window, and nearly all keyboard + input is passed directly to it. This is useful to disable + operating system actions that could get the user out of Tux Paint + [Alt]-[Tab] window cycling, [Ctrl]-[Escape], etc. Especially + useful in fullscreen mode. + + nowheelmouse=yes + ---------------- + This disables support for the wheel on mice that have it. + (Normally, the wheel will scroll the selector menu on the right.) + + saveover=yes + ------------ + This disables the "Save over the old version...?" prompt when + saving an existing file. With this option, the older version + will always be replaced by the new version, automatically. + + saveover=new + ------------ + This also disables the "Save over the old version...?" prompt + when saving an existing file. This option, however, will always + save a new file, rather than overwrite the older version. + + saveover=ask + ------------ + (This option is redundant, since this is the default.) + When saving an existing drawing, you will be first asked whether + to save over the older version or not. + + + Linux Users + ----------- + The file you should create is called ".tuxpaintrc" and it + should be placed in your home directory. + (a.k.a. "~/.tuxpaintrc" or "$HOME/.tuxpaintrc") + + Windows Users + ------------- + The file you should create is called "tuxpaint.cfg" and it + should be placed in Tux Paint's folder. + + + Command-Line Options + -------------------- + Options can also be issued on the command-line when you start Tux Paint. + + --fullscreen + --nosound + --noquit + --noprint + --printdelay=SECONDS + --simpleshapes + --uppercase + --grab + --nowheelmouse + --saveover + --saveovernew + ----------- + These enable the options described above. + + --windowed + --sound + --quit + --print + --printdelay=0 + --complexshapes + --mixedcase + --dontgrab + --wheelmouse + --saveoverask + ----------- + These options can be used to override any settings made in + the configuration file. (If the option isn't set in the + configuration file, no overriding option is necessary.) + + --lang language + --------------- + Run Tux Paint in one of the supported languages. + Choices available currently include: + + english + danish dansk + dutch + finnish suomi + french francais + german deutsch + italian italiano + norwegian nynorsk + spanish espanol + swedish svenska + turkish + + --locale locale + --------------- + Run Tux Paint in one of the support languages. + See "Choosing a Different Language" below for the + locale strings (e.g., "de_DE@euro" for German) to use. + + (If your locale is already set, e.g. with the + "LANG" environment variable, this option is not necessary, + since Tux Paint honors your environment's setting, if possible.) + + + Command-Line Info. Options + -------------------------- + The following options display some informative text on the screen. + Tux Paint doesn't actually start up and run afterwards, however. + + --version + --------- + Display the version number and date of the copy of Tux Paint + you are running. + + --copying + --------- + Show brief license information about copying Tux Paint. + + --usage + ------- + Display the list of available command-line options. + + --help + ------ + Display brief help on using Tux Paint. + + + Choosing a Different Language + ----------------------------- + Tux Paint has been translated into a number of languages. + To access the translations, you can use the "--lang" option on + the command-line to set the language (e.g. "--lang spanish"). + + Tux Paint also honors your environment's current locale. + (You can override it on the command-line using the "--locale" option + (see above)) + + The following are supported: + + da_DK - Danish + de_DE@euro - Deutsch / German + es_ES@euro - Espanol / Spanish + fi_FI@euro - Suomi / Finnish + fr_FR@euro - Francais / French + is_IS - Islenska / Icelandic + it_IT@euro - Italiano / Italian + nn_NO - Norsk (nynorsk) / Norwegian Nynorsk + nl_NL@euro - Dutch + sv_SE@euro - Svenska / Swedish + tr_TR@euro - Turkish + + + Setting Your Environment's Locale + --------------------------------- + Changing your locale will affect much of your environment. + + As stated above, along with letting you choose the language at + runtime using command-line options ("--lang" and "--locale"), + Tux Paint honors the global locale setting in your environment. + + If you haven't already set your environment's locale, the following + will briefly explain how: + + Linux/Unix Users + ---------------- + First, be sure the locale you want to use is enabled by + editing the file "/etc/locale.gen" on your system and + then running the program "locale-gen" as root. + + Note: Debian users may be able to simply run the command + "dpkg-reconfigure locales". + + Then, before running Tux Paint, set your "LANG" environment + variable to one of the locales listed above. (If you want all + programs that can be translated to be, you may wish to place + the following in your login script; e.g. ~/.profile, + ~/.bashrc, ~/.cshrc, etc.) + + + For example, in a Bourne Shell (like BASH): + + export LANG=es_ES@euro ; tuxpaint + + + And in a C Shell (like TCSH): + + setenv LANG es_ES@euro ; tuxpaint + + + Windows Users + ------------- + TuxPaint will recoginse the current locale and use the appropriate + files by default. So this section is only for people trying different + languages. + + The simplest thing to do is to use the '--lang' switch in the + shortcut (see "INSTALL.txt"). However, by using an MSDOS Prompt + window, it is also possible to issue a command like this: + + set LANG=es_ES@euro + + ...which will set the language for the lifetime of that DOS window. + + For something more permanent, try editing your computer's + 'autoexec.bat' file using Windows' "sysedit" tool: + + Windows 95/98: + -------------- + 1) Click on the 'Start' button, and select 'Run...'. + 2) Type "sysedit" into the 'Open:' box (with or without quotes). + 3) Click 'OK'. + 4) Locate the AUTOEXEC.BAT window in the System Configuration Editor. + 5) Add the following at the bottom of the file: + set LANG=es_ES@euro + 6) Close the System Configuration Editor, answering yes to save + the changes. + 7) Restart your machine. + + + To affect the ENTIRE MACHINE, and ALL APPLICATIONS, it is possible to + use the "Regional Settings" control panel: + + 1) Click on the 'Start' button, and select 'Settings|Control PAnel'. + 2) Double click on the "Regional Settings" globe. + 3) Select a language/region from the drop down list. + 4) Click 'OK'. + 5) Restart your machine when prompted. + + + Title Screen + ------------ + When Tux Paint first loads, a title/credits screen will appear. + + Once loading is complete, press a key or click on the mouse to continue. + + + Main Screen + ----------- + The main screen is divided into the following sections: + + Left Side: Toolbar + ------------------ + The toolbar contains the drawing and editing controls. + + + Middle: Drawing Canvas + ---------------------- + The largest part of the screen, in the center, is the drawing + canvas. This is, obviously, where you draw! + + + Right Side: Selector + -------------------- + Depending on the current tool, the selector shows different + things. e.g., when the Paint Brush is selected, it shows + the various brushes available. When the Rubber Stamp is selected, + it shows the different shapes you can use. + + + Lower: Colors + ------------- + A palette of available colors are shown near the bottom of the + screen. + + + Bottom: Help Area + ----------------- + At the very bottom of the screen, Tux, the Linux Penguin, + provides tips and other information while you draw. + + + Available Tools + --------------- + Drawing Tools + ------------- + Paint Brush + ----------- + The Paint Brush tool lets you draw freehand, using various + brushes (chosen in the Selector on the right) and colors + (chosen in the Color palette towards the bottom). + + If you hold the mouse button down, and move the mouse, it will + draw as you move. + + As you draw, a sound is played. The bigger the brush, the + lower the pitch. + + + Stamp (Rubber Stamp) + -------------------- + The Stamp tool is like a rubber stamp, or stickers. It lets you + paste pre-drawn images (like a picture of a horse, or a tree, or + the moon) in your picture. + + As you move the mouse around, a rectangular outline follows the + mouse, showing where the stamp will be placed. + + Different stamps can have different sound effects. + + + Lines + ----- + This tool lets you draw straight lines using the various + brushes and colors you normally use with the Paint Brush. + + Click the mouse and hold it to choose the starting point of the + line. As you move the mouse around, a thin 'rubber-band' line + will show where the line will be drawn. + + Let go of the mouse to complete the line. A "sproing!" sound will + play. + + + Shapes + ------ + This tool lets you draw some simple filled, and un-filled shapes. + + Select a shape from the selector on the right (circle, square, + oval, etc.). + + In the canvas, click the mouse and hold it to stretch the shape + out from where you clicked. Some shapes can change proportion + (e.g., rectangle and oval), others cannot (e.g., square and circle). + + Let go of the mouse when you're done stretching. + + Normal Mode + ----------- + Now you can move the mouse around the canvas to rotate the shape. + + Click the mouse button again and the shape will be drawn in the + current color. + + Simple Shapes Mode + ------------------ + If simple shapes are enabled ("--simpleshapes" option), + the shape will be drawn on the canvas when you let go of the + mouse button. (There's no rotation step.) + + + Text + ---- + Choose a font and a color. Click on the screen and a cursor will + appear. Type text and it will show up on the screen. + + Push [Enter] or [Return] and the text will be drawn onto the picture + and the cursor will move down one line. + + Click elsewhere in the picture and the text will move there. + + + Magic (Special Effects) + ----------------------- + The magic tool is actually a set of special tools. Select one of + the "magic" effects from the selector on the right, and then + click and drag around the picture to apply the effect. + + Mirror + ------ + When you click the mouse in your picture with the "Mirror" + magic effect selected, the entire image will be reversed, + turning it into a mirror image. + + Flip + ---- + Similar to "Mirror." Click and the entire image will be turned + upside-down. + + Blur + ---- + This makes the picture fuzzy wherever you drag the mouse. + + Blocks + ------ + This makes the picture blocky looking ("pixelated") wherever + you drag the mouse. + + Negative + -------- + This inverts the colors wherever you drag the mouse. + (e.g., white becomes black, and vice versa.) + + Fade + ---- + This fades the colors wherever you drag the mouse. + (Do it to the same spot many times, and it will eventually become + white.) + + Rainbow + ------- + This is similar to the paint brush, but as you move the mouse + around, it goes through all of the colors in the rainbow. + + Sparkles + -------- + This draws glowing yellow sparkles on the picture. + + Chalk + ----- + This makes parts of the picture (where you move the mouse) + look like a chalk drawing. + + Drip + ---- + This makes the paint "drip" wherever you move the mouse. + + Thick + ----- + This makes the darker colors in the picture become thicker + wherever you drag the mouse. + + Thin + ---- + Similar to "Thick," except dark colors become thinner + (light colors become thicker). + + Fill + ---- + This floods the picture with a color. It lets you quickly + fill parts of the picture, as if it were a coloring book. + + + Eraser + ------ + This tool is similar to the Paint Brush. Wherever you click + (or click and drag), the picture will be erased to white. + + As you move the mouse around, a very large square outline follows + the pointer, showing what part of the picture will be erased to white. + + As you erase, a "squeaky clean" eraser/wiping sound is played. + + + Other Controls + -------------- + Undo + ---- + Clicking this tool will undo the last drawing action. You can + undo more than once. + + Note: You can also press [Control]-[Z] on the keyboard. + + + Redo + ---- + Clicking this tool will redo the drawing action you just "undid." + As long as you don't draw again, you can redo as many times as you + had "undone." + + Note: You can also press [Control]-[R] on the keyboard. + + + New + ---- + Clicking the "New" button will start a new drawing. + You will first be asked whether you really want to do this. + + Note: You can also press [Control]-[N] on the keyboard. + + + Open + ---- + This shows you a list of all of the pictures you've saved. + If there are more than can fit on the screen, use the "Up" + and "Down" arrows at the top and bottom of the list to scroll + through the list of pictures. + + Click a picture to select it, then... + + * Click the green "Open" button at the lower left of the list to + load the selected picture. + + Alternatively, you can double-click the picture's icon + (within 1 second) to load it. + + * Click the brown "Erase" (trash can) button at the lower right of the + list to erase the selected picture. (You will be asked to confirm.) + + * Or click the red "Back" arrow button at the lower right of the list + to cancel and return to the picture you were drawing. + + If choose to open a picture, and your current drawing hasn't been + saved, you will be prompted as to whether you want to save it or not. + (See "Save," below.) + + Note: You can also press [Control]-[O] on the keyboard to get the + 'Open' dialog. + + + Save + ---- + This saves your current picture. + + If you haven't saved it before, it will create a new entry in + the list of saved images. (i.e., it will create a new file) + + Note: It won't ask you anything (e.g., for a filename). + It will simply save the picture, and play a "camera shutter" sound + effect. + + If you HAVE saved the picture before, or this is a picture you + just loaded using the "Open" command, you will first be asked + whether you want to save over the old version, or create a new + entry (a new file). + + Note: You can also press [Control]-[S] on the keyboard. + + + Print + ----- + [ Note: Printing only works under Linux and Unix at the moment, + and requires the NetPBM tools. See docs/INSTALL.txt ] + + + Click this button and your picture will be printed! + + + Disabling Printing + ------------------ + If the "noprint" option was set (either with "noprint=yes" in + Tux Paint's configuration file, or using "--noprint" on the + command-line), the "Print" button will be disabled. + + See the "Options" section above. + + + Restricting Printing + -------------------- + If the "printdelay" option was used (either with + "printdelay=SECONDS" in the configuration file, or using + "--printdelay=SECONDS" on the command-line), you can only print + once every SECONDS seconds. + + For example, if "printdelay=60", you can print only once a minute. + + See the "Options" section above. + + + Other Printing Options + ---------------------- + The command used to print is actually a set of commands that + convert a PNG to a PostScript and send it to the printer: + + pngtopnm | pnmtops | lpr + + This command can be changed by setting the "printcommand" value + in Tux Paint's configuration file. + + See the "Options" section above. + + + Quit + ---- + Clicking the "Quit" button, closing the Tux Paint window, or + pushing the "Escape" key will quit Tux Paint. + + NOTE: The "Quit" button can be disabled (with the "--noquit" + command-line option), but the "Escape" key will still work. + + You will first be prompted as to whether you really want to quit. + + If you choose to quit, and you haven't saved the current picture, + you will first be asked if wish to save it. If it's not a new image, + you will then be asked if you want to save over the old version, + or create a new entry. (See "Save" above.) + + NOTE: If the image is saved, it will be reloaded automatically + the next time you run Tux Paint! + + +Loading Other Pictures into Tux Paint +------------------------------------- + Since Tux Paint's 'Open' dialog only displays pictures you created with + Tux Paint, what if you want to load some other picture or photograph + into Tux Paint to edit? + + To do so, you simply need to convert the picture into + a PNG (Portable Network Graphic) image file, and place it in Tux Paint's + "saved" directory. ("~/.tuxpaint/saved/" under Linux and Unix, + "userdata\saved\" under Windows.) + + + Using 'tuxpaint-import' + ----------------------- + Linux and Unix users can use the "tuxpaint-import" shell script which + gets installed when you install Tux Paint. It uses some NetPBM tools + to convert the image ("anytopnm"), resize it so that it will fit in + Tux Paint's canvas ("pnmscale"), and convert it to a PNG ("pnmtopng"). + + It also uses "date" to get the current time and date, which is the + filenaming convention Tux Paint uses for saved files. (Remember, you + are never asked for a 'filename' when you go to Save or Open pictures!) + + To use 'tuxpaint-import', simply run the command from a command-line prompt + and provide it the name(s) of the file(s) you wish to convert. + + They will be converted and placed in your Tux Paint 'saved' directory. + (Note: If you're doing this for a different user - e.g., your child, + you'll need to make sure to run the command under their account.) + + Example: + + $ tuxpaint-import grandma.jpg + grandma.jpg -> /home/username/.tuxpaint/saved/20020921123456.png + jpegtopnm: WRITING A PPM FILE + + The first line ("tuxpaint-import grandma.jpg") is the command to run. + The following two lines are output from the program while it's working. + + + Now you can load Tux Paint, and a version of that original picture will + be available under the 'Open' dialog. Just double-click its icon! + + + Doing it Manually + ----------------- + Windows users must currently do the conversion manually. + + Load a graphics program that is capable of both loading your picture + and saving a PNG format file. (See "PNG.txt" for a list of suggested + software.) + + Reduce the size of the image to no wider than 448 pixels across and + no taller than 376 pixels tall. (e.g., maximum size is 448 x 376 pixels) + + Save the picture in PNG format. It is HIGHLY recommended that you + name the filename using the current date and time, since that's + the convention Tux Paint uses: + + YYYYMMDDhhmmss + + e.g.: + + 20020921130500 - for September 21, 2002, 1:05:00pm + + Place this PNG file in your Tux Paint 'saved' directory. (See above.) + + Under Windows, this is in the "userdata" folder. + + +Extending Tux Paint +------------------- + If you wish to add or change things like Brushes and Rubber Stamps + used by Tux Paint, you can do it fairly easily by simply putting + or removing files on your hard disk. + + Note: You'll need to restart Tux Paint for the changes to take effect. + + + Where Files Go + -------------- + Standard Files + -------------- + Tux Paint looks for its various data files in its data directory. + + Linux and Unix + -------------- + Where this directory goes depends on what value was set for + "DATA_PREFIX" when Tux Paint was built. See INSTALL.txt for details. + + By default, though, the directory is: + + /usr/local/share/tuxpaint/ + + Windows + ------- + Where this directory goes depends on what folder you told the + installer to put Tux Paint in. + + [ What's the default? ] + + + Personal Files + -------------- + You can also create brushes, stamps and fonts in your own directory + for Tux Paint to find. + + Linux and Unix + -------------- + Your personal Tux Paint directory is "~/.tuxpaint/". + + That is, if your home directory is "/home/karl", then + your Tux Paint directory is "/home/karl/.tuxpaint/". + + Don't forget the period (".") before the word 'tuxpaint'! + + Windows + ------- + Your personal Tux Paint directory is named "userdata". + + [ Where is it now? ] + + + To add brushes, stamps and fonts, create subdirectories under + your personal Tux Paint directory named "brushes", "stamps" and "fonts", + respectively. + + (For example, if you created a brush named "flower.png", you + would put it in "~/.tuxpaint/brushes/" under Linux or Unix.) + + + Brushes + ------- + The brushes used for drawing with the Brush and Lines tools in + Tux Paint are simply greyscale PNG images. + + The alpha (transparency) of the PNG image is used to determine the shape + of the brush, which means that the shape can be 'anti-aliased' and even + partially-transparent! + + Brush images should be no wider than 40 pixels across and + no taller than 40 pixels high. + + Just place them in the "brushes" directory. + + + Stamps + ------ + All stamp-related files go in the "stamps" directory. + It's useful to create subdirectories and sub-subdirectories + there to organize the stamps. (For example, you can have a + "holidays" folder with "halloween" and "christmas" subfolders.) + + Images + ------ + Rubber Stamps in Tux Paint can be made up of a number of separate + files. The one file that is required is, of course, the picture itself. + + The Stamps used by Tux Paint are PNG pictures. They can be full-color + or greyscale. The alpha (transparency) of the PNG is used to determine + the actual shape of the picture (otherwise you'll stamp a large + rectangle on your drawings). + + The PNGs can be any size, but in practice, a 100 pixels wide by + 100 pixels tall (100x100) is quite large for Tux Paint. + + + Description Text + ---------------- + Text (".TXT") files with the same name as the PNG. + (e.g., "picture.png"'s description is stored in "picture.txt" in the + same directory.) + + Lines beginning with "xx=" (where "xx" is one of the languages + supported; e.g., "de" for German, "fr" for French, etc.) will be + used under the various locales supported. + + If no translation is available for the user's locale, the default + string (the first line, which should be in English) is used. + + + Sound Effects + ------------- + WAVE (".WAV") files with the same name as the PNG. + (e.g., "picture.png"'s sound effect is the sound "picture.wav" in the + same directory.) + + For sounds for different locales (e.g., if the sound is someone saying + a word, and you want translated versions of the word said), + also create WAV files with the locale's label in the filename, in + the form: "STAMP_LOCALE.wav." + + "picture.png"'s sound effect, when Tux Paint is run in Spanish mode, + would be "picture_es.wav". In French mode, "picture_fr.wav". And so on. + + If no localized sound effect can be loaded, Tux Paint will attempt to + load the 'default' sound file. (e.g., "picture.wav") + + + Stamp Options + ------------- + Aside from a graphical shape, a textual description, and a sound effect, + stamps can also be given other attributes. To do this, you need + to create a 'data file' for the stamp. + + A stamp data file is simply a text file containing the options. + + The file has the same name as the PNG image, but a ".dat" extension. + (e.g., "picture.png"'s data file is the text file "picture.dat" in the + same directory.) + + Colored Stamps + -------------- + Stamps can be made to be either "colorable" or "tintable." + + Colorable + --------- + "Colorable" stamps they work much like brushes - you pick the stamp + to get the shape, and then pick the color you want it to be. + (Symbol stamps, like the mathematical and musical ones, are an + example.) + + Nothing about the original image is used except the transparency + ("alpha" channel). The color of the stamp comes out solid. + + Add the word "colorable" to the stamp's data file. + + Tinted + ------ + "Tinted" stamps are similar to "colorable" ones, except the + details of the original image are kept. (To put it techically, + the original image is used, but its hue is changed, based on the + currently-selected color.) + + Add the word "tintable" to the stamp's data file. + + + Fonts + ----- + The fonts used by Tux Paint are TrueType Fonts (TTF). + + Simply place them in the "fonts" directory. Tux Paint will load the + font and provide four different sizes in the 'Font Selector' when + using the 'Text' tool. + diff --git a/docs/sv/AUTHORS.txt b/docs/sv/AUTHORS.txt new file mode 100644 index 000000000..34d31334e --- /dev/null +++ b/docs/sv/AUTHORS.txt @@ -0,0 +1 @@ +Please see docs/AUTHORS.txt diff --git a/docs/sv/COPYING.txt b/docs/sv/COPYING.txt new file mode 100644 index 000000000..1faf582d3 --- /dev/null +++ b/docs/sv/COPYING.txt @@ -0,0 +1 @@ +Please see docs/COPYING.txt diff --git a/docs/sv/FAQ.txt b/docs/sv/FAQ.txt new file mode 100644 index 000000000..8c2f83747 --- /dev/null +++ b/docs/sv/FAQ.txt @@ -0,0 +1 @@ +Please see docs/FAQ.txt diff --git a/docs/sv/INSTALL.txt b/docs/sv/INSTALL.txt new file mode 100644 index 000000000..ccbc2cb1b --- /dev/null +++ b/docs/sv/INSTALL.txt @@ -0,0 +1 @@ +Please see docs/INSTALL.txt diff --git a/docs/sv/PNG.txt b/docs/sv/PNG.txt new file mode 100644 index 000000000..eb8cdd15e --- /dev/null +++ b/docs/sv/PNG.txt @@ -0,0 +1 @@ +Please see docs/PNG.txt diff --git a/docs/sv/README.txt b/docs/sv/README.txt new file mode 100644 index 000000000..cf8a81269 --- /dev/null +++ b/docs/sv/README.txt @@ -0,0 +1 @@ +Please see docs/README.txt diff --git a/docs/tr/AUTHORS.txt b/docs/tr/AUTHORS.txt new file mode 100644 index 000000000..6d921014f --- /dev/null +++ b/docs/tr/AUTHORS.txt @@ -0,0 +1 @@ +Please see "docs/AUTHORS.txt" diff --git a/docs/tr/COPYING_tr.txt b/docs/tr/COPYING_tr.txt new file mode 100644 index 000000000..8e1c5ab1a --- /dev/null +++ b/docs/tr/COPYING_tr.txt @@ -0,0 +1,384 @@ + + This is an unofficial translation of the GNU General Public License + into Turkish. It was not published by the Free Software Foundation, + and does not legally state the distribution terms for software that + uses the GNU GPL--only the original English text of the GNU GPL does + that. However, we hope that this translation will help Turkish + speakers understand the GNU GPL better. + + Bu, GNU Genel Kamu Lisansinin (GPL) Trke'ye gayriresmi evirisidir. + Bu eviri Free Software Foundation tarafindan yayinlanmamis olup GNU + GPL kullanan yazilimlarin dagitim sartlarini belirleme aisindan + hukuki baglayiciligi yoktur -- Hukuki aidan yalnizca GNU GPL'in + Ingilizce metni baglayicidir. Bu eviri, Trke kullanicilarinin GNU + GPL'i daha iyi anlayabilmeleri iin hazirlanmistir. + +GNU Genel Kamu Lisansi (GPL) + + Srm 2, Haziran 1991 + + Telif Hakki 1989, 1991 Free Software Foundation, Inc. 59 Temple + Place - Suite 330, Boston, MA 02111-1307, USA + + Bu lisans dkmaninin birebir kopyalarini yapma ve dagitma izni + herkese verilmistir, fakat metinde degisiklik yapma izni yoktur. + + GIRIS + + Yazilim lisanslarinin ogu sizin yazilimi paylasma ve degistirme + hakkinizin elinizden alinmasi iin hazirlanmistir. Buna karsilik, GNU + Genel Kamu Lisansi sizin serbest yazilimlari degistirme ve paylasma + hakkinizin mahfuz tutulmasi ve yazilimin btn kullanicilari iin + serbest olmasi amaci ile yazilmistir. Bu Genel Kamu Lisansi, Free + Software Foundation'un ogu yazilimi ve bu lisansi kullanmayi dstur + edinen diger yazilimcilarin yazilimlari iin kullanilmaktadir. (Free + Software Foundation'un bazi yazilimlari GNU Kitaplik Genel Kamu + Lisansi -- GNU LGPL -- altinda dagitilmaktadir.) Siz de bu lisansi + yazilimlariniza uygulayabilirsiniz. + + Serbest yazilimdan bahsettigimiz zaman fiyattan degil, zgrlkten + bahsediyoruz. Bizim Genel Kamu Lisanslarimiz, sizin serbest + yazilimlarin kopyalarini dagitma zgrlgnz (ve isterseniz bu + hizmet iin para almanizi), yazilim kaynak kodlarinin size dagitim + esnasinda veya eger isterseniz verilmesini, yazilimi + degistirebilmenizi, yazilimin paralarini yeni yazilimlar ierisinde + kullanabilmenizi ve bunlari yapabileceginizi bilmenizi saglamaktadir. + + Haklarinizi koruyabilmemiz iin sizin haklarinizi kisitlama veya sizin + bu haklarinizdan feragat etmenizi isteme yollarini yasaklayici bazi + kisitlamalar getirmemiz gerekmektedir. Bu kisitlamalar eger serbest + yazilim dagitiyor veya degistiriyorsaniz size bazi ykmllkler + getirmektedir. + + rnegin byle bir programin kopyalarini, bedava veya cret karsiligi + dagitiyorsaniz alicilara sizin sahip oldugunuz btn haklari + saglamalisiniz. Onlarin da kaynak kodlarina sahip olmalarini veya + ulasabilmelerini saglamalisiniz. Onlara da haklarini bilebilmeleri + iin bu sartlari gstermelisiniz. + + Haklarinizi iki koruma iki asamada gereklesmektedir: + 1. Yazilima telif hakki alinmaktadir. + 2. Yazilim lisansi olarak size, hukuki olarak, yazilimi kopyalama, + dagitma ve/veya degistirme hakki taniyan bu lisans sunulmaktadir. + + Ayrica, yazarlarin ve bizim korunmamiz iin bu serbest yazilimin + herhangi bir garantisi olmadigini herkesin anlamasini istiyoruz. Eger + yazilim baskasi tarafindan degistirilmis ve degistirilmis hali ile + tarafiniza ulastirilmis ise alicilarin, ellerinde olan yazilimin + orjinal olmadigini, dolayisiyla baskalari tarafindan eklenen + problemlerin ilk yazarlarin shretlerine olumsuz etkide bulunmamasi + gerektigini bilmelerini istiyoruz. + + Son olarak, btn serbest yazilimlar yazilim patentleri tarafindan + srekli tehdit altinda bulunmaktadir. Serbest bir yazilimin + dagiticilarinin bireysel olarak patent lisansi almalarini ve bu yol + ile yazilimi mseccel hale getirmelerine imkan vermemek istiyoruz. + Bunu engellemek iin, yazilim iin alinacak her patentin herkesin + serbest kullanimina izin vermesi veya patentlenmemesi gerektigini aik + olarak ortaya koyuyoruz. + + Kopyalama, dagitim ve degistirme ile ilgili kesin sart ve kayitlar + asagida yer almaktadir. + + KOPYALAMA, DAGITIM VE DEGISTIRME ILE ILGILI SART VE KAYITLAR + + 0. Bu Lisans, telif hakki sahibi tarafindan ierisine bu Genel Kamu + Lisansi altinda dagitildigina dair ibare konmus olan herhangi bir + yazilim veya baska eseri kapsamaktadir. Asagida "Yazilim", bu + kapsamdaki herhangi bir yazilim veya eser, "Yazilimi baz alan rn", + ise Yazilim veya telif kanunu altinda Yazilim'dan istikak etmis, yani + Yazilim'in tamamini veya bir parasini, degistirmeden veya + degisiklikler ile, veya baska bir dile tercme edilmis hali ile ieren + herhangi bir rn, manasinda kullanilmaktadir. (Bundan sonra tercme + "degistirme" kapsaminda sinirsiz olarak ierilecektir.) Her ruhsat + sahibine "siz" olarak hitap edilmektedir. + + Kopyalama, dagitim ve degistirme haricinde kalan faaliyetler bu + Lisans'in kapsami disindadirlar. Yazilim'i alistirma eylemi + sinirlandirilmamistir ve Yazilim'in iktisi yalnizca iktinin ierigi + (Yazilim'i alistirmak yolu ile elde edilmesinden bagimsiz olarak) + Yazilim'i baz alan rn kapsamina girer ise bu Lisans kapsamindadir. + Bu kosulun saglanip saglanmadigi Yazilim'in ne yaptigi ile ilgilidir. + + 1. Yazilim'in kaynak kodlarini birebir, aldiginiz sekilde, herhangi + bir ortamda ve vasita ile, uygun ve grnr bir sekilde telif hakki + bildirimi ve garantisiz olduguna dair bildirim koymak, bu Lisans'dan + bahseden herhangi bir bildirimi aynen muhafaza etmek ve btn diger + alicilara Yazilim ile birlikte bu Lisans'in bir kopyasini vermek sarti + ile kopyalayabilir ve dagitabilirsiniz. + + Kopyalamak fiili islemi iin bir cret talep edebilir ve sizin + seiminize bagli olarak cret karsiligi garanti verebilirsiniz. + + 2. Yazilim'in kopyasini veya kopyalarini veya herhangi bir parasini + degistirerek Yazilim'i baz alan rn elde edebilir, bu degisiklikleri + veya rnn kendisini yukarida 1. blmdeki sartlar dahilinde ve + asagida siralanan sartlarin yerine getirilmesi kosulu ile + kopyalayabilir ve dagitabilirsiniz. + + a) Degistirilen dosyalarin grnr bir sekilde dosyalarin sizin + tarafinizdan degistirildigine dair, tarihli bir bildirim iermesini + saglamalisiniz. + + b) Yazilim'dan veya Yazilim'in bir parasindan tamamen veya kismen + istikak etmis ve sizin tarafinizdan dagitilan veya yayinlanan herhangi + bir rnn btn nc sahislara bu Lisans sartlari altinda cretsiz + olarak ruhsatlanmasini saglamalisiniz. + + c) Eger degistirilen yazilim olagan kullanim altinda komutlari + interaktif olarak aliyor ise, yazilim, en olagan kullanim iin + interaktif olarak alistirildigi zaman uygun bir telif hakki + bildirimi, garantisi olmadigina (veya sizin tarafinizdan garanti + verildigine), kullanicilarin bu yazilimi bu sartlar altinda tekrar + dagitabileceklerine, ve kullanicinin bu Lisansin bir kopyasini nasil + grebilecegine dair bir bildirim yazdirmali veya gstermelidir. + (Istisna: Eger Yazilim'in kendisi interaktif ise fakat byle bir + bildirimi olagan kullanim esnasinda yazdirmiyor ise, sizin Yazilim'i + baz alan rnnz byle bir bildirimde bulunmak zorunda degildir.) + + Bu sartlar degistirilmis eserin tamamini kapsamaktadir. Eger eserin + tespit edilebilir kisimlari Yazilim'dan istikak etmemis ise ve makul + surette kendi baslarina bagimsiz ve ayri eserler olarak kabul + edilebilir ise, o zaman bu Lisans ve sartlari, bu paralari ayri eser + olarak dagittiginiz zaman baglayici degildir. Fakat, ayni paralari + Yazilim'i baz alan bir rn btnnn bir parasi olarak dagittiginiz + zaman btnn dagitimi, diger ruhsat sahiplerine verilen izinlerin + btne ait oldugu ve paralarina, yazarinin kim olduguna bakilmaksizin + btn paralarina tek tek ve msterek olarak uygulandigi bu Lisans + sartlarina uygun olmalidir. + + Bu blmn hedefi tamamen sizin tarafinizdan yazilan bir eser zerinde + hak iddia etmek veya sizin byle bir eser zerindeki haklariniza + muhalefet etmek degil, Yazilim'i baz alan, Yazilim'dan istikak etmis + veya msterek olarak ortaya ikarilmis eserlerin dagitimini kontrol + etme haklarini dzenlemektir. + + Buna ek olarak, Yazilim'i baz almayan herhangi bir rnn Yazilim ile + (veya Yazilim'i baz alan bir rn ile) bir bilgi saklama ortaminda + veya bir dagitim ortaminda beraber tutulmasi diger eseri bu Lisans + kapsamina sokmaz. + + 3. Yazilim'i ( veya 2. blmde tanimlandigi hali ile onu baz alan bir + rn) ara derlenmis veya uygulama hali ile 1. ve 2. Blm'deki + sartlar dahilinde ve asagida siralanan yntemlerden birisine uygun + olarak kopyalayabilir ve dagitabilirsiniz. + + a) Yaygin olarak yazilim dagitiminda kullanilan bir ortam zerinde, + yukarida 1. ve 2. Blm'de bulunan sartlar dahilinde, bilgisayar + tarafindan okunabilir kaynak kodlarinin tamami ile birlikte dagitmak. + + b)Herhangi bir nc sahsa, fiziksel olarak dagitimi gereklestirme + masrafinizdan daha fazla cret almayarak, yaygin olarak yazilim + dagitiminda kullanilan bir ortam zerinde, yukarida 1. ve 2. Blm'de + bulunan sartlar dahilinde, bilgisayar tarafindan okunabilir kaynak + kodlarinin tamamini dagitacaginiza dair en az yil geerli olacak + yazili bir taahhtname ile birlikte dagitmak. + + c)Size verilmis olan ilgili kaynak kodunu dagitma taahhtnamesi ile + birlikte dagitmak. (Bu alternatif yalnizca ticari olmayan dagitimlar + iin ve yalnizca siz de yazilimi ara derlenmis veya uygulama bieminde + ve yukarida b) blmnde anlatilan sekli ile bir taahhtname ile + birlikte almis iseniz geerlidir.) + + Bir eserin kaynak kodu, esere degistirme yapmak iin en uygun yntem + ve imkan anlaminda kullanilmaktadir. Uygulama bieminde bir eser iin, + kaynak kodu, ierdigi btn paralar iin ilgili kaynak kodlari, + ilgili arayz tanim dosyalari ve derleme ve ykleme islemlerinde + kullanilan btn betikler anlaminda kullanilmaktadir. Bir istisna + olarak, dagitilan kaynak kodu, genelde uygulamanin zerinde alisacagi + isletim sisteminin ana paralari (derleyici, ekirdek v.b.) ile + birlikte dagitilan herhangi bir bileseni,eger ilgili bilesen, uygulama + ile birlikte dagitilmiyorsa, iermek zorunda degildir. + + Eger uygulama veya ara derlenmis biemde yazilimin dagitimi belli bir + yere erisim ve oradan kopyalama imkani olarak yapiliyorsa, ayni + yerden, ayni kosullar altinda kaynak koduna erisim imkani saglamak, + nc sahislarin ara derlenmis ve uygulama biemleri ile birlikte + kaynak kodunu kopyalama zorunluluklari olmasa bile kaynak kodunu + dagitmak olarak kabul edilmektedir. + + 4. Yazilim'i bu Lisans'ta sarih olarak belirtilen sartlar haricinde + kopyalayamaz, degistiremez, ruhsat hakkini veremez ve dagitamazsiniz. + Buna aykiri herhangi bir kopyalama, degistirme, ruhsat hakki verme, + veya dagitimda bulunma hkmszdr ve byle bir tesebbs halinde bu + Lisans altindaki btn haklariniz iptal edilir. Sizden, bu Lisans + kapsaminda kopya veya hak almis olan nc sahislar, Lisans + sartlarina uygunluklarini devam ettirdikleri srece, ruhsat haklarini + muhafaza edeceklerdir. + + 5. Bu Lisans sizin tarafinizdan imzalanmadigi iin bu Lisans'i kabul + etmek zorunda degilsiniz. Fakat, size Yazilim'i veya onu baz alan + rnleri degistirmek veya dagitmak iin izin veren baska bir belge + yoktur. Eger bu Lisans'i kabul etmiyorsaniz bu eylemler kanun + tarafindan sizin iin yasaklanmistir. Dolayisiyla, Yazilim'i (veya onu + baz alan bir rn) degistirmeniz veya dagitmaniz bu Lisans'i ve + Lisans'in Yazilim'i veya ondan istikak etmis btn eserleri + kopyalamak, degistirmek ve dagitmak iin getirdigi sart ve kayitlari + kabul ettiginiz manasina gelmektedir. + + 6. Yazilim'i (veya onu baz alan herhangi bir rn) yeniden + dagittiginiz her defada alici, ilk ruhsat sahibinden otomatik olarak + Yazilim'i bu sartlar ve kayitlar dahilinde kopyalamak, degistirmek ve + dagitmak iin ruhsat almaktadir. Alicinin burada verilen haklari + kullanmasina ek bir takim kisitlamalar getiremezsiniz. nc + sahislari bu Lisans mucibince hareket etmege mecbur etmek sizin + sorumluluk ve ykmllgnz altinda degildir. + + 7. Eger bir mahkeme karari veya patent ihlal iddiasi veya herhangi + baska bir (patent meseleleri ile sinirli olmayan) sebep sonucunda + size, bu Lisans'in sart ve kayitlarina aykiri olan bir takim (mahkeme + karari, zel anlasma veya baska bir sekilde) kisitlamalar getirilirse, + bu sizi bu Lisans sart ve kayitlarina uyma mecburiyetinden serbest + birakmaz. Eger ayni anda hem bu Lisans'in sartlarini yerine getiren + hem de diger kisitlamalara uygun olan bir sekilde Yazilim'i + dagitamiyorsaniz, o zaman Yazilim'i dagitamazsiniz. rnegin, eger bir + patent lisansi direkt veya endirekt olarak sizden kopya alacak olan + nc sahislarin bedel demeksizin Yazilim'i dagitmalarina hak + tanimiyorsa o zaman sizin hem bu kosulu hem Lisans kosullarini yerine + getirmenizin tek yolu Yazilim'i dagitmamak olacaktir. + + Eger bu blmn herhangi bir parasi herhangi bir sart altinda + uygulanamaz veya hatali bulunur ise o sartlar dahilinde blmn geri + kalan kismi, btn diger sartlar altinda da blmn tamami geerlidir. + + Bu blmn amaci sizin patent haklarini, herhangi bir mlkiyet hakkini + ihlal etmenize yol amak veya bu haklarin geerliligine muhalefet + etmenizi saglamak degildir; bu blmn btn amaci kamu lisans + uygulamalari ile olusturulan serbest yazilim dagitim sisteminin + btnlgn ve islerligini korumaktir. Bu sistemin tutarli + uygulanmasina dayanarak pek ok kisi bu sistemle dagitilan genis + yelpazedeki yazilimlara katkida bulunmustur; yazilimini bu veya baska + bir sistemle dagitmak karari yazara aittir, herhangi bir kullanici bu + karari veremez. + + Bu blm Lisans'in geri kalaninin dogurdugu sonularin ne oldugunu + aikliga kavusturmak amacini gtmektedir. + + 8. Eger Yazilim'in kullanimi ve/veya dagitimi bazi lkelerde telif + hakki tasiyan arayzler veya patentler yznden kisitlanirsa, + Yazilim'i bu Lisans kapsamina ilk koyan telif hakki sahibi, Yazilim'in + yalnizca bu lkeler haricinde dagitilabilecegine dair aik bir cografi + dagitim kisitlamasi koyabilir. Byle bir durumda bu Lisans bu + kisitlamayi sanki Lisans'in ierisine yazilmis gibi kapsar. + + 9. Free Software Foundation zaman zaman Genel Kamu Lisansi'nin yeni + ve/veya degistirilmis biimlerini yayinlayabilir. Byle yeni srmler + mana olarak simdiki haline benzer olacaktir, fakat dogacak yeni + problemler veya kaygilara cevap verecek sekilde detayda farklilik + arzedebilir. + + Her yeni biime ayirdedici bir srm numarasi verilmektedir. Eger + Yazilim bir srm numarasi belirtiyor ve "bu ve bundan sonraki + srmler" altinda dagitiliyorsa, belirtilen srm veya Free Software + Foundation tarafindan yayinlanan herhangi sonraki bir srmn sart ve + kayitlarina uymakta serbestsiniz. Eger Yazilim Lisans iin bir srm + numarasi belirtmiyor ise, Free Software Foundation tarafindan + yayinlanmis olan herhangi bir srmn sart ve kayitlarina uymakta + serbestsiniz. + + 10. Eger bu Yazilim'in paralarini dagitim kosullari farkli olan + baska serbest yazilimlarin ierisinde kullanmak isterseniz, yazara + sorarak izin isteyin. Telif hakki Free Software Foundation'a ait olan + yazilimlar iin Free Software Foundation'a yazin, bazen istisnalar + kabul edilmektedir. Kararimiz, serbest yazilimlarimizdan istikak etmis + yazilimlarin serbest statlerini korumak ve genel olarak yazilimlarin + yeniden kullanilabilirligini ve paylasimini saglamak amalari + dogrultusunda sekillenecektir. + + GARANTI YOKTUR + + 11. BU YAZILIM CRETSIZ OLARAK RUHSATLANDIGI IIN, YAZILIM IIN + ILGILI KANUNLARIN IZIN VERDIGI LDE HERHANGI BIR GARANTI + VERILMEMEKTEDIR. AKSI YAZILI OLARAK BELIRTILMEDIGI MDDETE TELIF + HAKKI SAHIPLERI VE/VEYA BASKA SAHISLAR YAZILIMI "OLDUGU GIBI", ASIKAR + VEYA ZIMNEN, SATILABILIRLIGI VEYA HERHANGI BIR AMACA UYGUNLUGU DA + DAHIL OLMAK ZERE HIBIR GARANTI VERMEKSIZIN DAGITMAKTADIRLAR. + YAZILIMIN KALITESI VEYA PERFORMANSI ILE ILGILI TM SORUNLAR SIZE + AITTIR. YAZILIMDA HERHANGI BIR BOZUKLUKTAN DOLAYI DOGABILECEK OLAN + BTN SERVIS, TAMIR VEYA DZELTME MASRAFLARI SIZE AITTIR. + + 12. ILGILI KANUNUN ICBAR ETTIGI DURUMLAR VEYA YAZILI ANLASMA + HARICINDE HERHANGI BIR SEKILDE TELIF HAKKI SAHIBI VEYA YUKARIDA IZIN + VERILDIGI SEKILDE YAZILIMI DEGISTIREN VEYA YENIDEN DAGITAN HERHANGI + BIR KISI, YAZILIMIN KULLANIMI VEYA KULLANILAMAMASI (VEYA VERI KAYBI + OLUSMASI, VERININ YANLIS HALE GELMESI, SIZIN VEYA NC SAHISLARIN + ZARARA UGRAMASI VEYA YAZILIMIN BASKA YAZILIMLARLA BERABER + ALISAMAMASI) YZNDEN OLUSAN GENEL, ZEL, DOGRUDAN YA DA DOLAYLI + HERHANGI BIR ZARARDAN, BYLE BIR TAZMINAT TALEBI TELIF HAKKI SAHIBI + VEYA ILGILI KISIYE BILDIRILMIS OLSA DAHI, SORUMLU DEGILDIR. + + SART VE KAYITLARIN SONU + + Bu Sartlar Yeni Yazilimlara Nasil Uygulanir + + Eger yeni bir yazilim gelistiriyor ve bunun kamuya en fazla dzeyde + yarar saglamasini istiyorsaniz, yaziliminizi herkesin dagitip, + degistirebilecegi zgr yazilim haline getirmenizi neriyoruz. + + Bu kosullari uygulamak iin yazilima asagidaki bildirimleri ekleyin. + En saglikli yntem her kaynak kodu dosyasinin basina bu bildirimi + ekleyerek garanti olmadigina dair bilginin verildiginden emin + olmaktir; her dosya en azindan "copyright" (telif hakki) satirini ve + bildirimin tam metninin nerede bulunabilecegine dair bilgi + iermelidir. + + {yazilimin adini ve ne yaptigini anlatan bir satir.} + + Copyright (C) {yil} {yazarin adi} + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA + + Size normal ve elektronik posta ile nasil ulasilabilecegine dair bilgi + eklemeyi unutmayin. + + Eger yaziliminiz interaktif ise, interaktif kipte baslatildigi zaman + gsterilen kisa bir bildirim koyun. + + Gnomovizyon version 69, Copyright (C) yil yazarin adi + Gnomovizyon comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to + redistribute it under certain conditions; type `show c' for + details. + Gnomovizyon srm 69, Telif hakki (C) yil yazarin adi + Gnomovizyon iin HI BIR GARANTI verilmemektedir; detaylar iin + `show w' yazin. Bu bir serbest yazilimdir ve belli kosullar altinda + yeniden dagitilabilir; detaylar iin `show c' yazin. + + rnekte verilen `show w' ve `show c' komutlari GNU Genel Kamu + Lisansi'nin ilgili blmlerini gstermelidir. Elbette kullanilan + komutlar daha farkli olabilir veya yaziliminiza uyan baska yntemlerle + bu bildirim yapilabilir. + + Isvereninizin (eger programci olarak alisiyorsaniz) veya, eger + grenci iseniz, okulunuzun telif haklarindan feragat ettiklerine dair + bir feragatname imzalamalarini isteyebilirsiniz. Asagida bir rnek yer + almaktadir, isimleri degistirin: + + GereksizIsler, A.S., Mehmet Herhangibiri tarafindan yazilmis + `AbidikGubidik' yaziliminda (kapikolu evirmekte kullanilan bir + yazilim) olabilecek btn telif haklarindan feragat eder. + {Yn Etici Imzasi}, 1 April 1990 + Yn Etici, GereksizIsler Yetkilisi + + Bu Genel Kamu Lisansi yaziliminizin serbest olmayan yazilimlarin + ierisine dahil edilmesine imkan tanimaz. Eger yaziliminiz bir + kitaplik ise, serbest olmayan yazilimlarin kitapliginiza baglanmasina + imkan tanimak isteyebilirsiniz. Eger yapmak istediginiz bu ise, bu + Lisans yerine GNU Kisitli Genel Kamu Lisansi'ni kullanabilirsiniz. + _________________________________________________________________ + + eviren: Deniz Akkus Kanca, 2001 + Translated by: Deniz Akkus Kanca, 2001 diff --git a/docs/tr/FAQ.txt b/docs/tr/FAQ.txt new file mode 100644 index 000000000..63d4d9c81 --- /dev/null +++ b/docs/tr/FAQ.txt @@ -0,0 +1 @@ +Please see "docs/FAQ.txt" diff --git a/docs/tr/INSTALL.txt b/docs/tr/INSTALL.txt new file mode 100644 index 000000000..8778c7b73 --- /dev/null +++ b/docs/tr/INSTALL.txt @@ -0,0 +1 @@ +Please see "docs/INSTALL.txt" diff --git a/docs/tr/PNG.txt b/docs/tr/PNG.txt new file mode 100644 index 000000000..78db305c1 --- /dev/null +++ b/docs/tr/PNG.txt @@ -0,0 +1 @@ +Please see "docs/PNG.txt" diff --git a/docs/tr/README.txt b/docs/tr/README.txt new file mode 100644 index 000000000..f3cfcb9b7 --- /dev/null +++ b/docs/tr/README.txt @@ -0,0 +1 @@ +Please see "docs/README.txt" diff --git a/src/BeOS_print.cpp b/src/BeOS_print.cpp new file mode 100644 index 000000000..76ea649be --- /dev/null +++ b/src/BeOS_print.cpp @@ -0,0 +1,133 @@ +/* BeOS_print.cpp */ + +/* printing support for Tux Paint */ +/* Marcin 'Shard' Konicki */ + +/* Jan. 17, 2003 */ + +#include "BeOS_print.h" + +#include "Bitmap.h" +#include "Messenger.h" +#include "PrintJob.h" +#include "Window.h" +#include "View.h" + +#include "dirent.h" +#include "string.h" + + +class PrintView : public BView +{ + public: + PrintView( BBitmap *bitmap) + : BView( bitmap->Bounds(), "TuxPaint Print", B_FOLLOW_NONE, B_WILL_DRAW) + { + b = bitmap; + }; + ~PrintView() + { + delete b; + }; + void Draw( BRect updateRect) + { + DrawBitmap( b); + } + private: + BBitmap *b; +}; + + +BBitmap *SurfaceToBBitmap( SDL_Surface *surf) +{ + BBitmap *bitmap = new BBitmap( BRect( 0, 0, surf->w, surf->h), B_RGBA32); + SDL_PixelFormat pixfmt; + SDL_Surface *surf32; + Uint8 *src,*dst; + Uint32 linesize; + int i; + + memset( &pixfmt, 0, sizeof(pixfmt) ); + pixfmt.palette = NULL; + pixfmt.BitsPerPixel = 32; + pixfmt.BytesPerPixel= 4; + pixfmt.Rmask = 0x00FF0000; + pixfmt.Gmask = 0x0000FF00; + pixfmt.Bmask = 0x000000FF; + pixfmt.Amask = 0xFF000000; + pixfmt.Rshift = 16; + pixfmt.Gshift = 8; + pixfmt.Bshift = 0; + pixfmt.Ashift = 24; + pixfmt.Rloss = 0; + pixfmt.Gloss = 0; + pixfmt.Bloss = 0; + pixfmt.Aloss = 0; + pixfmt.colorkey = 0; + pixfmt.alpha = 0; + + surf32 = SDL_ConvertSurface( surf, &pixfmt, SDL_SWSURFACE ); + + linesize = surf32->w*sizeof(Uint32); + dst = (Uint8*)bitmap->Bits(); + src = (Uint8*)surf32->pixels; + for ( i = 0; i < surf32->h; i++ ) + { + memcpy( dst, src, linesize ); + src += surf32->pitch-4; + dst += linesize; + } + + SDL_FreeSurface( surf32 ); /* Free temp surface */ + + return bitmap; +} + + +int IsPrinterAvailable( void ) +{ + // this code is a little hack, i don't like such hardcoded things + // but i have no choice ;] + DIR *d; + struct dirent *f = NULL; + int num_files = 0; + d = opendir("/boot/home/config/settings/printers"); + if( d != NULL) + { + while( (f = readdir(d)) != NULL) + num_files++; + closedir( d); + if( num_files > 2) + return 1; + } + return 0; +} + + +int SurfacePrint( SDL_Surface *surf ) +{ + BWindow *window = new BWindow( BRect( 0, 0, surf->w, surf->h), "TuxPaint Print", B_NO_BORDER_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_AVOID_FRONT | B_AVOID_FOCUS); + PrintView *view = new PrintView( SurfaceToBBitmap( surf)); + window->AddChild(view); + window->Run(); + + BPrintJob job("TuxPaint"); + if( job.ConfigPage() == B_OK) + { + if( job.ConfigJob() == B_OK) + { + job.BeginJob(); + if( job.CanContinue()) + { + job.DrawView(view, BRect( 0, 0, surf->w, surf->h), BPoint( 0, 0)); + job.SpoolPage(); + } + if( job.CanContinue()) + job.CommitJob(); + } + } + + BMessenger( window).SendMessage( B_QUIT_REQUESTED); + + return 0; +} diff --git a/src/BeOS_print.h b/src/BeOS_print.h new file mode 100644 index 000000000..f788de63b --- /dev/null +++ b/src/BeOS_print.h @@ -0,0 +1,25 @@ +/* BeOS_print.h */ + +/* printing support for Tux Paint */ +/* Marcin 'Shard' Konicki */ + +/* Jan. 17, 2003 */ + + +#ifndef __BEOS_PRINT_H__ +#define __BEOS_PRINT_H__ + +#include "SDL.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern int SurfacePrint( SDL_Surface *surf ); +extern int IsPrinterAvailable(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/Makefile.beos b/src/Makefile.beos new file mode 100644 index 000000000..8f8b10995 --- /dev/null +++ b/src/Makefile.beos @@ -0,0 +1,239 @@ +## makefile generated by makemake ## +## BeOS Generic Makefile v2.2 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= ../tuxpaint + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= APP +## (makemake defaults to APP type) ## + +# add support for new Pe and Eddie features +# to fill in generic makefile + +#%{ +# @src->@ + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. +SRCS= \ + src/tuxpaint.c \ + src/BeOS_print.cpp + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS= \ + tuxpaint.rsrc + +# @<-src@ +#%} + +# end support for Pe and Eddie + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS= \ + z \ + png \ + intl \ + SDL \ + SDL_image \ + SDL_mixer \ + SDL_ttf \ + root \ + be + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS= /boot/home/config/lib/ + +# additional paths to look for system headers +# thes use the form: #include
+# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = \ + /boot/develop/tools/gnupro/include/SDL/ + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = \ + src/mouse/ \ + src/ + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE= SOME + +# specify any preprocessor symbols to be defined. The symbols will not +# have their values set automatically; you must supply the value (if any) +# to use. For example, setting DEFINES to "DEBUG=1" will cause the +# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG" +# would pass "-DDEBUG" on the compiler's command line. +DEFINES= CONFDIR="\".\"" DOC_PREFIX="\"./docs/\"" DATA_PREFIX="\"./data/\"" LOCALEDIR="\"/boot/home/config/share/locale/\"" + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = supress all warnings +# ALL = enable all warnings +WARNINGS = + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = + +# specify debug settings +# if TRUE will allow application to be run from a source-level +# debugger. Note that this will disable all optimzation. +DEBUGGER = + +# specify additional compiler flags for all files +COMPILER_FLAGS =-fomit-frame-pointer -funroll-loops -pipe + +# specify additional linker flags +LINKER_FLAGS =-Xlinker -s -Xlinker -x + +# specify the version of this particular item +# (for example, -app 3 4 0 d 0 -short 340 -long "340 "`echo -n -e '\302\251'`"1999 GNU GPL") +# This may also be specified in a resource. +APP_VERSION = + +# (for TYPE == DRIVER only) Specify desired location of driver in the /dev +# hierarchy. Used by the driverinstall rule. E.g., DRIVER_PATH = video/usb will +# instruct the driverinstall rule to place a symlink to your driver's binary in +# ~/add-ons/kernel/drivers/dev/video/usb, so that your driver will appear at +# /dev/video/usb when loaded. Default is "misc". +DRIVER_PATH = + +## include the makefile-engine +include $(BUILDHOME)/etc/makefile-engine + +clean-trans: + @rm -rf trans + +translations: trans trans/fr.mo trans/de.mo trans/en_gb.mo trans/es.mo \ + trans/fi.mo trans/tr.mo trans/nn.mo trans/it.mo trans/nl.mo \ + trans/sv.mo trans/is.mo trans/da.mo trans/pt_br.mo \ + trans/cz.mo trans/hu.mo trans/ko.mo trans/ca.mo trans/zh_cn.mo \ + trans/id.mo trans/ro.mo trans/el.mo trans/pl.mo + +trans: + @echo + @echo "...Preparing translation files..." + @mkdir trans + +trans/fr.mo: src/messages/fr.po + @echo " ...French..." + @msgfmt src/messages/fr.po -o trans/fr.mo + +trans/ro.mo: src/messages/ro.po + @echo " ...Romanian..." + @msgfmt src/messages/ro.po -o trans/ro.mo + +trans/de.mo: src/messages/de.po + @echo " ...German..." + @msgfmt src/messages/de.po -o trans/de.mo + +trans/en_gb.mo: src/messages/en_gb.po + @echo " ...British English..." + @msgfmt src/messages/en_gb.po -o trans/en_gb.mo + +trans/zh_cn.mo: src/messages/zh_cn.po + @echo " ...Chinese..." + @msgfmt src/messages/zh_cn.po -o trans/zh_cn.mo + +trans/id.mo: src/messages/id.po + @echo " ...Indonesian..." + @msgfmt src/messages/id.po -o trans/id.mo + +trans/el.mo: src/messages/el.po + @echo " ...Greek..." + @msgfmt src/messages/el.po -o trans/el.mo + +trans/ca.mo: src/messages/ca.po + @echo " ...Catalan..." + @msgfmt src/messages/ca.po -o trans/ca.mo + +trans/da.mo: src/messages/da.po + @echo " ...Danish..." + @msgfmt src/messages/da.po -o trans/da.mo + +trans/ko.mo: src/messages/ko.po + @echo " ...Korean..." + @msgfmt src/messages/ko.po -o trans/ko.mo + +trans/es.mo: src/messages/es.po + @echo " ...Spanish..." + @msgfmt src/messages/es.po -o trans/es.mo + +trans/fi.mo: src/messages/fi.po + @echo " ...Finnish..." + @msgfmt src/messages/fi.po -o trans/fi.mo + +trans/tr.mo: src/messages/tr.po + @echo " ...Turkish..." + @msgfmt src/messages/tr.po -o trans/tr.mo + +trans/sv.mo: src/messages/sv.po + @echo " ...Swedish..." + @msgfmt src/messages/sv.po -o trans/sv.mo + +trans/pt_br.mo: src/messages/pt_br.po + @echo " ...Brazilian Portuguese..." + @msgfmt src/messages/pt_br.po -o trans/pt_br.mo + +trans/pl.mo: src/messages/pl.po + @echo " ...Polish..." + @msgfmt src/messages/pl.po -o trans/pl.mo + +trans/nn.mo: src/messages/nn.po + @echo " ...Norwegian..." + @msgfmt src/messages/nn.po -o trans/nn.mo + +trans/it.mo: src/messages/it.po + @echo " ...Italian..." + @msgfmt src/messages/it.po -o trans/it.mo + +trans/nl.mo: src/messages/nl.po + @echo " ...Dutch..." + @msgfmt src/messages/nl.po -o trans/nl.mo + +trans/is.mo: src/messages/is.po + @echo " ...Icelandic..." + @msgfmt src/messages/is.po -o trans/is.mo + +trans/hu.mo: src/messages/hu.po + @echo " ...Hungarian..." + @msgfmt src/messages/hu.po -o trans/hu.mo + +trans/cz.mo: src/messages/cz.po + @echo " ...Czech..." + @msgfmt src/messages/cz.po -o trans/cz.mo diff --git a/src/Makefile.beos-old b/src/Makefile.beos-old new file mode 100644 index 000000000..b1f2a0e36 --- /dev/null +++ b/src/Makefile.beos-old @@ -0,0 +1,552 @@ +# Makefile for tuxpaint + +# Tux Paint - A simple drawing program for children. + +# Copyright (c) 2002 by Bill Kendrick +# bill@newbreedsoftware.com +# http://www.newbreedsoftware.com/tuxpaint/ + +# June 14, 2002 - January 13, 2002 +# Updated 2003.Feb.03 + + +# Where to install things: + +PREFIX=/boot/develop/tools/gnupro + + +# Program: + +BIN_PREFIX=./ + + +# Data: + +DATA_PREFIX=./data/ + + +# Docs and man page: + +DOC_PREFIX=./docs/ +MAN_PREFIX=./src/ + + +# 'System-wide' Config file: + +ifeq ($(PREFIX),/usr) + CONFDIR=/etc/tuxpaint +else + CONFDIR=./src/ +endif + + +# Icons and launchers: + +ICON_PREFIX=./ +X11_ICON_PREFIX=./ +GNOME_PREFIX=`gnome-config --prefix` +KDE_PREFIX=`kde-config --install apps --expandvars` +KDE_ICON_PREFIX=`kde-config --install icon --expandvars` + + +# Locale files + +LOCALE_PREFIX=/boot/home/config/share/locale/ +# LOCALE_PREFIX=/usr/share/locale/ + + +# Built with sound by default (override with "make nosound") + +NOSOUNDFLAG=__SOUND + + +# Libraries, paths, and flags: + +SDL_LIBS=$(shell sdl-config --libs) -lSDL_image -lSDL_ttf $(SDL_MIXER_LIB) +SDL_MIXER_LIB=-lSDL_mixer +SDL_CFLAGS=$(shell sdl-config --cflags) + + +# The entire set of CFLAGS: + +CFLAGS=-O1 -funroll-loops -fomit-frame-pointer -pipe -Wall $(SDL_CFLAGS) -DDATA_PREFIX=\"$(DATA_PREFIX)\" \ + -D$(NOSOUNDFLAG) -DDOC_PREFIX=\"$(DOC_PREFIX)\" \ + -DLOCALEDIR=\"$(LOCALE_PREFIX)\" -DCONFDIR=\"$(CONFDIR)\" + + +# "make" with no arguments builds the program and man page from sources: + +all: tuxpaint translations + @echo + @echo "Done compiling." + @echo "Now (probably as 'root' superuser), run 'make install'" + @echo "to install Tux Paint." + @echo + + + +# "make nosound" builds the program with sound disabled, and man page, +# from sources: + +nosound: + @echo + @echo "Building with sound DISABLED" + @echo + make SDL_MIXER_LIB= NOSOUNDFLAG=NOSOUND + + + +# "make install" installs all of the various parts +# (depending on the *PREFIX variables at the top, you probably need +# to do this as superuser ("root")) + +install: install-bin install-data install-man install-doc \ + install-gnome install-kde install-kde-icons \ + install-icon install-gettext install-importscript \ + install-default-config + @echo + @echo "All done! Now (preferably NOT as 'root' superuser)," + @echo "you can type the command 'tuxpaint' to run the program!!!" + @echo + @echo "For more information, see the 'tuxpaint' man page," + @echo "run 'tuxpaint --usage' or see $(DOC_PREFIX)README.txt" + @echo + @echo "Enjoy!" + @echo + + +# "make clean" deletes the program, the compiled objects and the +# built man page (returns to factory archive, pretty much...) + +clean: + @echo + @echo "Cleaning up the build directory! ($(PWD))" + @-rm -f tuxpaint + @-rm -f obj/*.o + @if [ -d obj ]; then rmdir obj; fi + @-rm -f trans/*.mo + @if [ -d trans ]; then rmdir trans; fi + @echo + + +# "make uninstall" should remove the various parts from their +# installation locations. BE SURE the *PREFIX variables at the top +# are the same as they were when you installed, of course!!! + +uninstall: + if [ "x$(GNOME_PREFIX)" != "x" ]; then \ + rm $(GNOME_PREFIX)/share/gnome/apps/Graphics/tuxpaint.desktop; \ + rm $(GNOME_PREFIX)/share/pixmaps/tuxpaint.png; \ + fi + if [ "x$(KDE_PREFIX)" != "x" ]; then \ + rm $(KDE_PREFIX)/Graphics/tuxpaint.desktop; \ + fi + -rm $(ICON_PREFIX)tuxpaint.png + -rm $(X11_ICON_PREFIX)tuxpaint.xpm + -rm $(BIN_PREFIX)/tuxpaint + -rm $(BIN_PREFIX)/tuxpaint-import + -rm -r $(DATA_PREFIX) + -rm -r $(DOC_PREFIX) + -rm $(MAN_PREFIX)/man1/tuxpaint.1.gz + -rm $(LOCALE_PREFIX)cs/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ca/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)da/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)de/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)en_GB/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)zh_CN/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)id/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)el/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)es/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)fi/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)fr/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)hu/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)is/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)it/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ja/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ko/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)ro/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)nl/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)nn/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)sv/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)pt_BR/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)pl/LC_MESSAGES/tuxpaint.mo + -rm $(LOCALE_PREFIX)tr/LC_MESSAGES/tuxpaint.mo + -rm -f -r $(CONFDIR) + + +# Install default config file: + +install-default-config: + @echo + @echo "...Installing default config file..." + @install -d $(CONFDIR) + @cp src/tuxpaint.conf $(CONFDIR) + @chmod 644 $(CONFDIR)/tuxpaint.conf + + +# Install a launcher icon in the Gnome menu, under "Graphics" + +install-gnome: + @echo + @echo "...Installing launcher icon into GNOME..." + @if [ "x$(GNOME_PREFIX)" != "x" ]; then \ + install -d $(GNOME_PREFIX)/share/pixmaps; \ + cp data/images/icon.png $(GNOME_PREFIX)/share/pixmaps/tuxpaint.png; \ + chmod 644 $(GNOME_PREFIX)/share/pixmaps/tuxpaint.png; \ + install -d $(GNOME_PREFIX)/share/gnome/apps/Graphics; \ + cp src/tuxpaint.desktop $(GNOME_PREFIX)/share/gnome/apps/Graphics/; \ + chmod 644 $(GNOME_PREFIX)/share/gnome/apps/Graphics/tuxpaint.desktop; \ + fi + + +# Install a launcher icon in the KDE menu... + +install-kde: + @echo + @echo "...Installing launcher icon into KDE..." + @if [ "x$(KDE_PREFIX)" != "x" ]; then \ + cp src/tuxpaint.desktop $(KDE_PREFIX)/Graphics/; \ + chmod 644 $(KDE_PREFIX)/Graphics/tuxpaint.desktop; \ + fi + + +install-kde-icons: + @echo "...Installing launcher icon graphics into KDE..." + @if [ "x$(KDE_ICON_PREFIX)" != "x" ]; then \ + cp data/images/icon48x48.png \ + $(KDE_ICON_PREFIX)/hicolor/48x48/apps/tuxpaint.png; \ + cp data/images/icon32x32.png \ + $(KDE_ICON_PREFIX)/hicolor/32x32/apps/tuxpaint.png; \ + cp data/images/icon16x16.png \ + $(KDE_ICON_PREFIX)/hicolor/16x16/apps/tuxpaint.png; \ + fi + + +# Install the PNG icon (for GNOME, KDE, etc.) +# and the 24-color 32x32 XPM (for other Window managers): + +install-icon: + @echo + @echo "...Installing launcher icon graphics..." + @install -d $(ICON_PREFIX) + @cp data/images/icon.png $(ICON_PREFIX)tuxpaint.png + @chmod 644 $(ICON_PREFIX)tuxpaint.png + @install -d $(X11_ICON_PREFIX) + @cp data/images/icon32x32.xpm $(X11_ICON_PREFIX)tuxpaint.xpm + @chmod 644 $(X11_ICON_PREFIX)tuxpaint.xpm + + +# Install the program: + +install-bin: + @echo + @echo "...Installing program itself..." + @cp tuxpaint $(BIN_PREFIX) + @chmod a+rx,g-w,o-w $(BIN_PREFIX)/tuxpaint + + +# Install the import script: + +install-importscript: + @echo + @echo "...Installing 'tuxpaint-import' script..." + @cp src/tuxpaint-import.sh $(BIN_PREFIX)/tuxpaint-import + @chmod a+rx,g-w,o-w $(BIN_PREFIX)/tuxpaint-import + + +# Install the data (sound, graphics, fonts): + +install-data: + @echo + @echo "...Installing data files..." + @install -d $(DATA_PREFIX) + @cp -R data/* $(DATA_PREFIX) + @chmod -R a+rX,g-w,o-w $(DATA_PREFIX) + + +# Install the translated text: + +install-gettext: + @echo + @echo "...Installing translation files..." + @# + @echo " ...French..." + @install -d $(LOCALE_PREFIX)fr/LC_MESSAGES + @cp trans/fr.mo $(LOCALE_PREFIX)fr/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)fr/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Icelandic..." + @install -d $(LOCALE_PREFIX)is/LC_MESSAGES + @cp trans/is.mo $(LOCALE_PREFIX)is/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)is/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Hungarian..." + @install -d $(LOCALE_PREFIX)hu/LC_MESSAGES + @cp trans/hu.mo $(LOCALE_PREFIX)hu/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)hu/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Chinese (Simplified)..." + @install -d $(LOCALE_PREFIX)zh_CN/LC_MESSAGES + @cp trans/zh_cn.mo $(LOCALE_PREFIX)zh_CN/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)zh_CN/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Indonesian..." + @install -d $(LOCALE_PREFIX)id/LC_MESSAGES + @cp trans/id.mo $(LOCALE_PREFIX)id/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)id/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Greek..." + @install -d $(LOCALE_PREFIX)el/LC_MESSAGES + @cp trans/el.mo $(LOCALE_PREFIX)el/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)el/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Romanian..." + @install -d $(LOCALE_PREFIX)ro/LC_MESSAGES + @cp trans/ro.mo $(LOCALE_PREFIX)ro/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ro/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...British English..." + @install -d $(LOCALE_PREFIX)en_GB/LC_MESSAGES + @cp trans/en_gb.mo $(LOCALE_PREFIX)en_GB/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)en_GB/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Catalan..." + @install -d $(LOCALE_PREFIX)ca/LC_MESSAGES + @cp trans/ca.mo $(LOCALE_PREFIX)ca/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ca/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...German..." + @install -d $(LOCALE_PREFIX)de/LC_MESSAGES + @cp trans/de.mo $(LOCALE_PREFIX)de/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)de/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Spanish..." + @install -d $(LOCALE_PREFIX)es/LC_MESSAGES + @cp trans/es.mo $(LOCALE_PREFIX)es/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)es/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Finnish..." + @install -d $(LOCALE_PREFIX)fi/LC_MESSAGES + @cp trans/fi.mo $(LOCALE_PREFIX)fi/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)fi/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Turkish..." + @install -d $(LOCALE_PREFIX)tr/LC_MESSAGES + @cp trans/tr.mo $(LOCALE_PREFIX)tr/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)tr/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Norwegian..." + @install -d $(LOCALE_PREFIX)nn/LC_MESSAGES + @cp trans/nn.mo $(LOCALE_PREFIX)nn/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)nn/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Italian..." + @install -d $(LOCALE_PREFIX)it/LC_MESSAGES + @cp trans/it.mo $(LOCALE_PREFIX)it/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)it/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Dutch..." + @install -d $(LOCALE_PREFIX)nl/LC_MESSAGES + @cp trans/nl.mo $(LOCALE_PREFIX)nl/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)nl/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Swedish..." + @install -d $(LOCALE_PREFIX)sv/LC_MESSAGES + @cp trans/sv.mo $(LOCALE_PREFIX)sv/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)sv/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Brazilian Portuguese..." + @install -d $(LOCALE_PREFIX)pt_BR/LC_MESSAGES + @cp trans/pt_br.mo $(LOCALE_PREFIX)pt_BR/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)pt_BR/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Korean..." + @install -d $(LOCALE_PREFIX)ko/LC_MESSAGES + @cp trans/ko.mo $(LOCALE_PREFIX)ko/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)ko/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Polish..." + @install -d $(LOCALE_PREFIX)pl/LC_MESSAGES + @cp trans/pl.mo $(LOCALE_PREFIX)pl/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)pl/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Czech..." + @install -d $(LOCALE_PREFIX)cs/LC_MESSAGES + @cp trans/cs.mo $(LOCALE_PREFIX)cs/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)cs/LC_MESSAGES/tuxpaint.mo + @# + @echo " ...Danish..." + @install -d $(LOCALE_PREFIX)da/LC_MESSAGES + @cp trans/da.mo $(LOCALE_PREFIX)da/LC_MESSAGES/tuxpaint.mo + @chmod 644 $(LOCALE_PREFIX)da/LC_MESSAGES/tuxpaint.mo + + +# Install the text documentation: + +install-doc: + @echo + @echo "...Installing documentation..." + @install -d $(DOC_PREFIX) + @cp -R docs/* $(DOC_PREFIX) + @chmod a=rX,g=rX,o=rwX $(DOC_PREFIX) + + +# Install the man page: + +install-man: + @echo + @echo "...Installing man pages..." + @# man1 directory... + @install -d $(MAN_PREFIX)/man1/ + @# tuxpaint.1 + @cp src/tuxpaint.1 $(MAN_PREFIX)/man1/ + @gzip -f $(MAN_PREFIX)/man1/tuxpaint.1 + @chmod a+rx,g-w,o-w $(MAN_PREFIX)/man1/tuxpaint.1.gz + @# tuxpaint-import.1 + @cp src/tuxpaint-import.1 $(MAN_PREFIX)/man1/ + @gzip -f $(MAN_PREFIX)/man1/tuxpaint-import.1 + @chmod a+rx,g-w,o-w $(MAN_PREFIX)/man1/tuxpaint-import.1.gz + + +# Build the program! + +tuxpaint: obj/tuxpaint.o obj/BeOS_print.o + @echo + @echo "...Linking Tux Paint..." + @$(CC) $(CFLAGS) -o tuxpaint obj/tuxpaint.o obj/BeOS_print.o $(SDL_LIBS) -lintl -lpng -lz -lbe + @xres -o tuxpaint tuxpaint.rsrc + @mimeset -f tuxpaint + +# Build the object for the program! + +obj/tuxpaint.o: src/tuxpaint.c obj \ + src/tools.h src/titles.h src/colors.h src/shapes.h \ + src/magic.h src/sounds.h src/tip_tux.h src/great.h \ + src/mouse/arrow.xbm src/mouse/arrow-mask.xbm \ + src/mouse/hand.xbm src/mouse/hand-mask.xbm \ + src/mouse/insertion.xbm src/mouse/insertion-mask.xbm \ + src/mouse/wand.xbm src/mouse/wand-mask.xbm \ + src/mouse/brush.xbm src/mouse/brush-mask.xbm \ + src/mouse/crosshair.xbm src/mouse/crosshair-mask.xbm \ + src/mouse/rotate.xbm src/mouse/rotate-mask.xbm \ + src/mouse/tiny.xbm src/mouse/tiny-mask.xbm \ + src/mouse/watch.xbm src/mouse/watch-mask.xbm \ + src/mouse/up.xbm src/mouse/up-mask.xbm \ + src/mouse/down.xbm src/mouse/down-mask.xbm + @echo + @echo "...Compiling Tux Paint from source..." + @$(CC) $(CFLAGS) -c src/tuxpaint.c -o obj/tuxpaint.o + +obj/BeOS_print.o: src/BeOS_print.cpp obj \ + src/BeOS_print.h + @echo + @echo "... Compiling BeOS_print support..." + @$(CC) $(CFLAGS) -c src/BeOS_print.cpp -o obj/BeOS_print.o + +# Build the translation files for gettext + +translations: trans trans/fr.mo trans/de.mo trans/en_gb.mo trans/es.mo \ + trans/fi.mo trans/tr.mo trans/nn.mo trans/it.mo trans/nl.mo \ + trans/sv.mo trans/is.mo trans/da.mo trans/pt_br.mo \ + trans/cs.mo trans/hu.mo trans/ko.mo trans/ca.mo trans/zh_cn.mo \ + trans/id.mo trans/ro.mo trans/el.mo trans/pl.mo + +trans: + @echo + @echo "...Preparing translation files..." + @mkdir trans + +trans/fr.mo: src/messages/fr.po + @echo " ...French..." + @msgfmt src/messages/fr.po -o trans/fr.mo + +trans/ro.mo: src/messages/ro.po + @echo " ...Romanian..." + @msgfmt src/messages/ro.po -o trans/ro.mo + +trans/de.mo: src/messages/de.po + @echo " ...German..." + @msgfmt src/messages/de.po -o trans/de.mo + +trans/en_gb.mo: src/messages/en_gb.po + @echo " ...British English..." + @msgfmt src/messages/en_gb.po -o trans/en_gb.mo + +trans/zh_cn.mo: src/messages/zh_cn.po + @echo " ...Chinese..." + @msgfmt src/messages/zh_cn.po -o trans/zh_cn.mo + +trans/id.mo: src/messages/id.po + @echo " ...Indonesian..." + @msgfmt src/messages/id.po -o trans/id.mo + +trans/el.mo: src/messages/el.po + @echo " ...Greek..." + @msgfmt src/messages/el.po -o trans/el.mo + +trans/ca.mo: src/messages/ca.po + @echo " ...Catalan..." + @msgfmt src/messages/ca.po -o trans/ca.mo + +trans/da.mo: src/messages/da.po + @echo " ...Danish..." + @msgfmt src/messages/da.po -o trans/da.mo + +trans/ko.mo: src/messages/ko.po + @echo " ...Korean..." + @msgfmt src/messages/ko.po -o trans/ko.mo + +trans/es.mo: src/messages/es.po + @echo " ...Spanish..." + @msgfmt src/messages/es.po -o trans/es.mo + +trans/fi.mo: src/messages/fi.po + @echo " ...Finnish..." + @msgfmt src/messages/fi.po -o trans/fi.mo + +trans/tr.mo: src/messages/tr.po + @echo " ...Turkish..." + @msgfmt src/messages/tr.po -o trans/tr.mo + +trans/sv.mo: src/messages/sv.po + @echo " ...Swedish..." + @msgfmt src/messages/sv.po -o trans/sv.mo + +trans/pt_br.mo: src/messages/pt_br.po + @echo " ...Brazilian Portuguese..." + @msgfmt src/messages/pt_br.po -o trans/pt_br.mo + +trans/pl.mo: src/messages/pl.po + @echo " ...Polish..." + @msgfmt src/messages/pl.po -o trans/pl.mo + +trans/nn.mo: src/messages/nn.po + @echo " ...Norwegian..." + @msgfmt src/messages/nn.po -o trans/nn.mo + +trans/it.mo: src/messages/it.po + @echo " ...Italian..." + @msgfmt src/messages/it.po -o trans/it.mo + +trans/nl.mo: src/messages/nl.po + @echo " ...Dutch..." + @msgfmt src/messages/nl.po -o trans/nl.mo + +trans/is.mo: src/messages/is.po + @echo " ...Icelandic..." + @msgfmt src/messages/is.po -o trans/is.mo + +trans/hu.mo: src/messages/hu.po + @echo " ...Hungarian..." + @msgfmt src/messages/hu.po -o trans/hu.mo + +trans/cs.mo: src/messages/cs.po + @echo " ...Czech..." + @msgfmt src/messages/cs.po -o trans/cs.mo + + +# Make the "obj" directory to throw the object(s) into: + +obj: + @mkdir obj + diff --git a/src/colors.h b/src/colors.h new file mode 100644 index 000000000..2a87d3c03 --- /dev/null +++ b/src/colors.h @@ -0,0 +1,77 @@ +/* + colors.h + + For Tux Paint + List of colors + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 14, 2002 - January 19, 2003 +*/ + + + +/* What colors are available: */ + +enum { + COLOR_BLACK, + COLOR_WHITE, + COLOR_RED, + COLOR_PINK, + COLOR_ORANGE, + COLOR_YELLOW, + COLOR_LIME, + COLOR_GREEN, + COLOR_CYAN, + COLOR_BLUE, + COLOR_PURPLE, + COLOR_FUCHSIA, /* ... */ + COLOR_BROWN, + COLOR_GREY, + COLOR_SILVER, /* ... */ + NUM_COLORS +}; + + +/* Hex codes: */ + +int color_hexes[NUM_COLORS][3] = { + {0, 0, 0}, /* Black */ + {255, 255, 255}, /* White */ + {255, 0, 0}, /* Red */ + {255, 128, 160}, /* Pink */ + {255, 128, 0}, /* Orange */ + {255, 255, 0}, /* Yellow */ + { 0, 255, 0}, /* Lime */ + { 0, 128, 0}, /* Green */ + { 0, 255, 255}, /* Cyan */ + { 0, 0, 255}, /* Blue */ + {128, 0, 128}, /* Purple */ + {255, 0, 255}, /* Fuchsia */ + {128, 96, 0}, /* Brown */ + {128, 128, 128}, /* Grey */ + {192, 192, 192} /* Silver */ +}; + + +/* Color names: */ + +char * color_names[NUM_COLORS] = { + gettext_noop("Black"), + gettext_noop("White"), + gettext_noop("Red"), + gettext_noop("Pink"), + gettext_noop("Orange"), + gettext_noop("Yellow"), + gettext_noop("Lime"), + gettext_noop("Green"), + gettext_noop("Cyan"), + gettext_noop("Blue"), + gettext_noop("Purple"), + gettext_noop("Fuchsia"), + gettext_noop("Brown"), + gettext_noop("Grey"), + gettext_noop("Silver") +}; diff --git a/src/great.h b/src/great.h new file mode 100644 index 000000000..35b66ddde --- /dev/null +++ b/src/great.h @@ -0,0 +1,26 @@ +/* + great.h + + For Tux Paint + Collection of congratulatory strings (like "Great!"). + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + September 28, 2002 - September 30, 2002 +*/ + + +#ifndef GREAT_H +#define GREAT_H + + +char * great_strs[] = { + gettext_noop("Great!"), + gettext_noop("Cool!"), + gettext_noop("Keep it up!"), + gettext_noop("Good job!") +}; + +#endif /* GREAT_H */ diff --git a/src/magic.h b/src/magic.h new file mode 100644 index 000000000..ed4baadeb --- /dev/null +++ b/src/magic.h @@ -0,0 +1,153 @@ +/* + tools.h + + For Tux Paint + List of available tools. + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 29, 2002 - August 4, 2002 +*/ + + +#include "tip_tux.h" + + +/* What tools are available: */ + +enum { + MAGIC_RAINBOW, + MAGIC_SPARKLES, + + MAGIC_MIRROR, + MAGIC_FLIP, + + MAGIC_BLUR, + MAGIC_BLOCKS, + + MAGIC_NEGATIVE, + MAGIC_FADE, + + MAGIC_CHALK, + MAGIC_DRIP, + + MAGIC_THICK, + MAGIC_THIN, + + MAGIC_FILL, + + NUM_MAGICS +}; + + +/* Magic tool names: */ + +char * magic_names[NUM_MAGICS] = { + gettext_noop("Rainbow"), + gettext_noop("Sparkles"), + + gettext_noop("Mirror"), + gettext_noop("Flip"), + + gettext_noop("Blur"), + gettext_noop("Blocks"), + + gettext_noop("Negative"), + gettext_noop("Fade"), + + gettext_noop("Chalk"), + gettext_noop("Drip"), + + gettext_noop("Thick"), + gettext_noop("Thin"), + + gettext_noop("Fill") +}; + + +/* Some text to write when each tool is selected: */ + +char * magic_tips[NUM_MAGICS] = { + gettext_noop("You can draw in rainbow colors!"), + gettext_noop("Click and move to draw sparkles"), + + gettext_noop("Click to make a mirror image!"), + gettext_noop("Click to flip the picture upside-down!"), + + gettext_noop("Click and move the mouse around to blur the picture"), + gettext_noop("Click and move the mouse around to make the picture blocky"), + + gettext_noop("Click and move the mouse around to draw a negative"), + gettext_noop("Click and move to fade the colors."), + + gettext_noop("Click and move the mouse around to turn the picture into a chalk drawing."), + gettext_noop("Click and move the mouse around to make the picture drip!"), + + gettext_noop("Click and move the mouse to thicken the picture"), + gettext_noop("Click and move the mouse to thin the picture"), + + gettext_noop("Click in the picture to fill that area with color") +}; + + +/* Tool icon filenames: */ + +char * magic_img_fnames[NUM_TOOLS] = { + DATA_PREFIX "images/magic/rainbow.png", + DATA_PREFIX "images/magic/sparkles.png", + + DATA_PREFIX "images/magic/mirror.png", + DATA_PREFIX "images/magic/flip.png", + + DATA_PREFIX "images/magic/blur.png", + DATA_PREFIX "images/magic/blocks.png", + + DATA_PREFIX "images/magic/negative.png", + DATA_PREFIX "images/magic/fade.png", + + DATA_PREFIX "images/magic/chalk.png", + DATA_PREFIX "images/magic/drip.png", + + DATA_PREFIX "images/magic/thick.png", + DATA_PREFIX "images/magic/thin.png", + + DATA_PREFIX "images/magic/fill.png" +}; + + +/* FIXME: Should we should different Tux icons depending on magic, + like tools? */ + + +/* Rainbow color values: */ + +#define NUM_RAINBOW_COLORS 23 + +int rainbow_hexes[NUM_RAINBOW_COLORS][3] = { + {255, 0, 0}, + {255, 64, 0}, + {255, 128, 0}, + {255, 192, 0}, + {255, 255, 0}, + {192, 255, 0}, + {128, 255, 0}, + {64, 255, 0}, + {0, 255, 0}, + {0, 255, 64}, + {0, 255, 128}, + {0, 255, 192}, + {0, 255, 255}, + {0, 192, 255}, + {0, 128, 255}, + {0, 64, 255}, + {64, 0, 255}, + {128, 0, 255}, + {192, 0, 255}, + {255, 0, 255}, + {255, 0, 192}, + {255, 0, 128}, + {255, 0, 64} +}; + diff --git a/src/messages/ca.po b/src/messages/ca.po new file mode 100644 index 000000000..bf190c7b9 --- /dev/null +++ b/src/messages/ca.po @@ -0,0 +1,479 @@ +# Tuxpaint catalan translation. +# Traducci al catal del Tuxpaint. +# Copyright (C) 2002 +# This file is distributed under the same license as the Tuxpaint package. +# Aquest fitxer s distribueix amb la mateixa llicncia que el Tuxpaint. +# Pere Pujal i Carabantes , 2002. +# +# +# Nota per futures traduccions/actualitzacions: +# +# L'estil que he intentat aplicar en aquesta traducci s el que regeix a SoftCatal. +# Aix impica que quan el programa s'adrea a l'usuari, el tracta de vos. +# Tanmateix com que el programa est destinat a nens petits, potser seria ms adient +# tractar de tu a l'usuari. +# +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.0.1pre\n" +"POT-Creation-Date: 2002-10-31 20:49+0100\n" +"PO-Revision-Date: 2002-11-07 22:54+0100\n" +"Last-Translator: Pere Pujal i Carabantes \n" +"Language-Team: Catal \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "De veres voleu sortir?" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "S" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "No" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Si sortiu perdreu el vostre dibuix! El voleu desar?" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "Deso el vostre dibuix abans?" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "No puc obrir aquest dibuix!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "D'acord" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "Comenar un nou dibuix esborrar l'actual!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "D'acord" + +#: src/tuxpaint.c:584 +msgid "Never Mind!" +msgstr "Ni pensar-hi!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "No hi ha fitxers desats!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "El vostre fitxer s'ha imprs!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "Encara no podeu imprimir!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "Esborro aquest dibuix?" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "Obre" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "Esborra" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "Endarrera" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "Deso sobre la versi antiga d'aquest dibuix?" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "No, desa en un fitxer nou" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Trieu el dibuix que voleu, llavors feu clic en Obre" + +#: src/tools.h:42 +msgid "Paint" +msgstr "Pinta" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "Estampa" + +#: src/tools.h:44 +msgid "Lines" +msgstr "Lnies" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "Formes" + +#: src/tools.h:46 +msgid "Text" +msgstr "Texte" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "Mgic" + +#: src/tools.h:48 +msgid "Undo" +msgstr "Desfs" + +#: src/tools.h:49 +msgid "Redo" +msgstr "Refs" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "Esborra" + +#: src/tools.h:51 +msgid "New" +msgstr "Nou" + +#: src/tools.h:53 +msgid "Save" +msgstr "Desa" + +#: src/tools.h:54 +msgid "Print" +msgstr "Imprimeix" + +#: src/tools.h:55 +msgid "Quit" +msgstr "Surt" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Trieu un color i el patr d'un pinzell per dibuixar-hi." + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Trieu un segell per imprimir-lo sobre el vostre dibuix." + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Feu clic per comenar a dibuixar una lnia. Deixeu anar el bot per acabar-la." + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "Trieu una figura. Feu clic per selleccionar el centre, arrossegueu, llavors deixeu anar el bot quan sigui de la mida que voleu. Moveu el ratol per girar-lo i feu clic per dibuixar-lo." + +#: src/tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "Trieu un estil de texte. Feu clic en el vostre dibuix i ja podeu comenar a escriure." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Trieu l'efecte mgic que voleu pel vostre dibuix!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "Desfs!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "Refs!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "Esborra!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Ara teniu una fulla en blanc per dibuixar-hi!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "Obrir..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "El vostre dibuix s'ha desat!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "S'est imprimint..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "Adu!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Deixue anar el bot per acabar la lnia." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Manteniu el bot premut per estirar la figura." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Moveu el ratol per girar la figura. Feu clic per dibuixar-lo." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "D'acord, llavors... Seguirem dibuixant en aquest!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "Eines" + +#: src/titles.h:38 +msgid "Colors" +msgstr "Colors" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "Pinzells" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "Segells" + +#: src/titles.h:42 +msgid "Letters" +msgstr "Lletres" + +#: src/colors.h:56 +msgid "Black" +msgstr "Negre" + +#: src/colors.h:57 +msgid "White" +msgstr "Blanc" + +#: src/colors.h:58 +msgid "Red" +msgstr "Vermell" + +#: src/colors.h:59 +msgid "Pink" +msgstr "Rosa" + +#: src/colors.h:60 +msgid "Orange" +msgstr "Taronja" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "Groc" + +#: src/colors.h:62 +msgid "Green" +msgstr "Vert" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "Blau cel" + +#: src/colors.h:64 +msgid "Blue" +msgstr "Blau" + +#: src/colors.h:65 +msgid "Purple" +msgstr "Porpra" + +#: src/colors.h:66 +msgid "Brown" +msgstr "Marr" + +#: src/colors.h:67 +msgid "Grey" +msgstr "Gris" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "Quadrat" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "Rectangle" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "Cercle" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "Triangle" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "Pentgon" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "Romb" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Un quadrat t quatre cares, totes de la mateixa mida." + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Un rectangle t quatre cares." + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "Un cercle s perfectament rod." + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "Un triangle t tres cares." + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Un pentgon t cinc cares." + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Un romb s un quadrat, una mica aplanat." + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "Arc de Sant Mart" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "Espurnes" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "Mirall" + +#: src/magic.h:52 +msgid "Flip" +msgstr "Mirall vertical" + +#: src/magic.h:54 +msgid "Blur" +msgstr "Difumina" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "Quadrets" + +#: src/magic.h:57 +msgid "Negative" +msgstr "Negatiu" + +#: src/magic.h:58 +msgid "Fade" +msgstr "Esvaeix" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "Guix" + +#: src/magic.h:61 +msgid "Drip" +msgstr "Goteja" + +#: src/magic.h:63 +msgid "Thick" +msgstr "Engruixa" + +#: src/magic.h:64 +msgid "Thin" +msgstr "Aprima" + +#: src/magic.h:66 +msgid "Fill" +msgstr "Emplena" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Podeu pintar amb els colors de l'arc de Sant Mart!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Feu clic i moveu per dibuixar guspires" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Feu clic per invertir la imatge horitzontalment!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Feu clic per invertir la imatge verticalment!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Feu clic i moveu el ratol per difuminar el dibuix" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Feu clic i move el ratol per fer-ne quadrets de la imatge" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Feu clic i moveu el ratol per fer un negatiu" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Feu clic i moveu per esvair els colors." + +#: src/magic.h:85 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Feu clic i moveu el ratol per convertir la imatge en un dibuix fet amb guix." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Feu clic i moveu el ratol per fer gotejar la imatge!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Feu clic i moveu el ratol per fer engruixir la imatge" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Feu clic i moveu el ratol per fer aprimar la imatge" + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Feu clic en la imatge per omplir de color una rea" + +#: src/great.h:20 +msgid "Great!" +msgstr "Excellent!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "Genial!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "Seguiu aix" + +#: src/great.h:23 +msgid "Good job!" +msgstr "Bona feina!" + +msgid "Happy" +msgstr "Feli" \ No newline at end of file diff --git a/src/messages/cs.po b/src/messages/cs.po new file mode 100644 index 000000000..4d4a09607 --- /dev/null +++ b/src/messages/cs.po @@ -0,0 +1,394 @@ +# Tux Paint czech messages. +# +msgid "" +msgstr "" +"POT-Creation-Date: 2002-09-26 00:00-0800\n" +"PO-Revision-Date: 2002-09-26 00:00-0800\n" +"Last-Translator: Peter Sterba \n" +"Language-Team: Czech\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Opravdu to chces ukoncit?" + +#: tuxpaint.c:369 tuxpaint.c:373 tuxpaint.c:377 tuxpaint.c:388 tuxpaint.c:4592 +msgid "Yes" +msgstr "Ano" + +#: tuxpaint.c:370 tuxpaint.c:374 tuxpaint.c:378 tuxpaint.c:389 +msgid "No" +msgstr "Ne" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Pokud skoncis, ztratis svuj obrazek! Chces ho ulozit?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Chces nejdriv ulozit svuj obrazek?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "S otevrenim noveho obrazku bude vymazan prave aktualni!" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "OK, Pokracuj" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Ne, zpet!" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Jsou zde neulozene soubory!" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "OK" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Vymazat tento obrazek?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Prepsat jiz drive vytvorenou verzi tohoto souboru?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "Ne, uloz jako novy soubor" + +#: colors.h:56 +msgid "Black" +msgstr "Cerna" + +#: colors.h:57 +msgid "White" +msgstr "Bila" + +#: colors.h:58 +msgid "Red" +msgstr "Cervena" + +#: colors.h:59 +msgid "Pink" +msgstr "Ruzova" + +#: colors.h:60 +msgid "Orange" +msgstr "Oranzova" + +#: colors.h:61 +msgid "Yellow" +msgstr "Zluta" + +#: colors.h:62 +msgid "Green" +msgstr "Zelena" + +#: colors.h:63 +msgid "Cyan" +msgstr "Cerveno-fialova" + +#: colors.h:64 +msgid "Blue" +msgstr "Modra" + +#: colors.h:65 +msgid "Purple" +msgstr "Fialova" + +#: colors.h:66 +msgid "Brown" +msgstr "Hneda" + +#: colors.h:67 +msgid "Grey" +msgstr "Seda" + +#: magic.h:46 +msgid "Mirror" +msgstr "Zrcadlo" + +#: magic.h:47 +msgid "Flip" +msgstr "Otocit naruby" + +#: magic.h:49 +msgid "Blur" +msgstr "Skvrna" + +#: magic.h:50 +msgid "Blocks" +msgstr "Kostka" + +#: magic.h:52 +msgid "Negative" +msgstr "Negativ" + +#: magic.h:53 +msgid "Fade" +msgstr "Vyblednout" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Duha" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Jiskry" + +#: magic.h:58 +msgid "Chalk" +msgstr "Krida" + +#: magic.h:59 +msgid "Drip" +msgstr "Kapka" + +#: magic.h:61 +msgid "Thick" +msgstr "Tucne" + +#: magic.h:62 +msgid "Thin" +msgstr "Tence" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Klikni pro ozrcadleni obrazku!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Klikni pro otoceni obrazku naruby shora-dolu!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Klikni a pohybuj mysi dokola pro rozmazani obrazku" + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Klikni a pohybuj mysi dokola pro vytvoreni kaskady" + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Klikni a pohybuj mysi dokola pro vykresleni negativu" + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Klikni a posun pro vyblednuti barev." + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Muzes kreslit v duhovych barvach!" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Klikni a pohybuj pro kresleni jisker" + +#: magic.h:81 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Klikni a pohybuj mysi pro pretvoreni obrazku do kridoveho vzhledu." + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Klikni a pohybuj mysi pro vytvoreni kapkoviteho obrazku." + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klikni a pohybuj mysi pro rozsireni obrazku." + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Klikni a pohybuj mysi pro zuzeni obrazku." + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Ctverec" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Obdelnik" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Kruh" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Trojuhelnik" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Petiuhelnik" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Krystal" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Ctverec ma ctyri strany, vsechny stejne delky." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Obdelnik ma ctyri strany" + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Kruh je presne kulaty." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Trojuhelnik ma tri strany." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Petiuhelnik ma pet stran" + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Krystal vznikne pootacenim ctverce kolem osy." + +#: tools.h:42 +msgid "Paint" +msgstr "Kreslit" + +#: tools.h:43 +msgid "Stamp" +msgstr "Narazit" + +#: tools.h:44 +msgid "Lines" +msgstr "Usecka" + +#: tools.h:45 +msgid "Shapes" +msgstr "Tvary" + +#: tools.h:46 +msgid "Text" +msgstr "Text" + +#: tools.h:47 +msgid "Magic" +msgstr "Magie" + +#: tools.h:48 +msgid "Undo" +msgstr "Zpet" + +#: tools.h:49 +msgid "Redo" +msgstr "Znovu" + +#: tools.h:50 +msgid "Eraser" +msgstr "Vymazani" + +#: tools.h:51 +msgid "New" +msgstr "Novy" + +#: tools.h:52 +msgid "Open" +msgstr "Otevri" + +#: tools.h:53 +msgid "Save" +msgstr "Uloz" + +#: tools.h:54 +msgid "Print" +msgstr "Tisk" + +#: tools.h:55 +msgid "Quit" +msgstr "Exit" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Vyber barvu a spray tvar pro pouziti." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Vyber obrazek pro podklad Tveho obrazku." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Klikni pro pocatek usecky, tahni mysi pro orientaci usecky a klikni pro ukonceni usecky." + +#: tools.h:65 +msgid "" +"Pick a shape to draw. Click once to pick the center of the shape, click " +"again to draw it." +msgstr "Vyber tvar pro pouziti. Klikni jednou pro vyber stredu tvaru, pudruhe klikni pro vlozeni tvaru." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Vyber styl textu. Klikni tam, kde chces psat, a muzes zadavat text." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Vyber magicky efekt pro pouziti." + +#: tools.h:68 +msgid "Undo!" +msgstr "Zpet!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Znovu!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Vymazat!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Mas ted prazdnou plochu pro kresleni!" + +#: tools.h:72 +msgid "Open..." +msgstr "Otevri..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Obrazek byl ulozen!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Tiskne se..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Ahoj ahoj!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Drz zmacknute tlacitko pro dokonceni usecky." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Drz tlacitko pro rozcleneni tvaru." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Posun mysi pro rotaci tvaru. Klikni pro jeho vykresleni." + +#: tools.h:81 +msgid "Great!" +msgstr "Vyborne!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Ok, nezapomen si ulozit tento obrazek!" + + diff --git a/src/messages/da.po b/src/messages/da.po new file mode 100644 index 000000000..558026b6f --- /dev/null +++ b/src/messages/da.po @@ -0,0 +1,438 @@ +# Tux Paint Danish messages +msgid "" +msgstr "" +"Project-Id-Version: TuxType\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2002-09-25 16:26+0100\n" +"Last-Translator: Rasmus Erik Voel Jensen \n" +"Language-Team: solsort \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:529 +msgid "Do you really want to quit?" +msgstr "Vil du afslutte nu?" + +#: src/tuxpaint.c:530 +#: src/tuxpaint.c:534 +#: src/tuxpaint.c:538 +#: src/tuxpaint.c:558 +#: src/tuxpaint.c:6514 +msgid "Yes" +msgstr "Ja" + +#: src/tuxpaint.c:531 +#: src/tuxpaint.c:535 +#: src/tuxpaint.c:539 +#: src/tuxpaint.c:559 +msgid "No" +msgstr "Nej" + +#: src/tuxpaint.c:533 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Du har ikke gemt billedet. Skal det gemmes før du afslutter?" + +#: src/tuxpaint.c:537 +msgid "Save your picture first?" +msgstr "Vil du gemme billedet først?" + +#: src/tuxpaint.c:541 +msgid "Can't open that picture!" +msgstr "Billedet kan ikke åbnes." + +#: src/tuxpaint.c:542 +#: src/tuxpaint.c:549 +#: src/tuxpaint.c:552 +#: src/tuxpaint.c:555 +#: src/tuxpaint.c:6848 +msgid "Okay" +msgstr "OK" + +#: src/tuxpaint.c:544 +msgid "Starting a new picture will erase the current one!" +msgstr "Når du begynder på et nyt billede forsvinder det gamle." + +#: src/tuxpaint.c:545 +msgid "That's Ok" +msgstr "Det er iorden." + +#: src/tuxpaint.c:546 +msgid "Never Mind!" +msgstr "Fortryd." + +#: src/tuxpaint.c:548 +msgid "There are no saved files!" +msgstr "Der er ikke nogle gemte billeder." + +#: src/tuxpaint.c:551 +msgid "Your picture has been printed!" +msgstr "Billedet er udskrevet." + +#: src/tuxpaint.c:554 +msgid "You can't print yet!" +msgstr "Du kan ikke skrive ud endnu." + +#: src/tuxpaint.c:557 +msgid "Erase this picture?" +msgstr "Skal billedet slettes?" + +#: src/tuxpaint.c:6513 +msgid "Save over the older version of this drawing?" +msgstr "Skal den gamle udgave af billedet overskrives?" + +#: src/tuxpaint.c:6515 +msgid "No, save a new file" +msgstr "Nej, gem istedet som et nyt billede." + +#: src/tuxpaint.c:7109 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Vælg et billede og tryk på \"Åbn\"." + +#: src/colors.h:56 +msgid "Black" +msgstr "Sort" + +#: src/colors.h:57 +msgid "White" +msgstr "Hvid" + +#: src/colors.h:58 +msgid "Red" +msgstr "Rød" + +#: src/colors.h:59 +msgid "Pink" +msgstr "Lyserød" + +#: src/colors.h:60 +msgid "Orange" +msgstr "Orange" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "Gul" + +#: src/colors.h:62 +msgid "Green" +msgstr "Grøn" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "Turkis" + +#: src/colors.h:64 +msgid "Blue" +msgstr "Blå" + +#: src/colors.h:65 +msgid "Purple" +msgstr "Violet" + +#: src/colors.h:66 +msgid "Brown" +msgstr "Brun" + +#: src/colors.h:67 +msgid "Grey" +msgstr "Grå" + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "Regnbue" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "Gnister" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "Spejl" + +#: src/magic.h:52 +msgid "Flip" +msgstr "Vend" + +#: src/magic.h:54 +msgid "Blur" +msgstr "Uskarp" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "Blok" + +#: src/magic.h:57 +msgid "Negative" +msgstr "Inverter" + +#: src/magic.h:58 +msgid "Fade" +msgstr "Bleg" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "Kridt" + +#: src/magic.h:61 +msgid "Drip" +msgstr "Dryp" + +#: src/magic.h:63 +msgid "Thick" +msgstr "Tyk" + +#: src/magic.h:64 +msgid "Thin" +msgstr "Tynd" + +#: src/magic.h:66 +msgid "Fill" +msgstr "Fyld" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Du kan tegne i alle regnbuens farver!'" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Tegn gnister." + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Du kan spejlvende billedet ved at klikke." + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Vend billedet ved at klikke." + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Gør billedet uskarpt med musen." + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Lav billedet mere grovkornet med musen." + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Du kan invertere billedet." + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Gør billedet blegere." + +#: src/magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Brug musen til at få tegningen til at ligne kridt." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Lad farverne løbe på billedet" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klik og flyt musen for at gøre billedet tykkere" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Klik og flyt musen for at gøre billedet tyndere." + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Fyld et ensfarvet område med en farve" + +#: src/shapes.h:121 +#: src/shapes.h:122 +msgid "Square" +msgstr "Kvadrat" + +#: src/shapes.h:123 +#: src/shapes.h:124 +msgid "Rectangle" +msgstr "Rektangel" + +#: src/shapes.h:125 +#: src/shapes.h:126 +msgid "Circle" +msgstr "Cirkel" + +#: src/shapes.h:127 +#: src/shapes.h:128 +#: src/shapes.h:147 +#: src/shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: src/shapes.h:129 +#: src/shapes.h:130 +msgid "Triangle" +msgstr "Trekant" + +#: src/shapes.h:131 +#: src/shapes.h:132 +msgid "Pentagon" +msgstr "Femkant" + +#: src/shapes.h:133 +#: src/shapes.h:134 +msgid "Diamond" +msgstr "Rhombe" + +#: src/shapes.h:141 +#: src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Et er et rektangel hvor alle sider er lige lange." + +#: src/shapes.h:143 +#: src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Et rektangel er en firkant hvor alle vinkler er 90 grader." + +#: src/shapes.h:145 +#: src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "Alle cirklens punkter er lige langt fra centrum." + +#: src/shapes.h:149 +#: src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "Denne trekant er ligebenet." + +#: src/shapes.h:151 +#: src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "En femkant har ... fem kanter :-)" + +#: src/shapes.h:153 +#: src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "En rhombe er en firkant hvor siderne har samme længde." + +#: src/tools.h:42 +msgid "Paint" +msgstr "Maling" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "Stempel" + +#: src/tools.h:44 +msgid "Lines" +msgstr "Linjer" + +#: src/tools.h:45 +msgid "Shapes" +msgstr "Figurer" + +#: src/tools.h:46 +msgid "Text" +msgstr "Tekst" + +#: src/tools.h:47 +msgid "Magic" +msgstr "Magi" + +#: src/tools.h:48 +msgid "Undo" +msgstr "Fortryd" + +#: src/tools.h:49 +msgid "Redo" +msgstr "Gentag" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "Viskelæder" + +#: src/tools.h:51 +msgid "New" +msgstr "Ny" + +#: src/tools.h:52 +msgid "Open" +msgstr "Åbn" + +#: src/tools.h:53 +msgid "Save" +msgstr "Gem" + +#: src/tools.h:54 +msgid "Print" +msgstr "Udskriv" + +#: src/tools.h:55 +msgid "Quit" +msgstr "Afslut" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Vælg farve og pensel." + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Hvilket billede vil du tegne med," + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Klik på tegningen og træk en linje." + +#: src/tools.h:65 +msgid "Pick a shape to draw. Click once to pick the center of the shape, click again to draw it." +msgstr "Vælg en figur, vælg centrum og derefter størrelse." + +#: src/tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Klik hvor på tegningen du vil skrive." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Vælg en af de sjove effekter." + +#: src/tools.h:68 +msgid "Undo!" +msgstr "Fortryd!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "Gentag!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "Viskelæder" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Du har nu et friskt papir." + +#: src/tools.h:72 +msgid "Open..." +msgstr "Åbn ..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "Billedet er gemt." + +#: src/tools.h:74 +msgid "Printing..." +msgstr "Skriver ud ..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "Farvel." + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Slip knappen for at fuldende linjen." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Hold knappen inde for at ændre figurens form." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Flyt på musen for at dreje figuren." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Ok, lad os så beholde denne tegning." + diff --git a/src/messages/de.po b/src/messages/de.po new file mode 100644 index 000000000..324d5c735 --- /dev/null +++ b/src/messages/de.po @@ -0,0 +1,475 @@ +# Tux Paint german messages. +# Copyright (C) 2002. +# Fabian Franz , 2002. +# +msgid "" +msgstr "" +"POT-Creation-Date: 2002-10-21 22:42+0200\n" +"PO-Revision-Date: 2002-10-21 22:48+0200\n" +"Last-Translator: Fabian Franz \n" +"Language-Team: Deutsch\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.6\n" + +#: tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "Möchtest du wirklich aufhören?" + +#: tuxpaint.c:568 tuxpaint.c:572 tuxpaint.c:576 tuxpaint.c:596 tuxpaint.c:6274 +#: tuxpaint.c:6915 +msgid "Yes" +msgstr "Ja" + +#: tuxpaint.c:569 tuxpaint.c:573 tuxpaint.c:577 tuxpaint.c:597 tuxpaint.c:6277 +msgid "No" +msgstr "Nein" + +#: tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "" +"Wenn du aufhörst, geht dein Bild verloren! Willst du es vorher noch " +"speichern?" + +#: tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "Willst du dein Bild, vor dem Öffnen eines anderen, speichern?" + +#: tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "Kann dieses Bild nicht öffnen!" + +#: tuxpaint.c:580 tuxpaint.c:587 tuxpaint.c:590 tuxpaint.c:593 tuxpaint.c:7249 +msgid "Okay" +msgstr "Ok" + +#: tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "Wenn du ein neues Bild öffnest, geht dein derzeitiges verloren!" + +#: tuxpaint.c:583 +msgid "That's Ok" +msgstr "Das ist OK!" + +#: tuxpaint.c:584 +msgid "Never Mind!" +msgstr "Lieber doch nicht!" + +#: tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "Es gibt noch keine gespeicherten Bilder!" + +#: tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "Dein Bild wurde gedruckt!" + +#: tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "Du kannst noch nicht drucken!" + +#: tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "Möchtest du dieses Bild löschen?" + +#: tools.h:52 tuxpaint.c:4061 +msgid "Open" +msgstr "Öffnen" + +#: tuxpaint.c:4071 +msgid "Erase" +msgstr "Löschen" + +#: tuxpaint.c:4081 +msgid "Back" +msgstr "Zurück" + +#: tuxpaint.c:6914 +msgid "Save over the older version of this drawing?" +msgstr "Soll die alte Version dieses Bildes überschrieben werden?" + +#: tuxpaint.c:6916 +msgid "No, save a new file" +msgstr "Nein, in eine neue Datei!" + +#: tuxpaint.c:7510 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Wähle ein Bild, dass du Öffnen willst und klick auf 'Öffnen'" + +#: colors.h:56 +msgid "Black" +msgstr "Schwarz" + +#: colors.h:57 +msgid "White" +msgstr "Weiß" + +#: colors.h:58 +msgid "Red" +msgstr "Rot" + +#: colors.h:59 +msgid "Pink" +msgstr "Hautfarben/Rosa" + +#: colors.h:60 +msgid "Orange" +msgstr "Orange" + +#: colors.h:61 +msgid "Yellow" +msgstr "Gelb" + +#: colors.h:62 +msgid "Green" +msgstr "Grün" + +#: colors.h:63 +msgid "Cyan" +msgstr "Türkis" + +#: colors.h:64 +msgid "Blue" +msgstr "Blau" + +#: colors.h:65 +msgid "Purple" +msgstr "Lila" + +#: colors.h:66 +msgid "Brown" +msgstr "Braun" + +#: colors.h:67 +msgid "Grey" +msgstr "Grau" + +#: great.h:20 +msgid "Great!" +msgstr "Super! Cool ;-)" + +#: great.h:21 +msgid "Cool!" +msgstr "Cool!" + +#: great.h:22 +msgid "Keep it up!" +msgstr "Mach weiter so!" + +#: great.h:23 +msgid "Good job!" +msgstr "Gute Arbeit!" + +#: magic.h:48 +msgid "Rainbow" +msgstr "Bunt" + +#: magic.h:49 +msgid "Sparkles" +msgstr "Sterne" + +#: magic.h:51 +msgid "Mirror" +msgstr "Spiegel" + +#: magic.h:52 +msgid "Flip" +msgstr "Flip" + +#: magic.h:54 +msgid "Blur" +msgstr "Unscharf" + +#: magic.h:55 +msgid "Blocks" +msgstr "Blöcke" + +#: magic.h:57 +msgid "Negative" +msgstr "Negativ" + +#: magic.h:58 +msgid "Fade" +msgstr "Heller" + +#: magic.h:60 +msgid "Chalk" +msgstr "Kreide" + +#: magic.h:61 +msgid "Drip" +msgstr "Schwamm" + +#: magic.h:63 +msgid "Thick" +msgstr "Dick" + +#: magic.h:64 +msgid "Thin" +msgstr "Dünn" + +#: magic.h:66 +msgid "Fill" +msgstr "Füllen" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Du kannst in Regenbogenfarben malen!" + +#: magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Klick und beweg die Maus um es funkeln zu lassen!" + +#: magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Klick um das Bild zu spiegeln!" + +#: magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Klick um das Bild auf den Kopf zu stellen!" + +#: magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Klick und beweg die Maus um das Bild unscharf zu machen!" + +#: magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Klick und beweg die Maus um das Bild pixelig zu machen!" + +#: magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Klick und beweg die Maus um ein Negativ zu erstellen!" + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Klick und beweg die Maus um die Farben auszublenden!" + +#: magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Klick und beweg die Maus um dein Bild in ein Kreidebild zu verwandeln!" + +#: magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Klick und beweg die Maus um das Bild verlaufen zu lassen!" + +#: magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klick und beweg die Maus um das Bild dicker zu machen!" + +#: magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Klick und beweg die Maus um das Bild dünner zu machen!" + +#: magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Klick auf dein Bild um einen Bereich mit Farbe auszufüllen" + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Quadrat" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Rechteck" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Kreis" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Ellipse" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Dreieck" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Fünfeck" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Raute" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Ein Quadrat hat vier Seiten, jede mit der gleichen Länge." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Eine Rechteck hat 4 Seiten." + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Ein Kreis ist exakt rund." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Ein Dreieck hat drei Seiten." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Ein Fünfeck hat fünf Seiten." + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Eine Raute ist ein Quadrat, welches seitlich gedreht ist." + +#: titles.h:37 +msgid "Tools" +msgstr "Werkzeuge" + +#: titles.h:38 +msgid "Colors" +msgstr "Farben" + +#: titles.h:39 +msgid "Brushes" +msgstr "Pinsel" + +#: titles.h:40 +msgid "Stamps" +msgstr "Stempel" + +#: titles.h:41 tools.h:45 +msgid "Shapes" +msgstr "Formen" + +#: titles.h:42 +msgid "Letters" +msgstr "Buchstaben" + +#: titles.h:43 tools.h:47 +msgid "Magic" +msgstr "Magie" + +#: tools.h:42 +msgid "Paint" +msgstr "Malen" + +#: tools.h:43 +msgid "Stamp" +msgstr "Stempel" + +#: tools.h:44 +msgid "Lines" +msgstr "Linie" + +#: tools.h:46 +msgid "Text" +msgstr "Text" + +#: tools.h:48 +msgid "Undo" +msgstr "Zurück" + +#: tools.h:49 +msgid "Redo" +msgstr "Nochmal" + +#: tools.h:50 +msgid "Eraser" +msgstr "Radierer" + +#: tools.h:51 +msgid "New" +msgstr "Neu" + +#: tools.h:53 +msgid "Save" +msgstr "Speichern" + +#: tools.h:54 +msgid "Print" +msgstr "Drucken" + +#: tools.h:55 +msgid "Quit" +msgstr "Beenden" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Wähl eine Farbe und eine Pinselform zum Malen." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Wähle ein Bild zum Stempeln." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Klicke und halte die Maustaste gedrückt um eine Linie zu malen." + +#: tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Wähle eine Form. Klick um die Mitte zu wählen, ziehe, dann lass los, wenn es " +"die Größe hat, die du willst. Beweg die Maus um es zu rotieren und klick um es " +"zu zeichnen." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"Wähle einen Schrifttyp. Klick auf deine Zeichnung und du kannst anfangen zu " +"schreiben." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Wähle einen magischen Effekt für dein Bild!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Rückgängig!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Wiederholen!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Radiergummi!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Du hast jetzt ein neues leeres Bild um darauf zu malen!" + +#: tools.h:72 +msgid "Open..." +msgstr "Öffnen..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Dein Bild wurde gespeichert!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Drucken..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Tschüß!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Lass die Maustaste los, wenn du mit der Linie zufrieden bist." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Halt die Maustaste gedrückt um die Form in der Größe zu verändern." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Bewege die Maus um die Form zu drehen. Klicke, wenn du zufrieden bist." + +#: tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Ok, dann lass uns weiter mit diesem malen!" + +#~ msgid "" +#~ "Pick a shape to draw. Click once to pick the center of the shape, click " +#~ "again to draw it." +#~ msgstr "" +#~ "Wähle eine Form zum Malen. Klicke und halte die Maustaste gedrückt um die " +#~ "Mitte der Form auszuwählen." + diff --git a/src/messages/el.po b/src/messages/el.po new file mode 100644 index 000000000..3dc72df37 --- /dev/null +++ b/src/messages/el.po @@ -0,0 +1,475 @@ +# Tux Paint messages +# Translation: greek (el) +# +# This file is distributed under the same license as the Tux Paint +# program. +# +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.9.2pre\n" +"POT-Creation-Date: 2003-01-04 12:00+0200\n" +"PO-Revision-Date: 2003-01-04 12:00+0200\n" +"Last-Translator: N/A \n" +"Language-Team: N/A \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "Σίγουρα θέλεις να βγεις από το πρόγραμμα;" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "Ναι" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "Όχι" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Αν βγεις από το πρόγραμμα, θα χαθεί η εικόνα σου! Να σωθεί;" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "Να σωθεί η εικόνα σου πρώτα;" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "Αδυναμία ανοίγματος αυτής της εικόνας!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "Εντάξει" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "Αρχίζοντας μια νέα εικόνα θα σβηστεί η παλιά!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "Είναι εντάξει" + +#: src/tuxpaint.c:584 +msgid "Never Mind!" +msgstr "Δεν πειράζει!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "Δεν υπάρχουν αποθηκευμένα αρχεία!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "Η εικόνα σου εκτυπώθηκε!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "Δεν μπορείς να τυπώσεις ακόμη!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "Σβήσιμο αυτής της εικόνας;" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "Άνοιγμα" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "Σβήσιμο" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "Προηγούμενο" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "Αποθήκευση στο ίδιο αρχείο με την παλαιότερη έκδοση αυτού του σχεδίου;" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "Όχι, αποθήκευση σε νέο αρχείο" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Επέλεξε την εικόνα που θέλεις, και μετά πάτησε 'Άνοιγμα'" + +#: src/tools.h:42 +msgid "Paint" +msgstr "Ζωγραφιά" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "Στάμπα" + +#: src/tools.h:44 +msgid "Lines" +msgstr "Γραμμές" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "Σχήματα" + +#: src/tools.h:46 +msgid "Text" +msgstr "Κείμενο" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "Μαγικά" + +#: src/tools.h:48 +msgid "Undo" +msgstr "Αναίρεση" + +#: src/tools.h:49 +msgid "Redo" +msgstr "Επανάληψη" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "Σβηστήρας" + +#: src/tools.h:51 +msgid "New" +msgstr "Νέο" + +#: src/tools.h:53 +msgid "Save" +msgstr "Φύλαξη" + +#: src/tools.h:54 +msgid "Print" +msgstr "Εκτύπωση" + +#: src/tools.h:55 +msgid "Quit" +msgstr "Έξοδος" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Επέλεξε χρώμα και μορφή πινέλου για να σχεδιάσεις." + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Επέλεξε μία εικόνα για να σταμπωθεί γύρω από το σχέδιό σου." + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "" +"Κάνε κλικ για να αρχίσεις τη σχεδίαση μίας γραμμής. Άφησε για να την " +"ολοκληρώσεις." + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Επέλεξε ένα σχήμα. Κάνε κλικ για επιλογή κέντρου, σύρε, και μετά άφησε " +"όταν έχει το μέγεθος που θέλεις. Κινήσου δεξιά-αριστερά για να το " +"περιστρέψεις, και ξανακάνε κλικ για να το σχεδιάσεις." + +#: src/tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"Επέλεξε ύφος κειμένου. Κάνε κλικ στο σχέδιό σου και άρχισε να γράφεις." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Διάλεξε ένα μαγικό εφφέ για να χρησιμοποιήσεις στο σχέδιό σου!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "Αναίρεση!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "Επανάληψη!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "Σβηστήρας!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Τώρα έχεις ένα λευκό φύλλο για να σχεδιάσεις!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "Άνοιγμα..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "Η εικόνα σου αποθηκεύθηκε!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "Εκτύπωση..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "Γειά χαρά!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Άφησε το πλήκτρο για να ολοκληρωθεί η γραμμή." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Κράτησε πατημένο το πλήκτρο για να τεντώσεις το σχήμα." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Κίνησε το ποντίκι για να περιστραφεί το σχήμα. Κάνε κλικ για να σχεδιαστεί." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Εντάξει λοιπόν... Ας συνεχίσουμε τη σχεδίαση του ίδιου!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "Εργαλεία" + +#: src/titles.h:38 +msgid "Colors" +msgstr "Χρώματα" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "Πινέλα" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "Στάμπες" + +#: src/titles.h:42 +msgid "Letters" +msgstr "Γράμματα" + +#: src/colors.h:56 +msgid "Black" +msgstr "Μαύρο" + +#: src/colors.h:57 +msgid "White" +msgstr "Άσπρο" + +#: src/colors.h:58 +msgid "Red" +msgstr "Κόκκινο" + +#: src/colors.h:59 +msgid "Pink" +msgstr "Ροζ" + +#: src/colors.h:60 +msgid "Orange" +msgstr "Πορτοκαλί" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "Κίτρινο" + +#: src/colors.h:62 +msgid "Green" +msgstr "Πράσινο" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "Γαλάζιο" + +#: src/colors.h:64 +msgid "Blue" +msgstr "Μπλε" + +#: src/colors.h:65 +msgid "Purple" +msgstr "Μωβ" + +#: src/colors.h:66 +msgid "Brown" +msgstr "Καφέ" + +#: src/colors.h:67 +msgid "Grey" +msgstr "Γκρι" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "Τετράγωνο" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "Ορθογώνιο" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "Κύκλος" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "Οβάλ" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "Τρίγωνο" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "Πεντάγωνο" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "Ρόμβος" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Το τετράγωνο έχει τέσσερις πλευερές, με το ίδιο μήκος." + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Το ορθογώνιο έχει τέσσερις πλευρές." + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "Ο κύκλος είναι ακριβώς στρογγυλός." + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "Το τρίγωνο έχει τρεις πλευρές." + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Το πεντάγωνο έχει πέντε πλευρές." + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Ο ρόμβος είναι ένα τετράγωνο, ελαφρώς στριμμένο πλάγια." + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "Ουράνιο Τόξο" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "Λάμψεις" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "Καθρέπτης" + +#: src/magic.h:52 +msgid "Flip" +msgstr "Άνω-Κάτω" + +#: src/magic.h:54 +msgid "Blur" +msgstr "Θάμπωμα" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "Κομματάκια" + +#: src/magic.h:57 +msgid "Negative" +msgstr "Αρνητικό" + +#: src/magic.h:58 +msgid "Fade" +msgstr "Ξεθώριασμα" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "Κιμωλία" + +#: src/magic.h:61 +msgid "Drip" +msgstr "Στάζει" + +#: src/magic.h:63 +msgid "Thick" +msgstr "Παχύ" + +#: src/magic.h:64 +msgid "Thin" +msgstr "Λεπτό" + +#: src/magic.h:66 +msgid "Fill" +msgstr "Γέμισμα" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Μπορείς να ζωγραφίσεις με τα χρώματα του ουράνιου τόξου!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Κάνε κλικ και κινήσου για να ζωγραφίσεις λάμψεις" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Κάνε κλικ για να φτιάξεις μια εικόνα-είδωλο!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Κάνε κλικ για να γυρίσεις την εικόνα άνω-κάτω!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να θαμπώσεις την εικόνα" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να κάνεις την εικόνα κομματάκια" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να σχεδιάσεις το αρνητικό" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Κάνε κλικ και κινήσου για να ξεθωριάσεις τα χρώματα." + +#: src/magic.h:85 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "" +"Κάνε κλικ και κίνησε το ποντίκι για να μετατρέψεις την εικόνα σε " +"σχέδιο με κιμωλία." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να κάνεις την εικόνα να στάζει!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να παχύνεις την εικόνα" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να λεπτύνεις την εικόνα" + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Κάνε κλικ και κίνησε το ποντίκι για να γεμίσεις την περιοχή με χρώμα" + +#: src/great.h:20 +msgid "Great!" +msgstr "Μπράβο!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "Ωραία!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "Καλά πας, συνέχισε!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "Συγχαρητήρια!" diff --git a/src/messages/en_gb.po b/src/messages/en_gb.po new file mode 100644 index 000000000..4fd9da89a --- /dev/null +++ b/src/messages/en_gb.po @@ -0,0 +1,32 @@ +# Tux Paint British English messages +# Copyright (C) 2002 +# Bill Kendrick , 2002. +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-10-20 21:54-0800\n" +"PO-Revision-Date: 2002-10-20 21:54-0800\n" +"Last-Translator: Bill Kendrick \n" +"Language-Team: N/A \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "You can draw in rainbow colours!" + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Click and move to fade the colours." + +#: magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Click in the picture to fill that area with colour" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Pick a colour and a brush shape to draw with." + +msgid "Colors" +msgstr "Colours" diff --git a/src/messages/es.po b/src/messages/es.po new file mode 100644 index 000000000..31e243d30 --- /dev/null +++ b/src/messages/es.po @@ -0,0 +1,489 @@ +# Tux Paint spanish messages +# Copyright (C) 2002 +# Gabriel Gazzan , 2002. +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.9.2\n" +"POT-Creation-Date: 2002-10-21 22:42+0200\n" +"PO-Revision-Date: 2002-12-28 14:29--300\n" +"Last-Translator: Gabriel Gazzán \n" +"Language-Team: Español \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "¿Realmente quieres salir?" + +#: tuxpaint.c:568 +#: tuxpaint.c:572 +#: tuxpaint.c:576 +#: tuxpaint.c:596 +#: tuxpaint.c:6274 +#: tuxpaint.c:6915 +msgid "Yes" +msgstr "Sí" + +#: tuxpaint.c:569 +#: tuxpaint.c:573 +#: tuxpaint.c:577 +#: tuxpaint.c:597 +#: tuxpaint.c:6277 +msgid "No" +msgstr "No" + +#: tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "¡Si te vas perderás tu imagen! ¿Quieres guardarla?" + +#: tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "¿Guardarás tu imagen antes?" + +#: tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "¡No se puede abrir esa imagen!" + +#: tuxpaint.c:580 +#: tuxpaint.c:587 +#: tuxpaint.c:590 +#: tuxpaint.c:593 +#: tuxpaint.c:7249 +msgid "Okay" +msgstr "Aceptar" + +#: tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "¡Comenzar una nueva imagen borrará la actual!" + +#: tuxpaint.c:583 +msgid "That's Ok" +msgstr "Está bien" + +#: tuxpaint.c:584 +msgid "Never Mind!" +msgstr "¡Ni loco!" + +#: tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "¡No hay archivos guardados!" + +#: tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "¡Tu imagen ha sido impresa!" + +#: tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "¡No puedes imprimir aún!" + +#: tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "¿Borrar esta imagen?" + +#: tools.h:52 +#: tuxpaint.c:4061 +msgid "Open" +msgstr "Abrir" + +#: tuxpaint.c:4071 +msgid "Erase" +msgstr "Borrar" + +#: tuxpaint.c:4081 +msgid "Back" +msgstr "Atrás" + +#: tuxpaint.c:6914 +msgid "Save over the older version of this drawing?" +msgstr "¿Guardar sobre la versión anterior de este dibujo?" + +#: tuxpaint.c:6916 +msgid "No, save a new file" +msgstr "No, guardar un nuevo archivo" + +#: tuxpaint.c:7510 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Escoge la imagen que quieras, luego haz clic en 'Abrir'" + +#: colors.h:56 +msgid "Black" +msgstr "Negro" + +#: colors.h:57 +msgid "White" +msgstr "Blanco" + +#: colors.h:58 +msgid "Red" +msgstr "Rojo" + +#: colors.h:59 +msgid "Pink" +msgstr "Rosado" + +#: colors.h:60 +msgid "Orange" +msgstr "Naranja" + +#: colors.h:61 +msgid "Yellow" +msgstr "Amarillo" + +#: colors.h:62 +msgid "Green" +msgstr "Verde" + +#: colors.h:63 +msgid "Cyan" +msgstr "Cián" + +#: colors.h:64 +msgid "Blue" +msgstr "Azul" + +#: colors.h:65 +msgid "Purple" +msgstr "Púrpura" + +#: colors.h:66 +msgid "Brown" +msgstr "Marrón" + +#: colors.h:67 +msgid "Grey" +msgstr "Gris" + +#: great.h:20 +msgid "Great!" +msgstr "¡Excelente!" + +#: great.h:21 +msgid "Cool!" +msgstr "¡Genial!" + +#: great.h:22 +msgid "Keep it up!" +msgstr "¡Sigue así!" + +#: great.h:23 +msgid "Good job!" +msgstr "¡Buen trabajo!" + +#: magic.h:48 +msgid "Rainbow" +msgstr "Arcoiris" + +#: magic.h:49 +msgid "Sparkles" +msgstr "Chispas" + +#: magic.h:51 +msgid "Mirror" +msgstr "Espejar" + +#: magic.h:52 +msgid "Flip" +msgstr "Invertir" + +#: magic.h:54 +msgid "Blur" +msgstr "Desenfocar" + +#: magic.h:55 +msgid "Blocks" +msgstr "Bloques" + +#: magic.h:57 +msgid "Negative" +msgstr "Negativo" + +#: magic.h:58 +msgid "Fade" +msgstr "Desvanecer" + +#: magic.h:60 +msgid "Chalk" +msgstr "Tiza" + +#: magic.h:61 +msgid "Drip" +msgstr "Gotear" + +#: magic.h:63 +msgid "Thick" +msgstr "Grueso" + +#: magic.h:64 +msgid "Thin" +msgstr "Fino" + +#: magic.h:66 +msgid "Fill" +msgstr "Rellenar" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "¡Puedes dibujar con los colores del arcoiris!" + +#: magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Haz clic y arrastra el ratón para dibujar chispas." + +#: magic.h:76 +msgid "Click to make a mirror image!" +msgstr "¡Haz clic para hacer una imagen a espejo!" + +#: magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "¡Haz clic para poner la imagen de cabeza!" + +#: magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Haz clic y arrastra el ratón para desenfocar la imagen." + +#: magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Haz clic y arrastra el ratón para cuadricular la imagen." + +#: magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Haz clic y arrastra el ratón para dibujar en negativo." + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Haz clic y arrastra el ratón para desvanecer los colores." + +#: magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Haz clic y arrastra el ratón para que la imagen parezca hecha con tiza." + +#: magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "¡Haz clic y arrastra el ratón para que la imagen gotee!" + +#: magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Haz clic y arrastra el ratón para engrosar el dibujo" + +#: magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Haz clic y arrastra el ratón para afinar el dibujo" + +#: magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Haz clic en la imagen para rellenar un área con color" + +#: shapes.h:121 +#: shapes.h:122 +msgid "Square" +msgstr "Cuadrado" + +#: shapes.h:123 +#: shapes.h:124 +msgid "Rectangle" +msgstr "Rectángulo" + +#: shapes.h:125 +#: shapes.h:126 +msgid "Circle" +msgstr "Círculo" + +#: shapes.h:127 +#: shapes.h:128 +#: shapes.h:147 +#: shapes.h:148 +msgid "Oval" +msgstr "Ovalo" + +#: shapes.h:129 +#: shapes.h:130 +msgid "Triangle" +msgstr "Triángulo" + +#: shapes.h:131 +#: shapes.h:132 +msgid "Pentagon" +msgstr "Pentágono" + +#: shapes.h:133 +#: shapes.h:134 +msgid "Diamond" +msgstr "Rombo" + +#: shapes.h:141 +#: shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Un cuadrado tiene cuatro lados, cada uno del mismo largo." + +#: shapes.h:143 +#: shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Un rectángulo tiene cuatro lados." + +#: shapes.h:145 +#: shapes.h:146 +msgid "A circle is exactly round." +msgstr "Un círculo es completamente redondo." + +#: shapes.h:149 +#: shapes.h:150 +msgid "A triangle has three sides." +msgstr "Un triángulo tiene tres lados." + +#: shapes.h:151 +#: shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Un pentágono tiene cinco lados." + +#: shapes.h:153 +#: shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Un rombo es un cuadrado un poco deformado." + +#: titles.h:37 +msgid "Tools" +msgstr "Herramientas" + +#: titles.h:38 +msgid "Colors" +msgstr "Colores" + +#: titles.h:39 +msgid "Brushes" +msgstr "Pinceles" + +#: titles.h:40 +msgid "Stamps" +msgstr "Sellos" + +#: titles.h:41 +#: tools.h:45 +msgid "Shapes" +msgstr "Figuras" + +#: titles.h:42 +msgid "Letters" +msgstr "Letras" + +#: titles.h:43 +#: tools.h:47 +msgid "Magic" +msgstr "Mágicas" + +#: tools.h:42 +msgid "Paint" +msgstr "Pintar" + +#: tools.h:43 +msgid "Stamp" +msgstr "Sellos" + +#: tools.h:44 +msgid "Lines" +msgstr "Líneas" + +#: tools.h:46 +msgid "Text" +msgstr "Texto" + +#: tools.h:48 +msgid "Undo" +msgstr "Deshacer" + +#: tools.h:49 +msgid "Redo" +msgstr "Rehacer" + +#: tools.h:50 +msgid "Eraser" +msgstr "Goma" + +#: tools.h:51 +msgid "New" +msgstr "Nuevo" + +#: tools.h:53 +msgid "Save" +msgstr "Guardar" + +#: tools.h:54 +msgid "Print" +msgstr "Imprimir" + +#: tools.h:55 +msgid "Quit" +msgstr "Salir" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Escoge un color y la forma del pincel con el cual dibujar." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Escoge un sello para estampar en tu dibujo." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Haz clic para comenzar a dibujar una línea. Suelta el botón para terminarla." + +#: tools.h:65 +msgid "Pick a shape. Click to pick the center, drag, then let go when it is the size you want. Move around to rotate it, and click to draw it." +msgstr "Escoge una figura. Haz clic para marcar el centro, arrastra, luego suelta cuando esté del tamaño deseado. Mueve alrededor para rotarla, haz clic para dibujarla." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Elige un estilo de texto. Haz clic en tu dibujo y comienza a escribir." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "¡Escoge un efecto mágico para utilizar en tu dibujo!" + +#: tools.h:68 +msgid "Undo!" +msgstr "¡Deshacer!" + +#: tools.h:69 +msgid "Redo!" +msgstr "¡Rehacer!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "¡Goma de Borrar!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "¡Ahora tienes una hoja en blanco para dibujar!" + +#: tools.h:72 +msgid "Open..." +msgstr "Abrir..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "¡Tu imagen ha sido guardada!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Imprimiendo..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "¡Hasta luego!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Suelta el botón para terminar la línea." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Mantén el botón para estirar la figura." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Mueve el ratón para rotar la figura. Haz clic para dibujarla." + +#: tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Bien... ¡Sigamos dibujando en esta!" + diff --git a/src/messages/fi.po b/src/messages/fi.po new file mode 100644 index 000000000..239b10cf4 --- /dev/null +++ b/src/messages/fi.po @@ -0,0 +1,450 @@ +# Tux Paint messages in Finnish +# Copyright (C) 2002 +# Tarmo Toikkanen +# +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-09-30 19:26+0200\n" +"PO-Revision-Date: 2002-10-01 11:57+0300\n" +"Last-Translator: Tarmo Toikkanen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:561 +msgid "Do you really want to quit?" +msgstr "Haluatko varmasti lopettaa?" + +#: tuxpaint.c:562 tuxpaint.c:566 tuxpaint.c:570 tuxpaint.c:590 tuxpaint.c:6224 +#: tuxpaint.c:6854 +msgid "Yes" +msgstr "Kyllä" + +#: tuxpaint.c:563 tuxpaint.c:567 tuxpaint.c:571 tuxpaint.c:591 tuxpaint.c:6227 +msgid "No" +msgstr "Ei" + +#: tuxpaint.c:565 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Menetät kuvan jos lopetat. Tallennetaanko se?" + +#: tuxpaint.c:569 +msgid "Save your picture first?" +msgstr "Tallennetaanko kuvasi ensin?" + +#: tuxpaint.c:573 +msgid "Can't open that picture!" +msgstr "Kuvan avaaminen ei onnistu!" + +#: tuxpaint.c:574 tuxpaint.c:581 tuxpaint.c:584 tuxpaint.c:587 tuxpaint.c:7188 +msgid "Okay" +msgstr "Selvä" + +#: tuxpaint.c:576 +msgid "Starting a new picture will erase the current one!" +msgstr "Uuden kuvan aloittaminen pyyhkii nykyisen pois!" + +#: tuxpaint.c:577 +msgid "That's Ok" +msgstr "Se sopii" + +#: tuxpaint.c:578 +msgid "Never Mind!" +msgstr "Ei sitten!" + +#: tuxpaint.c:580 +msgid "There are no saved files!" +msgstr "Ei löytynyt yhtään tallennettuja kuvia!" + +#: tuxpaint.c:583 +msgid "Your picture has been printed!" +msgstr "Kuvasi on tulostettu!" + +#: tuxpaint.c:586 +msgid "You can't print yet!" +msgstr "Et voi vielä tulostaa!" + +#: tuxpaint.c:589 +msgid "Erase this picture?" +msgstr "Pyyhitäänkö tämä kuva?" + +#: tools.h:52 tuxpaint.c:4006 +msgid "Open" +msgstr "Avaa" + +#: tuxpaint.c:4016 +msgid "Erase" +msgstr "Pyyhi" + +#: tuxpaint.c:4026 +msgid "Back" +msgstr "Takaisin" + +#: tuxpaint.c:6853 +msgid "Save over the older version of this drawing?" +msgstr "Tämän niminen kuva on jo olemassa. Tallennetaanko sen päälle?" + +#: tuxpaint.c:6855 +msgid "No, save a new file" +msgstr "Ei, tallennetaan uuteen tiedostoon" + +#: tuxpaint.c:7449 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Valitse haluamasi kuva ja valitse 'Avaa'" + +#: colors.h:56 +msgid "Black" +msgstr "Musta" + +#: colors.h:57 +msgid "White" +msgstr "Valkoinen" + +#: colors.h:58 +msgid "Red" +msgstr "Punainen" + +#: colors.h:59 +msgid "Pink" +msgstr "Vaaleanpunainen" + +#: colors.h:60 +msgid "Orange" +msgstr "Oranssi" + +#: colors.h:61 +msgid "Yellow" +msgstr "Keltainen" + +#: colors.h:62 +msgid "Green" +msgstr "Vihreä" + +#: colors.h:63 +msgid "Cyan" +msgstr "Turkoosi" + +#: colors.h:64 +msgid "Blue" +msgstr "Sininen" + +#: colors.h:65 +msgid "Purple" +msgstr "Violetti" + +#: colors.h:66 +msgid "Brown" +msgstr "Ruskea" + +#: colors.h:67 +msgid "Grey" +msgstr "Harmaa" + +#: great.h:20 +msgid "Great!" +msgstr "Hienoa!" + +#: great.h:21 +msgid "Cool!" +msgstr "Hienoa!" + +#: great.h:22 +msgid "Keep it up!" +msgstr "Jatka samaan tapaan!" + +#: great.h:23 +msgid "Good job!" +msgstr "Hyvin tehty!" + +#: magic.h:48 +msgid "Rainbow" +msgstr "Sateenkaari" + +#: magic.h:49 +msgid "Sparkles" +msgstr "Kipinät" + +#: magic.h:51 +msgid "Mirror" +msgstr "Peilikuva" + +#: magic.h:52 +msgid "Flip" +msgstr "Käännä" + +#: magic.h:54 +msgid "Blur" +msgstr "Sumenna" + +#: magic.h:55 +msgid "Blocks" +msgstr "Rakeista" + +#: magic.h:57 +msgid "Negative" +msgstr "Vastaväri" + +#: magic.h:58 +msgid "Fade" +msgstr "Haalista" + +#: magic.h:60 +msgid "Chalk" +msgstr "Hiilipiirros" + +#: magic.h:61 +msgid "Drip" +msgstr "Valuta" + +#: magic.h:63 +msgid "Thick" +msgstr "Paksu" + +#: magic.h:64 +msgid "Thin" +msgstr "Ohut" + +#: magic.h:66 +msgid "Fill" +msgstr "Täytä" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Voit piirtää sateenkaaren väreissä!" + +#: magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Piirrä kipinöitä liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Tee kuvasta peilikuva napsauttamalla hiirtä!" + +#: magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Käännä kuva ylösalaisin napsauttamalla hiirtä!" + +#: magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Voit sumentaa kuvaa liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Voit rakeistaa kuvaa liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Vaihda värit vastakkaisiksi liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Haalista värejä liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:85 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Muuta kuva hiilipiirrokseksi liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Valuta kuvaa liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Voit sumentaa kuvaa liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Voit sumentaa kuvaa liikuttamalla hiirtä nappi pohjassa." + +#: magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Napsauta kuvasta aluetta, jonka haluat värittää" + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Neliö" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Nelikulmio" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Ympyrä" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Soikio" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Kolmio" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Viisikulmio" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Vinoneliö" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Neliössä on neljä sivua, jotka kaikki ovat saman pituisia." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Suorakaiteessa on neljä sivua." + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Ympyrä on täysin pyöreä." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Kolmiossa on kolme sivua." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Viisikulmiossa on viisi sivua." + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Vinoneliö on neliö, joka on käännetty vinoon." + +#: tools.h:42 +msgid "Paint" +msgstr "Maalaa" + +#: tools.h:43 +msgid "Stamp" +msgstr "Leimaa" + +#: tools.h:44 +msgid "Lines" +msgstr "Viivat" + +#: tools.h:45 +msgid "Shapes" +msgstr "Muodot" + +#: tools.h:46 +msgid "Text" +msgstr "Teksti" + +#: tools.h:47 +msgid "Magic" +msgstr "Taiat" + +#: tools.h:48 +msgid "Undo" +msgstr "Peru" + +#: tools.h:49 +msgid "Redo" +msgstr "Palauta" + +#: tools.h:50 +msgid "Eraser" +msgstr "Pyyhekumi" + +#: tools.h:51 +msgid "New" +msgstr "Uusi" + +#: tools.h:53 +msgid "Save" +msgstr "Tallenna" + +#: tools.h:54 +msgid "Print" +msgstr "Tulosta" + +#: tools.h:55 +msgid "Quit" +msgstr "Poistu" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Valitse väri ja siveltimen muoto, joilla haluat piirtää." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Valitse kuva, jonka haluat leimata piirustukseesi." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "" +"Paina hiiren nappi alas aloittaaksesi viivan piirto ja päästä irti " +"lopettaaksesi." + +#: tools.h:65 +msgid "" +"Pick a shape to draw. Click once to pick the center of the shape, click " +"again to draw it." +msgstr "" +"Valitse piirrettävä kuvio. Valitse keskikohta napsauttamalla ja piirrä " +"kuvio napsauttamalla uudelleen." + +#: tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"Valitse tekstityyli. Napsauta piirrokseesi, niin voit aloittaa " +"kirjoittamisen." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Valitse taikaefekti, jota haluat käyttää piirrokseesi!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Peru!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Palauta!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Pyyhekumi!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Sinulla on nyt tyhjä piirtoalue!" + +#: tools.h:72 +msgid "Open..." +msgstr "Avaa... " + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Kuvasi on tallennettu!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Tulostetaan..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Hei hei!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Piirrä viiva päästämällä napista irti." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Pidä nappia pohjassa venyttääksesi kuviota." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Pyöritä kuviota liikuttamalla hiirtä. Piirrä napsauttamalla." + +#: tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Hyvä on... Jatketaan tämän piirtämistä!" + diff --git a/src/messages/fr.po b/src/messages/fr.po new file mode 100644 index 000000000..b1000b512 --- /dev/null +++ b/src/messages/fr.po @@ -0,0 +1,386 @@ +# Tux Paint french messages. +# Copyright (C) 2002. +# Jacques Chion , +# Charles Vidal , 2002. +#: shapes.h:129 +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-07-26 12:34+0200\n" +"PO-Revision-Date: 2003-01-09 19:17+0100\n" +"Last-Translator: root \n" +"Language-Team: français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.6\n" + +#: tuxpaint.c:413 +msgid "Do you really want to quit?" +msgstr "Veux-tu vraiment quitter?" + +#: tuxpaint.c:414 tuxpaint.c:418 tuxpaint.c:422 tuxpaint.c:433 tuxpaint.c:4316 +msgid "Yes" +msgstr "Oui" + +#: tuxpaint.c:415 tuxpaint.c:419 tuxpaint.c:423 tuxpaint.c:434 +msgid "No" +msgstr "Non" + +#: tuxpaint.c:417 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Si tu quittes, tu perdras ton image! Tu sauvegardes?" + +#: tuxpaint.c:421 +msgid "Save your picture first?" +msgstr "D'abord sauvegarder l'image?" + +#: tuxpaint.c:425 +msgid "Starting a new picture will erase the current one!" +msgstr "Commencer une nouvelle image effacera la précédente!" + +#: tuxpaint.c:426 +msgid "That's Ok" +msgstr "C'est d'accord!" + +#: tuxpaint.c:427 +msgid "Never Mind!" +msgstr "On ne fait rien!" + +#: tuxpaint.c:429 +msgid "There are no saved files!" +msgstr "Il n'y a pas de fichiers sauvegardés!" + +#: tuxpaint.c:430 +msgid "Okay" +msgstr "D'accord" + +#: tuxpaint.c:432 +msgid "Erase this picture?" +msgstr "Effacer cette image?" + +#: tuxpaint.c:4315 +msgid "Save over the older version of this drawing?" +msgstr "Écraser l'ancienne version de ce dessin?" + +#: tuxpaint.c:4317 +msgid "No, save a new file" +msgstr "Non, sauvegarder sous un autre nom" + +#: colors.h:115 +msgid "Black" +msgstr "Noir" + +#: colors.h:116 +msgid "White" +msgstr "Blanc" + +#: colors.h:117 +msgid "Red" +msgstr "Rouge" + +#: colors.h:118 +msgid "Pink" +msgstr "Rose" + +#: colors.h:119 +msgid "Orange" +msgstr "Orange" + +#: colors.h:120 +msgid "Yellow" +msgstr "Jaune" + +#: colors.h:121 +msgid "Green" +msgstr "Vert" + +#: colors.h:122 +msgid "Cyan" +msgstr "Cyan" + +#: colors.h:123 +msgid "Blue" +msgstr "Bleu" + +#: colors.h:124 +msgid "Purple" +msgstr "Pourpre" + +#: colors.h:125 +msgid "Brown" +msgstr "Marron" + +#: colors.h:126 +msgid "Grey" +msgstr "Gris" + +#: magic.h:41 +msgid "Click to make a mirror image!" +msgstr "Clique pour voir l'image dans un miroir!" + +#: magic.h:42 +msgid "Click to flip the picture upside-down!" +msgstr "Clique pour faire basculer l'image de haut en bas!" + +#: magic.h:43 +msgid "Click and move the mouse around to blur the picture" +msgstr "Clique et déplaces la souris pour rendre l'image floue" + +#: magic.h:45 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Clique et déplace la souris pour transformer l'image en petits blocs" + +#: magic.h:46 +msgid "Click and move the mouse around to draw a negative" +msgstr "Clique et déplace la souris pour rendre l'image négative" + +#: magic.h:47 +msgid "You can draw in rainbow colors!" +msgstr "Tu peux dessiner avec les couleurs de l'arc-en-ciel!" + +#: magic.h:48 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Clique et déplace la souris pour transformer l'image en dessin à la craie." + +#: magic.h:49 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Clique et déplace la souris pour rendre l'image dégoulinante!" + +#: magic.h:50 +msgid "Click and move to draw sparkles" +msgstr "Clique et déplace la souris pour dessiner avec des étincelles" + +#: magic.h:51 +msgid "Click and move to fade the colors." +msgstr "Clique et déplace la souris pour faire pâlir les couleurs." + +#: shapes.h:123 +msgid "A square has four sides, each the same length." +msgstr "Un carré a quatre côtés de mêmes longueurs." + +#: shapes.h:125 +msgid "A rectangle has four sides." +msgstr "Un rectangle a quatre côtés." + +#: shapes.h:127 +msgid "A circle is exactly round." +msgstr "Un cercle est un beau rond." + +#: shapes.h:131 +msgid "A triangle has three sides." +msgstr "Un triangle a trois côtés." + +#: shapes.h:133 +msgid "A pentagon has five sides." +msgstr "Un pentagone a cinq côtés." + +#: shapes.h:135 +msgid "A diamond is a square, turned around slightly." +msgstr "Un losange est un carré, légèrement déformé." + +#: tools.h:131 +msgid "Pick a color and a brush shape to draw with." +msgstr "Choisis une couleur et un pochoir pour dessiner" + +#: tools.h:132 +msgid "Pick a picture to stamp around your drawing." +msgstr "Choisis une image pour l'insérer dans ton dessin." + +#: tools.h:133 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Clique pour commencer à dessiner une ligne." + +#: tools.h:134 +msgid "Pick a shape. Click to pick the center, drag, then let go when it is the size you want. Move around to rotate it, and click to draw it." +msgstr "Choisis une forme. Clique dessus, choisis sa place et sa taille tout en appuyant, fais-la tourner, et clique enfin pour la dessiner." + +#: tools.h:135 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Choisis un style de texte. Clique sur ton dessin et commence à taper ton texte." + +#: tools.h:136 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Choisis un effet magique pour modifier ton dessin!" + +#: tools.h:137 +msgid "Undo!" +msgstr "Annuler!" + +#: tools.h:138 +msgid "Redo!" +msgstr "Refaire!" + +#: tools.h:139 +msgid "Eraser!" +msgstr "Effacer!" + +#: tools.h:140 +msgid "You now have a blank sheet to draw on!" +msgstr "Tu as maintenant une feuille blanche pour dessiner!" + +#: tools.h:141 +msgid "Open..." +msgstr "Ouvrir..." + +#: tools.h:142 +msgid "Your image has been saved!" +msgstr "Ton image est sauvegardée!" + +#: tools.h:143 +msgid "Printing..." +msgstr "Impression..." + +#: tools.h:144 +msgid "Bye, Bye" +msgstr "AU REVOIR!" + +#: tools.h:147 +msgid "Let go of the button to complete the line." +msgstr "Maintiens le bouton pour compléter la ligne." + +#: tools.h:148 +msgid "Hold the button to stretch the shape." +msgstr "Maintiens le bouton pour étirer." + +#: tools.h:149 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Bouge la souris pour faire tourner. Cliques pour la dessiner." + +#: tools.h:150 +msgid "Great!" +msgstr "Bravo!" + +msgid "Cool!" +msgstr "Super!" + +msgid "Keep it up!" +msgstr "Courage!" + +msgid "Good job!" +msgstr "Bon travail!" + +msgid "Choose the picture you want, then click 'Open'" +msgstr "Choisis une image, et cliques ensuite sur 'Ouvrir'" + +#: tools.h:151 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Bien! alors continuons à dessiner!" + +#: shapes.h:122 +msgid "Square" +msgstr "Carré" + +#: shapes.h:126 +msgid "Circle" +msgstr "Cercle" + +#: shapes.h:128 +msgid "Oval" +msgstr "Ovale" + +#: shapes.h:132 +msgid "Pentagon" +msgstr "Pentagone" + +#: shapes.h:134 +msgid "Diamond" +msgstr "Losange" + +#: magic.h +msgid "Mirror" +msgstr "Miroir" + +msgid "Flip" +msgstr "Renverser" + +msgid "Blur" +msgstr "Brouiller" + +msgid "Blocks" +msgstr "Blocs" + +msgid "Negative" +msgstr "Négatif" + +msgid "Fade" +msgstr "Affadir" + +msgid "Rainbow" +msgstr "Arc-en-ciel" + +msgid "Sparkles" +msgstr "Etincelles" + +msgid "Chalk" +msgstr "Craie" + +msgid "Drip" +msgstr "Goutte" + +msgid "Thick" +msgstr "Epaissir" + +msgid "Thin" +msgstr "Amincir" + +#: tools.h +msgid "Paint" +msgstr "Peindre" + +msgid "Stamp" +msgstr "Tampon" + +msgid "Lines" +msgstr "Lignes" + +msgid "Shapes" +msgstr "Formes" + +msgid "Text" +msgstr "Texte" + +msgid "Magic" +msgstr "Magique" + +msgid "Undo" +msgstr "Défaire" + +msgid "Redo" +msgstr "Refaire" + +msgid "Eraser" +msgstr "Gomme" + +msgid "New" +msgstr "Nouveau" + +msgid "Open" +msgstr "Ouvrir" + +msgid "Save" +msgstr "Sauvegarder" + +msgid "Print" +msgstr "Imprimer" + +msgid "Quit" +msgstr "Quitter" + +msgid "Fill" +msgstr "Remplir" + +msgid "Erase" +msgstr "Effacer" + +msgid "Back" +msgstr "Retour" + +msgid "Click and move the mouse to thicken the picture" +msgstr "Clique et bouge la souris pour rendre le dessin plus épais" + +msgid "Click and move the mouse to thin the picture" +msgstr "Clique et bouge la souris pour rendre le dessin plus fin" + +msgid "Click in the picture to fill that area with color" +msgstr "Clique sur l'image pour remplir cette surface avec une couleur" diff --git a/src/messages/hu.po b/src/messages/hu.po new file mode 100644 index 000000000..ceab48425 --- /dev/null +++ b/src/messages/hu.po @@ -0,0 +1,417 @@ +# Tux Paint hungarian messages +# Copyright (C) 2002 +# Trk Gbor , 2002. + +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-10-28 10:37+0200\n" +"PO-Revision-Date: 2002-10-28 10:37+0200\n" +"Last-Translator: Trk Gbor \n" +"Language-Team: Coders \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Biztos ki szeretnl lpni?" + +#: tuxpaint.c:369 +#: tuxpaint.c:373 +#: tuxpaint.c:377 +#: tuxpaint.c:388 +#: tuxpaint.c:4592 +msgid "Yes" +msgstr "Igen" + +#: tuxpaint.c:370 +#: tuxpaint.c:374 +#: tuxpaint.c:378 +#: tuxpaint.c:389 +msgid "No" +msgstr "Nem" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "El fog veszni a rajzod, ha kilpsz. Elmentsk?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Elmentsk elbb a rajzod?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "El fog veszni a rgi rajzod, ha jat rajzolsz!" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "Rendben" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Mgsem" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Nincs elmentett llomny!" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "Ok" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Biztos kitrld a rajzodat?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Kicserled az j rajzodat a rgivel?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "Nem, inkbb mentsk el ms nven" + +#: colors.h:56 +msgid "Black" +msgstr "Fekete" + +#: colors.h:57 +msgid "White" +msgstr "Fehr" + +#: colors.h:58 +msgid "Red" +msgstr "Piros" + +#: colors.h:59 +msgid "Pink" +msgstr "Rzsaszn" + +#: colors.h:60 +msgid "Orange" +msgstr "Narancssrga" + +#: colors.h:61 +msgid "Yellow" +msgstr "Srga" + +#: colors.h:62 +msgid "Green" +msgstr "Zld" + +#: colors.h:63 +msgid "Cyan" +msgstr "Trkisz" + +#: colors.h:64 +msgid "Blue" +msgstr "Kk" + +#: colors.h:65 +msgid "Purple" +msgstr "Lila" + +#: colors.h:66 +msgid "Brown" +msgstr "Barna" + +#: colors.h:67 +msgid "Grey" +msgstr "Szrke" + +#: magic.h:46 +msgid "Mirror" +msgstr "Tkr" + +#: magic.h:47 +msgid "Flip" +msgstr "Megfordt" + +#: magic.h:49 +msgid "Blur" +msgstr "Maszat" + +#: magic.h:50 +msgid "Blocks" +msgstr "Kockk" + +#: magic.h:52 +msgid "Negative" +msgstr "Szncsere" + +#: magic.h:53 +msgid "Fade" +msgstr "Halvny" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Szvrvny" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Festkszr" + +#: magic.h:58 +msgid "Chalk" +msgstr "Krta" + +#: magic.h:59 +msgid "Drip" +msgstr "Csepp" + +#: magic.h:61 +msgid "Thick" +msgstr "Vastag" + +#: magic.h:62 +msgid "Thin" +msgstr "Vkony" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Kattints a rajzlapra, hogy tkrzzk a rajzodat!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Kattints a rajzlapra, hogy fejjel-lefel fordtsuk a rajzodat!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Kattints oda a rajzodon, ahol maszatolni szeretnl!" + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Kattins oda a rajzodon, ahova kockkat szeretnl rajzolni!" + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Kattints oda a rajzodon, ahol fel szeretnd cserlni a szneket!" + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Kattints oda a rajzodon, ahol faktani szeretnd a szneket!" + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Szvrvnyt is rajzolhatsz!" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Kattints oda a rajzodon, ahova festeni szeretnl!" + +#: magic.h:81 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Kattints oda a rajzodon, ahol krtval szeretnl rajzolni!" + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Kattints oda a rajzodon, ahova festket szeretnl csepegtetni!" + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Kattints arra a vonalra, amit vastagtani szeretnl!" + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Kattints arra a vonalra, amit vkonytani szeretnl!" + +#: shapes.h:121 +#: shapes.h:122 +msgid "Square" +msgstr "Ngyzet" + +#: shapes.h:123 +#: shapes.h:124 +msgid "Rectangle" +msgstr "Tglalap" + +#: shapes.h:125 +#: shapes.h:126 +msgid "Circle" +msgstr "Kr" + +#: shapes.h:127 +#: shapes.h:128 +#: shapes.h:147 +#: shapes.h:148 +msgid "Oval" +msgstr "Ovlis" + +#: shapes.h:129 +#: shapes.h:130 +msgid "Triangle" +msgstr "Hromszg" + +#: shapes.h:131 +#: shapes.h:132 +msgid "Pentagon" +msgstr "tszg" + +#: shapes.h:133 +#: shapes.h:134 +msgid "Diamond" +msgstr "Rombusz" + +#: shapes.h:141 +#: shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "A ngyzetnek ngy egyenl hossz oldala van." + +#: shapes.h:143 +#: shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Egy tglalapnak ngy oldala van." + +#: shapes.h:145 +#: shapes.h:146 +msgid "A circle is exactly round." +msgstr "A kr kerek." + +#: shapes.h:149 +#: shapes.h:150 +msgid "A triangle has three sides." +msgstr "A hromszgnek hrom oldala van." + +#: shapes.h:151 +#: shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Az tszgnek t oldala van." + +#: shapes.h:153 +#: shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "A rombusz egy olyan ngyszg, amelynek egyenl hossz oldalai vannak." + +#: tools.h:42 +msgid "Paint" +msgstr "Festk" + +#: tools.h:43 +msgid "Stamp" +msgstr "Matrica" + +#: tools.h:44 +msgid "Lines" +msgstr "Vonalak" + +#: tools.h:45 +msgid "Shapes" +msgstr "Skidomok" + +#: tools.h:46 +msgid "Text" +msgstr "Szveg" + +#: tools.h:47 +msgid "Magic" +msgstr "Varzs" + +#: tools.h:48 +msgid "Undo" +msgstr "Vissza" + +#: tools.h:49 +msgid "Redo" +msgstr "Elre" + +#: tools.h:50 +msgid "Eraser" +msgstr "Radr" + +#: tools.h:51 +msgid "New" +msgstr "j" + +#: tools.h:52 +msgid "Open" +msgstr "Megnyits" + +#: tools.h:53 +msgid "Save" +msgstr "Ments" + +#: tools.h:54 +msgid "Print" +msgstr "Nyomtats" + +#: tools.h:55 +msgid "Quit" +msgstr "Kilps" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Vlassz ki egy sznt s egy ecsetet, amivel rajzolni fogsz!" + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Vlassz ki egy kpet, amit rragasztasz a rajzodra!" + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Kattints oda a rajzodon, ahova a vonalat szeretnd rajzolni!" + +#: tools.h:65 +msgid "Pick a shape to draw. Click once to pick the center of the shape, click again to draw it." +msgstr "Vlassz ki egy skidomot! Kattints oda a rajzodon, ahova a skidom kzpponjt szeretnd helyezni!" + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Vlassz egy bettpust! Kattints oda a rajzodon, ahol el szeretnd kezdeni rni a szveget!" + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Vlassz egy varzslatot, amit kiprblsz a rajzodon!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Vissza!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Elre!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Radr!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Kezdhetsz rajzolni!" + +#: tools.h:72 +msgid "Open..." +msgstr "Megnyits..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Elmentettk a rajzodat!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Nyomtats..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Szia!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Engedd fel a gombot a vonal befejezshez!." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Tartsd nyomva az egr gombjt, hogy vltoztatni tudd az alakzat mrett!" + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Mozgasd az egeret, hogy forgatni tudd a skidomot!" + +#: tools.h:81 +msgid "Great!" +msgstr "Klassz!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Rendben... Akkor folytassuk ezt a rajzot!" + diff --git a/src/messages/id.po b/src/messages/id.po new file mode 100644 index 000000000..838d2087c --- /dev/null +++ b/src/messages/id.po @@ -0,0 +1,471 @@ +# Tuxpaint 0.9.2 (Indonesian) +# +# Copyright (c) 2002 +# This file is distributed under the same license as the Tux Paint +# program. +# +# Tedi Heriyanto , 2003 +# +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.9.2pre\n" +"POT-Creation-Date: 2003-01-03 14:29-0800\n" +"PO-Revision-Date: 2003-01-06 14:20GMT+0700\n" +"Last-Translator: Tedi Heriyanto \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.6\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "Kamu benar-benar ingin keluar?" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "Ya" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "Tidak" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Jika kamu keluar, kamu akan kehilangan gambar! Simpan?" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "Simpan gambarmu dulu?" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "Tidak dapat membuka gambar itu!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "Oke" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "Memulai gambar baru akan menghapus gambar sekarang!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "OK" + +#: src/tuxpaint.c:584 +msgid "Never Mind!" +msgstr "Lupakan Saja!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "Tidak ada file tersimpan!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "Gambarmu telah dicetak!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "Kamu belum dapat mencetak!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "Hapus gambar ini?" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "Buka" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "Hapus" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "Kembali" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "Simpan gambar ini ke versi yang lebih tua?" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "Tidak, simpan gambar baru" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Pilih gambar yang kamu inginkan, lalu klik 'Open'" + +#: src/tools.h:42 +msgid "Paint" +msgstr "Gambar" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "Stempel" + +#: src/tools.h:44 +msgid "Lines" +msgstr "Garis" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "Bentuk" + +#: src/tools.h:46 +msgid "Text" +msgstr "Teks" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "Magic" + +#: src/tools.h:48 +msgid "Undo" +msgstr "Undo" + +#: src/tools.h:49 +msgid "Redo" +msgstr "Redo" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "Penghapus" + +#: src/tools.h:51 +msgid "New" +msgstr "Baru" + +#: src/tools.h:53 +msgid "Save" +msgstr "Simpan" + +#: src/tools.h:54 +msgid "Print" +msgstr "Cetak" + +#: src/tools.h:55 +msgid "Quit" +msgstr "Keluar" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Pilih sebuah warna dan bentuk kuas untuk menggambar" + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Pilih sebuah gambar untuk stempel gambarmu" + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Klik untuk mulai menggambar garis. Lepaskan untuk menyelesaikannya." + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Pilih sebuah bentuk. Klik untuk memilih pusat, tarik, lalu lepaskan saat ukurannya " +"telah sesuai keinginan kamu Pindahkan untuk memutarnya, dan klik untuk menggambar." + +#: src/tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Pilih gaya teks. Klik pada gambar kamu dan kamu dapat langsung mengetik." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Pilih efek magis untuk gambar kamu!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "Undo!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "Redo!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "Penghapus!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Kamu kini memiliki kertas kosong untuk menggambar!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "Buka..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "Gambar kamu telah disimpan!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "Mencetak..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "Selamat tinggal!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Lepaskan tombol untuk menyelesaikan garis." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Tahan tombol untuk memperbesar bentuk." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Pindahkan mouse untuk merotasi bentuk. Klik untuk menggambarnya." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "OK...Mari terus menggambar yang ini!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "Tool" + +#: src/titles.h:38 +msgid "Colors" +msgstr "Warna" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "Kuas" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "Stempel" + +#: src/titles.h:42 +msgid "Letters" +msgstr "Surat" + +#: src/colors.h:56 +msgid "Black" +msgstr "Hitam" + +#: src/colors.h:57 +msgid "White" +msgstr "Putih" + +#: src/colors.h:58 +msgid "Red" +msgstr "Merah" + +#: src/colors.h:59 +msgid "Pink" +msgstr "Merah muda" + +#: src/colors.h:60 +msgid "Orange" +msgstr "Oranye" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "Kuning" + +#: src/colors.h:62 +msgid "Green" +msgstr "Hijau" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "Sian" + +#: src/colors.h:64 +msgid "Blue" +msgstr "Biru" + +#: src/colors.h:65 +msgid "Purple" +msgstr "Ungu" + +#: src/colors.h:66 +msgid "Brown" +msgstr "Coklat" + +#: src/colors.h:67 +msgid "Grey" +msgstr "Abu-abu" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "Persegi" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "Kotak" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "Lingkaran" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "Segitiga" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "Segilima" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "Intan" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Persegi memiliki empat sisi, setiap sisi dengan panjang sama." + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Sebuah kotak memiliki empat sisi." + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "Sebuah lingkaran tepat bulat." + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "Sebuah segitiga memiliki tiga sisi." + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Sebuah segilima memiliki lima sisi." + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Sebuah intan adalah sebuah persegi, yang diputar sedikit." + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "Pelangi" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "Kilau" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "Mirror" + +#: src/magic.h:52 +msgid "Flip" +msgstr "Flip" + +#: src/magic.h:54 +msgid "Blur" +msgstr "Blur" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "Blok" + +#: src/magic.h:57 +msgid "Negative" +msgstr "Negatif" + +#: src/magic.h:58 +msgid "Fade" +msgstr "Fade" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "Kapur" + +#: src/magic.h:61 +msgid "Drip" +msgstr "Drip" + +#: src/magic.h:63 +msgid "Thick" +msgstr "Tebal" + +#: src/magic.h:64 +msgid "Thin" +msgstr "Tipis" + +#: src/magic.h:66 +msgid "Fill" +msgstr "Isi" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Kamu dapat menggambar dengan warna pelangi!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Klik dan pindahkan untuk menggambar kilau" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Klik untuk membuat mirror gambar!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Klik untuk membalik gambar!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Klik dan pindahkan mouse ke sekitar untuk mengaburkan gambar" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Klik dan pindah mouse ke sekitar untuk membuat gambar berblok" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Klik dan pindahkan mouse ke sekitar untuk menggambar sebuah negatif" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Klik dan pindahkan untuk mengaburkan warna." + +#: src/magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Klik dan pindahkan mouse ke sekitar untuk merubah gambar ke gambar dengan kapur." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Klik dan pindahkan mouse ke sekitar untuk membuat gambar drip!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klik dan pindahkan mouse untuk menebalkan gambar" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Klik dan pindahkan mouse untuk menipiskan gambar" + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Klik dalam gambar untuk mengisi area dengan warna" + +#: src/great.h:20 +msgid "Great!" +msgstr "Bagus!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "Hebat!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "Teruskan!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "Kerja yang bagus!" + diff --git a/src/messages/is.po b/src/messages/is.po new file mode 100644 index 000000000..f92c4879f --- /dev/null +++ b/src/messages/is.po @@ -0,0 +1,463 @@ +# Tux Paint Icelandic messages. +# Copyright (C) 2002. +# Pjetur Hjaltason , 2002. +# +msgid "" +msgstr "" +"POT-Creation-Date: 2002-10-22 10:07+0000\n" +"PO-Revision-Date: 2002-10-22 13:12GMT\n" +"Last-Translator: Pjetur G. Hjaltason \n" +"Language-Team: \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "Viltu í alvöru hætta" + +#: tuxpaint.c:568 tuxpaint.c:572 tuxpaint.c:576 tuxpaint.c:596 tuxpaint.c:6274 +#: tuxpaint.c:6915 +msgid "Yes" +msgstr "Já" + +#: tuxpaint.c:569 tuxpaint.c:573 tuxpaint.c:577 tuxpaint.c:597 tuxpaint.c:6277 +msgid "No" +msgstr "Nei" + +#: tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Ef þú hættir tapast myndin! Viltu geyma hana?" + +#: tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "Geyma myndina fyrst?" + +#: tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "Get ekki opnað þessa mynd?" + +#: tuxpaint.c:580 tuxpaint.c:587 tuxpaint.c:590 tuxpaint.c:593 tuxpaint.c:7249 +msgid "Okay" +msgstr "Allt í lagi" + +#: tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "Ef þú byrjar á nýrri mynd, eyðist núverandi mynd!" + +#: tuxpaint.c:583 +msgid "That's Ok" +msgstr "Það er í lagi!" + +#: tuxpaint.c:584 +msgid "Never Mind!" +msgstr "Hætta við!" + +#: tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "Fann engar geymdar myndir!" + +#: tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "Búið að prenta myndina þína!" + +#: tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "Þú getur ekki prentað strax!" + +#: tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "Eyða myndinni?" + +#: tools.h:52 tuxpaint.c:4061 +msgid "Open" +msgstr "Opna" + +#: tuxpaint.c:4071 +msgid "Erase" +msgstr "Eyða" + +#: tuxpaint.c:4081 +msgid "Back" +msgstr "Til baka" + +#: tuxpaint.c:6914 +msgid "Save over the older version of this drawing?" +msgstr "Eyða eldri útgáfu af þessarri mynd?" + +#: tuxpaint.c:6916 +msgid "No, save a new file" +msgstr "Nei, geyma nýja mynd!" + +#: tuxpaint.c:7510 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Veldu teikningu, og smelltu svo á «Opna»." + +#: colors.h:56 +msgid "Black" +msgstr "Svart" + +#: colors.h:57 +msgid "White" +msgstr "Hvítt" + +#: colors.h:58 +msgid "Red" +msgstr "Rautt" + +#: colors.h:59 +msgid "Pink" +msgstr "Bleikt" + +#: colors.h:60 +msgid "Orange" +msgstr "Appelsínugult" + +#: colors.h:61 +msgid "Yellow" +msgstr "Gult" + +#: colors.h:62 +msgid "Green" +msgstr "Grænt" + +#: colors.h:63 +msgid "Cyan" +msgstr "Ljósblátt" + +#: colors.h:64 +msgid "Blue" +msgstr "Blátt" + +#: colors.h:65 +msgid "Purple" +msgstr "Fjólublátt" + +#: colors.h:66 +msgid "Brown" +msgstr "Brúnt" + +#: colors.h:67 +msgid "Grey" +msgstr "Grátt" + +#: great.h:20 +msgid "Great!" +msgstr "Frábært!" + +#: great.h:21 +msgid "Cool!" +msgstr "Flott!" + +#: great.h:22 +msgid "Keep it up!" +msgstr "Haltu þessu áfram!" + +#: great.h:23 +msgid "Good job!" +msgstr "Vel gert!" + +#: magic.h:48 +msgid "Rainbow" +msgstr "Regnbogi" + +#: magic.h:49 +msgid "Sparkles" +msgstr "Neistar" + +#: magic.h:51 +msgid "Mirror" +msgstr "Spegla" + +#: magic.h:52 +msgid "Flip" +msgstr "Hvolfa" + +#: magic.h:54 +msgid "Blur" +msgstr "Óskýr" + +#: magic.h:55 +msgid "Blocks" +msgstr "Kassar" + +#: magic.h:57 +msgid "Negative" +msgstr "Andhverfa" + +#: magic.h:58 +msgid "Fade" +msgstr "Þynna út" + +#: magic.h:60 +msgid "Chalk" +msgstr "Krít" + +#: magic.h:61 +msgid "Drip" +msgstr "Leka" + +#: magic.h:63 +msgid "Thick" +msgstr "Þykk" + +#: magic.h:64 +msgid "Thin" +msgstr "þunn" + +#: magic.h:66 +msgid "Fill" +msgstr "Fylla" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Þú getur teiknað með regnboga-litum!" + +#: magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Smelltu og hreyfðu músina til að búa til neista!" + +#: magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Smelltu til að gera spegilmynd!" + +#: magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Smelltu til að setja myndina á hvolf!" + +#: magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Smelltu og hreyfðu músina til að gera myndina óskýrari!" + +#: magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Smelltu og hreyfðu músina til að gera 'Kassa'!" + +#: magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Smelltu og hreyfðu músina til að teikna andhverfu!" + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Smelltu og hreyfðu músina til að þynna út litina!" + +#: magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Smelltu og hreyfðu músina til að búa til krítarmynd!" + +#: magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Smelltu og hreyfðu músina til að láta myndina leka!" + +#: magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Smelltu og hreyfðu músina til að gera myndina þykkari!" + +#: magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Smelltu og hreyfðu músina til að gera myndina þynnri!" + +#: magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Smelltu og hreyfðu músina til að fylla svæðið með lit!" + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Ferningur" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Rétthyrningur" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Hringur" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Hringlaga" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Þríhyrningur" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Fimmhyrningur" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Tígull" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Ferningur hefur fjórar hliðar, allar jafn langar." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Rétthyrningur hefur fjórar hliðar." + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Hringur er nákvæmlega kringlóttur." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Þríhyrningur hefur þrjár hliðar." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Fimmhyrnigur hefur fimm hliðar." + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Tígull er ferhyrndur, svolítið snúinn." + +#: titles.h:37 +msgid "Tools" +msgstr "Tól" + +#: titles.h:38 +msgid "Colors" +msgstr "Litir" + +#: titles.h:39 +msgid "Brushes" +msgstr "Penslar" + +#: titles.h:40 +msgid "Stamps" +msgstr "Stimplar" + +#: titles.h:41 tools.h:45 +msgid "Shapes" +msgstr "Form" + +#: titles.h:42 +msgid "Letters" +msgstr "Letur" + +#: titles.h:43 tools.h:47 +msgid "Magic" +msgstr "Töfrar" + +#: tools.h:42 +msgid "Paint" +msgstr "Teikna" + +#: tools.h:43 +msgid "Stamp" +msgstr "Stimpla" + +#: tools.h:44 +msgid "Lines" +msgstr "Línur" + +#: tools.h:46 +msgid "Text" +msgstr "Texti" + +#: tools.h:48 +msgid "Undo" +msgstr "Hætta við" + +#: tools.h:49 +msgid "Redo" +msgstr "Gera aftur" + +#: tools.h:50 +msgid "Eraser" +msgstr "Strokleður" + +#: tools.h:51 +msgid "New" +msgstr "Ný" + +#: tools.h:53 +msgid "Save" +msgstr "Geyma" + +#: tools.h:54 +msgid "Print" +msgstr "Prenta" + +#: tools.h:55 +msgid "Quit" +msgstr "Hætta" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Veljið lit og pensil til að teikna með." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Veldu mynd til að nota sem stimpil." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Smelltu til að byrja línu. - Slepptu til að enda línuna." + +#: tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Veldu form. Smelltu til að setja miðju, færðu músina til, slepptu þegar það er af " +"réttri stærð. Hreyfðu til að snúa forminu, og smelltu til að teikna það." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Veldu letur. Smelltu á myndina og þú getur byrjað að skrifa." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Veldu töfra aðferð sem þú ætlar að nota á myndina!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Hætta við!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Gera aftur!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Strokleður!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Nú ertu með autt blað til að teikna á!" + +#: tools.h:72 +msgid "Open..." +msgstr "Opna..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Búið að geyma myndina þína!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Prenta..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Bless!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Slepptu hnappnum til að enda línuna." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Haltu hnappnum niðri til að teygja formið." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Hreyfðu músina til að snúa forminu. Smelltu til að teikna það." + +#: tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Allt í lagi... Höldum þá áfram með þessa!" + diff --git a/src/messages/it.po b/src/messages/it.po new file mode 100644 index 000000000..6455f6175 --- /dev/null +++ b/src/messages/it.po @@ -0,0 +1,417 @@ +# Tux Paint italian messages +# Copyright (C) 2002 +# Marco Milanesi , 2002. + +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-08-21 10:37+0200\n" +"PO-Revision-Date: 2002-08-21 10:37+0200\n" +"Last-Translator: Marco Milanesi \n" +"Language-Team: Marco Milanesi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Vuoi uscire dal programma?" + +#: tuxpaint.c:369 +#: tuxpaint.c:373 +#: tuxpaint.c:377 +#: tuxpaint.c:388 +#: tuxpaint.c:4592 +msgid "Yes" +msgstr "S" + +#: tuxpaint.c:370 +#: tuxpaint.c:374 +#: tuxpaint.c:378 +#: tuxpaint.c:389 +msgid "No" +msgstr "No" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Se esci, perderai il tuo disegno! Vuoi salvarlo?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Vuoi salvare il tuo disegno?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "Se inizi un nuovo disegno verr cancellato quello corrente!" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "Tutto bene" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Non ti preoccupare!" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Non ci sono file salvati!" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "Okay" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Vuoi cancellare questo disegno?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Vuoi salvare questo disegno sulla vecchia versione?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "No, salva un nuovo file" + +#: colors.h:56 +msgid "Black" +msgstr "Nero" + +#: colors.h:57 +msgid "White" +msgstr "Bianco" + +#: colors.h:58 +msgid "Red" +msgstr "Rosso" + +#: colors.h:59 +msgid "Pink" +msgstr "Rosa" + +#: colors.h:60 +msgid "Orange" +msgstr "Arancio" + +#: colors.h:61 +msgid "Yellow" +msgstr "Giallo" + +#: colors.h:62 +msgid "Green" +msgstr "Verde" + +#: colors.h:63 +msgid "Cyan" +msgstr "Ciano" + +#: colors.h:64 +msgid "Blue" +msgstr "Blu" + +#: colors.h:65 +msgid "Purple" +msgstr "Viola" + +#: colors.h:66 +msgid "Brown" +msgstr "Marrone" + +#: colors.h:67 +msgid "Grey" +msgstr "Grigio" + +#: magic.h:46 +msgid "Mirror" +msgstr "Specchio" + +#: magic.h:47 +msgid "Flip" +msgstr "Inverti" + +#: magic.h:49 +msgid "Blur" +msgstr "Sfuma" + +#: magic.h:50 +msgid "Blocks" +msgstr "Blocchi" + +#: magic.h:52 +msgid "Negative" +msgstr "Negativo" + +#: magic.h:53 +msgid "Fade" +msgstr "Scolora" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Arcobaleno" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Scintille" + +#: magic.h:58 +msgid "Chalk" +msgstr "Gesso" + +#: magic.h:59 +msgid "Drip" +msgstr "Sgocciola" + +#: magic.h:61 +msgid "Thick" +msgstr "Grosso" + +#: magic.h:62 +msgid "Thin" +msgstr "Fine" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Clicca per avere un disegno a specchio!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Clicca per invertire il disegno dall'alto verso il basso!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Clicca e muovi il mouse sul disegno per sfumarlo." + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Clicca e muovi il mouse sul disegno per farlo a blocchetti." + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Clicca e muovi il mouse sul disegno per vederlo in negativo." + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Clicca e muovi il mouse sul disegno per scolorarlo." + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Puoi disegnare con i colori dell'arcobaleno!" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Clicca e muovi il mouse per disegnare le scintille." + +#: magic.h:81 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Clicca e muovi il mouse sul disegno per vederlo come se fosse fatto sulla lavagna." + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Clicca e muovi il mouse sul disegno per farlo sgocciolare!" + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Clicca e muovi il mouse per ingrossare il disegno" + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Clicca e muovi il mouse per rendere fine il disegno" + +#: shapes.h:121 +#: shapes.h:122 +msgid "Square" +msgstr "Quadrato" + +#: shapes.h:123 +#: shapes.h:124 +msgid "Rectangle" +msgstr "Rettangolo" + +#: shapes.h:125 +#: shapes.h:126 +msgid "Circle" +msgstr "Cerchio" + +#: shapes.h:127 +#: shapes.h:128 +#: shapes.h:147 +#: shapes.h:148 +msgid "Oval" +msgstr "Ovale" + +#: shapes.h:129 +#: shapes.h:130 +msgid "Triangle" +msgstr "Triangolo" + +#: shapes.h:131 +#: shapes.h:132 +msgid "Pentagon" +msgstr "Pentagono" + +#: shapes.h:133 +#: shapes.h:134 +msgid "Diamond" +msgstr "Rombo" + +#: shapes.h:141 +#: shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Un quadrato ha quattro lati, ognuno della stessa lunghezza." + +#: shapes.h:143 +#: shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Un rettangolo ha quattro lati." + +#: shapes.h:145 +#: shapes.h:146 +msgid "A circle is exactly round." +msgstr "Un cerchio completamente rotondo." + +#: shapes.h:149 +#: shapes.h:150 +msgid "A triangle has three sides." +msgstr "Un triangolo ha tre lati." + +#: shapes.h:151 +#: shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Un pentagono ha cinque lati." + +#: shapes.h:153 +#: shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Un rombo un quadrato leggermente deformato." + +#: tools.h:42 +msgid "Paint" +msgstr "Disegna" + +#: tools.h:43 +msgid "Stamp" +msgstr "Stampiglia" + +#: tools.h:44 +msgid "Lines" +msgstr "Linee" + +#: tools.h:45 +msgid "Shapes" +msgstr "Figure" + +#: tools.h:46 +msgid "Text" +msgstr "Testo" + +#: tools.h:47 +msgid "Magic" +msgstr "Magia" + +#: tools.h:48 +msgid "Undo" +msgstr "Annulla" + +#: tools.h:49 +msgid "Redo" +msgstr "Ripeti" + +#: tools.h:50 +msgid "Eraser" +msgstr "Gomma" + +#: tools.h:51 +msgid "New" +msgstr "Nuovo" + +#: tools.h:52 +msgid "Open" +msgstr "Apri" + +#: tools.h:53 +msgid "Save" +msgstr "Salva" + +#: tools.h:54 +msgid "Print" +msgstr "Stampa" + +#: tools.h:55 +msgid "Quit" +msgstr "Esci" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Scegli un colore e una forma del pennello con cui disegnare." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Scegli un disegno per stampigliare il tuo disegno." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Clicca per iniziare a disegnare una linea. Lasciala andare il mouse per farla disegnare." + +#: tools.h:65 +msgid "Pick a shape to draw. Click once to pick the center of the shape, click again to draw it." +msgstr "Scegli una figura da disegnare. Clicca una volta per decidere il centro della figura, clicca ancora per disegnarla." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Scegli uno stile del testo. Clicca sul disegno e poi parti a scrivere." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Scegli un effetto magico da usare sul tuo disegno!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Annulla!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Ripeti!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Gomma!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Ora hai un foglio bianco su cui disegnare!" + +#: tools.h:72 +msgid "Open..." +msgstr "Apri..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Il tuo disegno stato salvato!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Sto stampando..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Ciao ciao!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Lascia il bottone per completare la linea." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Mantieni premuto il bottone per stirare la figura." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Muovi il mouse per ruotare la figura. Clicca per disegnarla." + +#: tools.h:81 +msgid "Great!" +msgstr "Eccellente!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Bene... continiamo a disegnare!" + diff --git a/src/messages/ja.po b/src/messages/ja.po new file mode 100644 index 000000000..76131d188 --- /dev/null +++ b/src/messages/ja.po @@ -0,0 +1,481 @@ +# Tuxpaint japanese translation. +# tuxpaint の 日本語訳 +# Copyright (C) 2003 +# This file is distributed under the same license as the Tuxpaint package. +# このファイルは Tuxpaint のパッケージと同じ使用許諾に基づいて配布されます。 +# TOYAMA Shin-ichi , 2003. +# +# Nota per futures traduccions/actualitzacions: +# +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.9.5\n" +"POT-Creation-Date: 2003-01-20 07:20+0900\n" +"PO-Revision-Date: 2003-01-27 14:36-0800\n" +"Last-Translator: TOYAMA Shin-ichi \n" +"Language-Team: TOYAMA Shin-ichi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "ほんとうにやめる?" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "はい" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "いいえ" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "やめると えがきえちゃうよ! セーブする?" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "そのまえに いまのえを セーブする?" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "そのえはひらけませんでした!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "おっけー" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "さいしょからやりなおすと、いまのえがきえるよ!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "いいよ" + +#: src/tuxpaint.c:584 +msgid "Never Mind!" +msgstr "やめた!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "セーブされた えは ありません!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "えを いんさつしました!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "まだ いんさつは できません!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "このえを けしますか?" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "ひらく" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "けす" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "もどる" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "まえの えを うわがきしますか?" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "いいえ、べつのファイルに セーブします" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "えをえらんでから 「ひらく」をクリックしてね" + +#: src/tools.h:42 +msgid "Paint" +msgstr "ふで" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "はんこ" + +#: src/tools.h:44 +msgid "Lines" +msgstr "せん" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "ずけい" + +#: src/tools.h:46 +msgid "Text" +msgstr "もじ" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "まほう" + +#: src/tools.h:48 +msgid "Undo" +msgstr "とりけし" + +#: src/tools.h:49 +msgid "Redo" +msgstr "やりなおし" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "けしゴム" + +#: src/tools.h:51 +msgid "New" +msgstr "さいしょから" + +#: src/tools.h:53 +msgid "Save" +msgstr "セーブ" + +#: src/tools.h:54 +msgid "Print" +msgstr "いんさつ" + +#: src/tools.h:55 +msgid "Quit" +msgstr "やめる" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "つかういろと ふでのかたちを えらぼう" + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "はんこをえらぼう" + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "クリックして せんを ひこう" + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"ずけいをえらんでクリックしたら、ドラッグして すきなおおきさにしよう。" +"まわして、クリックしたら できあがり" + +#: src/tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "じのかたちをえらんで、クリックしたあと キーをおして じをかこう" + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "つかいたい まほうのこうかを えらぼう!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "いまの なし!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "やっぱり やりなおし!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "けしゴム!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "あたらしいかみだよ。さあかこう!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "ひらく..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "えをセーブしました!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "いんさつちゅう..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "バイバーイ!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "ボタンをはなすと せんを ひきおわるよ" + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "ボタンをおしたまま ずけいを ひろげよう" + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "マウスをうごかして ずけいをまわそう。クリックしたら できあがり" + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "オッケー。 じゃあ このままつづけよう!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "どうぐ" + +#: src/titles.h:38 +msgid "Colors" +msgstr "いろ" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "ふで" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "はんこ" + +#: src/titles.h:42 +msgid "Letters" +msgstr "もじ" + +#: src/colors.h:56 +msgid "Black" +msgstr "くろ" + +#: src/colors.h:57 +msgid "White" +msgstr "しろ" + +#: src/colors.h:58 +msgid "Red" +msgstr "あか" + +#: src/colors.h:59 +msgid "Pink" +msgstr "ピンク" + +#: src/colors.h:60 +msgid "Orange" +msgstr "オレンジ" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "きいろ" + +#: src/colors.h:62 +msgid "Lime" +msgstr "ライム" + +msgid "Green" +msgstr "みどり" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "みずいろ" + +#: src/colors.h:64 +msgid "Blue" +msgstr "あお" + +#: src/colors.h:65 +msgid "Purple" +msgstr "むらさき" + +msgid "Fuchsia" +msgstr "ホクシャ" + +#: src/colors.h:66 +msgid "Brown" +msgstr "ちゃいろ" + +#: src/colors.h:67 +msgid "Grey" +msgstr "はいいろ" + +msgid "Silver" +msgstr "ぎんいろ" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "ましかく" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "ながしかく" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "えん" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "だえん" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "さんかっけい" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "ごかっけい" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "ダイヤ" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "ましかくは 4つのへんが ぜんぶ おんなじ ながさだよ。" + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "ながしかくには 4つのへんが あるんだ" + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "えんは まんまるのこと" + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "さんかっけいには 3つのへんが あるんだ" + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "ごかっけいには 5つのへんが あるんだ" + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "ダイヤは ましかくを すこしまわしたかたちだね" + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "にじ" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "ひばな" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "はんてん" + +#: src/magic.h:52 +msgid "Flip" +msgstr "さかさま" + +#: src/magic.h:54 +msgid "Blur" +msgstr "ぼかし" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "モザイク" + +#: src/magic.h:57 +msgid "Negative" +msgstr "ネガ" + +#: src/magic.h:58 +msgid "Fade" +msgstr "うすく" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "チョーク" + +#: src/magic.h:61 +msgid "Drip" +msgstr "ぬらす" + +#: src/magic.h:63 +msgid "Thick" +msgstr "ふとく" + +#: src/magic.h:64 +msgid "Thin" +msgstr "ほそく" + +#: src/magic.h:66 +msgid "Fill" +msgstr "ぬる" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "にじいろで かこう!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "ひばなを かこう" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "クリックすると さゆうにひっくりかえるよ!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "クリックすると えが さかさまになるよ!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "クリックしたまま マウスをうごかして えを ぼかしましょう" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "クリックしたまま マウスをうごかすと そこがモザイクになるよ" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "クリックしたまま マウスをうごかして ネガポジにしよう" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "クリックしたまま マウスをうごかすと いろが うすくなるよ." + +#: src/magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "クリックしたままマウスをうごかすと チョークでかいたみたいに なるよ" + + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "クリックしたまま マウスをうごかすと ぬらしたように なるよ!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "クリックしたまま マウスをうごかすと そこが ふとくなるよ!" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "クリックしたまま マウスをうごかすと そこが ほそくなるよ!" + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "ぬりつぶしたいところを クリックしてね" + +#: src/great.h:20 +msgid "Great!" +msgstr "すごい!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "うまいね!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "そのちょうし!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "じょうでき!" + diff --git a/src/messages/ko.po b/src/messages/ko.po new file mode 100644 index 000000000..c5c84acd5 --- /dev/null +++ b/src/messages/ko.po @@ -0,0 +1,478 @@ +# Tux Paint Korean messages +# Copyright (C) 2002 +# Translation: Mark K. Kim (김 강현) +# +# This file is distributed under the same license as the Tux Paint +# program. +# +# 이 파일의 라이센스는 Tux Paint의 라이센스와 같습니다. +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.0.1pre\n" +"POT-Creation-Date: 2002-10-31 20:49+0100\n" +"PO-Revision-Date: 2002-12-10 17:05+0900\n" +"Last-Translator: Mark K. Kim \n" +"Language-Team: N/A \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "프로그램을 끝낼까요?" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "네" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "아니요" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "저장않고 끝마치면 그림이 없어져요! 저장할까요?" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "그전에 그림을 먼저 저장할까요?" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "그 그림을 열지 못합니다!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "그러죠" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "새 그림을 시작하면 지금있는 그림을 잃어버려요!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "괜찮습니다" + +#: src/tuxpaint.c:584 +msgid "Never Mind!" +msgstr "취소!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "저장된 파일이 없네요!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "그림을 프린트 합니다!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "아직 프린트 하지 못합니다!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "그림을 지울까요?" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "그림 열기" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "그림 지우기" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "되돌아가기" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "전에 있던 그름을 지우로 저장 할까요?" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "아니요, 새로운 파일로 저장하죠" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "원하는 그림을 고른후 '열기'버튼을 눌러주세요" + +#: src/tools.h:42 +msgid "Paint" +msgstr "물감" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "그림 도장" + +#: src/tools.h:44 +msgid "Lines" +msgstr "줄긋기" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "모양들" + +#: src/tools.h:46 +msgid "Text" +msgstr "글쓰기" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "마술" + +#: src/tools.h:48 +msgid "Undo" +msgstr "돌아가기" + +#: src/tools.h:49 +msgid "Redo" +msgstr "더 하기" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "지우개" + +#: src/tools.h:51 +msgid "New" +msgstr "새 그림" + +#: src/tools.h:53 +msgid "Save" +msgstr "저장" + +#: src/tools.h:54 +msgid "Print" +msgstr "인쇄" + +#: src/tools.h:55 +msgid "Quit" +msgstr "끝내기" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "그림그릴 색과 붓의 모양을 고르세요." + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "도장의 그림을 고르세요." + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "마우스의 버튼을 누르는 곳이 줄의 시작점 입니다. 버튼을 놓는곳이 종료점 입니다." + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"모양을 고르세요. 마우스의 버튼을 누르면 중심지가 잡히고, 마우스를 " +"원하는 크기까지 움직인후, 버튼을 놓으세요. 그후 마우스를 움직이면 " +"모양을 돌릴수가 있습니다. 원할때까지 돌린 후 마우스의 버튼을 누르세요." + + +#: src/tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"글의 스타일을 고르세요. 마우스의 버튼으로 그림을 누르고 원하는 글을 키보드로 치세요." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "어떤 마술적인 효과를 사용 할까요?" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "전 상태로!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "다시 한번 더!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "지우개!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "그림 다 지워졌습니다. 새 그림을 시작하세요!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "그림 열기..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "그림을 저장 했습니다!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "프린트 (인쇄) 중..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "안녕!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "줄긋기를 완성하려면 마우스의 버튼을 놓으세요." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "모양을 늘리려면 마우스의 버튼을 누른 상태로 마우스를 움직이세요." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "모양을 돌리려면 마우스를 움직이세요. 마우스의 버튼을 누르면 모양이 완성 됩니다." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "그럼... 계속 그림을 그리죠!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "도구" + +#: src/titles.h:38 +msgid "Colors" +msgstr "색" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "붓" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "그림 도장" + +#: src/titles.h:42 +msgid "Letters" +msgstr "글" + +#: src/colors.h:56 +msgid "Black" +msgstr "검정색" + +#: src/colors.h:57 +msgid "White" +msgstr "흰색" + +#: src/colors.h:58 +msgid "Red" +msgstr "빨간색" + +#: src/colors.h:59 +msgid "Pink" +msgstr "핑크색" + +#: src/colors.h:60 +msgid "Orange" +msgstr "주황색" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "노란색" + +#: src/colors.h:62 +msgid "Green" +msgstr "녹색" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "청록색" + +#: src/colors.h:64 +msgid "Blue" +msgstr "파란색" + +#: src/colors.h:65 +msgid "Purple" +msgstr "자주색" + +#: src/colors.h:66 +msgid "Brown" +msgstr "갈색" + +#: src/colors.h:67 +msgid "Grey" +msgstr "회색" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "정사각형" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "사각형" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "원 (동그라미)" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "달걀형" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "삼각형" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "5각형" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "다이아형" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "4개의 면이 다 똑같은 길이의 모양이 '정사각형' 입니다." + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "4개의 면이 있는 모양이 '사각형' 입니다." + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "해나 달같이 둥그런 모양이 '동그라미' 입니다." + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "3개의 면이 있는 모양이 '삼각형' 입니다." + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "5개의 면이 있는 모양이 '5각형' 입니다." + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "다이아몬드형은 정사각형을 약간 옆으로 돌려놓은 모양 입니다." + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "무지개" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "불꽃" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "거울" + +#: src/magic.h:52 +msgid "Flip" +msgstr "뒤집기" + +#: src/magic.h:54 +msgid "Blur" +msgstr "흐리게" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "모자이크" + +#: src/magic.h:57 +msgid "Negative" +msgstr "음화" + +#: src/magic.h:58 +msgid "Fade" +msgstr "사라지기" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "분필" + +#: src/magic.h:61 +msgid "Drip" +msgstr "흘리기" + +#: src/magic.h:63 +msgid "Thick" +msgstr "두껍게" + +#: src/magic.h:64 +msgid "Thin" +msgstr "얇게" + +#: src/magic.h:66 +msgid "Fill" +msgstr "채우기" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "무재개의 색으로 그림을 그리세요!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "불꽃으로 그림을 그릴려면 마우스의 버튼을 누른 상태로 마우스를 움직이세요" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "그림을 가로로 뒤집으려면 마우스버튼을 누르세요!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "그림을 세로로 뒤집으려면 마우스 버튼을 누르세요!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "그림을 흐리게 하려면 마우스 버튼을 누른 상태로 마우스를 움직이세요" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "그림을 모자이크 처럼 보이려면 마우스 버튼을 누른 상태로 마우스를 움직이세요" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "그림의 색을 뒤집으려면 마우스 버튼을 누른 상태로 마우스를 움직이세요" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "색을 사라지게 하려면 마우스 버튼을 누른 상태로 마우스를 움직이세요." + +#: src/magic.h:85 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "" +"그림을 분필로 그린 것 같이 보이려면 마우스 버튼을 누른 상태로 마우스를 움직이세요." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "그림이 밑으로 흐르는 것 같이 보이려면 마우스 버튼을 누른 상태로 마우스를 움직이세요!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "그림을 두껍게 보이려면 마우스 버튼을 누른 상태로 마우스를 움직이세요." + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "그림을 얇게 보이려면 마우스 버튼을 누른 상태로 마우스를 움직이세요." + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "연결된 부분의 색을 바꾸려면 마우스 버튼을 연결된 부분 아무 대나 대고 누르세요." + +#: src/great.h:20 +msgid "Great!" +msgstr "좋네요!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "와~!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "계속 잘 해보세요!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "잘했어요!" + +msgid "Happy" +msgstr "즐겁다" diff --git a/src/messages/nl.po b/src/messages/nl.po new file mode 100644 index 000000000..f4e18fc11 --- /dev/null +++ b/src/messages/nl.po @@ -0,0 +1,398 @@ +# Tux Paint dutch messages. +# Copyright (C) 2002. +# Herman Bruyninckx , 2002. +# +msgid "" +msgstr "" +"POT-Creation-Date: 2002-08-23 11:09+0200\n" +"PO-Revision-Date: 2002-08-23 11:43+0200\n" +"Last-Translator: Herman Bruyninckx \n" +"Language-Team: Nederlands\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Wil je echt stoppen?" + +#: tuxpaint.c:369 tuxpaint.c:373 tuxpaint.c:377 tuxpaint.c:388 tuxpaint.c:4592 +msgid "Yes" +msgstr "Ja" + +#: tuxpaint.c:370 tuxpaint.c:374 tuxpaint.c:378 tuxpaint.c:389 +msgid "No" +msgstr "Nee" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Als je stopt ben je je tekening kwijt! Moet ik ze bijhouden?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Wil je je huidige tekening eerst nog bewaren?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "Mag ik de huidige tekening wegdoen om met een nieuwe te beginnen?" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "OK!" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Neen, liever niet!" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Er zijn geen bewaarde tekeningen!" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "Ok" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Mag ik de gekozen tekening uitvegen?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Mag ik de vorige versie van deze tekening overschrijven?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "Nee, bewaar op een nieuwe plaats" + +#: colors.h:56 +msgid "Black" +msgstr "Zwart" + +#: colors.h:57 +msgid "White" +msgstr "Wit" + +#: colors.h:58 +msgid "Red" +msgstr "Rood" + +#: colors.h:59 +msgid "Pink" +msgstr "Rose" + +#: colors.h:60 +msgid "Orange" +msgstr "Oranje" + +#: colors.h:61 +msgid "Yellow" +msgstr "Geel" + +#: colors.h:62 +msgid "Green" +msgstr "Groen" + +#: colors.h:63 +msgid "Cyan" +msgstr "Turkoois" + +#: colors.h:64 +msgid "Blue" +msgstr "Blauw" + +#: colors.h:65 +msgid "Purple" +msgstr "Purper" + +#: colors.h:66 +msgid "Brown" +msgstr "Bruin" + +#: colors.h:67 +msgid "Grey" +msgstr "Grijs" + +#: magic.h:46 +msgid "Mirror" +msgstr "Spiegel" + +#: magic.h:47 +msgid "Flip" +msgstr "Omkeren" + +#: magic.h:49 +msgid "Blur" +msgstr "Uitsmeren" + +#: magic.h:50 +msgid "Blocks" +msgstr "Blokken" + +#: magic.h:52 +msgid "Negative" +msgstr "Negatief" + +#: magic.h:53 +msgid "Fade" +msgstr "Vervagen" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Regenboog" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Spikkels" + +#: magic.h:58 +msgid "Chalk" +msgstr "Krijt" + +#: magic.h:59 +msgid "Drip" +msgstr "Druppen" + +#: magic.h:61 +msgid "Thick" +msgstr "Dik" + +#: magic.h:62 +msgid "Thin" +msgstr "Dun" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Klik om spiegelbeeld te maken!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Klik om beeld ondersteboven te zetten!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Klik en beweeg de muis om de tekening te vervagen!" + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Klik en beweeg de muis om de tekening blokkerig te maken!" + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Klik en beweeg de muis om de tekening negatief te maken!" + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Klik en beweeg de muis om de kleuren te vervagen!" + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Je kan in regenboog-kleuren tekenen!" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Klik en beweeg de muis om spikkels te tekenen!" + +#: magic.h:81 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Klik en beweeg de muis om de tekening te veranderen in een krijt-tekening!" + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Klik en beweeg de muis om de tekening te laten druppen!" + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klik en beweeg de muis om de tekening dikker te maken!" + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Klik en beweeg de muis om de tekening dunner te maken!" + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Vierkant" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Rechthoek" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Cirkel" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Ovaal" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Driehoek" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Vijfhoek" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Ruit" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Een vierkant heeft vier zijden, allemaal even lang." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Een rechthoek heeft vier zijden." + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Een cirkel is precies rond." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Een driehoek heeft drie zijden." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Een vijfhoek heeft vijf zijden." + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Een ruit is zoals een vierkant op zijn zij." + +#: tools.h:42 +msgid "Paint" +msgstr "Schilderen" + +#: tools.h:43 +msgid "Stamp" +msgstr "Stempel" + +#: tools.h:44 +msgid "Lines" +msgstr "Lijnen" + +#: tools.h:45 +msgid "Shapes" +msgstr "Vormen" + +#: tools.h:46 +msgid "Text" +msgstr "Letters" + +#: tools.h:47 +msgid "Magic" +msgstr "Toverij" + +#: tools.h:48 +msgid "Undo" +msgstr "Wegdoen" + +#: tools.h:49 +msgid "Redo" +msgstr "Terugdoen" + +#: tools.h:50 +msgid "Eraser" +msgstr "Uitgommen" + +#: tools.h:51 +msgid "New" +msgstr "Nieuw" + +#: tools.h:52 +msgid "Open" +msgstr "Openen" + +#: tools.h:53 +msgid "Save" +msgstr "Bewaren" + +#: tools.h:54 +msgid "Print" +msgstr "Afdrukken" + +#: tools.h:55 +msgid "Quit" +msgstr "Stoppen" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Kies een kleur en een borstel om mee te tekenen." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Kies een vorm om mee te stempelen." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Klik om een lijn te beginnen." + "Laat pas los op het einde van de lijn." + +#: tools.h:65 +msgid "" +"Pick a shape to draw. Click once to pick the center of the shape, click " +"again to draw it." +msgstr "" +"Kies een vorm om te tekenen. Klik een eerste keer om het midden van de " +"vorm te plaatsen. Klik nog een keer om de vorm te tekenen." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Kies een stijl voor je letters. Klik op je tekening en begin te schrijven." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Kies een tover-effect om je tekening te veranderen!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Wegdoen!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Terugdoen!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Gom!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Nu heb je een proper blad om op te tekenen!" + +#: tools.h:72 +msgid "Open..." +msgstr "Openen..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Je tekening is bewaard!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Aan het afdrukken..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Daaag!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Laat de muisknop los om de lijn af te sluiten." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Druk de muisknop in en beweeg om de vorm uit te rekken." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Beweeg de muis om de vorm te draaien. Klik als je tevreden bent." + +#: tools.h:81 +msgid "Great!" +msgstr "Prachtig!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Ok, dan doen we verder met deze!" + diff --git a/src/messages/nn.po b/src/messages/nn.po new file mode 100644 index 000000000..fe1c41d2c --- /dev/null +++ b/src/messages/nn.po @@ -0,0 +1,498 @@ +# Tux Paint Norwegian Nynorsk messages +msgid "" +msgstr "" +"Project-Id-Version: TuxType\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2003-01-31 23:08+0100\n" +"Last-Translator: Karl Ove Hufthammer \n" +"Language-Team: Norwegian Nynorsk \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:669 +msgid "Do you really want to quit?" +msgstr "Vil du verkeleg avslutta?" + +#: src/tuxpaint.c:670 +#: src/tuxpaint.c:674 +#: src/tuxpaint.c:678 +#: src/tuxpaint.c:698 +#: src/tuxpaint.c:6851 +#: src/tuxpaint.c:7530 +msgid "Yes" +msgstr "Ja!" + +#: src/tuxpaint.c:671 +#: src/tuxpaint.c:675 +#: src/tuxpaint.c:679 +#: src/tuxpaint.c:699 +#: src/tuxpaint.c:6854 +msgid "No" +msgstr "Nei!" + +#: src/tuxpaint.c:673 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Du mistar teikninga viss du avsluttar no. Vil du lagra ho først?" + +#: src/tuxpaint.c:677 +msgid "Save your picture first?" +msgstr "Vil du lagra teikninga først?" + +#: src/tuxpaint.c:681 +msgid "Can't open that picture!" +msgstr "Klarte ikkje opna teikninga." + +#: src/tuxpaint.c:682 +#: src/tuxpaint.c:689 +#: src/tuxpaint.c:692 +#: src/tuxpaint.c:695 +msgid "Okay" +msgstr "OK" + +#: src/tuxpaint.c:684 +msgid "Starting a new picture will erase the current one!" +msgstr "Startar du på ei ny teikning, forsvinn ho du har." + +#: src/tuxpaint.c:685 +msgid "That's Ok" +msgstr "OK!" + +#: src/tuxpaint.c:686 +msgid "Never Mind!" +msgstr "Avbryt!" + +#: src/tuxpaint.c:688 +msgid "There are no saved files!" +msgstr "Det finst ingen lagra teikningar." + +#: src/tuxpaint.c:691 +msgid "Your picture has been printed!" +msgstr "Teikninga er skriven ut." + +#: src/tuxpaint.c:694 +msgid "You can't print yet!" +msgstr "Du kan ikkje skriva ut enno." + +#: src/tuxpaint.c:697 +msgid "Erase this picture?" +msgstr "Vil du verkeleg sletta teikninga?" + +#: src/tools.h:52 +#: src/tuxpaint.c:4453 +msgid "Open" +msgstr "Opna" + +#: src/tuxpaint.c:4458 +msgid "Erase" +msgstr "Slett" + +#: src/tuxpaint.c:4463 +msgid "Back" +msgstr "Tilbake" + +#: src/tuxpaint.c:7529 +msgid "Save over the older version of this drawing?" +msgstr "Vil du lagra over den gamle versjonen av teikninga?" + +#: src/tuxpaint.c:7531 +msgid "No, save a new file" +msgstr "Nei. Lagra som ny teikning." + +#: src/tuxpaint.c:8237 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Vel ei teikning og trykk «Opna»." + +#: src/colors.h:62 +msgid "Black" +msgstr "Svart!" + +#: src/colors.h:63 +msgid "White" +msgstr "Kvit!" + +#: src/colors.h:64 +msgid "Red" +msgstr "Raud!" + +#: src/colors.h:65 +msgid "Pink" +msgstr "Rosa!" + +#: src/colors.h:66 +msgid "Orange" +msgstr "Oransje!" + +#: src/colors.h:67 +msgid "Yellow" +msgstr "Gul!" + +#: src/colors.h:68 +msgid "Lime" +msgstr "Lysegrøn!" + +#: src/colors.h:69 +msgid "Green" +msgstr "Mørkegrøn!" + +#: src/colors.h:70 +msgid "Cyan" +msgstr "Turkis!" + +#: src/colors.h:71 +msgid "Blue" +msgstr "Blå!" + +#: src/colors.h:72 +msgid "Purple" +msgstr "Mørkelilla!" + +#: src/colors.h:73 +msgid "Fuchsia" +msgstr "Lyselilla!" + +#: src/colors.h:74 +msgid "Brown" +msgstr "Brun!" + +#: src/colors.h:75 +msgid "Grey" +msgstr "Mørkegrå!" + +#: src/colors.h:76 +msgid "Silver" +msgstr "Lysegrå!" + +#: src/great.h:20 +msgid "Great!" +msgstr "Flott!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "Kult!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "Hald fram slik!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "Godt jobba!" + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "Regnboge" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "Gneistar" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "Spegel" + +#: src/magic.h:52 +msgid "Flip" +msgstr "Snu" + +#: src/magic.h:54 +msgid "Blur" +msgstr "Uskarp" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "Blokk" + +#: src/magic.h:57 +msgid "Negative" +msgstr "Negativ" + +#: src/magic.h:58 +msgid "Fade" +msgstr "Bleikna" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "Krit" + +#: src/magic.h:61 +msgid "Drip" +msgstr "Drypping" + +#: src/magic.h:63 +msgid "Thick" +msgstr "Tjukk" + +#: src/magic.h:64 +msgid "Thin" +msgstr "Tynn" + +#: src/magic.h:66 +msgid "Fill" +msgstr "Bøtte" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Du kan teikna i alle regnbogens fargar!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Hald inne knappen og flytt rundt for å teikna gneistar." + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Trykk for å spegelvenda teikninga." + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Trykk for å snu teikninga opp ned." + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Hald inne knappen og flytt rundt for å gjera teikninga uskarp." + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Hald inne knappen og flytt rundt for å gjera teikninga «blokkete»." + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Hald inne knappen og flytt rundt for å invertera teikninga." + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Hald inne knappen og flytt rundt for å bleikna fargane." + +#: src/magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Hald inne knappen og flytt rundt for å gjera teikninga om til ei kritteikning." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Hald inne knappen og flytt rundt for å gjera teikninga dryppande." + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Hald inne knappen og flytt rundt for å gjera strekane tjukkare." + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Hald inne knappen og flytt rundt for å gjera strekane tynnare." + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Trykk på teikninga for å fylla området med fargen frå målingbøtta." + +#: src/shapes.h:141 +#: src/shapes.h:142 +msgid "Square" +msgstr "Kvadrat" + +#: src/shapes.h:143 +#: src/shapes.h:144 +msgid "Rectangle" +msgstr "Rektangel" + +#: src/shapes.h:145 +#: src/shapes.h:146 +msgid "Circle" +msgstr "Sirkel" + +#: src/shapes.h:147 +#: src/shapes.h:148 +#: src/shapes.h:167 +#: src/shapes.h:168 +msgid "Oval" +msgstr "Ellipse" + +#: src/shapes.h:149 +#: src/shapes.h:150 +msgid "Triangle" +msgstr "Trekant" + +#: src/shapes.h:151 +#: src/shapes.h:152 +msgid "Pentagon" +msgstr "Femkant" + +#: src/shapes.h:153 +#: src/shapes.h:154 +msgid "Diamond" +msgstr "Diamant" + +#: src/shapes.h:161 +#: src/shapes.h:162 +msgid "A square has four sides, each the same length." +msgstr "Eit kvadrat har fire like lange sider." + +#: src/shapes.h:163 +#: src/shapes.h:164 +msgid "A rectangle has four sides." +msgstr "Eit rektangel har fire sider." + +#: src/shapes.h:165 +#: src/shapes.h:166 +msgid "A circle is exactly round." +msgstr "Ein sirkel er rund." + +#: src/shapes.h:169 +#: src/shapes.h:170 +msgid "A triangle has three sides." +msgstr "Ein trekant har tre sider." + +#: src/shapes.h:171 +#: src/shapes.h:172 +msgid "A pentagon has five sides." +msgstr "Ein femkant har fem sider." + +#: src/shapes.h:173 +#: src/shapes.h:174 +msgid "A diamond is a square, turned around slightly." +msgstr "Ein diamant er eit rotert kvadrat." + +#: src/titles.h:37 +msgid "Tools" +msgstr "Verktøy" + +#: src/titles.h:38 +msgid "Colors" +msgstr "Fargar" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "Penslar" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "Stempel" + +#: src/titles.h:41 +#: src/tools.h:45 +msgid "Shapes" +msgstr "Figurar" + +#: src/titles.h:42 +msgid "Letters" +msgstr "Tekst" + +#: src/titles.h:43 +#: src/tools.h:47 +msgid "Magic" +msgstr "Magi" + +#: src/tools.h:42 +msgid "Paint" +msgstr "Måling" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "Stempel" + +#: src/tools.h:44 +msgid "Lines" +msgstr "Linjer" + +#: src/tools.h:46 +msgid "Text" +msgstr "Tekst" + +#: src/tools.h:48 +msgid "Undo" +msgstr "Angra" + +#: src/tools.h:49 +msgid "Redo" +msgstr "Gjer om" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "Viskelêr" + +#: src/tools.h:51 +msgid "New" +msgstr "Ny" + +#: src/tools.h:53 +msgid "Save" +msgstr "Lagra" + +#: src/tools.h:54 +msgid "Print" +msgstr "Utskrift" + +#: src/tools.h:55 +msgid "Quit" +msgstr "Avslutt" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Vel farge og pensel." + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Vel kva du vil stempla teikninga med." + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Trykk for å starta på ei linje. Slepp for å fullføra ho." + +#: src/tools.h:65 +msgid "Pick a shape. Click to pick the center, drag, then let go when it is the size you want. Move around to rotate it, and click to draw it." +msgstr "Vel ein figur. Trykk og drag så for velja midten og storleiken på figuren. Flytt rundt for å rotera han, og trykk til slutt for å teikna han." + +#: src/tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Vel tekststil. Trykk så på teikninga og skriv i veg." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Vel kva magiske effekt du vil bruka på teikninga!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "Angra!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "Gjer om!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "Viskelêr!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Du har no blanke ark og fargestiftar til!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "Opna ..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "Teikninga er lagra." + +#: src/tools.h:74 +msgid "Printing..." +msgstr "Skriv ut ..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "Ha det bra!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Slepp knappen for å teikna linja." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Hald inne museknappen for å strekkja figuren." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Flytt på musa for å rotera figuren. Trykk så for å sleppa han." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Greitt! Då held me heller fram med denne teikninga." + diff --git a/src/messages/pl.po b/src/messages/pl.po new file mode 100644 index 000000000..7cdd4ba54 --- /dev/null +++ b/src/messages/pl.po @@ -0,0 +1,399 @@ +# Tux Paint Polish messages +# Copyright (C) 2002 +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint\n" +"POT-Creation-Date: 2002-09-26 00:00-0800\n" +"PO-Revision-Date: 2003-01-12 23:00+0100\n" +"Last-Translator: Arkadiusz Lipiec \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Czy naprawdę chcesz zakończyć program?" + +#: tuxpaint.c:369 tuxpaint.c:373 tuxpaint.c:377 tuxpaint.c:388 tuxpaint.c:4592 +msgid "Yes" +msgstr "Tak" + +#: tuxpaint.c:370 tuxpaint.c:374 tuxpaint.c:378 tuxpaint.c:389 +msgid "No" +msgstr "Nie" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Jeśli zakończysz, stracisz swój obrazek! Czy chcesz go zapisać?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Czy chcesz najpierw zapisać swój obrazek?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "Rozpoczęcie nowego obrazka spowoduje usunięcie bieżącego!" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "OK, w porządku" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Nigdy w życiu!" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Brak zapisanych plików!" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "OK" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Usunąć ten obrazek?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Czy nadpisać starszą wersję tego obrazka?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "Nie, zapisz nowy plik" + +#: colors.h:56 +msgid "Black" +msgstr "Czarny" + +#: colors.h:57 +msgid "White" +msgstr "Biały" + +#: colors.h:58 +msgid "Red" +msgstr "Czerwony" + +#: colors.h:59 +msgid "Pink" +msgstr "Różowy" + +#: colors.h:60 +msgid "Orange" +msgstr "Pomarańczowy" + +#: colors.h:61 +msgid "Yellow" +msgstr "Żółty" + +#: colors.h:62 +msgid "Green" +msgstr "Zielony" + +#: colors.h:63 +msgid "Cyan" +msgstr "Cyan" + +#: colors.h:64 +msgid "Blue" +msgstr "Niebieski" + +#: colors.h:65 +msgid "Purple" +msgstr "Purpurowy" + +#: colors.h:66 +msgid "Brown" +msgstr "Brązowy" + +#: colors.h:67 +msgid "Grey" +msgstr "Szary" + +#: magic.h:46 +msgid "Mirror" +msgstr "Odbicie lustrzane" + +#: magic.h:47 +msgid "Flip" +msgstr "Odbicie osiowe" + +#: magic.h:49 +msgid "Blur" +msgstr "Rozmazanie" + +#: magic.h:50 +msgid "Blocks" +msgstr "Bloki" + +#: magic.h:52 +msgid "Negative" +msgstr "Negatyw" + +#: magic.h:53 +msgid "Fade" +msgstr "Przenikanie" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Tęcza" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Iskierki" + +#: magic.h:58 +msgid "Chalk" +msgstr "Kreda" + +#: magic.h:59 +msgid "Drip" +msgstr "Kropla" + +#: magic.h:61 +msgid "Thick" +msgstr "Poszerzanie" + +#: magic.h:62 +msgid "Thin" +msgstr "Zwężanie" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Kliknij aby zrobić odbicie zwierciadlane obrazka!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Kliknij aby odwrócić obrazek do góry nogami!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Kliknij i przesuń myszą dookoła aby rozmazać obrazek" + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Kliknij i przesuń myszą dookoła podzielić obrazek na bloki" + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Kliknij i przesuń myszą dookoła aby narysować negatyw" + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Kliknij i przesuń aby przyciemnić kolory." + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Możena rysować w kolorach tęczy!" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Kliknij i przesuń aby narysować iskierki." + +#: magic.h:81 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "" +"Kliknij i przesuń myszką dookołą aby zamienić obraz w obrazek kredowy." + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Kliknij i przesuń myszką dookoła aby zapełnić obraz w kroplami" + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Kliknij i przesuń myszkę aby rozszerzyć obrazek" + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Kliknij i przesuń myszkę aby zwęzić obrazek" + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Kwadrat" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Prostokąt" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Okrąg" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Owal" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Trójkąt" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Pięciokąt" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Diament" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Kwadrat ma cztery boki, każdy o tej samej długości." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Prostokąt ma cztery boki." + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Okrąg jest dokładnym kołem." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Trójkąt ma trzy boki." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Pięciokąt ma pięć boków." + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Diament jest kwadratem z obróconymi wierzchołkami." + +#: tools.h:42 +msgid "Paint" +msgstr "Rysuj" + +#: tools.h:43 +msgid "Stamp" +msgstr "Pieczęć" + +#: tools.h:44 +msgid "Lines" +msgstr "Linie" + +#: tools.h:45 +msgid "Shapes" +msgstr "Kształty" + +#: tools.h:46 +msgid "Text" +msgstr "Tekst" + +#: tools.h:47 +msgid "Magic" +msgstr "Magia" + +#: tools.h:48 +msgid "Undo" +msgstr "Cofnij" + +#: tools.h:49 +msgid "Redo" +msgstr "Ponów" + +#: tools.h:50 +msgid "Eraser" +msgstr "Gumka" + +#: tools.h:51 +msgid "New" +msgstr "Nowy" + +#: tools.h:52 +msgid "Open" +msgstr "Otwrórz" + +#: tools.h:53 +msgid "Save" +msgstr "Zapisz" + +#: tools.h:54 +msgid "Print" +msgstr "Wydrukuj" + +#: tools.h:55 +msgid "Quit" +msgstr "Zakończ" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Wybierz kolor i kształt pędzla aby nimi rysować." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Wybierz obrazek aby opieczętować swój rysunek." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Kliknij aby rozpocząć rysowanie linii. Puść aby je zakończyć." + +#: tools.h:65 +msgid "" +"Pick a shape to draw. Click once to pick the center of the shape, click " +"again to draw it." +msgstr "" +"Wybierz kształt do narysowania. Kliknij raz wewnątrz kształtu, " +"kliknij ponownie aby go narysować." + +#: tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "Wybierz styl tekstu. Klinij rysunek i rozpocznij pisanie." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Wybierz magiczny efekt wykorzystywany przy rysowaniu!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Cofnij!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Ponów!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Gumka!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Masz teraz pusty arkusz, na którym można rysować!" + +#: tools.h:72 +msgid "Open..." +msgstr "Otwórz..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Twój obrazek został zapisany!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Drukowanie..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Do widzenia!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Puść przycisk aby zakończyć linię." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Przytrzymaj przycisk aby rozciągnąć kształt." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Przesuń mysz aby obrócić kształt. Kliknij aby go narysować." + +#: tools.h:81 +msgid "Great!" +msgstr "Wspaniale!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Dobrze więc... Rysujmy dalej ten obrazek!" diff --git a/src/messages/pt.po b/src/messages/pt.po new file mode 100644 index 000000000..1df974698 --- /dev/null +++ b/src/messages/pt.po @@ -0,0 +1,479 @@ +# Tux Paint portuguese (european) messages +# Copyright (C) 2003 +# Ricardo Cruz , 2003 +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.9.9\n" +"POT-Creation-Date: 2003-02-01 16:34+0000\n" +"PO-Revision-Date: 2003-02-02 20:52+0000\n" +"Last-Translator: Ricardo Cruz \n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.6\n" + +#: tuxpaint.c:657 +msgid "Do you really want to quit?" +msgstr "Queres mesmo sair?" + +#: tuxpaint.c:658 tuxpaint.c:662 tuxpaint.c:666 tuxpaint.c:686 tuxpaint.c:6892 +#: tuxpaint.c:7571 +msgid "Yes" +msgstr "Sim" + +#: tuxpaint.c:659 tuxpaint.c:663 tuxpaint.c:667 tuxpaint.c:687 tuxpaint.c:6895 +msgid "No" +msgstr "Não" + +#: tuxpaint.c:661 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Se saires, vais perder o teu desenho! Queres gravá-lo?" + +#: tuxpaint.c:665 +msgid "Save your picture first?" +msgstr "Queres gravar primeiro o teu desenho?" + +#: tuxpaint.c:669 +msgid "Can't open that picture!" +msgstr "Não consigo abrir esse desenho!" + +#: tuxpaint.c:670 tuxpaint.c:677 tuxpaint.c:680 tuxpaint.c:683 +msgid "Okay" +msgstr "Tudo bem!" + +#: tuxpaint.c:672 +msgid "Starting a new picture will erase the current one!" +msgstr "Se iniciares outro desenho, irás apagar o desenho actual!" + +#: tuxpaint.c:673 +msgid "That's Ok" +msgstr "Está bem" + +#: tuxpaint.c:674 +msgid "Never Mind!" +msgstr "Nem Pensar!" + +#: tuxpaint.c:676 +msgid "There are no saved files!" +msgstr "Não há desenhos gravados!" + +#: tuxpaint.c:679 +msgid "Your picture has been printed!" +msgstr "O teu desenho foi imprimido!" + +#: tuxpaint.c:682 +msgid "You can't print yet!" +msgstr "Ainda não podes imprimir!" + +#: tuxpaint.c:685 +msgid "Erase this picture?" +msgstr "Apagar este desenho?" + +#: tuxpaint.c:4470 tools.h:52 +msgid "Open" +msgstr "Abrir" + +#: tuxpaint.c:4475 +msgid "Erase" +msgstr "Apagar" + +#: tuxpaint.c:4480 +msgid "Back" +msgstr "Recuar" + +#: tuxpaint.c:7570 +msgid "Save over the older version of this drawing?" +msgstr "Gravar por cima do teu desenho anterior?" + +#: tuxpaint.c:7572 +msgid "No, save a new file" +msgstr "Não, gravar como um novo desenho" + +#: tuxpaint.c:8278 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Escolhe o desenho que queres e depois clica no 'Abrir'" + +#: colors.h:62 +msgid "Black" +msgstr "Preto" + +#: colors.h:63 +msgid "White" +msgstr "Branco" + +#: colors.h:64 +msgid "Red" +msgstr "Vermelho" + +#: colors.h:65 +msgid "Pink" +msgstr "Cor-de-rosa" + +#: colors.h:66 +msgid "Orange" +msgstr "Cor-de-Laranja" + +#: colors.h:67 +msgid "Yellow" +msgstr "Amarelo" + +#: colors.h:68 +msgid "Lime" +msgstr "Cor-de-Lima" + +#: colors.h:69 +msgid "Green" +msgstr "Verde" + +#: colors.h:70 +msgid "Cyan" +msgstr "Ciano" + +#: colors.h:71 +msgid "Blue" +msgstr "Azul" + +#: colors.h:72 +msgid "Purple" +msgstr "Violeta" + +#: colors.h:73 +msgid "Fuchsia" +msgstr "Lilás" + +#: colors.h:74 +msgid "Brown" +msgstr "Castanho" + +#: colors.h:75 +msgid "Grey" +msgstr "Cinza" + +#: colors.h:76 +msgid "Silver" +msgstr "Prateado" + +#: great.h:20 +msgid "Great!" +msgstr "Boa!" + +#: great.h:21 +msgid "Cool!" +msgstr "Fixe!" + +#: great.h:22 +msgid "Keep it up!" +msgstr "Continua assim!" + +#: great.h:23 +msgid "Good job!" +msgstr "Bom trabalho!" + +#: magic.h:48 +msgid "Rainbow" +msgstr "Arco-íris" + +#: magic.h:49 +msgid "Sparkles" +msgstr "Fagulhas" + +#: magic.h:51 +msgid "Mirror" +msgstr "Espelhar" + +#: magic.h:52 +msgid "Flip" +msgstr "Girar" + +#: magic.h:54 +msgid "Blur" +msgstr "Borrar" + +#: magic.h:55 +msgid "Blocks" +msgstr "Quadricular" + +#: magic.h:57 +msgid "Negative" +msgstr "Negativo" + +#: magic.h:58 +msgid "Fade" +msgstr "Desbotar" + +#: magic.h:60 +msgid "Chalk" +msgstr "Giz" + +#: magic.h:61 +msgid "Drip" +msgstr "Pingar" + +#: magic.h:63 +msgid "Thick" +msgstr "Engrossar" + +#: magic.h:64 +msgid "Thin" +msgstr "Encolher" + +#: magic.h:66 +msgid "Fill" +msgstr "Preencher" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Podes desenhar com as cores do arco-íris!" + +#: magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Clica e move o rato para desenhares fagulhas" + +#: magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Clica para espelhares o desenho!" + +#: magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Clica para girares o desenho de cabeça para baixo!" + +#: magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Clica e move o rato para borrares o desenho" + +#: magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Clica e move o rato para transformares o desenho em blocos" + +#: magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Clica e move o rato para inverteres as cores do desenho" + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Clica e move o rato para desbotares as cores." + +#: magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Clica e move o rato para transformares o desenho num desenho de giz." + +#: magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Clica e move o rato para transformares o desenho numa respingada!" + +#: magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Clica e move o rato para engordares o desenho" + +#: magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Clica e move o rato para emagreceres o desenho" + +#: magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Clica no desenho para preencheres essa área com uma cor" + +#: shapes.h:141 shapes.h:142 +msgid "Square" +msgstr "Quadrado" + +#: shapes.h:143 shapes.h:144 +msgid "Rectangle" +msgstr "Rectângulo" + +#: shapes.h:145 shapes.h:146 +msgid "Circle" +msgstr "Círculo" + +#: shapes.h:147 shapes.h:148 shapes.h:167 shapes.h:168 +msgid "Oval" +msgstr "Oval" + +#: shapes.h:149 shapes.h:150 +msgid "Triangle" +msgstr "Triângulo" + +#: shapes.h:151 shapes.h:152 +msgid "Pentagon" +msgstr "Pentágono" + +#: shapes.h:153 shapes.h:154 +msgid "Diamond" +msgstr "Losango" + +#: shapes.h:161 shapes.h:162 +msgid "A square has four sides, each the same length." +msgstr "Um quadrado tem quatro lados, todos com o mesmo tamanho." + +#: shapes.h:163 shapes.h:164 +msgid "A rectangle has four sides." +msgstr "Um rectângulo tem quatro lados." + +#: shapes.h:165 shapes.h:166 +msgid "A circle is exactly round." +msgstr "Um círculo é totalmente redondo." + +#: shapes.h:169 shapes.h:170 +msgid "A triangle has three sides." +msgstr "Um triângulo tem três lados." + +#: shapes.h:171 shapes.h:172 +msgid "A pentagon has five sides." +msgstr "Um pentágono tem cinco lados." + +#: shapes.h:173 shapes.h:174 +msgid "A diamond is a square, turned around slightly." +msgstr "Um losango é um quadrado, ligeiramente rodado." + +#: titles.h:37 +msgid "Tools" +msgstr "Ferramentas" + +#: titles.h:38 +msgid "Colors" +msgstr "Cores" + +#: titles.h:39 +msgid "Brushes" +msgstr "Pincéis" + +#: titles.h:40 +msgid "Stamps" +msgstr "Carimbos" + +#: titles.h:41 tools.h:45 +msgid "Shapes" +msgstr "Formas" + +#: titles.h:42 +msgid "Letters" +msgstr "Letras" + +#: titles.h:43 tools.h:47 +msgid "Magic" +msgstr "Mágicas" + +#: tools.h:42 +msgid "Paint" +msgstr "Pintar" + +#: tools.h:43 +msgid "Stamp" +msgstr "Carimbos" + +#: tools.h:44 +msgid "Lines" +msgstr "Linhas" + +#: tools.h:46 +msgid "Text" +msgstr "Texto" + +#: tools.h:48 +msgid "Undo" +msgstr "Desfazer" + +#: tools.h:49 +msgid "Redo" +msgstr "Refazer" + +#: tools.h:50 +msgid "Eraser" +msgstr "Borracha" + +#: tools.h:51 +msgid "New" +msgstr "Novo" + +#: tools.h:53 +msgid "Save" +msgstr "Gravar" + +#: tools.h:54 +msgid "Print" +msgstr "Imprimir" + +#: tools.h:55 +msgid "Quit" +msgstr "Sair" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Escolhe uma cor e uma forma de pincel para desenhares." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Escolhe uma imagem para carimbares no teu desenho." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Clica para começares a desenhar uma linha. Solta o rato para terminá-la." + +# #: tools.h:65 +# msgid "Pick a shape to draw. Click once to pick the center of the shape, #click again to draw it." +# msgstr "Escolha uma forma para desenhar. Clique uma vez para definir o centro da imagem. Clique de novo para desenhá-la." +#: tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Escolhe uma forma. Clica para pôres o centro e arrasta o rato para o tamanho." +" Move o rato para a rodares e é só clicar." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Escolhe um tipo de letra para o texto. Clica no desenho para começares a escrever." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Escolhe um efeito mágico para usares no teu desenho!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Desfazer!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Refazer!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Borracha!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Agora tens uma nova folha para desenhares!" + +#: tools.h:72 +msgid "Open..." +msgstr "Abrir..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "O teu desenho foi gravado!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Imprimindo..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Adeuzinho!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Solta o botão para completares a linha." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Mantem o botão pressionado para esticares a forma." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Move o rato para girares a forma. Clica para a denhares." + +#: tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Tudo bem... Vamos continuar com este desenho!" + diff --git a/src/messages/pt_br.po b/src/messages/pt_br.po new file mode 100644 index 000000000..b91a004b7 --- /dev/null +++ b/src/messages/pt_br.po @@ -0,0 +1,423 @@ +# Tux Paint brazilian portuguese messages +# Copyright (C) 2002 +# Daniel José Viana , 2002. + +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-08-05 22:09+0200\n" +"PO-Revision-Date: 2002-09-12 19:41--300\n" +"Last-Translator: Daniel José Viana \n" +"Language-Team: Português Brasileiro \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Quer mesmo sair?" + +#: tuxpaint.c:369 +#: tuxpaint.c:373 +#: tuxpaint.c:377 +#: tuxpaint.c:388 +#: tuxpaint.c:4592 +msgid "Yes" +msgstr "Sim" + +#: tuxpaint.c:370 +#: tuxpaint.c:374 +#: tuxpaint.c:378 +#: tuxpaint.c:389 +msgid "No" +msgstr "Não" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Se você sair, vai perder seu desenho. Quer guardá-lo?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Quer Guardar seu desenho antes?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "Iniciar um novo desenho irá apagar o desenho atual!" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "Está bem" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Nem Pensar!" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Não há desenhos guardados" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "Aceitar" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Apagar este desenho?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Guardar por cima do seu desenho anterior?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "Não, guardar um novo desenho" + +#: colors.h:56 +msgid "Black" +msgstr "Preto" + +#: colors.h:57 +msgid "White" +msgstr "Branco" + +#: colors.h:58 +msgid "Red" +msgstr "Vermelho" + +#: colors.h:59 +msgid "Pink" +msgstr "Cor-de-rosa" + +#: colors.h:60 +msgid "Orange" +msgstr "Alaranjado" + +#: colors.h:61 +msgid "Yellow" +msgstr "Amarelo" + +#: colors.h:62 +msgid "Green" +msgstr "Verde" + +#: colors.h:63 +msgid "Cyan" +msgstr "Azul Claro" + +#: colors.h:64 +msgid "Blue" +msgstr "Azul" + +#: colors.h:65 +msgid "Purple" +msgstr "Lilás" + +#: colors.h:66 +msgid "Brown" +msgstr "Marrom" + +#: colors.h:67 +msgid "Grey" +msgstr "Cinza" + +#: magic.h:46 +msgid "Mirror" +msgstr "Espelhar" + +#: magic.h:47 +msgid "Flip" +msgstr "Girar" + +#: magic.h:49 +msgid "Blur" +msgstr "Borrar" + +#: magic.h:50 +msgid "Blocks" +msgstr "Quadricular" + +#: magic.h:52 +msgid "Negative" +msgstr "Negativo" + +#: magic.h:53 +msgid "Fade" +msgstr "Desbotar" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Arco-íris" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Fagulhas" + +#: magic.h:58 +msgid "Chalk" +msgstr "Giz" + +#: magic.h:59 +msgid "Drip" +msgstr "Pingar" + +#: magic.h:61 +msgid "Thick" +msgstr "Engrossar" + +#: magic.h:62 +msgid "Thin" +msgstr "Afinar" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Clique para espelhar a imagem!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Clique para girar a imagem de cabeça pra baixo!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Clique e mova o mouse para borrar a imagem." + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Clique e mova o mouse para criar ladrilhos na imagem." + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Clique e mova o mouse para inverter as cores da imagem." + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Clique e mova o mouse para desbotar as cores." + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Você pode desenhar com as cores do arco-íris" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Clique e mova o mouse para desenhar fagulhas." + +#: magic.h:81 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Clique e mova o mouse para transformar a imagem em desenho feito com giz." + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Clique e mova o mouse para fazer a imagem ficar respingada!" + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Clique e mova o mouse para engrossar o desenho" + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Clique e mova o mouse para afinar o desenho" + +#: shapes.h:121 +#: shapes.h:122 +msgid "Square" +msgstr "Quadrado" + +#: shapes.h:123 +#: shapes.h:124 +msgid "Rectangle" +msgstr "Retângulo" + +#: shapes.h:125 +#: shapes.h:126 +msgid "Circle" +msgstr "Círculo" + +#: shapes.h:127 +#: shapes.h:128 +#: shapes.h:147 +#: shapes.h:148 +msgid "Oval" +msgstr "Ovo" + +#: shapes.h:129 +#: shapes.h:130 +msgid "Triangle" +msgstr "Triângulo" + +#: shapes.h:131 +#: shapes.h:132 +msgid "Pentagon" +msgstr "Pentágono" + +#: shapes.h:133 +#: shapes.h:134 +msgid "Diamond" +msgstr "Losango" + +#: shapes.h:141 +#: shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Um quadrado tem quatro lados. Todos com o mesmo tamanho." + +#: shapes.h:143 +#: shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Um retângulo tem quatro lados." + +#: shapes.h:145 +#: shapes.h:146 +msgid "A circle is exactly round." +msgstr "Um círculo é totalmente redondo." + +#: shapes.h:149 +#: shapes.h:150 +msgid "A triangle has three sides." +msgstr "Um triângulo tem três lados." + +#: shapes.h:151 +#: shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Um pentágono tem cinco lados." + +#: shapes.h:153 +#: shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Um losango é um quadrado girado." + +#: tools.h:42 +msgid "Paint" +msgstr "Pintar" + +#: tools.h:43 +msgid "Stamp" +msgstr "Carimbos" + +#: tools.h:44 +msgid "Lines" +msgstr "Linhas" + +#: tools.h:45 +msgid "Shapes" +msgstr "Formas" + +#: tools.h:46 +msgid "Text" +msgstr "Texto" + +#: tools.h:47 +msgid "Magic" +msgstr "Mágicas" + +#: tools.h:48 +msgid "Undo" +msgstr "Desfazer" + +#: tools.h:49 +msgid "Redo" +msgstr "Refazer" + +#: tools.h:50 +msgid "Eraser" +msgstr "Borracha" + +#: tools.h:51 +msgid "New" +msgstr "Novo" + +#: tools.h:52 +msgid "Open" +msgstr "Abrir" + +#: tools.h:53 +msgid "Save" +msgstr "Guardar" + +#: tools.h:54 +msgid "Print" +msgstr "Imprimir" + +#: tools.h:55 +msgid "Quit" +msgstr "Sair" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Escolha uma cor e uma forma (figura) para o pincel." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Escolha uma figura para carimbar no seu desenho." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Clique e segure para começar uma linha. Solte para terminá-la." + +##: tools.h:65 +#msgid "Pick a shape to draw. Click once to pick the center of the shape, #click again to draw it." +#msgstr "Escolha uma forma para desenhar. Clique uma vez para definir o centro da imagem. Clique de novo para desenhá-la." + +#: tools.h:65 +msgid "Pick a shape. Click to pick the center, drag, then let go when it is the size you want. Move around to rotate it, and click to draw it." +msgstr "Escolha uma forma para desenhar. Clique uma vez para definir o centro, mantenha clicado enquanto arrasta para ajustar o tamanho, então solte quando ela estiver do tamanho que você quiser. Mova o mouse pela tela para girar a figura. Clique novamente para desenhá-la" + + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Escolha um estilo para o texto. Clique no seu desenho para começar a escrever." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Escolha um efeito mágico para usar no seu desenho!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Desfazer!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Refazer!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Borracha!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Agora você tem uma nova folha para desenhar!" + +#: tools.h:72 +msgid "Open..." +msgstr "Abrir..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Seu desenho foi guardado!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Imprimindo..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Tchau!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Solte o botão para completar a linha." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Mantenha o botão apertado para esticar a figura." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Mova o Mouse para girar a figura. Clique para desenhála." + +#: tools.h:81 +msgid "Great!" +msgstr "Excelente!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Tudo bem... Vamos continuar desenhando nesta imagem!" + + diff --git a/src/messages/ro.po b/src/messages/ro.po new file mode 100644 index 000000000..eaffc7d3e --- /dev/null +++ b/src/messages/ro.po @@ -0,0 +1,470 @@ +# Tux Paint messages +# Translation: N/A +# +# This file is distributed under the same license as the Tux Paint +# program. +# +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.9.2pre\n" +"POT-Creation-Date: 2003-01-03 14:29-0800\n" +"PO-Revision-Date: 2003-01-03 21:32-0500\n" +"Last-Translator: Laurentiu Buzdugan \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.6\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "Doriþi într-adevãr sã ieºiþi?" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "Da" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "Nu" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Dacã ieºiþi veþi pierde imaginea voastrã! Doreºti sã o salvezi?" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "Salvezi imaginea mai întâi?" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "Nu pot deschide acea imagine!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "Bine" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "Dacã începi o nouã imagine cea curentã va fi distrusã!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "E în regulã" + +#: src/tuxpaint.c:584 +msgid "Never Mind!" +msgstr "Nu face nimic!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "Nu este nici un fiºier salvat!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "Imaginea ta a fost tipãritã!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "Nu poþi încã tipãri!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "Stergi aceastã imagine?" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "Deschide" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "ªterge" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "Înapoi" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "Salveazã peste vechea versiune a acestui desen?" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "Nu, salveazã un nou fiºier" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Alege imaginea doritã, apoi fã clic pe 'Deschide'" + +#: src/tools.h:42 +msgid "Paint" +msgstr "Picturã" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "ªtampilã" + +#: src/tools.h:44 +msgid "Lines" +msgstr "Linii" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "Forme" + +#: src/tools.h:46 +msgid "Text" +msgstr "Text" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "Magic" + +#: src/tools.h:48 +msgid "Undo" +msgstr "Des-fã" + +#: src/tools.h:49 +msgid "Redo" +msgstr "Re-fã" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "Gumã de ºters" + +#: src/tools.h:51 +msgid "New" +msgstr "Nou" + +#: src/tools.h:53 +msgid "Save" +msgstr "Salveazã" + +#: src/tools.h:54 +msgid "Print" +msgstr "Tipãreºte" + +#: src/tools.h:55 +msgid "Quit" +msgstr "Terminã" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Alegeþi culoarea ºi forma de pensulã cu care sã desenezi" + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Alege o imagine pe care sã o imprimi în jurul desenului" + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Fã clic pentru a începe sã desenezi o linie. Dã-i drumul pentru a o termina." + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Alege o formã. Fã clic pentru a alege centrul, apoi dã-i drumul când are " +"dimensiunea pe care o vrei. Miºcã maus-ul pentru a o roti ºi fã clic pentru " +"a o desena." + +#: src/tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Alege un stil de text. Fã clic pe desen apoi începe sã tastezi." + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Alege un efect magic pe care vrei sã-l foloseºti în desen!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "Des-fã!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "Re-fã!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "ªterge!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Acum ai o foaie albã pe care sã desenezi!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "Deschide..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "Imaginea ta a fost salvatã!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "Tipãreºte..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "La revedere!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Ridicaþi mâna de pe buton pentru a termina linia." + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Þine apãsat butonul pentru a întinde forma." + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Mutã mausul pentru a roti forma. Click pentru a o desena." + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Bine atunci... Sã continuãm sã-l desenãm pe acesta!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "Unelte" + +#: src/titles.h:38 +msgid "Colors" +msgstr "Culori" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "Pensule" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "ªtampile" + +#: src/titles.h:42 +msgid "Letters" +msgstr "Litere" + +#: src/colors.h:56 +msgid "Black" +msgstr "Negru" + +#: src/colors.h:57 +msgid "White" +msgstr "Alb" + +#: src/colors.h:58 +msgid "Red" +msgstr "Roºu" + +#: src/colors.h:59 +msgid "Pink" +msgstr "Roz" + +#: src/colors.h:60 +msgid "Orange" +msgstr "Portocaliu" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "Galben" + +#: src/colors.h:62 +msgid "Green" +msgstr "Verde" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "Ceruleum" + +#: src/colors.h:64 +msgid "Blue" +msgstr "Albastru" + +#: src/colors.h:65 +msgid "Purple" +msgstr "Violet" + +#: src/colors.h:66 +msgid "Brown" +msgstr "Maro" + +#: src/colors.h:67 +msgid "Grey" +msgstr "Gri" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "Pãtrat" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "Dreptunghi" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "Cerc" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "Triunghi" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "Pentagon" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "Diamant" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Un pãtrat are patru laturi, fiecare de aceeaºi lungime." + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Un dreptunghi are patru laturi." + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "Un cerc este rotund perfect." + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "Un triunghi are trei laturi." + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Un pentagon are cinci laturi." + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Un romb este un pãtrat, rotit puþin." + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "Curcubeu" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "Steluþe" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "Oglideºte" + +#: src/magic.h:52 +msgid "Flip" +msgstr "Rãstoarnã" + +#: src/magic.h:54 +msgid "Blur" +msgstr "Neclar" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "Blocuri" + +#: src/magic.h:57 +msgid "Negative" +msgstr "Negativ" + +#: src/magic.h:58 +msgid "Fade" +msgstr "Estompeazã" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "Cretã" + +#: src/magic.h:61 +msgid "Drip" +msgstr "Picurã" + +#: src/magic.h:63 +msgid "Thick" +msgstr "Gros" + +#: src/magic.h:64 +msgid "Thin" +msgstr "Subþire" + +#: src/magic.h:66 +msgid "Fill" +msgstr "Umple" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Poþi desena în culorile curcubeului!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Clic ºi miºcã pentru a desena steluþe" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Clic pentru a face o imagine în oglindã!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Clic pentru a rãsturna imaginea cu susul în jos!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Clic ºi miºcã maus-ul pentru a face imaginea neclarã" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Clic ºi miºcã maus-ul pentru a face desenul pãtrãþos" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Clic ºi miºcã maus-ul pentru a desena un negativ" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Clic ºi miºcã pentru a estompa culorile." + +#: src/magic.h:85 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Clic ºi miºcã maus-ul pentru a schimba desenul într-un desen din cretã." + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Clic ºi miºcã maus-ul pentru a face desenul curgãtor!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Clic ºi miºcã maus-ul pentru a îngroºa desenul" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Clic ºi miºcã maus-ul pentru a subþia desenul" + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "Clic în desen pentru a umple acea zonã cu culoare" + +#: src/great.h:20 +msgid "Great!" +msgstr "Grozav!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "Fantastic!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "Þine-o tot aºa!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "Bunã treabã!" + diff --git a/src/messages/sk.po b/src/messages/sk.po new file mode 100644 index 000000000..c032fc061 --- /dev/null +++ b/src/messages/sk.po @@ -0,0 +1,478 @@ +# Tux Paint slovak messages. +# Czech original 'stolen' from Peter Sterba - thanks +# merged with nessages from 0.9.3 +msgid "" +msgstr "" +"POT-Creation-Date: 2003-01-11 13:40+0100\n" +"PO-Revision-Date: 2003-01-10 00:00+0100\n" +"Last-Translator: Milan Plzik \n" +"Language-Team: Slovak \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: colors.h:56 +msgid "Black" +msgstr "Cierna" + +#: colors.h:57 +msgid "White" +msgstr "Biela" + +#: colors.h:58 +msgid "Red" +msgstr "Cervena" + +#: colors.h:59 +msgid "Pink" +msgstr "Ruzova" + +#: colors.h:60 +msgid "Orange" +msgstr "Oranzova" + +#: colors.h:61 +msgid "Yellow" +msgstr "Zlta" + +#: colors.h:62 +msgid "Green" +msgstr "Zelena" + +#: colors.h:63 +msgid "Cyan" +msgstr "Cerveno-fialova" + +#: colors.h:64 +msgid "Blue" +msgstr "Modra" + +#: colors.h:65 +msgid "Purple" +msgstr "Fialova" + +#: colors.h:66 +msgid "Brown" +msgstr "Hneda" + +#: colors.h:67 +msgid "Grey" +msgstr "Seda" + +#: great.h:20 +msgid "Great!" +msgstr "Vyborne!" + +#: great.h:21 +msgid "Cool!" +msgstr "Pekne!" + +#: great.h:22 +msgid "Keep it up!" +msgstr "Uz to nemen!" + +#: great.h:23 +msgid "Good job!" +msgstr "Dobra praca!" + +#: magic.h:48 +msgid "Rainbow" +msgstr "Duha" + +#: magic.h:49 +msgid "Sparkles" +msgstr "Iskry" + +#: magic.h:51 +msgid "Mirror" +msgstr "Zrkadlo" + +#: magic.h:52 +msgid "Flip" +msgstr "Otocit hore hlavou" + +#: magic.h:54 +msgid "Blur" +msgstr "Skvrna" + +#: magic.h:55 +msgid "Blocks" +msgstr "Kocka" + +#: magic.h:57 +msgid "Negative" +msgstr "Negativ" + +#: magic.h:58 +msgid "Fade" +msgstr "Vyblednut" + +#: magic.h:60 +msgid "Chalk" +msgstr "Krieda" + +#: magic.h:61 +msgid "Drip" +msgstr "Kvapka" + +#: magic.h:63 +msgid "Thick" +msgstr "Tucne" + +#: magic.h:64 +msgid "Thin" +msgstr "Tenko" + +#: magic.h:66 +msgid "Fill" +msgstr "Vyplnit" + +#: magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "Mozes kreslit v duhovych farbach!" + +#: magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "Klikni a pohybuj pre kreslenie iskier" + +#: magic.h:76 +msgid "Click to make a mirror image!" +msgstr "Klikni pre zrkadlenie obrazku!" + +#: magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "Klikni pre otocenie obrazka zhora hadol !" + +#: magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "Klikni a pohybuj mysou dokoola pre rozmazanie obrazku" + +#: magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Klikni a pohybuj mysou dokoola pre vytvorenie kaskady" + +#: magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "Klikni a pohybuj mysou dokoola pre vykreslenie negativu" + +#: magic.h:83 +msgid "Click and move to fade the colors." +msgstr "Klikni a hyb mysou pre vyblednutie farieb." + +#: magic.h:85 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Klikni a pohybuj mysou pre pretvorenie obrazku do kriedoveho vzhladu." + +#: magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Klikni a pohybuj mysou pre vytvorenie kvapkoviteho obrazku." + +#: magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klikni a pohybuj mysou pre rozsirenie obrazku." + +#: magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "Klikni a pohybuj mysi pre zuzenie obrazku." + +#: magic.h:91 +#, fuzzy +msgid "Click in the picture to fill that area with color" +msgstr "Klikni a posun pre vyblednutie farieb." + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Stvorec" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Obdlznik" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Kruh" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Trojuholnik" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Petuholnik" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Krystal" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "Stvorec ma styri strany, vsetky rovnako dlhe." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "Obdlzik ma styri strany" + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "Kruh je presne okruhly." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "Trojuholnik ma tri strany." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "Petuholnik ma pat stran" + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "Krystal vznikne pootacanim stvorca okolo osi." + +#: titles.h:37 +msgid "Tools" +msgstr "Nastroje" + +#: titles.h:38 +msgid "Colors" +msgstr "Farby" + +#: titles.h:39 +msgid "Brushes" +msgstr "Stetce" + +#: titles.h:40 +#, fuzzy +msgid "Stamps" +msgstr "Razitka" + +#: titles.h:41 tools.h:45 +msgid "Shapes" +msgstr "Tvary" + +#: titles.h:42 +msgid "Letters" +msgstr "Pismenka" + +#: titles.h:43 tools.h:47 +msgid "Magic" +msgstr "Kuzlo" + +#: tools.h:42 +msgid "Paint" +msgstr "Kreslit" + +#: tools.h:43 +msgid "Stamp" +msgstr "Razitko" + +#: tools.h:44 +msgid "Lines" +msgstr "Usecky" + +#: tools.h:46 +msgid "Text" +msgstr "Text" + +#: tools.h:48 +msgid "Undo" +msgstr "Spat" + +#: tools.h:49 +msgid "Redo" +msgstr "Znovu" + +#: tools.h:50 +msgid "Eraser" +msgstr "Guma" + +#: tools.h:51 +msgid "New" +msgstr "Novy" + +#: tools.h:52 tuxpaint.c:4215 +msgid "Open" +msgstr "Otvor" + +#: tools.h:53 +msgid "Save" +msgstr "Uloz" + +#: tools.h:54 +msgid "Print" +msgstr "Tlac" + +#: tools.h:55 +msgid "Quit" +msgstr "Odchod" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Vyber farbu a tvar stetca pre pouzitie." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Vyber obrazok pre podklad Tvojho obrazku." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "" +"Klikni pre pociatok usecky, tahaj mys pre orientaciu usecky a klikni pre " +"ukoncenie usecky." + +#: tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"Vyber si tvar. Kliknutim si vyber stred, potom tahaj, az kym nema spravnu" +"velkost. Hybanim mysi ho mozes otacat a kliknutim nakreslit." + +#: tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"Vyber styl textu. Klikni tam, kde chces pisat, a mozes zadavat text." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Vyber kuzelny efekt pre pouziti." + +#: tools.h:68 +msgid "Undo!" +msgstr "Spat!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Znovu!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Gumovat!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Mas teraz prazdnu plochu na kreslenie!" + +#: tools.h:72 +msgid "Open..." +msgstr "Otvorit..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Obrazok bol ulozeny!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Tlaci sa..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Dovidenia!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Drz stlacene tlacitko pre dokoncenie usecky." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Drz tlacitko pre roztiahnutie tvaru." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Hyb mysou pre rotaciu tvaru. Klikni pre jeho vykreslenie." + +#: tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Ok, nezabudni si tento obrazok ulozit!" + +#: tuxpaint.c:621 +msgid "Do you really want to quit?" +msgstr "Naozaj chces skoncit?" + +#: tuxpaint.c:622 tuxpaint.c:626 tuxpaint.c:630 tuxpaint.c:650 tuxpaint.c:6529 +#: tuxpaint.c:7187 +msgid "Yes" +msgstr "Ano" + +#: tuxpaint.c:623 tuxpaint.c:627 tuxpaint.c:631 tuxpaint.c:651 tuxpaint.c:6532 +msgid "No" +msgstr "Niee" + +#: tuxpaint.c:625 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Ak skoncis, stratis svoj obrazok! Chces ho ulozit?" + +#: tuxpaint.c:629 +msgid "Save your picture first?" +msgstr "Chces najskor ulozit obrazok?" + +#: tuxpaint.c:633 +#, fuzzy +msgid "Can't open that picture!" +msgstr "Vymazat tento obrazok?" + +#: tuxpaint.c:634 tuxpaint.c:641 tuxpaint.c:644 tuxpaint.c:647 tuxpaint.c:7521 +msgid "Okay" +msgstr "OK" + +#: tuxpaint.c:636 +msgid "Starting a new picture will erase the current one!" +msgstr "Vytvorenim noveho obrazku vymazes tento!" + +#: tuxpaint.c:637 +msgid "That's Ok" +msgstr "OK, pokracuj" + +#: tuxpaint.c:638 +msgid "Never Mind!" +msgstr "Niee, spat!" + +#: tuxpaint.c:640 +msgid "There are no saved files!" +msgstr "Nie su tu ziadne ulozene subrory!" + +#: tuxpaint.c:643 +#, fuzzy +msgid "Your picture has been printed!" +msgstr "Obrazok bol ulozeny!" + +#: tuxpaint.c:646 +msgid "You can't print yet!" +msgstr "Teraz sa neda tlacit!" + +#: tuxpaint.c:649 +msgid "Erase this picture?" +msgstr "Vymazat tento obrazok?" + +#: tuxpaint.c:4220 +#, fuzzy +msgid "Erase" +msgstr "Guma" + +#: tuxpaint.c:4225 +#, fuzzy +msgid "Back" +msgstr "Cierna" + +#: tuxpaint.c:7186 +msgid "Save over the older version of this drawing?" +msgstr "Chces prepisat starsti obrazok tymto?" + +#: tuxpaint.c:7188 +msgid "No, save a new file" +msgstr "Nie, uloz ho ako novy subor" + +#: tuxpaint.c:7782 +msgid "Choose the picture you want, then click 'Open'" +msgstr "Vyber obrazok, ktory chces, a potom klikni na 'Otvor'" + +#~ msgid "" +#~ "Pick a shape to draw. Click once to pick the center of the shape, click " +#~ "again to draw it." +#~ msgstr "" +#~ "Vyber tvar pre pouzitie. Klikni raz pre vyber stredu tvaru, druhykrat " +#~ "klikni pre vlozenie tvaru." diff --git a/src/messages/sv.po b/src/messages/sv.po new file mode 100644 index 000000000..fb233396f --- /dev/null +++ b/src/messages/sv.po @@ -0,0 +1,400 @@ +# Tux Paint german messages. +# Copyright (C) 2002. +# Fabian Franz , 2002. +# +msgid "" +msgstr "" +"POT-Creation-Date: 2002-08-05 22:09+0200\n" +"PO-Revision-Date: 2002-08-22 15:45-0800\n" +"Last-Translator: Daniel Andersson \n" +"Language-Team: Swedish\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Textpad\n" + +#: tuxpaint.c:368 +msgid "Do you really want to quit?" +msgstr "Vill du verkligen avsluta?" + +#: tuxpaint.c:369 tuxpaint.c:373 tuxpaint.c:377 tuxpaint.c:388 tuxpaint.c:4592 +msgid "Yes" +msgstr "Ja" + +#: tuxpaint.c:370 tuxpaint.c:374 tuxpaint.c:378 tuxpaint.c:389 +msgid "No" +msgstr "Nej" + +#: tuxpaint.c:372 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "" +"Om du avslutar, så kommer du att förlora bilden!" +"Vill du spara den?" + +#: tuxpaint.c:376 +msgid "Save your picture first?" +msgstr "Spara bilden först?" + +#: tuxpaint.c:380 +msgid "Starting a new picture will erase the current one!" +msgstr "Att påbörja en ny bild kommer att radera den nuvarande bilden!" + +#: tuxpaint.c:381 +msgid "That's Ok" +msgstr "Det är okej!" + +#: tuxpaint.c:382 +msgid "Never Mind!" +msgstr "Det gör ingenting!" + +#: tuxpaint.c:384 +msgid "There are no saved files!" +msgstr "Det finns inga sparade filer!" + +#: tuxpaint.c:385 +msgid "Okay" +msgstr "Okej" + +#: tuxpaint.c:387 +msgid "Erase this picture?" +msgstr "Radera den här bilden?" + +#: tuxpaint.c:4591 +msgid "Save over the older version of this drawing?" +msgstr "Spara över den äldre versionen utav den här bilden?" + +#: tuxpaint.c:4593 +msgid "No, save a new file" +msgstr "Nej, spara i en ny fil!" + +#: colors.h:56 +msgid "Black" +msgstr "Svart" + +#: colors.h:57 +msgid "White" +msgstr "Vit" + +#: colors.h:58 +msgid "Red" +msgstr "Röd" + +#: colors.h:59 +msgid "Pink" +msgstr "Rosa" + +#: colors.h:60 +msgid "Orange" +msgstr "Orange" + +#: colors.h:61 +msgid "Yellow" +msgstr "Gul" + +#: colors.h:62 +msgid "Green" +msgstr "Grön" + +#: colors.h:63 +msgid "Cyan" +msgstr "Turkos" + +#: colors.h:64 +msgid "Blue" +msgstr "Blå" + +#: colors.h:65 +msgid "Purple" +msgstr "Lila" + +#: colors.h:66 +msgid "Brown" +msgstr "Brun" + +#: colors.h:67 +msgid "Grey" +msgstr "Grå" + +#: magic.h:46 +msgid "Mirror" +msgstr "Spegel" + +#: magic.h:47 +msgid "Flip" +msgstr "Vänd" + +#: magic.h:49 +msgid "Blur" +msgstr "Suddig" + +#: magic.h:50 +msgid "Blocks" +msgstr "Block" + +#: magic.h:52 +msgid "Negative" +msgstr "Negativ" + +#: magic.h:53 +msgid "Fade" +msgstr "Blekna" + +#: magic.h:55 +msgid "Rainbow" +msgstr "Rengbåge" + +#: magic.h:56 +msgid "Sparkles" +msgstr "Gnistor" + +#: magic.h:58 +msgid "Chalk" +msgstr "Krita" + +#: magic.h:59 +msgid "Drip" +msgstr "Droppa" + +#: magic.h:61 +msgid "Thick" +msgstr "Tjock" + +#: magic.h:62 +msgid "Thin" +msgstr "Tunn" + +#: magic.h:69 +msgid "Click to make a mirror image!" +msgstr "Klicka för att skapa en spegelbild!" + +#: magic.h:70 +msgid "Click to flip the picture upside-down!" +msgstr "Klicka för att vända bilden upp-och-ner!" + +#: magic.h:72 +msgid "Click and move the mouse around to blur the picture" +msgstr "Klicka och rör musen runt för att göra den suddig" + +#: magic.h:73 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "Klicka och rör musen runt för att göra bilden 'blockig'" + +#: magic.h:75 +msgid "Click and move the mouse around to draw a negative" +msgstr "Klicka och rör musen runt för att skapa ett negativ" + +#: magic.h:76 +msgid "Click and move to fade the colors." +msgstr "Klicka och rör musen runt för att blekna färgerna!" + +#: magic.h:78 +msgid "You can draw in rainbow colors!" +msgstr "Du kan rita i rengbågs-färger!" + +#: magic.h:79 +msgid "Click and move to draw sparkles" +msgstr "Klicka och rör musen runt för att rita gnistor!" + +#: magic.h:81 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Klicka och rör musen runt för att omvandla bilden till krit-ritning!" + +#: magic.h:82 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Klicka och rör musen runt för att göra så att bilden 'droppar'!" + +#: magic.h:84 +msgid "Click and move the mouse to thicken the picture" +msgstr "Klicka och rör musen runt för att göra bilden tjockare!" + +#: magic.h:85 +msgid "Click and move the mouse to thin the picture" +msgstr "Klicka och rör musen runt för att göra bilden smalare!" + +#: shapes.h:121 shapes.h:122 +msgid "Square" +msgstr "Fyrkant" + +#: shapes.h:123 shapes.h:124 +msgid "Rectangle" +msgstr "Rektangel" + +#: shapes.h:125 shapes.h:126 +msgid "Circle" +msgstr "Cirkel" + +#: shapes.h:127 shapes.h:128 shapes.h:147 shapes.h:148 +msgid "Oval" +msgstr "Oval" + +#: shapes.h:129 shapes.h:130 +msgid "Triangle" +msgstr "Triangel" + +#: shapes.h:131 shapes.h:132 +msgid "Pentagon" +msgstr "Femhörning" + +#: shapes.h:133 shapes.h:134 +msgid "Diamond" +msgstr "Romb" + +#: shapes.h:141 shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "En fyrkant har fyra sidor, alla är lika långa." + +#: shapes.h:143 shapes.h:144 +msgid "A rectangle has four sides." +msgstr "En rektangel har fyra sidor." + +#: shapes.h:145 shapes.h:146 +msgid "A circle is exactly round." +msgstr "En cirkel är helt rund." + +#: shapes.h:149 shapes.h:150 +msgid "A triangle has three sides." +msgstr "En triangel har tre sidor." + +#: shapes.h:151 shapes.h:152 +msgid "A pentagon has five sides." +msgstr "En femhörning har fem sidor." + +#: shapes.h:153 shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "En romb är rund, lätt vänd." + +#: tools.h:42 +msgid "Paint" +msgstr "Rita" + +#: tools.h:43 +msgid "Stamp" +msgstr "Stämpel" + +#: tools.h:44 +msgid "Lines" +msgstr "Linjer" + +#: tools.h:45 +msgid "Shapes" +msgstr "Former" + +#: tools.h:46 +msgid "Text" +msgstr "Text" + +#: tools.h:47 +msgid "Magic" +msgstr "Magik" + +#: tools.h:48 +msgid "Undo" +msgstr "Ångra" + +#: tools.h:49 +msgid "Redo" +msgstr "Göra om" + +#: tools.h:50 +msgid "Eraser" +msgstr "Radergummi" + +#: tools.h:51 +msgid "New" +msgstr "Ny" + +#: tools.h:52 +msgid "Open" +msgstr "Öppna" + +#: tools.h:53 +msgid "Save" +msgstr "Spara" + +#: tools.h:54 +msgid "Print" +msgstr "Skriv ut" + +#: tools.h:55 +msgid "Quit" +msgstr "Avsluta" + +#: tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "Välj en färg och en borste att rita med." + +#: tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "Välj en bild att stämpla runt din bild." + +#: tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Klicka för att börja rita en linje. Släpp för att avsluta den." + +#: tools.h:65 +msgid "" +"Pick a shape to draw. Click once to pick the center of the shape, click " +"again to draw it." +msgstr "" +"Välj en form att rita. Klicka en gång för att välja mitten utav formen, " +"klicka igen för att rita med den." + +#: tools.h:66 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"Välj stil på texten. Klicka på din bild och du kan börja skriva." + +#: tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Välj en magisk effekt som ska användas på din bild!" + +#: tools.h:68 +msgid "Undo!" +msgstr "Ångra!" + +#: tools.h:69 +msgid "Redo!" +msgstr "Gör om!" + +#: tools.h:70 +msgid "Eraser!" +msgstr "Radergummi!" + +#: tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "Du har nu en tom bild att rita på!" + +#: tools.h:72 +msgid "Open..." +msgstr "Öppna..." + +#: tools.h:73 +msgid "Your image has been saved!" +msgstr "Din bild har sparats!" + +#: tools.h:74 +msgid "Printing..." +msgstr "Skriver ut..." + +#: tools.h:75 +msgid "Bye bye!" +msgstr "Hej då!" + +#: tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "Släpp knappen för att avsluta linjen." + +#: tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "Håll ner knappen för att sträcka ut formen." + +#: tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Flytta musen för att rotera formen. Klicka för att rita den." + +#: tools.h:81 +msgid "Great!" +msgstr "Perfekt!" + +#: tools.h:82 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Okej.. Låt oss fortsätta rita den här!" diff --git a/src/messages/tr.po b/src/messages/tr.po new file mode 100644 index 000000000..28c316f8a --- /dev/null +++ b/src/messages/tr.po @@ -0,0 +1,356 @@ +# Tux Paint turkish messages. +# Copyright (C) 2002. +# Doruk Fisek , 2002. +#: shapes.h:129 +msgid "" +msgstr "" +"Project-Id-Version: TuxPaint 0.0.1pre\n" +"POT-Creation-Date: 2002-07-26 12:34+0200\n" +"PO-Revision-Date: 2002-08-12 01:44Europe/Istanbul\n" +"Last-Translator: Doruk Fisek \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.5\n" + +#: tuxpaint.c:413 +msgid "Do you really want to quit?" +msgstr "Gerçekten çıkmak istiyor musunuz?" + +#: tuxpaint.c:414 tuxpaint.c:418 tuxpaint.c:422 tuxpaint.c:433 tuxpaint.c:4316 +msgid "Yes" +msgstr "Evet" + +#: tuxpaint.c:415 tuxpaint.c:419 tuxpaint.c:423 tuxpaint.c:434 +msgid "No" +msgstr "Hayır" + +#: tuxpaint.c:417 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "Eğer çıkarsanız, resmi kaybedeceksiniz! Kaydedelim mi?" + +#: tuxpaint.c:421 +msgid "Save your picture first?" +msgstr "İlk önce resmi kaydetmek ister misiniz?" + +#: tuxpaint.c:425 +msgid "Starting a new picture will erase the current one!" +msgstr "Yeni bir resme başlamak şu ankini silecektir!" + +#: tuxpaint.c:426 +msgid "That's Ok" +msgstr "Tamamdır" + +#: tuxpaint.c:427 +msgid "Never Mind!" +msgstr "Boşver!" + +#: tuxpaint.c:429 +msgid "There are no saved files!" +msgstr "Kaydedilmiş hiç dosya yok!" + +#: tuxpaint.c:430 +msgid "Okay" +msgstr "Tamam" + +#: tuxpaint.c:432 +msgid "Erase this picture?" +msgstr "Bu resmi sileyim mi?" + +#: tuxpaint.c:4315 +msgid "Save over the older version of this drawing?" +msgstr "Bu çizimin eski halinin üzerine mi kaydedeyim?" + +#: tuxpaint.c:4317 +msgid "No, save a new file" +msgstr "Hayir, yeni bir dosyaya kaydet" + +#: colors.h:115 +msgid "Black" +msgstr "Siyah" + +#: colors.h:116 +msgid "White" +msgstr "Beyaz" + +#: colors.h:117 +msgid "Red" +msgstr "Kırmızı" + +#: colors.h:118 +msgid "Pink" +msgstr "Pembe" + +#: colors.h:119 +msgid "Orange" +msgstr "Turuncu" + +#: colors.h:120 +msgid "Yellow" +msgstr "Sarı" + +#: colors.h:121 +msgid "Green" +msgstr "Yeşil" + +#: colors.h:122 +msgid "Cyan" +msgstr "Turkuaz" + +#: colors.h:123 +msgid "Blue" +msgstr "Mavi" + +#: colors.h:124 +msgid "Purple" +msgstr "Mor" + +#: colors.h:125 +msgid "Brown" +msgstr "Kahverengi" + +#: colors.h:126 +msgid "Grey" +msgstr "Gri" + +#: magic.h:41 +msgid "Click to make a mirror image!" +msgstr "Bir ayna görüntüsü yapmak için tıklayın" + +#: magic.h:42 +msgid "Click to flip the picture upside-down!" +msgstr "Resmi başaşağı çevirmek için tıklayın" + +#: magic.h:43 +msgid "Click and move the mouse around to blur the picture" +msgstr "Resmi bulanık hale getirmek için fareye tıklayın ve onu etrafta gezdirin" + +#: magic.h:45 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "" + +#: magic.h:46 +msgid "Click and move the mouse around to draw a negative" +msgstr "Negatif elde etmek için fareye tıklayın ve onu etrafta gezdirin" + +#: magic.h:47 +msgid "You can draw in rainbow colors!" +msgstr "Gökkuşağı renklerinde çizebilirsiniz" + +#: magic.h:48 +msgid "Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "Resmi bir tebeşire çevirmek için fareye tıklayın ve onu etrafta gezdirin" + +#: magic.h:49 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "Resmi damla damla akıtmak için fareye tıklayın ve onu etrafta gezdirin" + +#: magic.h:50 +msgid "Click and move to draw sparkles" +msgstr "Kıvılcımlar çizmek için tıklayın ve hareket ettirin" + +#: magic.h:51 +msgid "Click and move to fade the colors." +msgstr "Renkleri sönükleştirmek için tıklayın ve hareket ettirin" + +#: shapes.h:123 +msgid "A square has four sides, each the same length." +msgstr "Bir karenin dört kenarı vardır, her kenarı aynı uzunluktadır." + +#: shapes.h:125 +msgid "A rectangle has four sides." +msgstr "Bir dikdörtgenin dört kenarı vardır." + +#: shapes.h:127 +msgid "A circle is exactly round." +msgstr "Bir daire tam olarak yuvarlaktır." + +#: shapes.h:131 +msgid "A triangle has three sides." +msgstr "Bir üçgenin üç kenarı vardır." + +#: shapes.h:133 +msgid "A pentagon has five sides." +msgstr "Bir beşgenin beş kenarı vardır." + +#: shapes.h:135 +msgid "A diamond is a square, turned around slightly." +msgstr "Bir eşkenar dörtgen bir karedir, hafifçe kendi etrafında döndürülmüştür." + +#: tools.h:131 +msgid "Pick a color and a brush shape to draw with." +msgstr "Çizmek için bir renk ve bir fırça seçin." + +#: tools.h:132 +msgid "Pick a picture to stamp around your drawing." +msgstr "Çiziminizi damgalamak için bir resim seçin." + +#: tools.h:133 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "Bir doğru çizmeye başlamak için fareye tıklayın. Tamamlamak için fareyi bırakın." + +#: tools.h:134 +msgid "Pick a shape to draw. Click once to pick the center of the shape, click again to draw it." +msgstr "Çizmek için bir şekil seçin. Şeklin merkezini seçmek için bir kez tıklayın, ikinci kez de çizmek için tıklayın." + +#: tools.h:135 +msgid "Choose a style of text. Click on your drawing and you can start typing." +msgstr "Bir yazı stili seçin. Çiziminizin üzerine tıklayın ve yazmaya başlayabilirsiniz." + +#: tools.h:136 +msgid "Pick a magical effect to use on your drawing!" +msgstr "Çiziminiz üzerinde kullanmak için bir büyülü efekt seçin!" + +#: tools.h:137 +msgid "Undo!" +msgstr "Geri al!" + +#: tools.h:138 +msgid "Redo!" +msgstr "İleri al!" + +#: tools.h:139 +msgid "Eraser!" +msgstr "Silgi!" + +#: tools.h:140 +msgid "You now have a blank sheet to draw on!" +msgstr "Şimdi çizim yapmak için temiz bir sayfanız var!" + +#: tools.h:141 +msgid "Open..." +msgstr "Aç..." + +#: tools.h:142 +msgid "Your image has been saved!" +msgstr "Resminiz kaydedildi!" + +#: tools.h:143 +msgid "Printing..." +msgstr "Yazdırılıyor..." + +#: tools.h:144 +msgid "Bye, Bye" +msgstr "Güle Güle" + +#: tools.h:147 +msgid "Let go of the button to complete the line." +msgstr "Doğruyu tamamlamak için tuşu bırakın." + +#: tools.h:148 +msgid "Hold the button to stretch the shape." +msgstr "Şekli çekip uzatmak için tuşa basılı tutun." + +#: tools.h:149 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "Şekli döndürmek için fareyi hareket ettirin. Onu çizmek icin tıklayın." + +#: tools.h:150 +msgid "Great!" +msgstr "Harika!" + +#: tools.h:151 +msgid "Ok then... Let's keep drawing this one!" +msgstr "Tamam o zaman... Bunu çizmeye devam edelim!" + +#: shapes.h:122 +msgid "Square" +msgstr "Kare" + +#: shapes.h:126 +msgid "Circle" +msgstr "Daire" + +#: shapes.h:128 +msgid "Oval" +msgstr "Oval" + +#: shapes.h:132 +msgid "Pentagon" +msgstr "Beşgen" + +#: shapes.h:134 +msgid "Diamond" +msgstr "Eşkenar dörtgen" + +#: magic.h +msgid "Mirror" +msgstr "Ayna" + +msgid "Flip" +msgstr "Takla attır" + +msgid "Blur" +msgstr "Bulanıklaştır" + +msgid "Blocks" +msgstr "Bloklar" + +msgid "Negative" +msgstr "Negatif" + +msgid "Fade" +msgstr "Sönük" + +msgid "Rainbow" +msgstr "Gökkuşağı" + +msgid "Sparkles" +msgstr "Kıvılcımlar" + +msgid "Chalk" +msgstr "Tebeşir" + +msgid "Drip" +msgstr "Akıtmak" + +msgid "Thick" +msgstr "Kalın" + +msgid "Thin" +msgstr "İnce" + +#: tools.h +msgid "Paint" +msgstr "Boya" + +msgid "Stamp" +msgstr "Damga" + +msgid "Lines" +msgstr "Doğrular" + +msgid "Shapes" +msgstr "Şekiller" + +msgid "Text" +msgstr "Yazı" + +msgid "Magic" +msgstr "Büyü" + +msgid "Undo" +msgstr "Geri al" + +msgid "Redo" +msgstr "İleri al" + +msgid "Eraser" +msgstr "Silgi" + +msgid "New" +msgstr "Yeni" + +msgid "Open" +msgstr "Aç" + +msgid "Save" +msgstr "Kaydet" + +msgid "Print" +msgstr "Yazdır" + +msgid "Quit" +msgstr "Çıkış" + diff --git a/src/messages/zh_cn.po b/src/messages/zh_cn.po new file mode 100644 index 000000000..63bea0166 --- /dev/null +++ b/src/messages/zh_cn.po @@ -0,0 +1,477 @@ +# Tux Paint messages +# Translation: N/A +# +# This file is distributed under the same license as the Tux Paint +# program. +# +# Wang Jian , 2003 +# +# Special note from lark: Because it is for children, the translation +# should not be cold. +# +msgid "" +msgstr "" +"Project-Id-Version: Tuxpaint 0.9.2pre\n" +"POT-Creation-Date: 2003-01-03 14:29-0800\n" +"PO-Revision-Date: 2003-01-03 14:29+0900\n" +"Last-Translator: Wang Jian \n" +"Language-Team: zh_CN \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/tuxpaint.c:567 +msgid "Do you really want to quit?" +msgstr "你真的要退出吗?" + +#: src/tuxpaint.c:568 src/tuxpaint.c:572 src/tuxpaint.c:576 src/tuxpaint.c:596 +#: src/tuxpaint.c:6280 src/tuxpaint.c:6921 +msgid "Yes" +msgstr "是的" + +#: src/tuxpaint.c:569 src/tuxpaint.c:573 src/tuxpaint.c:577 src/tuxpaint.c:597 +#: src/tuxpaint.c:6283 +msgid "No" +msgstr "不要" + +#: src/tuxpaint.c:571 +msgid "If you quit, you'll lose your picture! Save it?" +msgstr "如果你退出了,你会失去你的图片!保存起来吗?" + +#: src/tuxpaint.c:575 +msgid "Save your picture first?" +msgstr "先保存你的图片?" + +#: src/tuxpaint.c:579 +msgid "Can't open that picture!" +msgstr "打不开那个图片啊!" + +#: src/tuxpaint.c:580 src/tuxpaint.c:587 src/tuxpaint.c:590 src/tuxpaint.c:593 +#: src/tuxpaint.c:7255 +msgid "Okay" +msgstr "好的" + +#: src/tuxpaint.c:582 +msgid "Starting a new picture will erase the current one!" +msgstr "新开一个图片会删除现在的图片啊!" + +#: src/tuxpaint.c:583 +msgid "That's Ok" +msgstr "没问题" + +#: src/tuxpaint.c:584 +#. no context, maybe wrong +msgid "Never Mind!" +msgstr "不用担心!" + +#: src/tuxpaint.c:586 +msgid "There are no saved files!" +msgstr "没有保存过的文件啊!" + +#: src/tuxpaint.c:589 +msgid "Your picture has been printed!" +msgstr "你的图片被打印出来了!" + +#: src/tuxpaint.c:592 +msgid "You can't print yet!" +msgstr "你还不能打印耶!" + +#: src/tuxpaint.c:595 +msgid "Erase this picture?" +msgstr "删除这个图片吗?" + +#: src/tuxpaint.c:4067 src/tools.h:52 +msgid "Open" +msgstr "打开" + +#: src/tuxpaint.c:4077 +msgid "Erase" +msgstr "删除" + +#: src/tuxpaint.c:4087 +msgid "Back" +msgstr "退回" + +#: src/tuxpaint.c:6920 +msgid "Save over the older version of this drawing?" +msgstr "取代这个图的旧版本吗?" + +#: src/tuxpaint.c:6922 +msgid "No, save a new file" +msgstr "不,保存到新文件" + +#: src/tuxpaint.c:7516 +msgid "Choose the picture you want, then click 'Open'" +msgstr "选择你要打开的图片,然后点击“打开”" + +#: src/tools.h:42 +msgid "Paint" +msgstr "绘图" + +#: src/tools.h:43 +msgid "Stamp" +msgstr "印记" + +#: src/tools.h:44 +msgid "Lines" +msgstr "线条" + +#: src/tools.h:45 src/titles.h:41 +msgid "Shapes" +msgstr "形状" + +#: src/tools.h:46 +msgid "Text" +msgstr "文本" + +#: src/tools.h:47 src/titles.h:43 +msgid "Magic" +msgstr "奇特效果" + +#: src/tools.h:48 +msgid "Undo" +msgstr "取消" + +#: src/tools.h:49 +msgid "Redo" +msgstr "重复" + +#: src/tools.h:50 +msgid "Eraser" +msgstr "橡皮擦" + +#: src/tools.h:51 +msgid "New" +msgstr "新建" + +#: src/tools.h:53 +msgid "Save" +msgstr "保存" + +#: src/tools.h:54 +msgid "Print" +msgstr "打印" + +#: src/tools.h:55 +msgid "Quit" +msgstr "退出" + +#: src/tools.h:62 +msgid "Pick a color and a brush shape to draw with." +msgstr "选择一个颜色和一个形状的画笔。" + +#: src/tools.h:63 +msgid "Pick a picture to stamp around your drawing." +msgstr "选择印在画周围的图片。" + +#: src/tools.h:64 +msgid "Click to start drawing a line. Let go to complete it." +msgstr "点击开始画线。我们来完成它吧。" + +#: src/tools.h:65 +msgid "" +"Pick a shape. Click to pick the center, drag, then let go when it is the " +"size you want. Move around to rotate it, and click to draw it." +msgstr "" +"选择一个形状。单击选中中心然后拖动,当大小是你所需要的时候就放开。" +"光标移动就可以旋转它,单击就绘制完成。" + +#: src/tools.h:66 +msgid "" +"Choose a style of text. Click on your drawing and you can start typing." +msgstr "" +"选择文字的样式。在绘制的图片上单击就可以开始输入文字。" + +#: src/tools.h:67 +msgid "Pick a magical effect to use on your drawing!" +msgstr "选择一个可以用在你的图片上的魔术效果吧!" + +#: src/tools.h:68 +msgid "Undo!" +msgstr "取消!" + +#: src/tools.h:69 +msgid "Redo!" +msgstr "重复!" + +#: src/tools.h:70 +msgid "Eraser!" +msgstr "橡皮擦!" + +#: src/tools.h:71 +msgid "You now have a blank sheet to draw on!" +msgstr "你现在可以从空白开始画了!" + +#: src/tools.h:72 +msgid "Open..." +msgstr "打开..." + +#: src/tools.h:73 +msgid "Your image has been saved!" +msgstr "你的图片被保存了!" + +#: src/tools.h:74 +msgid "Printing..." +msgstr "正在打印哦..." + +#: src/tools.h:75 +msgid "Bye bye!" +msgstr "再见了!" + +#: src/tools.h:78 +msgid "Let go of the button to complete the line." +msgstr "我们按按钮来完成线条吧。" + +#: src/tools.h:79 +msgid "Hold the button to stretch the shape." +msgstr "按住按钮来缩放。" + +#: src/tools.h:80 +msgid "Move the mouse to rotate the shape. Click to draw it." +msgstr "移动鼠标来旋转形状。单击就可以画出它。" + +#: src/tools.h:81 +msgid "Ok then... Let's keep drawing this one!" +msgstr "好了... 我们继续画这个!" + +#: src/titles.h:37 +msgid "Tools" +msgstr "工具" + +#: src/titles.h:38 +msgid "Colors" +msgstr "颜色" + +#: src/titles.h:39 +msgid "Brushes" +msgstr "画笔" + +#: src/titles.h:40 +msgid "Stamps" +msgstr "印记" + +#: src/titles.h:42 +msgid "Letters" +msgstr "字母" + +#: src/colors.h:56 +msgid "Black" +msgstr "黑色" + +#: src/colors.h:57 +msgid "White" +msgstr "白色" + +#: src/colors.h:58 +msgid "Red" +msgstr "红色" + +#: src/colors.h:59 +msgid "Pink" +msgstr "粉红色" + +#: src/colors.h:60 +msgid "Orange" +msgstr "橙色" + +#: src/colors.h:61 +msgid "Yellow" +msgstr "黄色" + +#: src/colors.h:62 +msgid "Green" +msgstr "绿色" + +#: src/colors.h:63 +msgid "Cyan" +msgstr "青色" + +#: src/colors.h:64 +msgid "Blue" +msgstr "蓝色" + +#: src/colors.h:65 +msgid "Purple" +msgstr "紫色" + +#: src/colors.h:66 +msgid "Brown" +msgstr "棕色" + +#: src/colors.h:67 +msgid "Grey" +msgstr "灰色" + +#: src/shapes.h:121 src/shapes.h:122 +msgid "Square" +msgstr "正方形" + +#: src/shapes.h:123 src/shapes.h:124 +msgid "Rectangle" +msgstr "长方形" + +#: src/shapes.h:125 src/shapes.h:126 +msgid "Circle" +msgstr "圆形" + +#: src/shapes.h:127 src/shapes.h:128 src/shapes.h:147 src/shapes.h:148 +msgid "Oval" +msgstr "椭圆形" + +#: src/shapes.h:129 src/shapes.h:130 +msgid "Triangle" +msgstr "三角形" + +#: src/shapes.h:131 src/shapes.h:132 +msgid "Pentagon" +msgstr "五角形" + +#: src/shapes.h:133 src/shapes.h:134 +msgid "Diamond" +msgstr "菱形" + +#: src/shapes.h:141 src/shapes.h:142 +msgid "A square has four sides, each the same length." +msgstr "正方形有四个边,每个边的长度都相等。" + +#: src/shapes.h:143 src/shapes.h:144 +msgid "A rectangle has four sides." +msgstr "长方形有四个边。" + +#: src/shapes.h:145 src/shapes.h:146 +msgid "A circle is exactly round." +msgstr "圆形是正圆的。" + +#: src/shapes.h:149 src/shapes.h:150 +msgid "A triangle has three sides." +msgstr "三角形有三个边。" + +#: src/shapes.h:151 src/shapes.h:152 +msgid "A pentagon has five sides." +msgstr "五角形有五个边。" + +#: src/shapes.h:153 src/shapes.h:154 +msgid "A diamond is a square, turned around slightly." +msgstr "菱形就象一个正方形稍微倾斜了。" + +#: src/magic.h:48 +msgid "Rainbow" +msgstr "彩虹" + +#: src/magic.h:49 +msgid "Sparkles" +msgstr "火花" + +#: src/magic.h:51 +msgid "Mirror" +msgstr "镜子" + +#: src/magic.h:52 +msgid "Flip" +msgstr "颠倒" + +#: src/magic.h:54 +msgid "Blur" +msgstr "模糊" + +#: src/magic.h:55 +msgid "Blocks" +msgstr "拼块" + +#: src/magic.h:57 +msgid "Negative" +msgstr "底片" + +#: src/magic.h:58 +msgid "Fade" +msgstr "退色" + +#: src/magic.h:60 +msgid "Chalk" +msgstr "粉笔" + +#: src/magic.h:61 +msgid "Drip" +msgstr "水滴" + +#: src/magic.h:63 +msgid "Thick" +msgstr "变浓" + +#: src/magic.h:64 +msgid "Thin" +msgstr "变淡" + +#: src/magic.h:66 +msgid "Fill" +msgstr "填充" + +#: src/magic.h:73 +msgid "You can draw in rainbow colors!" +msgstr "你可以用彩虹的颜色画图耶!" + +#: src/magic.h:74 +msgid "Click and move to draw sparkles" +msgstr "单击然后移动来画火花" + +#: src/magic.h:76 +msgid "Click to make a mirror image!" +msgstr "单击作出镜子中的效果!" + +#: src/magic.h:77 +msgid "Click to flip the picture upside-down!" +msgstr "单击将图片上下颠倒!" + +#: src/magic.h:79 +msgid "Click and move the mouse around to blur the picture" +msgstr "单击然后移动鼠标将图片变模糊" + +#: src/magic.h:80 +msgid "Click and move the mouse around to make the picture blocky" +msgstr "单击然后移动鼠标将图片变成裂片的效果" + +#: src/magic.h:82 +msgid "Click and move the mouse around to draw a negative" +msgstr "单击然后移动鼠标来绘制相片底片" + +#: src/magic.h:83 +msgid "Click and move to fade the colors." +msgstr "单击然后移动来将使颜色退色。" + +#: src/magic.h:85 +msgid "" +"Click and move the mouse around to turn the picture into a chalk drawing." +msgstr "" +"单击然后移动鼠标将图片变成粉笔画。" + +#: src/magic.h:86 +msgid "Click and move the mouse around to make the picture drip!" +msgstr "单击然后移动鼠标将图片变成水滴图!" + +#: src/magic.h:88 +msgid "Click and move the mouse to thicken the picture" +msgstr "单击然后移动鼠标将图片变浓" + +#: src/magic.h:89 +msgid "Click and move the mouse to thin the picture" +msgstr "单击然后移动鼠标将图片变淡" + +#: src/magic.h:91 +msgid "Click in the picture to fill that area with color" +msgstr "单击图片用颜色填充区域" + +#: src/great.h:20 +msgid "Great!" +msgstr "真不错!" + +#: src/great.h:21 +msgid "Cool!" +msgstr "真厉害!" + +#: src/great.h:22 +msgid "Keep it up!" +msgstr "继续呀!" + +#: src/great.h:23 +msgid "Good job!" +msgstr "干得好呀!" diff --git a/src/mouse/arrow-mask.xbm b/src/mouse/arrow-mask.xbm new file mode 100644 index 000000000..44ac43ee8 --- /dev/null +++ b/src/mouse/arrow-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define arrow_mask_width 32 +#define arrow_mask_height 32 +static unsigned char arrow_mask_bits[] = { + 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0xff, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, + 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, + 0xff, 0x1f, 0x00, 0x00, 0x9f, 0x1f, 0x00, 0x00, 0x8f, 0x3f, 0x00, 0x00, + 0x07, 0x3f, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, + 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/arrow.xbm b/src/mouse/arrow.xbm new file mode 100644 index 000000000..27deaca28 --- /dev/null +++ b/src/mouse/arrow.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define arrow_width 32 +#define arrow_height 32 +static unsigned char arrow_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, + 0xfe, 0x07, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, + 0xfe, 0x3f, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, + 0xfe, 0x0f, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, + 0x9e, 0x0f, 0x00, 0x00, 0x0e, 0x0f, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, + 0x02, 0x1e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/brush-mask.xbm b/src/mouse/brush-mask.xbm new file mode 100644 index 000000000..7041b7e30 --- /dev/null +++ b/src/mouse/brush-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define brush_mask_width 32 +#define brush_mask_height 32 +static unsigned char brush_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, + 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xe0, 0x1f, + 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf8, 0x07, + 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xfe, 0x01, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x80, 0x7f, 0x00, + 0x00, 0xc0, 0x3f, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, + 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, + 0x80, 0xff, 0x01, 0x00, 0xe0, 0xff, 0x01, 0x00, 0xf0, 0xff, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, + 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/brush.xbm b/src/mouse/brush.xbm new file mode 100644 index 000000000..15bba72c4 --- /dev/null +++ b/src/mouse/brush.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define brush_width 32 +#define brush_height 32 +static unsigned char brush_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0xc0, 0x0c, + 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x30, 0x03, + 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x80, 0x19, 0x00, 0x00, 0x80, 0x0c, 0x00, 0x00, 0xc0, 0x06, 0x00, + 0x00, 0x60, 0x02, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, + 0x00, 0xec, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, + 0x00, 0xc3, 0x00, 0x00, 0x80, 0xc3, 0x00, 0x00, 0xe0, 0x61, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/crosshair-mask.xbm b/src/mouse/crosshair-mask.xbm new file mode 100644 index 000000000..f37cddfc4 --- /dev/null +++ b/src/mouse/crosshair-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define crosshair_mask_width 32 +#define crosshair_mask_height 32 +static unsigned char crosshair_mask_bits[] = { + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0xfe, 0x1f, 0xfc, 0x3f, + 0xff, 0x3f, 0xfe, 0x7f, 0xfe, 0x1f, 0xfc, 0x3f, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/crosshair.xbm b/src/mouse/crosshair.xbm new file mode 100644 index 000000000..0ae79be0f --- /dev/null +++ b/src/mouse/crosshair.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define crosshair_width 32 +#define crosshair_height 32 +static unsigned char crosshair_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0x1f, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/down-mask.xbm b/src/mouse/down-mask.xbm new file mode 100644 index 000000000..1e7954dbc --- /dev/null +++ b/src/mouse/down-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define down_mask_width 32 +#define down_mask_height 32 +static unsigned char down_mask_bits[] = { + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0x00, + 0x00, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0xfc, 0x1f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00 }; diff --git a/src/mouse/down.xbm b/src/mouse/down.xbm new file mode 100644 index 000000000..2ca62ef01 --- /dev/null +++ b/src/mouse/down.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define down_width 32 +#define down_height 32 +static unsigned char down_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0xfe, 0x3f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/hand-mask.xbm b/src/mouse/hand-mask.xbm new file mode 100644 index 000000000..75cdb6672 --- /dev/null +++ b/src/mouse/hand-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define hand_mask_width 32 +#define hand_mask_height 32 +static unsigned char hand_mask_bits[] = { + 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, + 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, + 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x33, 0x00, + 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0xfe, 0xff, 0x07, + 0x00, 0xfe, 0xff, 0x0f, 0x00, 0xfe, 0xff, 0x1f, 0x70, 0xfe, 0xff, 0x1f, + 0xf8, 0xfe, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0x1f, + 0xfe, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0x1f, + 0xfc, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0x0f, + 0xe0, 0xff, 0xff, 0x0f, 0xc0, 0xff, 0xff, 0x0f, 0x80, 0xff, 0xff, 0x07, + 0x00, 0xff, 0xff, 0x07, 0x00, 0xfe, 0xff, 0x07, 0x00, 0xfc, 0xff, 0x03, + 0x00, 0xf8, 0xff, 0x01, 0x00, 0xf0, 0xff, 0x00 }; diff --git a/src/mouse/hand.xbm b/src/mouse/hand.xbm new file mode 100644 index 000000000..6629cb2ee --- /dev/null +++ b/src/mouse/hand.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define hand_width 32 +#define hand_height 32 +static unsigned char hand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, + 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, + 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, + 0x00, 0xcc, 0x33, 0x00, 0x00, 0xcc, 0x7f, 0x00, 0x00, 0xcc, 0x4c, 0x03, + 0x00, 0xcc, 0xcc, 0x07, 0x00, 0xcc, 0xcc, 0x0c, 0x00, 0xcc, 0xcc, 0x0c, + 0x70, 0xcc, 0xcc, 0x0c, 0xf8, 0xcc, 0xcc, 0x0c, 0xdc, 0x0d, 0x00, 0x0c, + 0x8c, 0x0f, 0x00, 0x0c, 0x0c, 0x07, 0x00, 0x0c, 0x1c, 0x02, 0x00, 0x0c, + 0x38, 0x00, 0x00, 0x0c, 0x70, 0x00, 0x00, 0x0c, 0xe0, 0x00, 0x00, 0x06, + 0xc0, 0x01, 0x00, 0x06, 0x80, 0x03, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, + 0x00, 0x0e, 0x00, 0x03, 0x00, 0x1c, 0x80, 0x03, 0x00, 0xf8, 0xff, 0x01, + 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/insertion-mask.xbm b/src/mouse/insertion-mask.xbm new file mode 100644 index 000000000..cba1b605e --- /dev/null +++ b/src/mouse/insertion-mask.xbm @@ -0,0 +1,10 @@ +/* Created with The GIMP */ +#define insertion_mask_width 16 +#define insertion_mask_height 32 +static unsigned char insertion_mask_bits[] = { + 0x00, 0x00, 0x0e, 0x38, 0x3f, 0x7e, 0x7e, 0x3f, 0xf0, 0x07, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xf0, 0x07, 0x7e, 0x3f, + 0x3f, 0x7e, 0x0e, 0x38 }; diff --git a/src/mouse/insertion.xbm b/src/mouse/insertion.xbm new file mode 100644 index 000000000..28735a671 --- /dev/null +++ b/src/mouse/insertion.xbm @@ -0,0 +1,10 @@ +/* Created with The GIMP */ +#define insertion_width 16 +#define insertion_height 32 +static unsigned char insertion_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0x30, 0x06, 0x40, 0x01, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x01, 0x30, 0x06, + 0x0e, 0x38, 0x00, 0x00 }; diff --git a/src/mouse/rotate-mask.xbm b/src/mouse/rotate-mask.xbm new file mode 100644 index 000000000..4efc1d7ac --- /dev/null +++ b/src/mouse/rotate-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define rotate_mask_width 32 +#define rotate_mask_height 32 +static unsigned char rotate_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfe, 0x07, 0x00, + 0x80, 0xff, 0x1f, 0x00, 0xc0, 0x07, 0x3e, 0x00, 0xe0, 0x01, 0x78, 0x00, + 0x70, 0x00, 0xe0, 0x00, 0x38, 0x00, 0xc0, 0x01, 0x1c, 0x00, 0x80, 0x03, + 0x1c, 0x00, 0x80, 0x03, 0x0e, 0x00, 0x00, 0x07, 0x0e, 0x00, 0x00, 0x07, + 0x07, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x40, 0x4e, 0x07, 0x00, 0xe0, 0xee, + 0x07, 0x00, 0xc0, 0x7f, 0x07, 0x00, 0x80, 0x3f, 0x07, 0x00, 0x00, 0x1f, + 0x07, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, + 0xc0, 0x07, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/rotate.xbm b/src/mouse/rotate.xbm new file mode 100644 index 000000000..bdbf132b3 --- /dev/null +++ b/src/mouse/rotate.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define rotate_width 32 +#define rotate_height 32 +static unsigned char rotate_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, + 0x00, 0x06, 0x06, 0x00, 0x80, 0x01, 0x18, 0x00, 0x40, 0x00, 0x20, 0x00, + 0x20, 0x00, 0x40, 0x00, 0x10, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x40, 0x44, + 0x02, 0x00, 0x80, 0x24, 0x02, 0x00, 0x00, 0x15, 0x02, 0x00, 0x00, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/tiny-mask.xbm b/src/mouse/tiny-mask.xbm new file mode 100644 index 000000000..eef0c0116 --- /dev/null +++ b/src/mouse/tiny-mask.xbm @@ -0,0 +1,5 @@ +/* Created with The GIMP */ +#define tiny_mask_width 7 +#define tiny_mask_height 7 +static unsigned char tiny_mask_bits[] = { + 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00 }; diff --git a/src/mouse/tiny.xbm b/src/mouse/tiny.xbm new file mode 100644 index 000000000..76f6be3df --- /dev/null +++ b/src/mouse/tiny.xbm @@ -0,0 +1,5 @@ +/* Created with The GIMP */ +#define tiny_width 7 +#define tiny_height 7 +static unsigned char tiny_bits[] = { + 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00 }; diff --git a/src/mouse/up-mask.xbm b/src/mouse/up-mask.xbm new file mode 100644 index 000000000..8645162df --- /dev/null +++ b/src/mouse/up-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define up_mask_width 32 +#define up_mask_height 32 +static unsigned char up_mask_bits[] = { + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xfc, 0x1f, 0x00, + 0x00, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x80, 0xff, 0xff, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00 }; diff --git a/src/mouse/up.xbm b/src/mouse/up.xbm new file mode 100644 index 000000000..dc9c56942 --- /dev/null +++ b/src/mouse/up.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define up_width 32 +#define up_height 32 +static unsigned char up_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf8, 0x0f, 0x00, + 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x80, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/wand-mask.xbm b/src/mouse/wand-mask.xbm new file mode 100644 index 000000000..08c50e88d --- /dev/null +++ b/src/mouse/wand-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define wand_mask_width 32 +#define wand_mask_height 32 +static unsigned char wand_mask_bits[] = { + 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, + 0xe3, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, + 0xfc, 0x07, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, + 0xe0, 0x3f, 0x00, 0x00, 0xc4, 0x7f, 0x00, 0x00, 0x82, 0xff, 0x00, 0x00, + 0x00, 0xff, 0x01, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xfc, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x3f, 0x00, + 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0xff, 0x01, + 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xf8, 0x0f, + 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0xc0, 0x7f, + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/wand.xbm b/src/mouse/wand.xbm new file mode 100644 index 000000000..e90c87ace --- /dev/null +++ b/src/mouse/wand.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define wand_width 32 +#define wand_height 32 +static unsigned char wand_bits[] = { + 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x43, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, + 0x08, 0x02, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, + 0x40, 0x1c, 0x00, 0x00, 0x84, 0x3e, 0x00, 0x00, 0x02, 0x7f, 0x00, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x03, 0x00, + 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x1f, 0x00, + 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0xf0, 0x07, + 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x3f, + 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/mouse/watch-mask.xbm b/src/mouse/watch-mask.xbm new file mode 100644 index 000000000..251c7f66f --- /dev/null +++ b/src/mouse/watch-mask.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define watch_mask_width 32 +#define watch_mask_height 32 +static unsigned char watch_mask_bits[] = { + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, + 0x00, 0xff, 0x3f, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x80, 0xff, 0x7f, 0x00, + 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xc0, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00, + 0x80, 0xff, 0x7f, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x3f, 0x00, + 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf8, 0x07, 0x00, + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00, + 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00 }; diff --git a/src/mouse/watch.xbm b/src/mouse/watch.xbm new file mode 100644 index 000000000..66c057780 --- /dev/null +++ b/src/mouse/watch.xbm @@ -0,0 +1,15 @@ +/* Created with The GIMP */ +#define watch_width 32 +#define watch_height 32 +static unsigned char watch_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x1c, 0x0e, 0x00, + 0x00, 0x0e, 0x1c, 0x00, 0x00, 0xc7, 0x38, 0x00, 0x00, 0xc3, 0x30, 0x00, + 0x80, 0xc1, 0x60, 0x00, 0x80, 0xc1, 0x60, 0x00, 0x80, 0xc1, 0xe3, 0x00, + 0x80, 0xc1, 0xe3, 0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60, 0x00, + 0x00, 0x03, 0x30, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00, 0x0e, 0x1c, 0x00, + 0x00, 0x1c, 0x0e, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/shapes.h b/src/shapes.h new file mode 100644 index 000000000..2881af14b --- /dev/null +++ b/src/shapes.h @@ -0,0 +1,196 @@ +/* + shapes.h + + For Tux Paint + List of available shapes. + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 14, 2002 - January 8, 2003 +*/ + + + +/* What shapes are available: */ + +enum { + SHAPE_SQUARE, + SHAPE_SQUARE_FILL, + SHAPE_RECTANGLE, + SHAPE_RECTANGLE_FILL, + SHAPE_CIRCLE, + SHAPE_CIRCLE_FILL, + SHAPE_OVAL, + SHAPE_OVAL_FILL, + SHAPE_TRIANGLE, + SHAPE_TRIANGLE_FILL, + SHAPE_PENTAGON, + SHAPE_PENTAGON_FILL, + SHAPE_DIAMOND, + SHAPE_DIAMOND_FILL, + NUM_SHAPES +}; + + +/* How many sides do they have? */ + +int shape_sides[NUM_SHAPES] = { + 4, /* Square */ + 4, /* Square */ + 4, /* Rectangle */ + 4, /* Rectangle */ + 72, /* Circle */ + 72, /* Circle */ + 72, /* Oval */ + 72, /* Oval */ + 3, /* Triangle */ + 3, /* Triangle */ + 5, /* Pentagon */ + 5, /* Pentagon */ + 4, /* Diamond */ + 4 /* Diamond */ +}; + + +/* Which shapes are 1:1 aspect? */ + +int shape_locked[NUM_SHAPES] = { + 1, /* Square */ + 1, /* Square */ + 0, /* Rectangle */ + 0, /* Rectangle */ + 1, /* Circle */ + 1, /* Circle */ + 0, /* Oval */ + 0, /* Oval */ + 0, /* Triangle */ + 0, /* Triangle */ + 0, /* Pentagon */ + 0, /* Pentagon */ + 0, /* Diamond */ + 0 /* Diamond */ +}; + + +/* Which shapes are filled? */ + +int shape_filled[NUM_SHAPES] = { + 0, /* Square */ + 1, /* Square */ + 0, /* Rectangle */ + 1, /* Rectangle */ + 0, /* Circle */ + 1, /* Circle */ + 0, /* Oval */ + 1, /* Oval */ + 0, /* Triangle */ + 1, /* Triangle */ + 0, /* Pentagon */ + 1, /* Pentagon */ + 0, /* Diamond */ + 1 /* Diamond */ +}; + + + +/* Initial angles for shapes: */ + +int shape_init_ang[NUM_SHAPES] = { + 45, /* Square */ + 45, /* Square */ + 45, /* Rectangle */ + 45, /* Rectangle */ + 0, /* Circle */ + 0, /* Circle */ + 0, /* Oval */ + 0, /* Oval */ + 210, /* Triangle */ + 210, /* Triangle */ + 162, /* Pentagon */ + 162, /* Pentagon */ + 0, /* Diamond */ + 0 /* Diamond */ +}; + + +/* Shapes that don't make sense rotating (e.g., circles): */ + +int shape_no_rotate[NUM_SHAPES] = { + 0, /* Square */ + 0, /* Square */ + 0, /* Rectangle */ + 0, /* Rectangle */ + 1, /* Circle */ + 1, /* Circle */ + 0, /* Oval */ + 0, /* Oval */ + 0, /* Triangle */ + 0, /* Triangle */ + 0, /* Pentagon */ + 0, /* Pentagon */ + 0, /* Diamond */ + 0 /* Diamond */ +}; + + +/* Shape names: */ + +char * shape_names[NUM_SHAPES] = { + gettext_noop("Square"), + gettext_noop("Square"), + gettext_noop("Rectangle"), + gettext_noop("Rectangle"), + gettext_noop("Circle"), + gettext_noop("Circle"), + gettext_noop("Oval"), + gettext_noop("Oval"), + gettext_noop("Triangle"), + gettext_noop("Triangle"), + gettext_noop("Pentagon"), + gettext_noop("Pentagon"), + gettext_noop("Diamond"), + gettext_noop("Diamond") +}; + + +/* Some text to write when each shape is selected: */ + +char * shape_tips[NUM_SHAPES] = { + gettext_noop("A square has four sides, each the same length."), + gettext_noop("A square has four sides, each the same length."), + gettext_noop("A rectangle has four sides."), + gettext_noop("A rectangle has four sides."), + gettext_noop("A circle is exactly round."), + gettext_noop("A circle is exactly round."), + gettext_noop("Oval"), + gettext_noop("Oval"), + gettext_noop("A triangle has three sides."), + gettext_noop("A triangle has three sides."), + gettext_noop("A pentagon has five sides."), + gettext_noop("A pentagon has five sides."), + gettext_noop("A diamond is a square, turned around slightly."), + gettext_noop("A diamond is a square, turned around slightly.") +}; + + +/* Shape icon filenames: */ + +char * shape_img_fnames[NUM_SHAPES] = { + DATA_PREFIX "images/shapes/square.png", + DATA_PREFIX "images/shapes/square_f.png", + DATA_PREFIX "images/shapes/rectangle.png", + DATA_PREFIX "images/shapes/rectangle_f.png", + DATA_PREFIX "images/shapes/circle.png", + DATA_PREFIX "images/shapes/circle_f.png", + DATA_PREFIX "images/shapes/oval.png", + DATA_PREFIX "images/shapes/oval_f.png", + DATA_PREFIX "images/shapes/triangle.png", + DATA_PREFIX "images/shapes/triangle_f.png", + DATA_PREFIX "images/shapes/pentagon.png", + DATA_PREFIX "images/shapes/pentagon_f.png", + DATA_PREFIX "images/shapes/diamond.png", + DATA_PREFIX "images/shapes/diamond_f.png" +}; + diff --git a/src/sounds.h b/src/sounds.h new file mode 100644 index 000000000..c53b22f6b --- /dev/null +++ b/src/sounds.h @@ -0,0 +1,89 @@ +/* + sounds.h + + For Tux Paint + List of sound effects. + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 15, 2002 - September 19, 2002 +*/ + + + +/* Sounds available: */ + +enum { + SND_HARP, /* Begin / New */ + SND_CLICK, /* Tool selections */ + SND_BLEEP, /* Selector selection */ + SND_BUBBLE, /* Color selection */ + SND_STAMP, /* Using stamp tool */ + SND_LINE_START, /* Using line tool */ + SND_LINE_END, + SND_SCROLL, /* Selector scroll buttons */ + SND_PAINT1, /* Sound while painting */ + SND_PAINT2, + SND_PAINT3, + SND_PAINT4, + SND_ERASER1, /* Sound while erasing */ + SND_ERASER2, + SND_SAVE, /* Save sound effect */ + SND_PROMPT, /* Prompt animation sound effect */ + SND_DRIP, /* Magic drip */ + SND_CHALK, /* Magic chalk */ + SND_SPARKLES1, /* Magic sparkles */ + SND_SPARKLES2, + SND_THICK, /* Magic thick */ + SND_THIN, /* Magic thin */ + SND_FLIP, /* Magic flip */ + SND_MIRROR, /* Magic mirror */ + SND_NEGATIVE, /* Magic negative */ + SND_BLUR, /* Magic blur */ + SND_BLOCKS, /* Magic blocks */ + SND_FADE, /* Magic fade */ + SND_RAINBOW, /* Magic rainbow */ + SND_KEYCLICK, /* Text tool keyboard click feedback */ + SND_RETURN, + NUM_SOUNDS +}; + + +/* Sound file filenames: */ + +char * sound_fnames[NUM_SOUNDS] = { + DATA_PREFIX "sounds/harp.wav", + DATA_PREFIX "sounds/click.wav", + DATA_PREFIX "sounds/bleep.wav", + DATA_PREFIX "sounds/bubble.wav", + DATA_PREFIX "sounds/stamp.wav", + DATA_PREFIX "sounds/line_start.wav", + DATA_PREFIX "sounds/line_end.wav", + DATA_PREFIX "sounds/scroll.wav", + DATA_PREFIX "sounds/paint1.wav", + DATA_PREFIX "sounds/paint2.wav", + DATA_PREFIX "sounds/paint3.wav", + DATA_PREFIX "sounds/paint4.wav", + DATA_PREFIX "sounds/eraser1.wav", + DATA_PREFIX "sounds/eraser2.wav", + DATA_PREFIX "sounds/save.wav", + DATA_PREFIX "sounds/prompt.wav", + DATA_PREFIX "sounds/drip.wav", + DATA_PREFIX "sounds/chalk.wav", + DATA_PREFIX "sounds/sparkles1.wav", + DATA_PREFIX "sounds/sparkles2.wav", + DATA_PREFIX "sounds/thick.wav", + DATA_PREFIX "sounds/thin.wav", + DATA_PREFIX "sounds/flip.wav", + DATA_PREFIX "sounds/mirror.wav", + DATA_PREFIX "sounds/negative.wav", + DATA_PREFIX "sounds/blur.wav", + DATA_PREFIX "sounds/blocks.wav", + DATA_PREFIX "sounds/fade.wav", + DATA_PREFIX "sounds/rainbow.wav", + DATA_PREFIX "sounds/keyclick.wav", + DATA_PREFIX "sounds/return.wav" +}; + diff --git a/src/tip_tux.h b/src/tip_tux.h new file mode 100644 index 000000000..0e69b229d --- /dev/null +++ b/src/tip_tux.h @@ -0,0 +1,42 @@ +/* + tip_tux.h + + For Tux Paint + List of tux images for tips. + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 17, 2002 - June 27, 2002 +*/ + + +#ifndef TIP_TUX_H +#define TIP_TUX_H + +/* What tuxes are available: */ + +enum { + TUX_DEFAULT, + TUX_KISS, + TUX_BORED, + TUX_GREAT, + TUX_OOPS, + TUX_WAIT, + NUM_TIP_TUX +}; + + +/* Tux filenames: */ + +char * tux_img_fnames[NUM_TIP_TUX] = { + DATA_PREFIX "images/tux/default.png", + DATA_PREFIX "images/tux/kiss.png", + DATA_PREFIX "images/tux/bored.png", + DATA_PREFIX "images/tux/great.png", + DATA_PREFIX "images/tux/oops.png", + DATA_PREFIX "images/tux/wait.png" +}; + +#endif /* TIP_TUX_H */ diff --git a/src/titles.h b/src/titles.h new file mode 100644 index 000000000..1fda0c624 --- /dev/null +++ b/src/titles.h @@ -0,0 +1,45 @@ +/* + titles.h + + For Tux Paint + List of available titles + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 14, 2002 - October 19, 2002 +*/ + + + +/* What titles are available: */ + +enum { + TITLE_NONE, + TITLE_NOCOLORS, + TITLE_TOOLS, + TITLE_COLORS, + TITLE_BRUSHES, + TITLE_STAMPS, + TITLE_SHAPES, + TITLE_LETTERS, + TITLE_MAGIC, + NUM_TITLES +}; + + +/* Title names: */ + +char * title_names[NUM_TITLES] = { + "", + "", + gettext_noop("Tools"), + gettext_noop("Colors"), + gettext_noop("Brushes"), + gettext_noop("Stamps"), + gettext_noop("Shapes"), + gettext_noop("Letters"), + gettext_noop("Magic") +}; + diff --git a/src/tools.h b/src/tools.h new file mode 100644 index 000000000..2ee25f3c6 --- /dev/null +++ b/src/tools.h @@ -0,0 +1,122 @@ +/* + tools.h + + For Tux Paint + List of available tools. + + Copyright (c) 2002 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 14, 2002 - December 10, 2002 +*/ + + +#include "tip_tux.h" + + +/* What tools are available: */ + +enum { + TOOL_BRUSH, + TOOL_STAMP, + TOOL_LINES, + TOOL_SHAPES, + TOOL_TEXT, + TOOL_MAGIC, + TOOL_UNDO, + TOOL_REDO, + TOOL_ERASER, + TOOL_NEW, + TOOL_OPEN, + TOOL_SAVE, + TOOL_PRINT, + TOOL_QUIT, + NUM_TOOLS +}; + + +/* Tool names: */ + +char * tool_names[NUM_TOOLS] = { + gettext_noop("Paint"), + gettext_noop("Stamp"), + gettext_noop("Lines"), + gettext_noop("Shapes"), + gettext_noop("Text"), + gettext_noop("Magic"), + gettext_noop("Undo"), + gettext_noop("Redo"), + gettext_noop("Eraser"), + gettext_noop("New"), + gettext_noop("Open"), + gettext_noop("Save"), + gettext_noop("Print"), + gettext_noop("Quit") +}; + + +/* Some text to write when each tool is selected: */ + +char * tool_tips[NUM_TOOLS] = { + gettext_noop("Pick a color and a brush shape to draw with."), + gettext_noop("Pick a picture to stamp around your drawing."), + gettext_noop("Click to start drawing a line. Let go to complete it."), + gettext_noop("Pick a shape. Click to pick the center, drag, then let go when it is the size you want. Move around to rotate it, and click to draw it."), + gettext_noop("Choose a style of text. Click on your drawing and you can start typing."), + gettext_noop("Pick a magical effect to use on your drawing!"), + /* Undo */ gettext_noop("Undo!"), + /* Redo */ gettext_noop("Redo!"), + /* Eraser */ gettext_noop("Eraser!"), + /* New */ gettext_noop("You now have a blank sheet to draw on!"), + /* Open */ gettext_noop("Open..."), + /* Save */ gettext_noop("Your image has been saved!"), + /* Print */ gettext_noop("Printing..."), + /* Quit */ gettext_noop("Bye bye!") +}; + +#define TIP_LINE_START gettext_noop("Let go of the button to complete the line.") +#define TIP_SHAPE_START gettext_noop("Hold the button to stretch the shape.") +#define TIP_SHAPE_NEXT gettext_noop("Move the mouse to rotate the shape. Click to draw it.") +#define TIP_NEW_ABORT gettext_noop("Ok then... Let's keep drawing this one!") + + +/* Tool icon filenames: */ + +char * tool_img_fnames[NUM_TOOLS] = { + DATA_PREFIX "images/tools/brush.png", + DATA_PREFIX "images/tools/stamp.png", + DATA_PREFIX "images/tools/lines.png", + DATA_PREFIX "images/tools/shapes.png", + DATA_PREFIX "images/tools/text.png", + DATA_PREFIX "images/tools/magic.png", + DATA_PREFIX "images/tools/undo.png", + DATA_PREFIX "images/tools/redo.png", + DATA_PREFIX "images/tools/eraser.png", + DATA_PREFIX "images/tools/new.png", + DATA_PREFIX "images/tools/open.png", + DATA_PREFIX "images/tools/save.png", + DATA_PREFIX "images/tools/print.png", + DATA_PREFIX "images/tools/quit.png" +}; + + +/* Tux icons to use: */ + +int tool_tux[NUM_TOOLS] = { + TUX_DEFAULT, + TUX_DEFAULT, + TUX_DEFAULT, + TUX_DEFAULT, + TUX_DEFAULT, + TUX_DEFAULT, + TUX_OOPS, + TUX_WAIT, + TUX_DEFAULT, + TUX_DEFAULT, + TUX_DEFAULT, + TUX_GREAT, + TUX_GREAT, + TUX_DEFAULT +}; + diff --git a/src/tuxpaint-import.1 b/src/tuxpaint-import.1 new file mode 100644 index 000000000..c3259adb7 --- /dev/null +++ b/src/tuxpaint-import.1 @@ -0,0 +1,49 @@ +.\" tuxpaint-import.1 - 2002.10.19 +.TH TUXPAINT-IMPORT 1 "19 Oct 2002" "2002.10.19" "Tux Paint Import" +.SH NAME +tuxpaint-import -- Import image files into Tux Paint(1) + +.SH SYNOPSYS +.TP 16 +.B tuxpaint-import [\-\-help] +.TP 16 +.B tuxpaint-import \fIfilename(s)\fP + +.SH DESCRIPTION +\fItuxpaint-import\fP is a simple shell script which uses some \fINetPBM\fP +(pnm(5)) tools (\fIanytopnm\fP, \fIpnmscale\fP and \fIpnmtopng\fP) along with +\fIdate\fP(1) to convert an arbitrary image file (e.g., a JPEG, GIF, etc.) into +a \fIPNG\fP(5) file which can be used by the drawing program \fITux Paint\fP +(tuxpaint(1)) and places it in the user's Tux Paint saved-files directory +(\fI$HOME/.tuxpaint/saved/\fP). + +.SH EXAMPLE +tuxpaint-import picture.jpg photo.png cartoon.gif + +.SH ENVIRONMENT +.TP 8 +.B $HOME +to determine where the files should go so that they can be access within +\fITux Paint\fP using its \fIOpen\fP command. + +.SH FILES +.TP 8 +.B $HOME/.tuxpaint/saved +where new image files are stored, after being resized and converted into PNG +format. + +.SH AUTHOR +Bill Kendrick. + + +.SH "SEE ALSO" +.BR tuxpaint (1), +.BR pnm (5), +.BR png (5), +.BR anytopnm (1), +.BR pnmscale (1), +.BR pnmtopng (1), +.BR date (1), +.PP +And documentation within /usr/[local/]share/doc/tuxpaint/. + diff --git a/src/tuxpaint-import.sh b/src/tuxpaint-import.sh new file mode 100755 index 000000000..aa3c1db62 --- /dev/null +++ b/src/tuxpaint-import.sh @@ -0,0 +1,77 @@ +#!/bin/sh + +# tuxpaint-import + +# "Tux Paint Import" +# Import an arbitrary GIF, JPEG or PNG into Tux Paint + +# by Bill Kendrick +# bill@newbreedsoftware.com +# http://www.newbreedsoftware.com/tuxpaint/ + +# September 21, 2002 - January 16, 2003 + + +TMPDIR=/tmp +SAVEDIR=$HOME/.tuxpaint/saved + + +if [ $# -eq 0 ]; then + # No arguments provided (sorry, you can't pipe into this script's stdin!) + echo "Usage: tuxpaint-import filename(s)" + echo " tuxpaint-import --help" + exit +fi + +if [[ $1 == "--help" ]]; then + # --help, show usage: + echo + echo "tuxpaint-import" + echo + echo "Imports an arbitrary image (GIF, JPEG, PNG, etc. format)" + echo "into Tux Paint (see: tuxpaint(1)) so that it appears in the" + echo "'Open' dialog." + echo + echo "Usage: tuxpaint-import filename(s)" + echo " tuxpaint-import --help" + echo + exit +fi + + +# Make sure savedir exists! +if [ ! -d $SAVEDIR ]; then + echo "Creating $SAVEDIR" + mkdir -p $SAVEDIR +fi + + +# For each picture list... +for i in $* +do + if [ -e $i ]; then + # Determine a filename for it: + NEWFILENAME=`date "+%Y%m%d%H%M%S"` + echo "$i -> $SAVEDIR/$NEWFILENAME.png" + + # Convert and scale down, save as a temp file: + anytopnm $i | pnmscale -xysize 448 376 > $TMPDIR/$NEWFILENAME.ppm + + # Place inside the correctly-sized canvas: + # FIXME: Center, instead of placing at upper right + ppmmake "#FFFFFF" 448 376 \ + | pnmpaste -replace $TMPDIR/$NEWFILENAME.ppm 0 0 \ + | pnmtopng > $SAVEDIR/$NEWFILENAME.png + + # Remove temp file: + rm $TMPDIR/$NEWFILENAME.ppm + + # Create thumbnail for 'Open' dialog: + pngtopnm $SAVEDIR/$NEWFILENAME.png | pnmscale -xysize 92 56 \ + | pnmtopng > $SAVEDIR/$NEWFILENAME-t.png + + else + # File wasn't there! + echo "$i - File not found" + fi +done diff --git a/src/tuxpaint.1 b/src/tuxpaint.1 new file mode 100644 index 000000000..0e4d2b77c --- /dev/null +++ b/src/tuxpaint.1 @@ -0,0 +1,413 @@ +.\" tuxpaint.1 - 2003.02.22 +.TH TUXPAINT 1 "22 Feb 2003" "0.9.10" "Tux Paint" +.SH NAME +tuxpaint -- A drawing program for young children. + +.SH SYNOPSYS +.B tuxpaint +[\-\-help \-\-version \-\-usage \-\-copying] + +.TP 9 +.B tuxpaint +[\-\-fullscreen] +[\-\-800x600] +[\-\-nosound] +[\-\-noquit] +[\-\-noprint] +[\-\-printdelay=\fISECONDS\fP] +[\-\-printcfg] +[\-\-simpleshapes] +[\-\-uppercase] +[\-\-grab] +[\-\-nowheelmouse] +[\-\-nofancycursors] +[\-\-nooutlines] +[\-\-keyboard] +[\-\-savedir \fiDIR\fP] +[\-\-saveover] +[\-\-saveovernew] + +.TP 9 +.B tuxpaint +[\-\-windowed] +[\-\-640x480] +[\-\-sound] +[\-\-quit] +[\-\-print] +[\-\-printdelay=0] +[\-\-noprintcfg] +[\-\-complexshapes] +[\-\-mixedcase] +[\-\-dontgrab] +[\-\-wheelmouse] +[\-\-mouse] +[\-\-outlines] +[\-\-fancycursors] +[\-\-saveoverask] + +.TP 9 +.B tuxpaint +[\-\-locale] + +.TP 9 +.B tuxpaint +[\-\-lang \fILANGUAGE\fP] + +.TP 9 +.B tuxpaint +[\-\-nosysconfig] + +.SH DESCRIPTION +.PP +\fITux Paint\fP is a drawing program for young children. It is meant to be +easy and fun to use. It provides a simple interface and fixed canvas size, +and provides access to previous images using a thumbnail browser +(i.e., no access to the underlying filesystem). + +Unlike popular drawing programs like "\fIThe GIMP\fP," it has a very limited +toolset. However, it provides a much simpler interface, and has entertaining, +child-oriented additions such as sound effects. + +.SH OPTIONS - INFORMATIONAL +.TP 8 +.B \-\-help +Display short, helpful information about Tux Paint. +.TP 8 +.B \-\-version +Output the version info. +.TP 8 +.B \-\-usage +Display a list of all commandline options. +.TP 8 +.B \-\-copying +Show the license (GNU GPL) under which Tux Paint is released. + +.SH OPTIONS - INTERFACE +.l +\fItuxpaint\fP accepts the following options to alter the interface. +They can be used along with, instead of, or to override options set in +configuration files. (See below.) +.TP 8 +.B \-\-fullscreen \-\-windowed +Run \fITux Paint\fP in full-screen mode, or in a window (default). + +.TP 8 +.B \-\-800x600 \-\-640x480 +Run \fITux Paint\fP at 800x600 resolution (EXPERIMENTAL), or +640x480 resolution (default). + +.TP 8 +.B \-\-nosound \-\-sound +Disable or enable (default) sound. + +.TP 8 +.B \-\-noquit \-\-quit +Disable or enable (default) the on-screen \fIQuit\fP button. + +.TP 8 +.B \-\-noprint \-\-print +Disable or enable (default) the \fIPrint\fP command within \fITux Paint\fP. + +.TP 8 +.B \-\-printdelay=\fISECONDS\fP \-\-printdelay=0 +Only allow printing (via the \fIPrint\fP command) once every \fISECONDS\fP +seconds. Default is 0 (no limitation). + +.TP 8 +.B \-\-printcfg \-\-noprintcfg +(Windows only.) Enable or disable loading and saving of printer settings. +By default, \fITux Paint\fP will print to the default printer with default +settings. Pressing \fI[ALT]\fP while pushing the \fIPrint\fP button +will cause a Windows printer dialog to appear (as long as you're not in +fullscreen mdoe.) If \-\-printcfg is used, your previous settings will +be loaded when \fITux Paint\fP starts up, and setting changes will be saved +for next time. + +.TP 8 +.B \-\-simpleshapes \-\-complexshapes +Disable or enable (default) the \fIrotation\fP step when using the +\fIShape\fP tool within \fITux Paint\fP. When disabled, shapes cannot be +rotated; however, the interface is easier (click, drag, release), which can +be useful for younger or disabled children. + +.TP 8 +.B \-\-uppercase \-\-mixedcase +In \fIuppercase\fP mode, all text prompts and the \fIText\fP drawing tool +will display only uppercase letters. This is useful for children who are not +yet comfortable with the lowercase characterset. Default mode is +\fImixed case\fP. + +.TP 8 +.B \-\-grab \-\-nograb +Grab the mouse and keyboard input (if possible), so that the mouse is +confined to the \fITux Paint\fP window. Default is to not grab. + +.TP 8 +.B \-\-nowheelmouse \-\-wheelmouse +By default, the wheel (jog dial) on a mouse will be used to scroll the +\fIselector\fP on the right of the screen. This can be disabled, and the +wheel completely ignored, with the \fI\-\-nowheelmouse\fP option. +This is useful for children who aren't yet comfortable with the mouse. +Default is to support the wheel. + +.TP 8 +.B \-\-nofancycursors \-\-fancycursors +Disable or enable (default) the 'fancy' mouse pointer shapes in \fITux Paint\fP. +While the shapes are larger, and context sensitive, some environments have +trouble displaying the mouse pointer, and/or leave 'trails' on the screen. + +.TP 8 +.B \-\-keyboard \-\-mouse +The \fIkeyboard\fP option lets the mouse pointer in \fITux Paint\fP be +controlled with the keyboard. The \fIarrow keys\fP move the pointer. +\fISpacebar\fP acts as the mouse button. + +.TP 8 +.B \-\-nooutlines \-\-outlines +In \fInooutlines\fP mode, much simpler outlines and 'rubber-band' lines are +displayed when using the \fILines\fP, \fIShapes\fP, \fIStamps\fP and +\fIEraser\fP tools. (This can help when \fITux Paint\fP is run on slower +computers, or displayed on a remote X display.) + +.TP 8 +.B \-\-savedir \fIDIR\fP +Specify where \fITux Paint\fP should save files. By default, this is +"~/.tuxpaint/saved" under Linux and Unix, and "userdata\\" under Windows. + +.TP 8 +.B \-\-saveover \-\-saveovernew \-\-saveoverask +If, when saving a picture, an older version of the file will be overwritten, +\fITux Paint\fP will, by default, ask for confirmation: either +\fIsave over\fP the old file, or \fIcreate\fP a new file. This prompt +can be disabled with \fI\-\-saveover\fP (which always saves over older versions +of pictures) or \fI\-\-saveovernew\fP (which always saves a new file). +The default is to prompt (\fI\-\-saveoverask\fP). + +.SH OPTIONS - LANGUAGE +.l +Various parts of \fITux Paint\fP have been translated into numerous languages. +\fITux Paint\fP will try its best to honor your \fIlocale\fP setting +(i.e., the \fILANG\fP environment variable), if possible. +You can also specifically set the language using options on the command-line +or in a configuration file. + +.TP 8 +.B \-\-locale \fILOCALE\fP +Specify the language to use, based on locale name (which is typically of the +form \fIlanguage\fP[_\fIterritory\fP][.\fIcodeset\fP][@\fImodifier\fP], +where \fIlanguage\fP is an ISO 639 language code, +\fIterritory\fP is an ISO 3166 country code, and +\fIcodeset\fP is a character set or encoding identifier like ISO-8859-1 or +UTF-8.) +.PP +.RS +For example, \fIde_DE@euro\fP for German, or \fIpt_BR\fP +for Brazilian Portuguese. +.RE + +.TP 8 +.B \-\-lang \fiLANGUAGE\fP +Specify the language to use, based on the language's name +(as recognized by \fITux Paint\fP). Choose one of the language names +listed below: +.PP +.RS +.PD 0 +.TP 2 +- +english | american-english +.TP 2 +- +brazilian-portuguese | portuges-brazilian | brazilian +.TP 2 +- +british | british-english +.TP 2 +- +catalan | catala +.TP 2 +- +czech | cesky +.TP 2 +- +chinese +.TP 2 +- +danish | dansk +.TP 2 +- +dutch +.TP 2 +- +finnish | suomi +.TP 2 +- +french | francais +.TP 2 +- +german | dutch +.TP 2 +- +greek +.TP 2 +- +hungarian | magyar +.TP 2 +- +icelandic | islenska +.TP 2 +- +indonesian | bahasa-indonesia +.TP 2 +- +italian | italiano +.TP 2 +- +japanese +.TP 2 +- +korean +.TP 2 +- +norwegian | nynorsk +.TP 2 +- +polish | polski +.TP 2 +- +portuguese | portugues +.TP 2 +- +romanian +.TP 2 +- +spanish | espanol +.TP 2 +- +swedish | svenska +.TP 2 +- +turkish +.RE +.PD + +.SH OPTIONS - MISCELLANEOUS +.TP 8 +.B \-\-nosysconfig +With this option, \fITux Paint\fP will not attempt to read the +system-wide configuration file (typically \fI/etc/tuxpaint/tuxpaint.conf\fP). + +.SH ENVIRONMENT +.l +While \fITux Paint\fB may refer to a number of environment variables indirectly +(e.g., via \fISDL(3)\fP), it only directly accesses the following: +.PP +.TP 8 +.B HOME +to determine where picture files go when using the \fISave\fP and \fIOpen\fP +commands within \fITux Paint\fP, to keep track of the current image, +when quitting and restarting \fITux Paint\fP, and to get the user's +configuration file. + +.TP 8 +.B LANG +to determine langauge to use, if \fIsetlocale(3)\fP refers to 'LC_MESSAGES'. + +.SH FILES +.TP 8 +.B /etc/tuxpaint/tuxpaint.conf +System-wide configuration file. It is read first +(unless the \fI\-\-nosysconfig\fP option was given on the command-line). +.RS +.PP +(Created during installation.) +.RE +.TP 8 +.B $HOME/.tuxpaintrc +User's configuration file. It can be used to set default options +(rather than setting them on the command-line every time), and/or to +override any settings in the system-wide configuration file. +.RS +.PP +(Not created or edited automatically; must be created manually.) +.RE +.TP 8 +.B $HOME/.tuxpaint/saved/ +A directory of previously-saved images (and thumbnails). Only files in this +directory will be made available using the \fIOpen\fP command within +\fITux Paint\fP. (See \fItuxpaint-import(1)\fP.) +.RS +.PP +(Created when \fISave\fP command is used.) +.RE +.TP 8 +.B $HOME/.tuxpaint/current_id.txt +A reference to the image which was being edited when \fITux Paint\fP was +last quit. (This image is automatically loaded the next time \fITux Paint\fP +is re-run.) +.RS +.PP +(Created when \fITux Paint\fP is \fIQuit\fP.) +.RE + +.SH COPYRIGHT +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +.SH OTHER INFO +The canonical place to find \fITux Paint\fP information is at +http://www.newbreedsoftware.com/tuxpaint/. + +.SH AUTHORS +Bill Kendrick. + +With patches, fixes, extensions, translation, documentation and more from +lots of people, including, but not limited to: + +Daniel Andersson, +Ben Armstrong, +Denis Bodor, +Herman Bruyninckx, +Laurentiu Buzdugan, +Pere Pujal Carabantes, +Jacques Chion, +Ricardo Cruz, +Doruk Fisek, +Fabian Franz, +Gabriel Gazzan, +The Greek Linux i18n Team, +Sam "Criswell" Hart, +Tedi Heriyanto, +Pjetur G. Hjaltason, +Karl Ove Hufthammer, +Rasmus Erik Voel Jensen, +Wang Jian, +Kazuhiko, +Mark Kim, +Thomas Klausner, +Marcin 'Shard' Konicki, +Arkadiusz Lipiec, +Martin, +Marco Milanesi, +Primoz Peterlin, +Milan Plzik, +John Popplewell, +Geert Stams, +Peter Sterba, +Tarmo Toikkanen, +TOYAMA Shin-ichi, +Daniel Jose Viana, +Charles Vidal, +and +Damian Yerrick. + +.SH "SEE ALSO" +.BR tuxpaint-import (1), +.BR xpaint (1), +.BR gpaint (1), +.BR gimp (1) +.PP +And documentation within /usr/[local/]share/doc/tuxpaint/. + diff --git a/src/tuxpaint.c b/src/tuxpaint.c new file mode 100644 index 000000000..3c0bb6d79 --- /dev/null +++ b/src/tuxpaint.c @@ -0,0 +1,10802 @@ +/* + tuxpaint.c + + Tux Paint - A simple drawing program for children. + + Copyright (c) 2003 by Bill Kendrick + bill@newbreedsoftware.com + http://www.newbreedsoftware.com/tuxpaint/ + + June 14, 2002 - February 22, 2003 +*/ + + +#define VER_VERSION "0.9.10" +#define VER_DATE "2003.02.22" + + +/* #define DEBUG */ +/* #define LOW_QUALITY_THUMBNAILS */ +/* #define LOW_QUALITY_COLOR_SELECTOR */ +/* #define LOW_QUALITY_STAMP_OUTLINE */ +/* #define LOW_QUALITY_FLOOD_FILL */ +/* #define NO_PROMPT_SHADOWS */ +/* #define USE_HWSURFACE */ + + +/* Disable fancy cursors in fullscreen mode, to avoid SDL bug: */ +#define LARGE_CURSOR_FULLSCREEN_BUG + +#define HEIGHTOFFSET (((WINDOW_HEIGHT - 480) / 48) * 48) +#define TOOLOFFSET (HEIGHTOFFSET / 48 * 2) +#define PROMPTOFFSETX (WINDOW_WIDTH - 640) / 2 +#define PROMPTOFFSETY (HEIGHTOFFSET / 2) + +#define MAX_FILES 256 /* Max. # of files in a dir. to worry about... */ + +#define REPEAT_SPEED 300 /* Initial repeat speed for scrollbars */ +#define CURSOR_BLINK_SPEED 500 /* Initial repeat speed for cursor */ + + +#include +#include +#include +#include +#include +#include + +#include + +#ifdef WIN32_OLD +/* The following are required by libintl.h, so must be defined first: */ +#define LC_MESSAGES 1729 +#define HAVE_LC_MESSAGES 1 +#define ENABLE_NLS 1 +#define HAVE_LOCALE_H 1 +#define HAVE_GETTEXT 1 +#define HAVE_DCGETTEXT 1 +#endif + +#if defined(sun) && defined(__svr4__) + /* Solaris needs locale.h */ +#endif + +#include +#ifndef gettext_noop +#define gettext_noop(String) String +#endif + + +#ifdef DEBUG +#define gettext(String) debug_gettext(String) +#endif + + +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +#include +#include + + +#ifndef WIN32 +#include +#include +#ifdef __BEOS__ +#include "BeOS_print.h" +#endif +#else +#include "win32_dirent.h" +#include "win32_print.h" +#include +#include + + +/* Enables win32 apps to get a GNU compatible locale string */ +extern char* g_win32_getlocale(void); + +/* Set this to 0 during developement and testing in Visual-Studio + Set this to 1 to make the final executable */ + +#if 1 + +#define DOC_PREFIX "docs/" +#define DATA_PREFIX "data/" +#define LOCALEDIR "locale" + +#else + +#define DOC_PREFIX "../../docs/" +#define DATA_PREFIX "../../data/" +#define LOCALEDIR "../../locale" + +#endif /* 1/0 */ + +#define mkdir(path,access) _mkdir(path) +#define strcasecmp stricmp +#define strncasecmp strnicmp +#define snprintf _snprintf +#define S_ISDIR(i) ((i&_S_IFDIR)!=0) + +#endif /* WIN32 */ + +#include +#include + +#include "SDL.h" +#include "SDL_image.h" +#include "SDL_ttf.h" +#ifndef NOSOUND +#include "SDL_mixer.h" +#endif + +#ifndef SAVE_AS_BMP +#include +#define FNAME_EXTENSION ".png" +#else +#define FNAME_EXTENSION ".bmp" +#endif + +#define THUMB_W ((WINDOW_WIDTH - 96 - 96) / 4) +#define THUMB_H (((48 * 7 + 40 + HEIGHTOFFSET) - 72) / 4) + +#include "tools.h" +#include "titles.h" +#include "colors.h" +#include "shapes.h" +#include "magic.h" +#include "sounds.h" +#include "tip_tux.h" +#include "great.h" + + +#include "mouse/watch.xbm" +#include "mouse/watch-mask.xbm" + +#include "mouse/hand.xbm" +#include "mouse/hand-mask.xbm" + +#include "mouse/wand.xbm" +#include "mouse/wand-mask.xbm" + +#include "mouse/insertion.xbm" +#include "mouse/insertion-mask.xbm" + +#include "mouse/brush.xbm" +#include "mouse/brush-mask.xbm" + +#include "mouse/crosshair.xbm" +#include "mouse/crosshair-mask.xbm" + +#include "mouse/rotate.xbm" +#include "mouse/rotate-mask.xbm" + +#include "mouse/up.xbm" +#include "mouse/up-mask.xbm" + +#include "mouse/down.xbm" +#include "mouse/down-mask.xbm" + +#include "mouse/tiny.xbm" +#include "mouse/tiny-mask.xbm" + +#include "mouse/arrow.xbm" +#include "mouse/arrow-mask.xbm" + + + +#ifdef WIN32 +/* + The SDL stderr redirection trick doesn't seem to work for perror(). + This does pretty much the same thing. +*/ +void win32_perror(const char *str) +{ + if ( str && *str ) + fprintf(stderr,"%s : ",str); + fprintf(stderr, + "%s [%d]\n", + (errno<_sys_nerr)?_sys_errlist[errno]:"unknown",errno ); +} +#define perror win32_perror +#endif + + +#ifndef WIN32 +#define min(a,b) ((a < b) ? a : b) +#define max(a,b) ((a > b) ? a : b) +#endif + +#define clamp(lo,value,hi) (min(max(value,lo),hi)) + + +#ifdef WIN32_OLD +#define RENDER_TEXT TTF_RenderUTF8_Blended +#else +#define RENDER_TEXT TTF_RenderText_Blended +#endif + + +/* Possible languages: */ + +enum { + LANG_CA, /* Catalan */ + LANG_CZ, /* Czech */ + LANG_DA, /* Danish */ + LANG_DE, /* German */ + LANG_EL, /* Greek */ + LANG_EN, /* English (American) (DEFAULT) */ + LANG_EN_GB, /* English (British) */ + LANG_ES, /* Spanish */ + LANG_FI, /* Finnish */ + LANG_FR, /* French */ + LANG_HU, /* Hungarian */ + LANG_ID, /* Indonesian */ + LANG_IS, /* Icelandic */ + LANG_IT, /* Italian */ + LANG_JA, /* Japanese */ + LANG_KO, /* Korean */ + LANG_NL, /* Dutch */ + LANG_NN, /* Norwegian */ + LANG_PL, /* Polish */ + LANG_PT_BR, /* Portuguese (Brazilian) */ + LANG_PT, /* Portuguese */ + LANG_RO, /* Romanian */ + LANG_SE, /* Swedish */ + LANG_SK, /* Slovak */ + LANG_TR, /* Turkish */ + LANG_ZH, /* Chinese */ + NUM_LANGS +}; + +const char * lang_prefixes[NUM_LANGS] = { + "ca", + "cz", + "da", + "de", + "el", + "en", + "en_gb", + "es", + "fi", + "fr", + "hu", + "id", + "is", + "it", + "ja", + "ko", + "nl", + "nn", + "pl", + "pt_br", + "pt", + "ro", + "se", + "sk", + "tr", + "zh" +}; + + +/* List of languages where we should use Unicode font rendering: */ + +int lang_use_unicode[] = { + -1 +}; + +int lang_use_utf8[] = { + LANG_EL, + LANG_JA, + LANG_KO, + LANG_ZH, + -1 +}; + + +typedef struct info_type { + int colorable; + int tintable; +} info_type; + + +enum { + SAVE_OVER_PROMPT, + SAVE_OVER_ALWAYS, + SAVE_OVER_NO +}; + + +/* Globals: */ + +int use_sound, fullscreen, disable_quit, simple_shapes, language, + disable_print, print_delay, only_uppercase, promptless_save, grab_input, + wheely, no_fancy_cursors, keymouse, mouse_x, mouse_y, + mousekey_up, mousekey_down, mousekey_left, mousekey_right, + dont_do_xor, use_print_config; +int WINDOW_WIDTH, WINDOW_HEIGHT; +char * printcommand; +int prog_bar_ctr; +SDL_Surface * screen; + +SDL_Surface * canvas; + +#define NUM_UNDO_BUFS 20 +SDL_Surface * undo_bufs[NUM_UNDO_BUFS]; +int cur_undo, oldest_undo, newest_undo; + +SDL_Surface * img_title, * img_progress; +SDL_Surface * img_btn_up, * img_btn_down, * img_btn_off; +SDL_Surface * img_yes, * img_no; +SDL_Surface * img_open, * img_erase, * img_back; +SDL_Surface * img_cursor_up, * img_cursor_down; +SDL_Surface * img_scroll_up, * img_scroll_down; +SDL_Surface * img_scroll_up_off, * img_scroll_down_off; +SDL_Surface * img_paintcan; + +SDL_Surface * img_sparkles; + +SDL_Surface * img_title_on, * img_title_off, + * img_title_large_on, * img_title_large_off; +SDL_Surface * img_title_names[NUM_TITLES]; +SDL_Surface * img_tools[NUM_TOOLS], * img_tool_names[NUM_TOOLS]; + +#define MAX_STAMPS 256 +#define MAX_BRUSHES 64 +#define MAX_FONTS 64 +int num_brushes, num_stamps; +SDL_Surface * img_brushes[MAX_BRUSHES]; +SDL_Surface * img_stamps[MAX_STAMPS]; +char * txt_stamps[MAX_STAMPS]; +info_type * inf_stamps[MAX_STAMPS]; +#ifndef NOSOUND +Mix_Chunk * snd_stamps[MAX_STAMPS]; +#endif +SDL_Surface * img_stamp_thumbs[MAX_STAMPS]; + +SDL_Surface * img_shapes[NUM_SHAPES], * img_shape_names[NUM_SHAPES]; +SDL_Surface * img_magics[NUM_MAGICS], * img_magic_names[NUM_MAGICS]; +SDL_Surface * img_openlabels_open, * img_openlabels_erase, + * img_openlabels_back; + +SDL_Surface * img_tux[NUM_TIP_TUX]; + +#ifndef LOW_QUALITY_COLOR_SELECTOR +SDL_Surface * img_color_btns[NUM_COLORS]; +#endif + +SDL_Surface * img_cur_brush; +int brush_counter, rainbow_color; + +TTF_Font * font, * small_font, * large_font, * locale_font; +TTF_Font * fonts[MAX_FONTS]; +int num_fonts; + +#ifndef NOSOUND +Mix_Chunk * sounds[NUM_SOUNDS]; +#endif + + +SDL_Cursor * cursor_hand, * cursor_arrow, * cursor_watch, + * cursor_up, * cursor_down, * cursor_tiny, * cursor_crosshair, + * cursor_brush, * cursor_wand, * cursor_insertion, * cursor_rotate; + + +int cur_tool, cur_color, cur_brush, cur_stamp, cur_shape, cur_magic; +int cur_font, cursor_left, cursor_x, cursor_y, cursor_textwidth; +int been_saved; +char file_id[32]; +int brush_scroll, stamp_scroll, font_scroll; +int eraser_sound; + +char texttool_str[128]; +int texttool_len; + +int tool_avail[NUM_TOOLS], tool_avail_bak[NUM_TOOLS]; + +typedef struct edge_type { + int y_upper; + float x_intersect, dx_per_scan; + struct edge_type * next; +} edge; + + +typedef struct point_type { + int x, y; +} point_type; + +typedef struct fpoint_type { + float x, y; +} fpoint_type; + +typedef enum { Left, Right, Bottom, Top } an_edge; +#define NUM_EDGES 4 + +SDL_Event scrolltimer_event; + +char * langstr; +char * savedir; + + +/* Local function prototypes: */ + +void mainloop(void); +void brush_draw(int x1, int y1, int x2, int y2, int update); +void blit_brush(int x, int y); +void magic_draw(int x1, int y1, int x2, int y2); +void blit_magic(int x, int y, int x2, int y2); +void stamp_draw(int x, int y); +void rec_undo_buffer(void); +void update_canvas(int x1, int y1, int x2, int y2); +void setup(int argc, char * argv[]); +SDL_Cursor * get_cursor(char * bits, char * mask_bits, + int w, int h, int x, int y); +void seticon(void); +SDL_Surface * loadimage(char * fname); +void draw_toolbar(void); +void draw_magic(void); +void draw_colors(int enabled); +void draw_brushes(void); +void draw_stamps(void); +void draw_shapes(void); +void draw_fonts(void); +void draw_none(void); +#ifndef NOSOUND +void loadarbitrary(SDL_Surface * surfs[], char * descs[], info_type * infs[], + Mix_Chunk * sounds[], int * count, int starting, int max, + char * dir, int fatal, int maxw, int maxh); +#else +void loadarbitrary(SDL_Surface * surfs[], char * descs[], info_type * infs[], + int * count, int starting, int max, + char * dir, int fatal, int maxw, int maxh); +#endif +SDL_Surface * thumbnail(SDL_Surface * src, int max_x, int max_y, + int keep_aspect); +Uint32 getpixel(SDL_Surface * surface, int x, int y); +void putpixel(SDL_Surface * surface, int x, int y, Uint32 pixel); +void debug(char * str); +void do_undo(void); +void do_redo(void); +void render_brush(void); +void playsound(int chan, int s, int override); +void line_xor(int x1, int y1, int x2, int y2); +void clipped_putpixel(SDL_Surface * dest, int x, int y, Uint32 c); +void rect_xor(int x1, int y1, int x2, int y2); +void stamp_xor(int x1, int y1); +void do_eraser(int x, int y); +void disable_avail_tools(void); +void enable_avail_tools(void); +void reset_avail_tools(void); +void update_screen(int x1, int y1, int x2, int y2); +Uint8 alpha(Uint8 c1, Uint8 c2, Uint8 a); +int compare_strings(char * * s1, char * * s2); +int compare_dirents(struct dirent * f1, struct dirent * f2); +void draw_tux_text(int which_tux, char * str, int want_utf8, + int force_locale_font); +void wordwrap_text(TTF_Font * font, char * str, SDL_Color color, + int left, int top, int right, int want_utf8, + int force_locale_font); +char * loaddesc(char * fname); +info_type * loadinfo(char * fname); +#ifndef NOSOUND +Mix_Chunk * loadsound(char * fname); +#endif +void do_wait(void); +void load_current(void); +void save_current(void); +char * get_fname(char * name); +int do_prompt(char * text, char * btn_yes, char * btn_no); +void cleanup(void); +void free_cursor(SDL_Cursor ** cursor); +void free_surface(SDL_Surface **surface_array); +void free_surface_array(SDL_Surface *surface_array[], int count); +void update_shape(int cx, int ox1, int ox2, int cy, int oy1, int oy2, + int fixed); +void do_shape(int cx, int cy, int ox, int oy, int rotn, int use_brush); +int rotation(int ctr_x, int ctr_y, int ox, int oy); +int do_save(void); +int do_png_save(FILE * fi, char * fname, SDL_Surface * surf); +void get_new_file_id(void); +int do_quit(void); +int do_open(int want_new_tool); +void scan_fill(int cnt, point_type * pts); +int clip_polygon(int n, fpoint_type * pin, fpoint_type * pout); +void wait_for_sfx(void); +int current_language(void); +int stamp_colorable(int stamp); +int stamp_tintable(int stamp); +void rgbtohsv(Uint8 r8, Uint8 g8, Uint8 b8, float *h, float *s, float *v); +void hsvtorgb(float h, float s, float v, Uint8 *r8, Uint8 *g8, Uint8 *b8); +void show_progress_bar(void); +void do_print(void); +void strip_trailing_whitespace(char * buf); +void do_render_cur_text(int do_blit); +void loadfonts(char * dir, int fatal); +char * uppercase(char * str); +SDL_Surface * do_render_button_label(char * label); +static void create_button_labels(void); +int colors_close(Uint32 c1, Uint32 c2); +void do_flood_fill(int x, int y, Uint32 cur_colr, Uint32 old_colr); +static Uint32 scrolltimer_callback(Uint32 interval, void *param); +static Uint32 drawtext_callback(Uint32 interval, void *param); +void control_drawtext_timer(Uint32 interval, char* text); +void parse_options(FILE * fi); +char * debug_gettext(const char * str); +void do_setcursor(SDL_Cursor * c); +char * great_str(void); +int charsize(char c); +void draw_image_title(int t, int x); +int need_unicode(int l); +int need_utf8(int l); +int need_own_font(int l); +void handle_keymouse(SDLKey key, Uint8 updown); +void move_keymouse(void); +void handle_active(SDL_Event * event); +char * remove_slash(char * path); +unsigned char * utf8_decode(unsigned char * str); +unsigned char * unescape(char * str); + + +#define USEREVENT_TEXT_UPDATE 1 + + +/* --- MAIN --- */ + +int main(int argc, char * argv[]) +{ + SDL_Surface * tmp_surf; + SDL_Color black = {0, 0, 0}; + SDL_Rect dest; + char tmp_str[128]; + + /* Set up locale support */ + + setlocale(LC_ALL, ""); + + + /* Set up! */ + + setup(argc, argv); + + + do_setcursor(cursor_arrow); + + SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255)); + + dest.x = (WINDOW_WIDTH - img_title->w) / 2; + dest.y = (WINDOW_HEIGHT - img_title->h); + + SDL_BlitSurface(img_title, NULL, screen, &dest); + + snprintf(tmp_str, sizeof(tmp_str), "%s - %s", VER_VERSION, VER_DATE); + tmp_surf = TTF_RenderText_Blended(font, tmp_str, black); + dest.x = 20 + (WINDOW_WIDTH - img_title->w) / 2; + dest.y = WINDOW_HEIGHT - 60; + SDL_BlitSurface(tmp_surf, NULL, screen, &dest); + SDL_FreeSurface(tmp_surf); + SDL_Flip(screen); + playsound(0, SND_HARP, 1); + + do_wait(); + SDL_FreeSurface(img_title); + + + /* Set defaults! */ + + cur_undo = 0; + oldest_undo = 0; + newest_undo = 0; + + cur_tool = TOOL_BRUSH; + cur_color = COLOR_BLACK; + cur_brush = 0; + cur_stamp = 0; + cur_shape = SHAPE_SQUARE; + cur_magic = 0; + cur_font = 0; + cursor_left = -1; + cursor_x = -1; + cursor_y = -1; + cursor_textwidth = 0; + + mouse_x = WINDOW_WIDTH / 2; + mouse_y = WINDOW_HEIGHT / 2; + SDL_WarpMouse(mouse_x, mouse_y); + + mousekey_up = SDL_KEYUP; + mousekey_down = SDL_KEYUP; + mousekey_left = SDL_KEYUP; + mousekey_right = SDL_KEYUP; + + eraser_sound = 0; + + img_cur_brush = NULL; + render_brush(); + + brush_scroll = 0; + stamp_scroll = 0; + font_scroll = 0; + + + reset_avail_tools(); + + + /* Load current image (if any): */ + + load_current(); + been_saved = 1; + tool_avail[TOOL_SAVE] = 0; + + + /* Draw the screen! */ + + SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255)); + + draw_toolbar(); + draw_colors(1); + draw_brushes(); + update_canvas(0, 0, WINDOW_WIDTH - 96, (48 * 7) + 40 + HEIGHTOFFSET); + + SDL_Flip(screen); + + + /* Main loop! */ + + mainloop(); + + + /* Close and quit! */ + + save_current(); + + wait_for_sfx(); + + + cleanup(); + + return 0; +} + + +/* FIXME: Move elsewhere!!! */ + +#define PROMPT_QUIT_TXT gettext_noop("Do you really want to quit?") +#define PROMPT_QUIT_YES gettext_noop("Yes") +#define PROMPT_QUIT_NO gettext_noop("No") + +#define PROMPT_QUIT_SAVE_TXT gettext_noop("If you quit, you'll lose your picture! Save it?") +#define PROMPT_QUIT_SAVE_YES gettext_noop("Yes") +#define PROMPT_QUIT_SAVE_NO gettext_noop("No") + +#define PROMPT_OPEN_SAVE_TXT gettext_noop("Save your picture first?") +#define PROMPT_OPEN_SAVE_YES gettext_noop("Yes") +#define PROMPT_OPEN_SAVE_NO gettext_noop("No") + +#define PROMPT_OPEN_UNOPENABLE_TXT gettext_noop("Can't open that picture!") +#define PROMPT_OPEN_UNOPENABLE_YES gettext_noop("Okay") + +#define PROMPT_NEW_TXT gettext_noop("Starting a new picture will erase the current one!") +#define PROMPT_NEW_YES gettext_noop("That's Ok") +#define PROMPT_NEW_NO gettext_noop("Never Mind!") + +#define PROMPT_OPEN_NOFILES_TXT gettext_noop("There are no saved files!") +#define PROMPT_OPEN_NOFILES_YES gettext_noop("Okay") + +#define PROMPT_PRINT_TXT gettext_noop("Your picture has been printed!") +#define PROMPT_PRINT_YES gettext_noop("Okay") + +#define PROMPT_PRINT_TOO_SOON_TXT gettext_noop("You can't print yet!") +#define PROMPT_PRINT_TOO_SOON_YES gettext_noop("Okay") + +#define PROMPT_ERASE_TXT gettext_noop("Erase this picture?") +#define PROMPT_ERASE_YES gettext_noop("Yes") +#define PROMPT_ERASE_NO gettext_noop("No") + + +enum { + SHAPE_TOOL_MODE_STRETCH, + SHAPE_TOOL_MODE_ROTATE, + SHAPE_TOOL_MODE_DONE +}; + + +/* --- MAIN LOOP! --- */ + +void mainloop(void) +{ + int done, off_y, which, button_down, old_x, old_y, new_x, new_y, + line_start_x, line_start_y, w, h, shape_tool_mode, + shape_ctr_x, shape_ctr_y, shape_outer_x, shape_outer_y; + int num_things, thing_scroll, cur_thing, old_thing, do_draw, old_tool, + tmp_int; + int cur_time, last_print_time, scrolling; + SDL_TimerID scrolltimer; + SDL_Event event; + SDLKey key, key_down; + Uint16 key_unicode; + SDLMod mod; + Uint32 last_cursor_blink, cur_cursor_blink; + + + num_things = 0; + thing_scroll = 0; + cur_thing = 0; + old_thing = 0; + do_draw = 0; + old_x = 0; + old_y = 0; + new_x = 0; + new_y = 0; + line_start_x = 0; + line_start_y = 0; + shape_ctr_x = 0; + shape_ctr_y = 0; + shape_outer_x = 0; + shape_outer_y =0; + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + button_down = 0; + last_print_time = -print_delay; + last_cursor_blink = 0; + texttool_len = 0; + scrolling = 0; + scrolltimer = 0; + key_down = SDLK_LAST; + key_unicode = 0; + + + done = 0; + + do + { + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_QUIT) + { + done = do_quit(); + } + else if (event.type == SDL_ACTIVEEVENT) + { + handle_active(&event); + } + else if (event.type == SDL_KEYUP) + { + key = event.key.keysym.sym; + + handle_keymouse(key, SDL_KEYUP); + } + else if (event.type == SDL_KEYDOWN) + { + key = event.key.keysym.sym; + mod = event.key.keysym.mod; + + handle_keymouse(key, SDL_KEYDOWN); + + if (key == SDLK_ESCAPE) + { + done = do_quit(); + } +#ifdef WIN32 + else if (key == SDLK_F4 && (mod & KMOD_ALT)) + { + done = do_quit(); + } +#endif + else if (key == SDLK_z && + (mod & KMOD_CTRL || + mod & KMOD_LCTRL || + mod & KMOD_RCTRL)) + { + /* Ctrl-Z - Undo */ + + if (tool_avail[TOOL_UNDO]) + { + if (cur_undo == newest_undo) + { + rec_undo_buffer(); + do_undo(); + } + do_undo(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + } + } + else if (key == SDLK_r && + (mod & KMOD_CTRL || + mod & KMOD_LCTRL || + mod & KMOD_RCTRL)) + { + /* Ctrl-R - Redo */ + + if (tool_avail[TOOL_REDO]) + { + do_redo(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + } + } + else if (key == SDLK_o && + (mod & KMOD_CTRL || + mod & KMOD_LCTRL || + mod & KMOD_RCTRL)) + { + /* Ctrl-O - Open */ + + tmp_int = tool_avail[TOOL_NEW]; + disable_avail_tools(); + draw_toolbar(); + draw_colors(0); + draw_none(); + + tmp_int = do_open(tmp_int); + + enable_avail_tools(); + tool_avail[TOOL_NEW] = tmp_int; + + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + + if (cur_tool == TOOL_BRUSH || + cur_tool == TOOL_LINES || + cur_tool == TOOL_SHAPES || + cur_tool == TOOL_TEXT) + { + draw_colors(1); + } + else if (cur_tool == TOOL_STAMP) + { + draw_colors(stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)); + } + else if (cur_tool == TOOL_MAGIC && + cur_magic == MAGIC_FILL) + { + draw_colors(1); + } + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + draw_brushes(); + else if (cur_tool == TOOL_MAGIC) + draw_magic(); + else if (cur_tool == TOOL_STAMP) + draw_stamps(); + else if (cur_tool == TOOL_TEXT) + draw_fonts(); + else if (cur_tool == TOOL_SHAPES) + draw_shapes(); + + draw_tux_text(TUX_GREAT, tool_tips[cur_tool], 0, 0); + + + /* FIXME: Make delay configurable: */ + + control_drawtext_timer(1000, tool_tips[cur_tool]); + } + else if ((key == SDLK_n && + ((mod & KMOD_CTRL || + mod & KMOD_LCTRL || + mod & KMOD_RCTRL))) && tool_avail[TOOL_NEW]) + { + /* Ctrl-N - New */ + + if (do_prompt(PROMPT_NEW_TXT, + PROMPT_NEW_YES, + PROMPT_NEW_NO)) + { + SDL_FillRect(canvas, NULL, + SDL_MapRGB(canvas->format, 255, 255, 255)); + update_canvas(0, 0, + WINDOW_WIDTH - 96, + (48 * 7) + 40 + HEIGHTOFFSET); + + cur_undo = 0; + oldest_undo = 0; + newest_undo = 0; + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + + been_saved = 1; + reset_avail_tools(); + + file_id[0] = '\0'; + + playsound(1, SND_HARP, 1); + } + else + { + draw_tux_text(tool_tux[TUX_DEFAULT], TIP_NEW_ABORT, 0, 0); + } + + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + else if (key == SDLK_s && + (mod & KMOD_CTRL || + mod & KMOD_LCTRL || + mod & KMOD_RCTRL)) + { + /* Ctrl-S - Save */ + + if (do_save()) + { + /* Only think it's been saved if it HAS been saved :^) */ + + been_saved = 1; + tool_avail[TOOL_SAVE] = 0; + } + + /* cur_tool = old_tool; */ + draw_toolbar(); + + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + else + { + /* Handle key in text tool: */ + + if (cur_tool == TOOL_TEXT && + cursor_x != -1 && cursor_y != -1) + { + key_down = key; + key_unicode = event.key.keysym.unicode; + +#ifdef DEBUG + printf("charsize(%c) = %d\n", event.key.keysym.unicode, + charsize(event.key.keysym.unicode)); +#endif + + if (key_down == SDLK_BACKSPACE) + { + + if (texttool_len > 0) + { + texttool_len--; + texttool_str[texttool_len] = '\0'; + playsound(0, SND_KEYCLICK, 1); + + do_render_cur_text(0); + } + } + else if (key_down == SDLK_RETURN) + { + if (texttool_len > 0) + { + rec_undo_buffer(); + do_render_cur_text(1); + texttool_len = 0; + cursor_textwidth = 0; + } + + cursor_x = cursor_left; + cursor_y = cursor_y + TTF_FontHeight(fonts[cur_font]); + + if (cursor_y > ((48 * 7 + 40 + HEIGHTOFFSET) - + TTF_FontHeight(fonts[cur_font]))) + { + cursor_y = ((48 * 7 + 40 + HEIGHTOFFSET) - + TTF_FontHeight(fonts[cur_font])); + } + + playsound(0, SND_RETURN, 1); + } + else if (isprint(key_unicode)) + { + if (texttool_len < sizeof(texttool_str) - 1) + { +#ifdef DEBUG + printf(" key = %c\n" + "unicode = %c (%d)\n\n", + key_down, key_unicode, key_unicode); +#endif + + texttool_str[texttool_len++] = key_unicode; + texttool_str[texttool_len] = '\0'; + playsound(0, SND_KEYCLICK, 1); + do_render_cur_text(0); + } + } + } + } + } + else if ((event.type == SDL_MOUSEBUTTONDOWN && + event.button.button >= 1 && + event.button.button <= 3)) + { + if (/* event.button.x >= 0 && */ + event.button.x < 96 && + event.button.y >= 40 && + event.button.y < (48 * 7) + 40) /* FIXME: FIX ME? */ + { + /* A tool on the left has been pressed! */ + + which = ((event.button.y - 40) / 48) * 2 + + (event.button.x / 48); + + if (which < NUM_TOOLS && tool_avail[which]) + { + /* Render any current text: */ + + if (cur_tool == TOOL_TEXT && which != TOOL_TEXT && + texttool_len > 0) + { + if (cursor_x != -1 && cursor_y != -1) + { + if (texttool_len > 0) + { + rec_undo_buffer(); + do_render_cur_text(1); + texttool_len = 0; + cursor_textwidth = 0; + } + } + } + + + old_tool = cur_tool; + cur_tool = which; + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + + playsound(1, SND_CLICK, 0); + + draw_tux_text(tool_tux[cur_tool], tool_tips[cur_tool], + 0, 0); + + + /* Draw items for this tool: */ + + if (cur_tool == TOOL_BRUSH) + { + draw_brushes(); + draw_colors(1); + } + else if (cur_tool == TOOL_STAMP) + { + draw_stamps(); + draw_colors(stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)); + } + else if (cur_tool == TOOL_LINES) + { + draw_brushes(); + draw_colors(1); + } + else if (cur_tool == TOOL_SHAPES) + { + draw_shapes(); + draw_colors(1); + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + } + else if (cur_tool == TOOL_TEXT) + { + draw_fonts(); + draw_colors(1); + } + else if (cur_tool == TOOL_ERASER) + { + draw_none(); + draw_colors(0); + } + else if (cur_tool == TOOL_UNDO) + { + if (cur_undo == newest_undo) + { + rec_undo_buffer(); + do_undo(); + } + do_undo(); + + been_saved = 0; + tool_avail[TOOL_SAVE] = 1; + + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + } + else if (cur_tool == TOOL_REDO) + { + do_redo(); + + been_saved = 0; + tool_avail[TOOL_SAVE] = 1; + + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + } + else if (cur_tool == TOOL_OPEN) + { + tmp_int = tool_avail[TOOL_NEW]; + disable_avail_tools(); + draw_toolbar(); + draw_colors(0); + draw_none(); + + tmp_int = do_open(tmp_int); + + enable_avail_tools(); + tool_avail[TOOL_NEW] = tmp_int; + + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + + draw_tux_text(TUX_GREAT, tool_tips[cur_tool], 0, 0); + + if (cur_tool == TOOL_BRUSH || + cur_tool == TOOL_LINES || + cur_tool == TOOL_SHAPES || + cur_tool == TOOL_TEXT) + { + draw_colors(1); + } + else if (cur_tool == TOOL_STAMP) + { + draw_colors(stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)); + } + else if (cur_tool == TOOL_MAGIC && + cur_magic == MAGIC_FILL) + { + draw_colors(1); + } + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + draw_brushes(); + else if (cur_tool == TOOL_MAGIC) + draw_magic(); + else if (cur_tool == TOOL_STAMP) + draw_stamps(); + else if (cur_tool == TOOL_TEXT) + draw_fonts(); + else if (cur_tool == TOOL_SHAPES) + draw_shapes(); + } + else if (cur_tool == TOOL_SAVE) + { + if (do_save()) + { + been_saved = 1; + tool_avail[TOOL_SAVE] = 0; + } + + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + else if (cur_tool == TOOL_NEW) + { + if (do_prompt(PROMPT_NEW_TXT, + PROMPT_NEW_YES, + PROMPT_NEW_NO)) + { + SDL_FillRect(canvas, NULL, + SDL_MapRGB(canvas->format, + 255, 255, 255)); + update_canvas(0, 0, + WINDOW_WIDTH - 96, + (48 * 7) + 40 + HEIGHTOFFSET); + + cur_undo = 0; + oldest_undo = 0; + newest_undo = 0; + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + + been_saved = 1; + reset_avail_tools(); + + file_id[0] = '\0'; + + playsound(1, SND_HARP, 1); + } + else + { + draw_tux_text(tool_tux[TUX_DEFAULT], + TIP_NEW_ABORT, 0, 0); + } + + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + else if (cur_tool == TOOL_PRINT) + { + cur_time = SDL_GetTicks() / 1000; + +#ifdef DEBUG + printf("Current time = %d\n", cur_time); +#endif + + if (cur_time >= last_print_time + print_delay) + { + do_print(); + + last_print_time = cur_time; + } + else + { + do_prompt(PROMPT_PRINT_TOO_SOON_TXT, + PROMPT_PRINT_TOO_SOON_YES, + ""); + } + + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + else if (cur_tool == TOOL_MAGIC) + { + rainbow_color = 0; + draw_magic(); + + if (cur_magic == MAGIC_FILL) + draw_colors(1); + else + draw_colors(0); + } + else if (cur_tool == TOOL_QUIT) + { + done = do_quit(); + cur_tool = old_tool; + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + + SDL_UpdateRect(screen, + WINDOW_WIDTH - 96, 0, + 96, (48 * 7) + 40 + HEIGHTOFFSET); + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + HEIGHTOFFSET, + WINDOW_WIDTH, 48); + } + } + else if (event.button.x >= WINDOW_WIDTH - 96 && + event.button.x < WINDOW_WIDTH && + event.button.y >= 40 && + event.button.y < (48 * (7 + TOOLOFFSET / 2)) + 40) + { + /* Options on the right have been pressed! */ + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_STAMP || + cur_tool == TOOL_SHAPES || cur_tool == TOOL_LINES || + cur_tool == TOOL_MAGIC || cur_tool == TOOL_TEXT) + { + /* Note set of things we're dealing with */ + /* (stamps, brushes, etc.) */ + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + { + num_things = num_brushes; + thing_scroll = brush_scroll; + } + else if (cur_tool == TOOL_STAMP) + { + num_things = num_stamps; + thing_scroll = stamp_scroll; + } + else if (cur_tool == TOOL_TEXT) + { + num_things = num_fonts; + thing_scroll = font_scroll; + } + else if (cur_tool == TOOL_SHAPES) + { + num_things = NUM_SHAPES; + thing_scroll = 0; + } + else if (cur_tool == TOOL_MAGIC) + { + num_things = NUM_MAGICS; + thing_scroll = 0; + } + + do_draw = 0; + + + /* Deal with scrollbars: */ + + if (num_things > 14 + TOOLOFFSET) + { + if (event.button.y < 40 + 24) + { + if (thing_scroll > 0) + { + thing_scroll = thing_scroll - 2; + do_draw = 1; + + playsound(1, SND_SCROLL, 1); + + if (scrolling == 0) + { + memcpy(&scrolltimer_event, + &event, + sizeof(SDL_Event)); + + + /* FIXME: Make delay value changable: */ + + scrolltimer = + SDL_AddTimer(REPEAT_SPEED, + scrolltimer_callback, + (void*) &scrolltimer_event); + + scrolling = 1; + } + else + { + SDL_RemoveTimer(scrolltimer); + + scrolltimer = + SDL_AddTimer(REPEAT_SPEED / 3, + scrolltimer_callback, + (void*) &scrolltimer_event); + } + + + if (thing_scroll == 0) + { + do_setcursor(cursor_arrow); + + if (scrolling == 1) + { + SDL_RemoveTimer(scrolltimer); + scrolling = 0; + } + } + } + } + else if (event.button.y >= + (48 * (6 + TOOLOFFSET / 2)) + 40 + 24) + { + if (thing_scroll < num_things - 12 - TOOLOFFSET) + { + thing_scroll = thing_scroll + 2; + do_draw = 1; + + playsound(1, SND_SCROLL, 1); + + if (scrolling == 0) + { + memcpy(&scrolltimer_event, + &event, + sizeof(SDL_Event)); + + /* FIXME: Make delay value changable: */ + + scrolltimer = + SDL_AddTimer(REPEAT_SPEED, + scrolltimer_callback, + (void*) &scrolltimer_event); + + scrolling = 1; + } + else + { + SDL_RemoveTimer(scrolltimer); + + scrolltimer = + SDL_AddTimer(REPEAT_SPEED / 3, + scrolltimer_callback, + (void*) &scrolltimer_event); + } + + if (thing_scroll == 0) + { + do_setcursor(cursor_arrow); + + if (scrolling == 1) + { + SDL_RemoveTimer(scrolltimer); + scrolling = 0; + } + } + } + } + + off_y = 24; + } + else + { + off_y = 0; + } + + + if (event.button.y > 40 + off_y && + event.button.y < + (48 * (7 + TOOLOFFSET / 2)) + 40 - off_y) + { + which = ((event.button.y - 40 - off_y) / 48) * 2 + + ((event.button.x - (WINDOW_WIDTH - 96)) / 48) + + thing_scroll; + + if (which < num_things) + { +#ifndef NOSOUND + if (cur_tool != TOOL_STAMP || + snd_stamps[which] == NULL) + { + playsound(1, SND_BLEEP, 0); + } +#endif + + old_thing = cur_thing; + cur_thing = which; + do_draw = 1; + } + else + { + cur_thing = num_things - 1; + do_draw = 1; + } + } + + + /* Assign the change(s), if any / redraw, if needed: */ + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + { + cur_brush = cur_thing; + brush_scroll = thing_scroll; + render_brush(); + + if (do_draw) + draw_brushes(); + } + else if (cur_tool == TOOL_TEXT) + { + cur_font = cur_thing; + font_scroll = thing_scroll; + + if (do_draw) + draw_fonts(); + + do_render_cur_text(0); + } + else if (cur_tool == TOOL_STAMP) + { +#ifndef NOSOUND + if (cur_stamp != cur_thing || + stamp_scroll == thing_scroll) + { + /* Only play when picking a different stamp, not + simply scrolling */ + + if (snd_stamps[cur_thing] != NULL) + Mix_PlayChannel(2, snd_stamps[cur_thing], 0); + } +#endif + cur_stamp = cur_thing; + stamp_scroll = thing_scroll; + + if (do_draw) + draw_stamps(); + + if (txt_stamps[cur_stamp] != NULL) + { + if (txt_stamps[cur_stamp][0] == '=') + { + /* FIXME: Stupid. Using '=' to denote UTF8 */ + + draw_tux_text(TUX_GREAT, + txt_stamps[cur_stamp] + 1, 1, 0); + } + else + { + draw_tux_text(TUX_GREAT, + txt_stamps[cur_stamp], 0, 1); + } + } + else + draw_tux_text(TUX_GREAT, "", 0, 0); + + + /* Enable or disable color selector: */ + + if ((stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)) != + (stamp_colorable(old_thing) || + stamp_tintable(old_thing))) + { + draw_colors(stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)); + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + HEIGHTOFFSET, + WINDOW_WIDTH, 48); + } + } + else if (cur_tool == TOOL_SHAPES) + { + cur_shape = cur_thing; + + draw_tux_text(TUX_GREAT, shape_tips[cur_shape], 0, 0); + + if (do_draw) + draw_shapes(); + } + else if (cur_tool == TOOL_MAGIC) + { + if (cur_thing != cur_magic) + { + if (cur_thing == MAGIC_FILL) + draw_colors(1); + else + draw_colors(0); + + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + HEIGHTOFFSET, + WINDOW_WIDTH, 48); + } + + cur_magic = cur_thing; + + draw_tux_text(TUX_GREAT, magic_tips[cur_magic], 0, 0); + + if (do_draw) + draw_magic(); + } + + /* Update the screen: */ + + if (do_draw) + SDL_UpdateRect(screen, + WINDOW_WIDTH - 96, 0, + 96, (48 * 7) + 40 + HEIGHTOFFSET); + } + } + else if (event.button.x > 96 && + /* FIXME: Need exact number here! */ + event.button.x < WINDOW_WIDTH && + event.button.y > (48 * (7 + TOOLOFFSET / 2)) + 40 && + event.button.y <= (48 * (7 + TOOLOFFSET / 2)) + 48 + 48 && + (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES || + cur_tool == TOOL_SHAPES || cur_tool == TOOL_TEXT || + (cur_tool == TOOL_MAGIC && cur_magic == MAGIC_FILL) || + (cur_tool == TOOL_STAMP && + (stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp))))) + { + /* Color! */ + + which = ((event.button.x - 96) / + ((WINDOW_WIDTH - 96) / NUM_COLORS)); + + if (which < NUM_COLORS) + { + cur_color = which; + playsound(1, SND_BUBBLE, 1); + draw_colors(1); + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + HEIGHTOFFSET, + WINDOW_WIDTH, 48); + render_brush(); + draw_tux_text(TUX_KISS, color_names[cur_color], 0, 0); + + if (cur_tool == TOOL_TEXT) + do_render_cur_text(0); + } + } + else if (event.button.x > 96 && + event.button.x < WINDOW_WIDTH - 96 && + /* event.button.y >= 0 && */ + event.button.y < (48 * 7) + 40 + HEIGHTOFFSET) + { + /* Draw something! */ + + button_down = 1; + + old_x = event.button.x - 96; + old_y = event.button.y; + + if (been_saved) + { + been_saved = 0; + tool_avail[TOOL_SAVE] = 1; + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + + if (cur_tool == TOOL_BRUSH) + { + /* Start painting! */ + + rec_undo_buffer(); + + /* (Arbitrarily large, so we draw once now) */ + brush_counter = 999; + + brush_draw(old_x, old_y, old_x, old_y, 1); + playsound(0, SND_PAINT1 + (img_cur_brush->w) / 12, 1); + } + else if (cur_tool == TOOL_STAMP) + { + /* Draw a stamp! */ + + rec_undo_buffer(); + + stamp_draw(old_x, old_y); +#ifdef LOW_QUALITY_STAMP_OUTLINE + rect_xor(old_x - (img_stamps[cur_stamp]->w / 2), + old_y - (img_stamps[cur_stamp]->h / 2), + old_x + (img_stamps[cur_stamp]->w / 2), + old_y + (img_stamps[cur_stamp]->h / 2)); +#else + stamp_xor(old_x - (img_stamps[cur_stamp]->w / 2), + old_y - (img_stamps[cur_stamp]->h / 2)); +#endif + playsound(1, SND_STAMP, 1); + + draw_tux_text(TUX_GREAT, great_str(), 0, 0); + + /* FIXME: Make delay configurable: */ + + control_drawtext_timer(1000, txt_stamps[cur_stamp]); + } + else if (cur_tool == TOOL_LINES) + { + /* Start a line! */ + + rec_undo_buffer(); + + line_start_x = old_x; + line_start_y = old_y; + + /* (Arbitrarily large, so we draw once now) */ + brush_counter = 999; + + brush_draw(old_x, old_y, old_x, old_y, 1); + + playsound(1, SND_LINE_START, 1); + draw_tux_text(TUX_BORED, TIP_LINE_START, 0, 0); + } + else if (cur_tool == TOOL_SHAPES) + { + if (shape_tool_mode == SHAPE_TOOL_MODE_DONE) + { + /* Start drawing a shape! */ + + rec_undo_buffer(); + + shape_ctr_x = old_x; + shape_ctr_y = old_y; + + shape_tool_mode = SHAPE_TOOL_MODE_STRETCH; + + playsound(1, SND_LINE_START, 1); + draw_tux_text(TUX_BORED, TIP_SHAPE_START, 0, 0); + } + else if (shape_tool_mode == SHAPE_TOOL_MODE_ROTATE) + { + /* Draw the shape with the brush! */ + + /* (Arbitrarily large...) */ + brush_counter = 999; + + playsound(1, SND_LINE_END, 1); + do_shape(shape_ctr_x, shape_ctr_y, + shape_outer_x, shape_outer_y, + rotation(shape_ctr_x, shape_ctr_y, + event.button.x - 96, + event.button.y), + 1); + + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + draw_tux_text(TUX_GREAT, tool_tips[TOOL_SHAPES], 0, 0); + } + } + else if (cur_tool == TOOL_MAGIC) + { + /* Start doing magic! */ + + rec_undo_buffer(); + + /* (Arbitrarily large, so we draw once now) */ + brush_counter = 999; + + if (cur_magic != MAGIC_FILL) + { + magic_draw(old_x, old_y, old_x, old_y); + } + else + { + do_flood_fill(old_x, old_y, + SDL_MapRGB(canvas->format, + color_hexes[cur_color][0], + color_hexes[cur_color][1], + color_hexes[cur_color][2]), + getpixel(canvas, old_x, old_y)); + + draw_tux_text(TUX_GREAT, magic_tips[MAGIC_FILL], 0, 0); + } + + if (cur_magic == MAGIC_FLIP || + cur_magic == MAGIC_MIRROR || + cur_magic == MAGIC_FILL) + { + update_canvas(0, 0, canvas->w, canvas->h); + } + } + else if (cur_tool == TOOL_ERASER) + { + /* Erase! */ + + rec_undo_buffer(); + + do_eraser(old_x, old_y); + } + else if (cur_tool == TOOL_TEXT) + { + /* Text Tool! */ + + if (cursor_x != -1 && cursor_y != -1) + { + /* + if (texttool_len > 0) + { + rec_undo_buffer(); + do_render_cur_text(1); + texttool_len = 0; + } + */ + } + + cursor_x = old_x; + cursor_y = old_y; + cursor_left = old_x; + + do_render_cur_text(0); + } + + + /* Make sure these commands are available now: */ + + if (tool_avail[TOOL_NEW] == 0) + { + tool_avail[TOOL_NEW] = 1; + + draw_toolbar(); + SDL_UpdateRect(screen, + 0, 0, + 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + } + } + else if (event.type == SDL_MOUSEBUTTONDOWN && + wheely && + event.button.button >= 4 && + event.button.button <= 5) + { + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_STAMP || + cur_tool == TOOL_SHAPES || cur_tool == TOOL_LINES || + cur_tool == TOOL_MAGIC || cur_tool == TOOL_TEXT) + { + /* Note set of things we're dealing with */ + /* (stamps, brushes, etc.) */ + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + { + num_things = num_brushes; + thing_scroll = brush_scroll; + } + else if (cur_tool == TOOL_STAMP) + { + num_things = num_stamps; + thing_scroll = stamp_scroll; + } + else if (cur_tool == TOOL_TEXT) + { + num_things = num_fonts; + thing_scroll = font_scroll; + } + else if (cur_tool == TOOL_SHAPES) + { + num_things = NUM_SHAPES; + thing_scroll = 0; + } + else if (cur_tool == TOOL_MAGIC) + { + num_things = NUM_MAGICS; + thing_scroll = 0; + } + + do_draw = 0; + + + /* Deal with scrollbars: */ + + if (num_things > 14 + TOOLOFFSET) + { + if (event.button.button == 4) + { + /* Wheelmouse - UP "button" */ + + if (thing_scroll > 0) + { + thing_scroll = thing_scroll - 2; + do_draw = 1; + + playsound(1, SND_SCROLL, 1); + + if (thing_scroll == 0) + do_setcursor(cursor_arrow); + } + } + else if (event.button.button == 5) + { + /* Wheelmouse - DOWN "button" */ + + if (thing_scroll < num_things - 12) + { + thing_scroll = thing_scroll + 2; + do_draw = 1; + + playsound(1, SND_SCROLL, 1); + + if (thing_scroll == 0) + do_setcursor(cursor_arrow); + } + } + + off_y = 24; + } + else + { + off_y = 0; + } + } + /* Assign the change(s), if any / redraw, if needed: */ + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + { + cur_brush = cur_thing; + brush_scroll = thing_scroll; + render_brush(); + + if (do_draw) + draw_brushes(); + } + else if (cur_tool == TOOL_TEXT) + { + cur_font = cur_thing; + font_scroll = thing_scroll; + + if (do_draw) + draw_fonts(); + + do_render_cur_text(0); + } + else if (cur_tool == TOOL_STAMP) + { +#ifndef NOSOUND + if (cur_stamp != cur_thing) + { + /* Only play when picking a different stamp, not + simply scrolling */ + + if (snd_stamps[cur_thing] != NULL) + Mix_PlayChannel(2, snd_stamps[cur_thing], 0); + } +#endif + cur_stamp = cur_thing; + stamp_scroll = thing_scroll; + + if (do_draw) + draw_stamps(); + + if (txt_stamps[cur_stamp] != NULL) + { + if (txt_stamps[cur_stamp][0] == '=') + { + /* FIXME: Stupid. Using '=' to denote UTF8 */ + + draw_tux_text(TUX_GREAT, + txt_stamps[cur_stamp] + 1, 1, 0); + } + else + { + draw_tux_text(TUX_GREAT, txt_stamps[cur_stamp], + 0, 1); + } + } + else + draw_tux_text(TUX_GREAT, "", 0, 0); + + + /* Enable or disable color selector: */ + + if ((stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)) != + (stamp_colorable(old_thing) || + stamp_tintable(old_thing))) + { + draw_colors(stamp_colorable(cur_stamp) || + stamp_tintable(cur_stamp)); + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + HEIGHTOFFSET, + WINDOW_WIDTH, 48); + } + } + else if (cur_tool == TOOL_SHAPES) + { + cur_shape = cur_thing; + + draw_tux_text(TUX_GREAT, shape_tips[cur_shape], 0, 0); + + if (do_draw) + draw_shapes(); + } + else if (cur_tool == TOOL_MAGIC) + { + if (cur_thing != cur_magic) + { + if (cur_thing == MAGIC_FILL) + draw_colors(1); + else + draw_colors(0); + + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + HEIGHTOFFSET, + WINDOW_WIDTH, 48); + } + + cur_magic = cur_thing; + + draw_tux_text(TUX_GREAT, magic_tips[cur_magic], 0, 0); + + if (do_draw) + draw_magic(); + } + + + /* Update the screen: */ + + if (do_draw) + SDL_UpdateRect(screen, + WINDOW_WIDTH - 96, 0, + 96, (48 * 7) + 40 + HEIGHTOFFSET); + } + else if (event.type == SDL_USEREVENT) + { + if (event.user.code == USEREVENT_TEXT_UPDATE) + { + /* Time to replace "Great!" with old tip text: */ + + if (event.user.data1 != NULL) + { + if (((unsigned char *) event.user.data1)[0] == '=') + { + draw_tux_text(TUX_GREAT, event.user.data1 + 1, 1, 0); + } + else + { + draw_tux_text(TUX_GREAT, event.user.data1, 0, 1); + } + } + else + draw_tux_text(TUX_GREAT, "", 0, 0); + } + } + else if (event.type == SDL_MOUSEBUTTONUP) + { + if (scrolling) + { + SDL_RemoveTimer(scrolltimer); + scrolling = 0; + } + + if (button_down) + { + if (cur_tool == TOOL_LINES) + { + /* (Arbitrarily large, so we draw once now) */ + brush_counter = 999; + + brush_draw(line_start_x, line_start_y, + event.button.x - 96, event.button.y, 1); + brush_draw(event.button.x - 96, event.button.y, + event.button.x - 96, event.button.y, 1); + + playsound(1, SND_LINE_END, 1); + draw_tux_text(TUX_GREAT, tool_tips[TOOL_LINES], 0, 0); + } + else if (cur_tool == TOOL_SHAPES) + { + if (shape_tool_mode == SHAPE_TOOL_MODE_STRETCH) + { + /* Now we can rotate the shape... */ + + shape_outer_x = event.button.x - 96; + shape_outer_y = event.button.y; + + if (!simple_shapes && !shape_no_rotate[cur_shape]) + { + shape_tool_mode = SHAPE_TOOL_MODE_ROTATE; + + SDL_WarpMouse(shape_outer_x + 96, shape_ctr_y); + do_setcursor(cursor_rotate); + + + /* Erase stretchy XOR: */ + + do_shape(shape_ctr_x, shape_ctr_y, old_x, old_y, + 0, 0); + + /* Make an initial rotation XOR to be erased: */ + + do_shape(shape_ctr_x, shape_ctr_y, + shape_outer_x, shape_outer_y, + rotation(shape_ctr_x, shape_ctr_y, + shape_outer_x, shape_outer_y), + 0); + + playsound(1, SND_LINE_START, 1); + draw_tux_text(TUX_BORED, TIP_SHAPE_NEXT, 0, 0); + + + /* FIXME: Do something less intensive! */ + + SDL_Flip(screen); + } + else + { + brush_counter = 999; /* arbitrarily large... */ + + + playsound(1, SND_LINE_END, 1); + do_shape(shape_ctr_x, shape_ctr_y, + shape_outer_x, shape_outer_y, + 0, 1); + + SDL_Flip(screen); + + shape_tool_mode = SHAPE_TOOL_MODE_DONE; + draw_tux_text(TUX_GREAT, + tool_tips[TOOL_SHAPES], 0, 0); + } + } + } + } + + button_down = 0; + } + else if (event.type == SDL_MOUSEMOTION) + { + new_x = event.button.x - 96; + new_y = event.button.y; + + + /* FIXME: Is doing this every event too intensive? */ + /* Should I check current cursor first? */ + + if (event.button.x < 96 && event.button.y < (48 * 7) + 40 && + event.button.y > 40) + { + /* Tools: */ + + if (tool_avail[(event.button.x / 48) + + ((event.button.y - 40) / 48) * 2]) + { + do_setcursor(cursor_hand); + } + else + { + do_setcursor(cursor_arrow); + } + } + else if (event.button.x > 96 && + event.button.y >= (48 * 7) + 40 + HEIGHTOFFSET && + event.button.y <= (48 * 7) + 40 + 48 + HEIGHTOFFSET) + { + /* Color picker: */ + + do_setcursor(cursor_hand); + } + else if (event.button.x >= WINDOW_WIDTH - 96 && + event.button.y > 40 && + event.button.y <= (48 * (7 + TOOLOFFSET / 2)) + 40) + { + /* Selector: */ + + /* Note set of things we're dealing with */ + /* (stamps, brushes, etc.) */ + + if (cur_tool == TOOL_BRUSH || cur_tool == TOOL_LINES) + { + num_things = num_brushes; + thing_scroll = brush_scroll; + } + else if (cur_tool == TOOL_STAMP) + { + num_things = num_stamps; + thing_scroll = stamp_scroll; + } + else if (cur_tool == TOOL_TEXT) + { + num_things = num_fonts; + thing_scroll = font_scroll; + } + else if (cur_tool == TOOL_SHAPES) + { + num_things = NUM_SHAPES; + thing_scroll = 0; + } + else if (cur_tool == TOOL_MAGIC) + { + num_things = NUM_MAGICS; + thing_scroll = 0; + } + + + if (num_things > 14 + TOOLOFFSET) + { + /* Are there scroll buttons? */ + + if (event.button.y < 40 + 24) + { + /* Up button; is it available? */ + + if (thing_scroll > 0) + do_setcursor(cursor_up); + else + do_setcursor(cursor_arrow); + } + else if (event.button.y > (48 * (6 + TOOLOFFSET / 2)) + 40 + 24) + { + /* Down button; is it available? */ + + if (thing_scroll < num_things - 12) + do_setcursor(cursor_down); + else + do_setcursor(cursor_arrow); + } + else + { + /* One of the selectors: */ + + do_setcursor(cursor_hand); + } + } + else + { + /* No scroll buttons - must be a selector: */ + + do_setcursor(cursor_hand); + } + } + else if (event.button.x > 96 && + event.button.x < WINDOW_WIDTH - 96 && + event.button.y < (48 * 7) + 40 + HEIGHTOFFSET) + { + /* Canvas: */ + + if (cur_tool == TOOL_BRUSH) + do_setcursor(cursor_brush); + else if (cur_tool == TOOL_STAMP) + do_setcursor(cursor_tiny); + else if (cur_tool == TOOL_LINES) + do_setcursor(cursor_crosshair); + else if (cur_tool == TOOL_SHAPES) + { + if (shape_tool_mode != SHAPE_TOOL_MODE_ROTATE) + do_setcursor(cursor_crosshair); + else + do_setcursor(cursor_rotate); + } + else if (cur_tool == TOOL_TEXT) + do_setcursor(cursor_insertion); + else if (cur_tool == TOOL_MAGIC) + do_setcursor(cursor_wand); + else if (cur_tool == TOOL_ERASER) + do_setcursor(cursor_tiny); + } + else + { + do_setcursor(cursor_arrow); + } + + + if (button_down) + { + if (cur_tool == TOOL_BRUSH) + { + /* Pushing button and moving: Draw with the brush: */ + + brush_draw(old_x, old_y, new_x, new_y, 1); + + playsound(0, SND_PAINT1 + (img_cur_brush->w) / 12, 0); + } + else if (cur_tool == TOOL_LINES) + { + /* Still pushing button, while moving: + Draw XOR where line will go: */ + + line_xor(line_start_x, line_start_y, old_x, old_y); + + line_xor(line_start_x, line_start_y, new_x, new_y); + + update_screen(line_start_x + 96, line_start_y, + old_x + 96, old_y); + update_screen(line_start_x + 96, line_start_y, + new_x + 96, new_y); + } + else if (cur_tool == TOOL_SHAPES) + { + /* Still pushing button, while moving: + Draw XOR where shape will go: */ + + if (shape_tool_mode == SHAPE_TOOL_MODE_STRETCH) + { + do_shape(shape_ctr_x, shape_ctr_y, old_x, old_y, + 0, 0); + + do_shape(shape_ctr_x, shape_ctr_y, + new_x, new_y, + 0, 0); + + + /* FIXME: Fix update shape function! */ + + /* update_shape(shape_ctr_x, old_x, new_x, + shape_ctr_y, old_y, new_y, + shape_locked[cur_shape]); */ + + SDL_Flip(screen); + } + } + else if (cur_tool == TOOL_MAGIC) + { + /* Pushing button and moving: Do the magic: */ + + if (cur_magic != MAGIC_FLIP && + cur_magic != MAGIC_MIRROR && + cur_magic != MAGIC_FILL) + { + magic_draw(old_x, old_y, new_x, new_y); + } + } + else if (cur_tool == TOOL_ERASER) + { + /* Still pushing, and moving - Erase! */ + + do_eraser(new_x, new_y); + } + } + + + if (cur_tool == TOOL_STAMP || + (cur_tool == TOOL_ERASER && !button_down)) + { + /* Moving: Draw XOR where stamp/eraser will apply: */ + + if (cur_tool == TOOL_STAMP) + { + w = img_stamps[cur_stamp]->w; + h = img_stamps[cur_stamp]->h; + } + else if (cur_tool == TOOL_ERASER) + { + w = 96; + h = 96; + } + + if (old_x >= 0 && old_x < WINDOW_WIDTH - 96 - 96 && + old_y >= 0 && old_y < (48 * 7) + 40 + HEIGHTOFFSET) + { +#ifndef LOW_QUALITY_STAMP_OUTLINE + if (cur_tool == TOOL_STAMP) + stamp_xor(old_x - w / 2, old_y - h / 2); + else + rect_xor(old_x - w / 2, old_y - h / 2, + old_x + w / 2, old_y + h / 2); +#else + rect_xor(old_x - w / 2, old_y - h / 2, + old_x + w / 2, old_y + h / 2); +#endif + update_screen(old_x - w / 2 + 96, old_y - h / 2, + old_x + w / 2 + 96, old_y + h / 2); + } + + if (new_x >= 0 && new_x < WINDOW_WIDTH - 96 - 96 && + new_y >= 0 && new_y < (48 * 7) + 40 + HEIGHTOFFSET) + { +#ifndef LOW_QUALITY_STAMP_OUTLINE + if (cur_tool == TOOL_STAMP) + stamp_xor(new_x - w / 2, new_y - h / 2); + else + rect_xor(new_x - w / 2, new_y - h / 2, + new_x + w / 2, new_y + h / 2); +#else + rect_xor(new_x - w / 2, new_y - h / 2, + new_x + w / 2, new_y + h / 2); +#endif + update_screen(new_x - w / 2 + 96, new_y - h / 2, + new_x + w / 2 + 96, new_y + h / 2); + } + } + else if (cur_tool == TOOL_SHAPES && + shape_tool_mode == SHAPE_TOOL_MODE_ROTATE) + { + do_shape(shape_ctr_x, shape_ctr_y, + shape_outer_x, shape_outer_y, + rotation(shape_ctr_x, shape_ctr_y, + old_x, old_y), 0); + + + do_shape(shape_ctr_x, shape_ctr_y, + shape_outer_x, shape_outer_y, + rotation(shape_ctr_x, shape_ctr_y, + new_x, new_y), 0); + + + /* FIXME: Do something less intensive! */ + + SDL_Flip(screen); + } + + old_x = new_x; + old_y = new_y; + } + } + + + SDL_Delay(10); + + cur_cursor_blink = SDL_GetTicks(); + + + if (cur_tool == TOOL_TEXT && cursor_x != -1 && cursor_y != -1 && + cur_cursor_blink > last_cursor_blink + CURSOR_BLINK_SPEED) + { + last_cursor_blink = SDL_GetTicks(); + + line_xor(cursor_x + cursor_textwidth, cursor_y, + cursor_x + cursor_textwidth, + cursor_y + TTF_FontHeight(fonts[cur_font])); + + update_screen(cursor_x + 96 + cursor_textwidth, cursor_y, + cursor_x + 96 + cursor_textwidth, + cursor_y + TTF_FontHeight(fonts[cur_font])); + } + } + while (!done); +} + + +/* Draw using the current brush: */ + +void brush_draw(int x1, int y1, int x2, int y2, int update) +{ + int dx, dy, y; + int orig_x1, orig_y1, orig_x2, orig_y2, tmp; + float m, b; + + orig_x1 = x1; + orig_y1 = y1; + + orig_x2 = x2; + orig_y2 = y2; + + + x1 = x1 - (img_brushes[cur_brush]->w / 2); + y1 = y1 - (img_brushes[cur_brush]->h / 2); + + x2 = x2 - (img_brushes[cur_brush]->w / 2); + y2 = y2 - (img_brushes[cur_brush]->h / 2); + + + dx = x2 - x1; + dy = y2 - y1; + + if (dx != 0) + { + m = ((float) dy) / ((float) dx); + b = y1 - m * x1; + + if (x2 >= x1) + dx = 1; + else + dx = -1; + + + while (x1 != x2) + { + y1 = m * x1 + b; + y2 = m * (x1 + dx) + b; + + if (y1 > y2) + { + y = y1; + y1 = y2; + y2 = y; + } + + for (y = y1; y <= y2; y++) + blit_brush(x1, y); + + x1 = x1 + dx; + } + } + else + { + if (y1 > y2) + { + y = y1; + y1 = y2; + y2 = y; + } + + for (y = y1; y <= y2; y++) + blit_brush(x1, y); + } + + if (orig_x1 > orig_x2) + { + tmp = orig_x1; + orig_x1 = orig_x2; + orig_x2 = tmp; + } + + if (orig_y1 > orig_y2) + { + tmp = orig_y1; + orig_y1 = orig_y2; + orig_y2 = tmp; + } + + + if (update) + { + update_canvas(orig_x1 - (img_brushes[cur_brush]->w / 2), + orig_y1 - (img_brushes[cur_brush]->h / 2), + orig_x2 + (img_brushes[cur_brush]->w / 2), + orig_y2 + (img_brushes[cur_brush]->h / 2)); + } +} + + +/* Draw the current brush in the current color: */ + +void blit_brush(int x, int y) +{ + SDL_Rect dest; + + brush_counter++; + + if (brush_counter >= (img_cur_brush->h / 4)) + { + brush_counter = 0; + + dest.x = x; + dest.y = y; + + SDL_BlitSurface(img_cur_brush, NULL, canvas, &dest); + } +} + + +/* Draw using the current stamp: */ + +void stamp_draw(int x, int y) +{ + SDL_Rect dest; + SDL_Surface * tmp_surf; + Uint32 amask; + Uint8 r, g, b, a; + int xx, yy; + float col_hue, col_sat, col_val, + stamp_hue, stamp_sat, stamp_val; + + + dest.x = x - (img_stamps[cur_stamp]->w / 2); + dest.y = y - (img_stamps[cur_stamp]->h / 2); + + if (stamp_colorable(cur_stamp)) + { + /* Render the stamp in the chosen color: */ + + /* FIXME: It sucks to render this EVERY TIME. Why not just when + they pick the color, or pick the stamp, like with brushes? + (Why? Because I'm LAZY! :^) ) */ + + + amask = ~(img_stamps[cur_stamp]->format->Rmask | + img_stamps[cur_stamp]->format->Gmask | + img_stamps[cur_stamp]->format->Bmask); + + tmp_surf = + SDL_CreateRGBSurface(SDL_SWSURFACE, + img_stamps[cur_stamp]->w, + img_stamps[cur_stamp]->h, + img_stamps[cur_stamp]->format->BitsPerPixel, + img_stamps[cur_stamp]->format->Rmask, + img_stamps[cur_stamp]->format->Gmask, + img_stamps[cur_stamp]->format->Bmask, + amask); + + if (tmp_surf == NULL) + { + fprintf(stderr, "\nError: Can't render the colored stamp!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + /* Render the stamp: */ + + SDL_LockSurface(img_stamps[cur_stamp]); + SDL_LockSurface(tmp_surf); + + for (yy = 0; yy < img_stamps[cur_stamp]->h; yy++) + { + for (xx = 0; xx < img_stamps[cur_stamp]->w; xx++) + { + SDL_GetRGBA(getpixel(img_stamps[cur_stamp], xx, yy), + img_stamps[cur_stamp]->format, + &r, &g, &b, &a); + + putpixel(tmp_surf, xx, yy, + SDL_MapRGBA(tmp_surf->format, + color_hexes[cur_color][0], + color_hexes[cur_color][1], + color_hexes[cur_color][2], + a)); + } + } + + SDL_UnlockSurface(tmp_surf); + SDL_UnlockSurface(img_stamps[cur_stamp]); + + + /* And blit it! */ + + SDL_BlitSurface(tmp_surf, NULL, canvas, &dest); + SDL_FreeSurface(tmp_surf); + } + else if (stamp_tintable(cur_stamp)) + { + /* Render the stamp in the chosen color: */ + + /* FIXME: It sucks to render this EVERY TIME. Why not just when + they pick the color, or pick the stamp, like with brushes? + (Why? Because I'm LAZY! :^) ) */ + + + amask = ~(img_stamps[cur_stamp]->format->Rmask | + img_stamps[cur_stamp]->format->Gmask | + img_stamps[cur_stamp]->format->Bmask); + + tmp_surf = + SDL_CreateRGBSurface(SDL_SWSURFACE, + img_stamps[cur_stamp]->w, + img_stamps[cur_stamp]->h, + img_stamps[cur_stamp]->format->BitsPerPixel, + img_stamps[cur_stamp]->format->Rmask, + img_stamps[cur_stamp]->format->Gmask, + img_stamps[cur_stamp]->format->Bmask, + amask); + + if (tmp_surf == NULL) + { + fprintf(stderr, "\nError: Can't render the colored stamp!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + rgbtohsv(color_hexes[cur_color][0], + color_hexes[cur_color][1], + color_hexes[cur_color][2], + &col_hue, &col_sat, &col_val); + + + /* Render the stamp: */ + + SDL_LockSurface(img_stamps[cur_stamp]); + SDL_LockSurface(tmp_surf); + + for (yy = 0; yy < img_stamps[cur_stamp]->h; yy++) + { + for (xx = 0; xx < img_stamps[cur_stamp]->w; xx++) + { + SDL_GetRGBA(getpixel(img_stamps[cur_stamp], xx, yy), + img_stamps[cur_stamp]->format, + &r, &g, &b, &a); + + rgbtohsv(r, g, b, &stamp_hue, &stamp_sat, &stamp_val); + + hsvtorgb(col_hue, col_sat, stamp_val, &r, &g, &b); + + + putpixel(tmp_surf, xx, yy, + SDL_MapRGBA(tmp_surf->format, r, g, b, a)); + } + } + + SDL_UnlockSurface(tmp_surf); + SDL_UnlockSurface(img_stamps[cur_stamp]); + + + /* And blit it! */ + + SDL_BlitSurface(tmp_surf, NULL, canvas, &dest); + SDL_FreeSurface(tmp_surf); + } + else + { + /* Not a colorized stamp. Just draw it! */ + + SDL_BlitSurface(img_stamps[cur_stamp], NULL, + canvas, &dest); + } + + update_canvas(x - (img_stamps[cur_stamp]->w / 2), + y - (img_stamps[cur_stamp]->h / 2), + x + (img_stamps[cur_stamp]->w / 2), + y + (img_stamps[cur_stamp]->h / 2)); +} + + +/* Draw using the current brush: */ + +void magic_draw(int x1, int y1, int x2, int y2) +{ + int dx, dy, y; + int orig_x1, orig_y1, orig_x2, orig_y2, tmp; + float m, b; + + if (cur_magic == MAGIC_RAINBOW) + rainbow_color = (rainbow_color + 1) % NUM_RAINBOW_COLORS; + + orig_x1 = x1; + orig_y1 = y1; + + orig_x2 = x2; + orig_y2 = y2; + + + dx = x2 - x1; + dy = y2 - y1; + + if (dx != 0) + { + m = ((float) dy) / ((float) dx); + b = y1 - m * x1; + + if (x2 >= x1) + dx = 1; + else + dx = -1; + + + while (x1 != x2) + { + y1 = m * x1 + b; + y2 = m * (x1 + dx) + b; + + if (y1 > y2) + { + for (y = y1; y >= y2; y--) + blit_magic(x1, y, x1, y - 1); + } + else + { + for (y = y1; y <= y2; y++) + blit_magic(x1, y, x1 + dx, y + 1); + } + + x1 = x1 + dx; + } + } + else + { + if (y1 > y2) + { + for (y = y1; y >= y2; y--) + blit_magic(x1, y, x1, y - 1); + } + else + { + for (y = y1; y <= y2; y++) + blit_magic(x1, y, x1, y + 1); + } + } + + if (orig_x1 > orig_x2) + { + tmp = orig_x1; + orig_x1 = orig_x2; + orig_x2 = tmp; + } + + if (orig_y1 > orig_y2) + { + tmp = orig_y1; + orig_y1 = orig_y2; + orig_y2 = tmp; + } + + + /* Play sound: */ + + if (cur_magic == MAGIC_DRIP) + playsound(0, SND_DRIP, 0); + else if (cur_magic == MAGIC_CHALK) + playsound(0, SND_CHALK, 0); + else if (cur_magic == MAGIC_SPARKLES) + playsound(0, SND_SPARKLES1 + (rand() % 2), 0); + else if (cur_magic == MAGIC_FLIP) + playsound(0, SND_FLIP, 0); + else if (cur_magic == MAGIC_MIRROR) + playsound(0, SND_MIRROR, 0); + else if (cur_magic == MAGIC_NEGATIVE) + playsound(0, SND_NEGATIVE, 0); + else if (cur_magic == MAGIC_BLUR) + playsound(0, SND_BLUR, 0); + else if (cur_magic == MAGIC_THICK) + playsound(0, SND_THICK, 0); + else if (cur_magic == MAGIC_THIN) + playsound(0, SND_THIN, 0); + else if (cur_magic == MAGIC_BLOCKS && ((rand() % 10) < 5)) + playsound(0, SND_BLOCKS, 0); + else if (cur_magic == MAGIC_FADE) + playsound(0, SND_FADE, 0); + else if (cur_magic == MAGIC_RAINBOW) + playsound(0, SND_RAINBOW, 0); + + + /* FIXME: Arbitrary? */ + + update_canvas(orig_x1 - 32, orig_y1 - 32, + orig_x2 + 32, orig_y2 + 32); +} + + +/* Draw the current brush in the current color: */ + +void blit_magic(int x, int y, int x2, int y2) +{ + int xx, yy, w, h; + Uint32 colr; + Uint8 r, g, b, + r1, g1, b1, + r2, g2, b2, + r3, g3, b3, + r4, g4, b4; + SDL_Surface * last; + SDL_Rect src, dest; + + + /* In case we need to use the current canvas (just saved to undo buf)... */ + + if (cur_undo > 0) + last = undo_bufs[cur_undo - 1]; + else + last = undo_bufs[NUM_UNDO_BUFS - 1]; + + + brush_counter++; + + if (brush_counter >= 4) /* FIXME: Arbitrary? */ + { + brush_counter = 0; + + + if (cur_magic == MAGIC_BLUR) + { + /* FIXME: Circular "brush?" */ + + SDL_LockSurface(canvas); + for (yy = y - 16; yy < y + 16; yy = yy + 2) + { + for (xx = x - 16; xx < x + 16; xx = xx + 2) + { + SDL_GetRGB(getpixel(canvas, clamp(0, xx, canvas->w - 1), + clamp(0, yy - 1, canvas->h - 1)), + canvas->format, + &r1, &g1, &b1); + + SDL_GetRGB(getpixel(canvas, clamp(0, xx - 1, canvas->w - 1), + clamp(0, yy, canvas->h - 1)), + canvas->format, + &r2, &g2, &b2); + + SDL_GetRGB(getpixel(canvas, clamp(0, xx + 1, canvas->w - 1), + clamp(0, yy, canvas->h - 1)), + canvas->format, + &r3, &g3, &b3); + + SDL_GetRGB(getpixel(canvas, clamp(0, xx, canvas->w - 1), + clamp(0, yy + 1, canvas->h - 1)), + canvas->format, + &r4, &g4, &b4); + + + r = (r1 + r2 + r3 + r4) >> 2; + g = (g1 + g2 + g3 + g4) >> 2; + b = (b1 + b2 + b3 + b4) >> 2; + + putpixel(canvas, xx, yy, + SDL_MapRGB(canvas->format, r, g, b)); + } + } + SDL_UnlockSurface(canvas); + } + else if (cur_magic == MAGIC_BLOCKS) + { + /* Put x/y on exact grid points: */ + + x = (x / 4) * 4; + y = (y / 4) * 4; + + SDL_LockSurface(last); + SDL_LockSurface(canvas); + + for (yy = y - 8; yy < y + 8; yy = yy + 4) + { + for (xx = x - 8; xx < x + 8; xx = xx + 4) + { + /* Get average color around here: */ + + SDL_GetRGB(getpixel(last, xx, yy), last->format, + &r1, &g1, &b1); + + SDL_GetRGB(getpixel(last, xx + 2, yy), last->format, + &r2, &g2, &b2); + + SDL_GetRGB(getpixel(last, xx, yy + 2), last->format, + &r3, &g3, &b3); + + SDL_GetRGB(getpixel(last, xx + 2, yy + 2), last->format, + &r4, &g4, &b4); + + r = (r1 + r2 + r3 + r4) / 4; + g = (g1 + g2 + g3 + g4) / 4; + b = (b1 + b2 + b3 + b4) / 4; + + + /* Draw block: */ + + dest.x = xx; + dest.y = yy; + dest.w = 4; + dest.h = 4; + + SDL_FillRect(canvas, &dest, SDL_MapRGB(canvas->format, r, g, b)); + } + } + + SDL_UnlockSurface(canvas); + SDL_UnlockSurface(last); + } + else if (cur_magic == MAGIC_NEGATIVE) + { + SDL_LockSurface(last); + SDL_LockSurface(canvas); + + for (yy = y - 16; yy < y + 16; yy++) + { + for (xx = x - 16; xx < x + 16; xx++) + { + /* Get average color around here: */ + + SDL_GetRGB(getpixel(last, xx, yy), last->format, + &r, &g, &b); + + r = 0xFF - r; + g = 0xFF - g; + b = 0xFF - b; + + putpixel(canvas, xx, yy, SDL_MapRGB(canvas->format, r, g, b)); + } + } + + SDL_UnlockSurface(canvas); + SDL_UnlockSurface(last); + } + else if (cur_magic == MAGIC_FADE) + { + SDL_LockSurface(last); + SDL_LockSurface(canvas); + + for (yy = y - 16; yy < y + 16; yy++) + { + for (xx = x - 16; xx < x + 16; xx++) + { + /* Get average color around here: */ + + SDL_GetRGB(getpixel(last, xx, yy), last->format, + &r, &g, &b); + + r = min(r + 48, 255); + g = min(g + 48, 255); + b = min(b + 48, 255); + + putpixel(canvas, xx, yy, SDL_MapRGB(canvas->format, r, g, b)); + } + } + + SDL_UnlockSurface(canvas); + SDL_UnlockSurface(last); + } + else if (cur_magic == MAGIC_RAINBOW) + { + /* Pick next color: */ + + colr = SDL_MapRGB(canvas->format, + rainbow_hexes[rainbow_color][0], + rainbow_hexes[rainbow_color][1], + rainbow_hexes[rainbow_color][2]); + + + /* Draw the shape: */ + + for (yy = 0; yy <= 16; yy++) + { + w = (yy * yy) / 16; + + + /* Top half: */ + + dest.x = x - 16 + w; + dest.w = 32 - (w * 2); + dest.y = y - yy;; + dest.h = 1; + + SDL_FillRect(canvas, &dest, colr); + + + /* Bottom half: */ + + dest.x = x - 16 + w; + dest.w = 32 - (w * 2); + dest.y = y + yy; + dest.h = 1; + + SDL_FillRect(canvas, &dest, colr); + } + } + else if (cur_magic == MAGIC_CHALK) + { + SDL_LockSurface(last); + + for (yy = y - 8; yy <= y + 8; yy = yy + 4) + { + for (xx = x - 8; xx <= x + 8; xx = xx + 4) + { + dest.x = xx + ((rand() % 5) - 2); + dest.y = yy + ((rand() % 5) - 2); + dest.w = (rand() % 4) + 2; + dest.h = (rand() % 4) + 2; + + colr = getpixel(last, clamp(0, xx, canvas->w-1), + clamp(0, yy, canvas->h-1)); + SDL_FillRect(canvas, &dest, colr); + } + } + + SDL_UnlockSurface(last); + } + else if (cur_magic == MAGIC_DRIP) + { + for (xx = x - 8; xx <= x + 8; xx++) + { + h = (rand() % 8) + 8; + + for (yy = y; yy <= y + h; yy++) + { + src.x = xx; + src.y = y; + src.w = 1; + src.h = 16; + + dest.x = xx; + dest.y = yy; + + SDL_BlitSurface(last, &src, canvas, &dest); + } + } + } + else if (cur_magic == MAGIC_SPARKLES) + { + if ((rand() % 10) < 2) + { + src.x = 0; + src.y = (rand() % 4) * 32; + src.w = 32; + src.h = 32; + + dest.x = x - 16; + dest.y = y - 16; + + SDL_BlitSurface(img_sparkles, &src, canvas, &dest); + } + } + else if (cur_magic == MAGIC_FLIP) + { + for (yy = 0; yy < canvas->h; yy++) + { + src.x = 0; + src.y = yy; + src.w = canvas->w; + src.h = 1; + + dest.x = 0; + dest.y = canvas->h - yy - 1; + + SDL_BlitSurface(last, &src, canvas, &dest); + } + } + else if (cur_magic == MAGIC_MIRROR) + { + for (xx = 0; xx < canvas->w; xx++) + { + src.x = xx; + src.y = 0; + src.w = 1; + src.h = canvas->h; + + dest.x = canvas->w - xx - 1; + dest.y = 0; + + SDL_BlitSurface(last, &src, canvas, &dest); + } + } + else if (cur_magic == MAGIC_THIN || cur_magic == MAGIC_THICK) + { + SDL_LockSurface(last); + SDL_LockSurface(canvas); + + for (xx = -8; xx <= 8; xx++) + { + for (yy = -8; yy <= 8; yy++) + { + SDL_GetRGB(getpixel(last, x + xx, y + yy), last->format, + &r, &g, &b); + + r = min(r, 255); + g = min(g, 255); + b = min(b, 255); + + if ((cur_magic == MAGIC_THIN && (((r + g + b) / 3) > 128)) || + (cur_magic == MAGIC_THICK && (((r + g + b) / 3) <= 128))) + { + putpixel(canvas, x + xx + 0, y + yy - 1, + SDL_MapRGB(canvas->format, r, g, b)); + putpixel(canvas, x + xx - 1, y + yy + 0, + SDL_MapRGB(canvas->format, r, g, b)); + putpixel(canvas, x + xx + 1, y + yy + 0, + SDL_MapRGB(canvas->format, r, g, b)); + putpixel(canvas, x + xx + 0, y + yy + 1, + SDL_MapRGB(canvas->format, r, g, b)); + } + } + } + + SDL_UnlockSurface(canvas); + SDL_UnlockSurface(last); + } + } +} + + +/* Store canvas into undo buffer: */ + +void rec_undo_buffer(void) +{ + int wanna_update_toolbar; + + wanna_update_toolbar = 0; + + + SDL_BlitSurface(canvas, NULL, undo_bufs[cur_undo], NULL); + + cur_undo = (cur_undo + 1) % NUM_UNDO_BUFS; + + if (cur_undo == oldest_undo) + oldest_undo = (oldest_undo + 1) % NUM_UNDO_BUFS; + + newest_undo = cur_undo; + +#ifdef DEBUG + printf("DRAW: Current=%d Oldest=%d Newest=%d\n", + cur_undo, oldest_undo, newest_undo); +#endif + + + /* Update toolbar buttons, if needed: */ + + if (tool_avail[TOOL_UNDO] == 0) + { + tool_avail[TOOL_UNDO] = 1; + wanna_update_toolbar = 1; + } + + if (tool_avail[TOOL_REDO]) + { + tool_avail[TOOL_REDO] = 0; + wanna_update_toolbar = 1; + } + + if (wanna_update_toolbar) + { + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } +} + + +/* Update the screen with the new canvas: */ + +void update_canvas(int x1, int y1, int x2, int y2) +{ + SDL_Rect dest; + + dest.x = 96; + dest.y = 0; + SDL_BlitSurface(canvas, NULL, screen, &dest); + update_screen(x1 + 96, y1, x2 + 96, y2); +} + + +/* Show program version: */ + +void show_version(void) +{ + printf("\nTux Paint\n"); + printf(" Version " VER_VERSION " (" VER_DATE ")\n"); + +#ifdef LOW_QUALITY_THUMBNAILS + printf(" Low Quality Thumbnails enabled\n"); +#endif + +#ifdef LOW_QUALITY_COLOR_SELECTOR + printf(" Low Quality Color Selector enabled\n"); +#endif + +#ifdef LOW_QUALITY_STAMP_OUTLINE + printf(" Low Quality Stamp Outline enabled\n"); +#endif + +#ifdef LOW_QUALITY_FLOOD_FILL + printf(" Low Quality Flood Fill enabled\n"); +#endif + +#ifdef NO_PROMPT_SHADOWS + printf(" Prompt Shadows disabled\n"); +#endif + +#ifdef NOSOUND + printf(" Sound disabled\n"); +#endif + +#ifdef DEBUG + printf(" Verbose debugging enabled\n"); +#endif + + printf("\n"); +} + + +/* Show usage display: */ + +void show_usage(FILE * f, char * prg) +{ + fprintf(f, + "Usage: %s {--usage | --help | --version | --copying}\n" + " %s [--fullscreen] [--800x600] [--nosound] [--noquit] [--noprint]\n" + " [--simpleshapes] [--uppercase] [--grab] [--nowheelmouse]\n" + " [--nofancycursors] [--keyboard] [--nooutlines]\n" + " [--savedir DIRECTORY] [--saveover] [--saveovernew]\n" + " %s [--windowed] [--640x480] [--sound] [--quit] [--print]\n" + " [--complexshapes] [--mixedcase] [--dontgrab] [--wheelmouse]\n" + " [--fancycursors] [--mouse] [--outlines]\n" + " [--saveoverask]\n" + " %s [--printcfg | --noprintcfg] (Windows only)\n" + " %s [--printdelay=SECONDS]\n" + " [--lang LANGUAGE | --locale LOCALE]\n\n" + "LANGUAGE may be one of:\n" + " english american-english\n" + " brazilian brazilian-portuguese portugues-brazilian\n" + " british british-english\n" + " catalan catala\n" + " chinese\n" + " czech cesky\n" + " danish dansk\n" + " dutch\n" + " finnish suomi\n" + " french francais\n" + " german deutsch\n" + " greek\n" + " hungarian magyar\n" + " icelandic islenska\n" + " indonesian bahasa-indonesia\n" + " italian italiano\n" + " japanese\n" + " korean\n" + " norwegian nynorsk norsk\n" + " polish polski\n" + " portuguese portugues\n" + " romanian\n" + " slovak\n" + " spanish espanol\n" + " swedish svenska\n" + " turkish\n\n", + prg, prg, prg, prg, prg); +} + + +const char *getfilename(const char* path) +{ + char *p; + + if ( (p = strrchr( path, '\\' )) != NULL ) + return p+1; + if ( (p = strrchr( path, '/' )) != NULL ) + return p+1; + return path; +} + + +/* Setup: */ + +void setup(int argc, char * argv[]) +{ + int i, ok_to_use_sysconfig; + char str[128]; + char * upstr; + SDL_Color black = {0, 0, 0, 0}; + char * homedirdir; + FILE * fi; + SDL_Surface * tmp_surf; + SDL_Rect dest; +#ifndef LOW_QUALITY_COLOR_SELECTOR + int x, y; + SDL_Surface * tmp_btn; + Uint8 r, g, b, a; +#endif + + +#ifdef __BEOS__ + /* if run from gui, like OpenTracker in BeOS or Explorer in Windows, + find path from which binary was run and change dir to it + so all files will be local :) */ + + if (argc && argv[0]) + { + char * slash = strrchr(argv[0], '/'); + *(slash + 1) = '\0'; + chdir(argv[0]); + *(slash + 1) = '/'; + } +#endif + + + /* Set default options: */ + + use_sound = 1; + fullscreen = 0; + dont_do_xor = 0; + keymouse = 0; + wheely = 1; + grab_input = 0; + no_fancy_cursors = 0; + simple_shapes = 0; + only_uppercase = 0; + promptless_save = SAVE_OVER_PROMPT; + disable_quit = 0; + disable_print = 0; + print_delay = 0; + printcommand = "pngtopnm | pnmtops | lpr"; + langstr = NULL; + use_print_config = 0; + WINDOW_WIDTH = 640; + WINDOW_HEIGHT = 480; + + +#ifdef __BEOS__ + /* Fancy cursors on BeOS are buggy in SDL */ + + no_fancy_cursors = 1; +#endif + + +#ifdef WIN32 + savedir = strdup("userdata"); +#elif __BEOS__ + savedir = strdup("./userdata"); +#else + savedir = NULL; +#endif + + + /* Load options from global config file: */ + +#ifndef WIN32 + + /* Check to see if it's ok first: */ + + ok_to_use_sysconfig = 1; + + for (i = 1; i < argc; i++) + { + if (strcmp(argv[i], "--nosysconfig") == 0) + { + ok_to_use_sysconfig = 0; + i = argc; /* aka break; */ + } + } + + + if (ok_to_use_sysconfig) + { + snprintf(str, sizeof(str), "%s/tuxpaint.conf", CONFDIR); + + fi = fopen(str, "r"); + if (fi != NULL) + { + parse_options(fi); + fclose(fi); + } + else + debug(str); + } + +#endif + + + /* Load options from .rc file: */ + +#if !defined(WIN32) && !defined(__BEOS__) + if (getenv("HOME") != NULL) + { + /* Should it be "~/.tuxpaint/tuxpaintrc" instead??? + Comments welcome ... bill@newbreedsoftware.com */ + + snprintf(str, sizeof(str), "%s/.tuxpaintrc", getenv("HOME")); + } + else + { + strcpy(str, "tuxpaint.cfg"); + } +#else + strcpy(str, "tuxpaint.cfg"); +#endif + + + fi = fopen(str, "r"); + if (fi != NULL) + { + parse_options(fi); + fclose(fi); + } + else + debug(str); + + + /* Handle command-line arguments: */ + + for (i = 1; i < argc; i++) + { + if (strcmp(argv[i], "--fullscreen") == 0 || strcmp(argv[i], "-f") == 0) + { + fullscreen = 1; + } + else if (strcmp(argv[i], "--windowed") == 0 || strcmp(argv[i], "-w") == 0) + { + fullscreen = 0; + } + else if (strcmp(argv[i], "--800x600") == 0) + { + WINDOW_WIDTH = 800; + WINDOW_HEIGHT = 600; + } + else if (strcmp(argv[i], "--640x480") == 0) + { + WINDOW_WIDTH = 640; + WINDOW_HEIGHT = 480; + } + else if (strcmp(argv[i], "--nooutlines") == 0) + { + dont_do_xor = 1; + } + else if (strcmp(argv[i], "--outlines") == 0) + { + dont_do_xor = 0; + } + else if (strcmp(argv[i], "--keyboard") == 0) + { + keymouse = 1; + } + else if (strcmp(argv[i], "--mouse") == 0) + { + keymouse = 0; + } + else if (strcmp(argv[i], "--nowheelmouse") == 0) + { + wheely = 0; + } + else if (strcmp(argv[i], "--wheelmouse") == 0) + { + wheely = 1; + } + else if (strcmp(argv[i], "--grab") == 0) + { + grab_input = 1; + } + else if (strcmp(argv[i], "--dontgrab") == 0) + { + grab_input = 0; + } + else if (strcmp(argv[i], "--nofancycursors") == 0) + { + no_fancy_cursors = 1; + } + else if (strcmp(argv[i], "--fancycursors") == 0) + { + no_fancy_cursors = 0; + } + else if (strcmp(argv[i], "--saveover") == 0) + { + promptless_save = SAVE_OVER_ALWAYS; + } + else if (strcmp(argv[i], "--saveoverask") == 0) + { + promptless_save = SAVE_OVER_PROMPT; + } + else if (strcmp(argv[i], "--saveovernew") == 0) + { + promptless_save = SAVE_OVER_NO; + } + else if (strcmp(argv[i], "--uppercase") == 0 || strcmp(argv[i], "-u") == 0) + { + only_uppercase = 1; + } + else if (strcmp(argv[i], "--mixedcase") == 0 || strcmp(argv[i], "-m") == 0) + { + only_uppercase = 0; + } + else if (strcmp(argv[i], "--simpleshapes") == 0 || + strcmp(argv[i], "-s") == 0) + { + simple_shapes = 1; + } + else if (strcmp(argv[i], "--complexshapes") == 0) + { + simple_shapes = 0; + } + else if (strcmp(argv[i], "--noquit") == 0 || strcmp(argv[i], "-x") == 0) + { + disable_quit = 1; + } + else if (strcmp(argv[i], "--quit") == 0) + { + disable_quit = 0; + } + else if (strcmp(argv[i], "--noprint") == 0 || strcmp(argv[i], "-p") == 0) + { + disable_print = 1; + } + else if (strcmp(argv[i], "--print") == 0) + { + disable_print = 0; + } + else if (strcmp(argv[i], "--noprintcfg") == 0) + { +#ifndef WIN32 + fprintf(stderr, "Note: printcfg option only applies to Windows!\n"); +#endif + use_print_config = 0; + } + else if (strcmp(argv[i], "--printcfg") == 0) + { +#ifndef WIN32 + fprintf(stderr, "Note: printcfg option only applies to Windows!\n"); +#endif + use_print_config = 0; + } + else if (strstr(argv[i], "--printdelay=") == argv[i]) + { + sscanf(strstr(argv[i], "--printdelay=") + 13, "%d", &print_delay); +#ifdef DEBUG + printf("Print delay set to %d seconds\n", print_delay); +#endif + } + else if (strcmp(argv[i], "--nosound") == 0 || strcmp(argv[i], "-q") == 0) + { + use_sound = 0; + } + else if (strcmp(argv[i], "--sound") == 0) + { + use_sound = 1; + } + else if (strcmp(argv[i], "--locale") == 0 || strcmp(argv[i], "-L") == 0) + { + if (i < argc - 1) + { + snprintf(str, sizeof(str), "LANG=%s", argv[i + 1]); + putenv(str); + + setlocale(LC_ALL, ""); /* argv[i + 1]) ? */ + i++; + } + else + { + /* Forgot to specify the language! */ + + fprintf(stderr, "%s takes an argument\n", argv[i]); + show_usage(stderr, (char *) getfilename(argv[0])); + exit(1); + } + } + else if (strcmp(argv[i], "--lang") == 0 || strcmp(argv[i], "-l") == 0) + { + if (i < argc - 1) + { + if (langstr != NULL) + free(langstr); + + langstr = strdup(argv[i + 1]); + i++; + } + else + { + /* Forgot to specify the language! */ + + fprintf(stderr, "%s takes an argument\n", argv[i]); + show_usage(stderr, (char *) getfilename(argv[0])); + exit(1); + } + } + else if (strstr(argv[i], "--savedir") == argv[i]) + { + if (i < argc - 1) + { + if (savedir != NULL) + free(savedir); + + savedir = strdup(argv[i + 1]); + remove_slash(savedir); + i++; + } + else + { + /* Forgot to specify the directory name! */ + + fprintf(stderr, "%s takes an argument\n", argv[i]); + show_usage(stderr, (char *) getfilename(argv[0])); + exit(1); + } + } + else if (strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-v") == 0) + { + show_version(); + exit(0); + } + else if (strcmp(argv[i], "--copying") == 0 || strcmp(argv[i], "-c") == 0) + { + show_version(); + printf( + "\n" + "This program is free software; you can redistribute it\n" + "and/or modify it under the terms of the GNU General Public\n" + "License as published by the Free Software Foundation;\n" + "either version 2 of the License, or (at your option) any\n" + "later version.\n" + "\n" + "This program is distributed in the hope that it will be\n" + "useful and entertaining, but WITHOUT ANY WARRANTY; without\n" + "even the implied warranty of MERCHANTABILITY or FITNESS\n" + "FOR A PARTICULAR PURPOSE. See the GNU General Public\n" + "License for more details.\n" + "\n" + "You should have received a copy of the GNU General Public\n" + "License along with this program; if not, write to the Free\n" + "Software Foundation, Inc., 59 Temple Place, Suite 330,\n" + "Boston, MA 02111-1307 USA\n" + "\n" + ); + exit(0); + } + else if (strcmp(argv[i], "--help") == 0 || + strcmp(argv[i], "-h") == 0) + { + printf("\n"); + show_version(); + printf("\n"); + show_usage(stdout, (char *) getfilename(argv[0])); + + printf( + "\n" + "See: " DOC_PREFIX "README.txt\n" + "\n"); + exit(0); + } + else if (strcmp(argv[i], "--usage") == 0 || + strcmp(argv[i], "-u") == 0) + { + show_usage(stdout, (char *) getfilename(argv[0])); + exit(0); + } + else if (strcmp(argv[i], "--nosysconfig") == 0) + { + debug("Not using system config."); + } + else + { + show_usage(stderr, (char *) getfilename(argv[0])); + exit(1); + } + } + + + /* Set up language: */ + + /* ja_JP.eucJP locale is usually used for Japanese, but SDL_ttf does NOT + support it! - TOYAMA Shin-ichi - 2003.01.24 */ + + if (langstr == NULL && getenv("LANG") != NULL && + strcmp(getenv("LANG"), "ja_JP.eucJP") == 0) + { + langstr = strdup("japanese"); + } + + + if (langstr != NULL) + { + if (strcmp(langstr, "english") == 0 || + strcmp(langstr, "american-english") == 0) + { + putenv("LANG=C"); + } + else if (strcmp(langstr, "spanish") == 0 || + strcmp(langstr, "espanol") == 0) + { + putenv("LANG=es_ES@euro"); + } + else if (strcmp(langstr, "french") == 0 || + strcmp(langstr, "francais") == 0) + { + putenv("LANG=fr_FR@euro"); + } + else if (strcmp(langstr, "icelandic") == 0 || + strcmp(langstr, "islenska") == 0) + { + putenv("LANG=is_IS"); + } + else if (strcmp(langstr, "german") == 0 || + strcmp(langstr, "deutsch") == 0) + { + putenv("LANG=de_DE@euro"); + } + else if (strcmp(langstr, "finnish") == 0 || + strcmp(langstr, "suomi") == 0) + { + putenv("LANG=fi_FI@euro"); + } + else if (strcmp(langstr, "turkish") == 0) + { + putenv("LANG=tr_TR@euro"); + } + else if (strcmp(langstr, "norwegian") == 0 || + strcmp(langstr, "nynorsk") == 0 || + strcmp(langstr, "norsk") == 0) + { + putenv("LANG=nn_NO"); + } + else if (strcmp(langstr, "italian") == 0 || + strcmp(langstr, "italiano") == 0) + { + putenv("LANG=it_IT@euro"); + } + else if (strcmp(langstr, "dutch") == 0) + { + putenv("LANG=nl_NL@euro"); + } + else if (strcmp(langstr, "czech") == 0 || + strcmp(langstr, "cesky") == 0) + { + putenv("LANG=cs_CZ"); + } + else if (strcmp(langstr, "danish") == 0 || + strcmp(langstr, "dansk") == 0) + { + putenv("LANG=da_DK"); + } + else if (strcmp(langstr, "swedish") == 0 || + strcmp(langstr, "svenska") == 0) + { + putenv("LANG=sv_SE@euro"); + } + else if (strcmp(langstr, "slovak") == 0) + { + putenv("LANG=sk_SK"); + } + else if (strcmp(langstr, "british-english") == 0 || + strcmp(langstr, "british") == 0) + { + putenv("LANG=en_GB"); + } + else if (strcmp(langstr, "hungarian") == 0 || + strcmp(langstr, "magyar") == 0) + { + putenv("LANG=hu_HU"); + } + else if (strcmp(langstr, "japanese") == 0) + { + putenv("LANG=ja_JP.UTF-8"); + } + else if (strcmp(langstr, "korean") == 0) + { + putenv("LANG=ko_KR.UTF-8"); + } + else if (strcmp(langstr, "chinese") == 0) + { + putenv("LANG=zh_CN.UTF-8"); + } + else if (strcmp(langstr, "indonesian") == 0 || + strcmp(langstr, "bahasa-indonesia") == 0) + { + putenv("LANG=id_ID"); + } + else if (strcmp(langstr, "polish") == 0 || + strcmp(langstr, "polski") == 0) + { + putenv("LANG=pl_PL"); + } + else if (strcmp(langstr, "greek") == 0) + { + putenv("LANG=el_GR.UTF8"); + } + else if (strcmp(langstr, "romanian") == 0) + { + putenv("LANG=ro_RO"); + } + else if (strcmp(langstr, "catalan") == 0 || + strcmp(langstr, "catala") == 0) + { + putenv("LANG=ca_ES"); + } + else if (strcmp(langstr, "portuguese") == 0 || + strcmp(langstr, "portugues") == 0) + { + putenv("LANG=pt_PT@euro"); + } + else if (strcmp(langstr, "brazilian-portuguese") == 0 || + strcmp(langstr, "portugues-brazilian") == 0 || + strcmp(langstr, "brazilian") == 0) + { + putenv("LANG=pt_BR"); + } + else + { + fprintf(stderr, "%s is an invalid language\n", langstr); + show_usage(stderr, (char *) getfilename(argv[0])); + free(langstr); + exit(1); + } + + setlocale(LC_ALL, ""); + free(langstr); + } + + + bindtextdomain("tuxpaint", LOCALEDIR); + + textdomain("tuxpaint"); + + language = current_language(); + + +#ifdef DEBUG + printf("DEBUG: Language is %s (%d)\n", lang_prefixes[language], language); +#endif + +#ifndef WIN32 + putenv("SDL_VIDEO_X11_WMCLASS=TuxPaint.TuxPaint"); +#endif + + + /* Init SDL Video: */ + + if (SDL_Init(SDL_INIT_VIDEO) < 0) + { + fprintf(stderr, + "\nError: I could not initialize video!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + exit(1); + } + + + /* Set-up Key-Repeat: */ + + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, + SDL_DEFAULT_REPEAT_INTERVAL); + + + /* Init SDL Timer: */ + + if (SDL_Init(SDL_INIT_TIMER) < 0) + { + fprintf(stderr, + "\nError: I could not initialize timer!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + exit(1); + } + + + /* Init TTF stuff: */ + + if (TTF_Init() < 0) + { + fprintf(stderr, + "\nError: I could not initialize the font (TTF) library!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + SDL_Quit(); + exit(1); + } + + + /* Init SDL Audio and set-up Mixer: */ + +#ifndef NOSOUND + if (use_sound) + { + if (SDL_Init(SDL_INIT_AUDIO) < 0) + { + fprintf(stderr, + "\nWarning: I could not initialize audio!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + use_sound = 0; + } + else + { +#ifndef WIN32 + if (Mix_OpenAudio(44100, AUDIO_S16, 2, 256) < 0) +#else + if (Mix_OpenAudio(44100, AUDIO_S16, 2, 2048) < 0) +#endif + { + fprintf(stderr, + "\nWarning: I could not set up audio for 44100 Hz " + "16-bit stereo.\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + use_sound = 0; + } + else + { + /* Load sounds: */ + + for (i = 0; i < NUM_SOUNDS; i++) + { + sounds[i] = Mix_LoadWAV(sound_fnames[i]); + + if (sounds[i] == NULL) + { + fprintf(stderr, + "\nWarning: I couldn't open a sound file:\n%s\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", sound_fnames[i], SDL_GetError()); + use_sound = 0; + } + } + } + } + } +#endif + + + /* Open Window: */ + + if (fullscreen) + { +#ifdef USE_HWSURFACE + screen = SDL_SetVideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, + 16, SDL_FULLSCREEN | SDL_HWSURFACE); +#else + screen = SDL_SetVideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, + 16, SDL_FULLSCREEN | SDL_SWSURFACE); +#endif + + if (screen == NULL) + { + fprintf(stderr, + "\nWarning: I could not open the display in fullscreen mode.\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + fullscreen = 0; + } + } + + + if (!fullscreen) + { +#ifdef USE_HWSURFACE + screen = SDL_SetVideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 16, SDL_HWSURFACE); +#else + screen = SDL_SetVideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 16, SDL_SWSURFACE); +#endif + } + + if (screen == NULL) + { + fprintf(stderr, + "\nError: I could not open the display.\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + +#if defined(WIN32) && defined(LARGE_CURSOR_FULLSCREEN_BUG) + if (fullscreen && no_fancy_cursors == 0) + { + fprintf(stderr, "Warning: An SDL bug causes the fancy cursors to leave\n" + "trails in fullscreen mode. Disabling fancy cursors.\n" + "(You can do this yourself with 'nofancycursors' option,\n" + "to avoid this warning in the future.)\n"); + } + no_fancy_cursors = 1; + } +#endif + + + /* Create cursors: */ + + cursor_hand = get_cursor(hand_bits, hand_mask_bits, + hand_width, hand_height, + 12, 1); + + cursor_wand = get_cursor(wand_bits, wand_mask_bits, + wand_width, wand_height, + 4, 4); + + cursor_insertion = get_cursor(insertion_bits, insertion_mask_bits, + insertion_width, insertion_height, + 7, 4); + + cursor_brush = get_cursor(brush_bits, brush_mask_bits, + brush_width, brush_height, + 4, 28); + + cursor_crosshair = get_cursor(crosshair_bits, crosshair_mask_bits, + crosshair_width, crosshair_height, + 15, 15); + + cursor_rotate = get_cursor(rotate_bits, rotate_mask_bits, + rotate_width, rotate_height, + 15, 15); + + cursor_watch = get_cursor(watch_bits, watch_mask_bits, + watch_width, watch_height, + 14, 14); + + cursor_arrow = get_cursor(arrow_bits, arrow_mask_bits, + arrow_width, arrow_height, + 0, 0); + + cursor_up = get_cursor(up_bits, up_mask_bits, + up_width, up_height, + 15, 1); + + cursor_down = get_cursor(down_bits, down_mask_bits, + down_width, down_height, + 15, 30); + + cursor_tiny = get_cursor(tiny_bits, tiny_mask_bits, + tiny_width, tiny_height, + 3, 3); + + do_setcursor(cursor_watch); + + + + /* Set window icon and caption: */ + + seticon(); + SDL_WM_SetCaption("Tux Paint", "Tux Paint"); + + + /* Create drawing canvas: */ + + canvas = SDL_CreateRGBSurface(screen->flags, + WINDOW_WIDTH - (96 * 2), + (48 * 7) + 40 + HEIGHTOFFSET, + screen->format->BitsPerPixel, + screen->format->Rmask, + screen->format->Gmask, + screen->format->Bmask, + 0); + + + if (canvas == NULL) + { + fprintf(stderr, "\nError: Can't build drawing canvas!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + SDL_FillRect(canvas, NULL, SDL_MapRGB(canvas->format, 255, 255, 255)); + + + /* Create undo buffer space: */ + + for (i = 0; i < NUM_UNDO_BUFS; i++) + { + undo_bufs[i] = SDL_CreateRGBSurface(screen->flags, + WINDOW_WIDTH - (96 * 2), + (48 * 7) + 40 + HEIGHTOFFSET, + screen->format->BitsPerPixel, + screen->format->Rmask, + screen->format->Gmask, + screen->format->Bmask, + 0); + + + if (undo_bufs[i] == NULL) + { + fprintf(stderr, "\nError: Can't build undo buffer! (%d of %d)\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", i + 1, NUM_UNDO_BUFS, SDL_GetError()); + + cleanup(); + exit(1); + } + } + + + /* Load and display title image: */ + + img_title = loadimage(DATA_PREFIX "images/title.png"); + img_progress = loadimage(DATA_PREFIX "images/ui/progress.png"); + + SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255)); + + dest.x = (WINDOW_WIDTH - img_title->w) / 2; + dest.y = (WINDOW_HEIGHT - img_title->h); + + SDL_BlitSurface(img_title, NULL, screen, &dest); + + prog_bar_ctr = 0; + show_progress_bar(); + + SDL_Flip(screen); + + + /* Load other images: */ + + for (i = 0; i < NUM_TOOLS; i++) + img_tools[i] = loadimage(tool_img_fnames[i]); + + img_title_on = loadimage(DATA_PREFIX "images/ui/title.png"); + img_title_large_on = loadimage(DATA_PREFIX "images/ui/title_large.png"); + img_title_off = loadimage(DATA_PREFIX "images/ui/no_title.png"); + img_title_large_off = loadimage(DATA_PREFIX "images/ui/no_title_large.png"); + + img_btn_up = loadimage(DATA_PREFIX "images/ui/btn_up.png"); + img_btn_down = loadimage(DATA_PREFIX "images/ui/btn_down.png"); + img_btn_off = loadimage(DATA_PREFIX "images/ui/btn_off.png"); + + show_progress_bar(); + + img_yes = loadimage(DATA_PREFIX "images/ui/yes.png"); + img_no = loadimage(DATA_PREFIX "images/ui/no.png"); + + img_open = loadimage(DATA_PREFIX "images/ui/open.png"); + img_erase = loadimage(DATA_PREFIX "images/ui/erase.png"); + img_back = loadimage(DATA_PREFIX "images/ui/back.png"); + + show_progress_bar(); + + + /* FIXME: Hmm... how should we REALLY deal with this? */ +#ifdef SVGA + img_cursor_up = loadimage(DATA_PREFIX "images/ui/cursor_up_large.png"); + img_cursor_down = loadimage(DATA_PREFIX "images/ui/cursor_down_large.png"); +#else + img_cursor_up = loadimage(DATA_PREFIX "images/ui/cursor_up.png"); + img_cursor_down = loadimage(DATA_PREFIX "images/ui/cursor_down.png"); +#endif + + img_scroll_up = loadimage(DATA_PREFIX "images/ui/scroll_up.png"); + img_scroll_down = loadimage(DATA_PREFIX "images/ui/scroll_down.png"); + + img_scroll_up_off = loadimage(DATA_PREFIX "images/ui/scroll_up_off.png"); + img_scroll_down_off = loadimage(DATA_PREFIX "images/ui/scroll_down_off.png"); + + img_paintcan = loadimage(DATA_PREFIX "images/ui/paintcan.png"); + + show_progress_bar(); + + img_sparkles = loadimage(DATA_PREFIX "images/ui/sparkles.png"); + + + /* Load brushes: */ + +#ifndef NOSOUND + loadarbitrary(img_brushes, NULL, NULL, NULL, &num_brushes, 0, + MAX_BRUSHES, DATA_PREFIX "brushes", 1, 40, 40); +#else + loadarbitrary(img_brushes, NULL, NULL, &num_brushes, 0, + MAX_BRUSHES, DATA_PREFIX "brushes", 1, 40, 40); +#endif + + + homedirdir = get_fname("brushes"); +#ifndef NOSOUND + loadarbitrary(img_brushes, NULL, NULL, NULL, &num_brushes, num_brushes, + MAX_BRUSHES, homedirdir, 0, 40, 40); +#else + loadarbitrary(img_brushes, NULL, NULL, &num_brushes, num_brushes, + MAX_BRUSHES, homedirdir, 0, 40, 40); +#endif + + if (num_brushes == 0) + { + fprintf(stderr, + "\nError: No brushes found in " DATA_PREFIX "brushes/\n" + "or %s\n\n", homedirdir); + cleanup(); + exit(1); + } + + free(homedirdir); + + + /* Load system fonts: */ + + font = TTF_OpenFont(DATA_PREFIX "fonts/default_font.ttf", + 18 - (only_uppercase * 3)); + + if (font == NULL) + { + fprintf(stderr, + "\nError: Can't load font file: " + DATA_PREFIX "fonts/default_font.ttf\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + large_font = TTF_OpenFont(DATA_PREFIX "fonts/default_font.ttf", + 36 - (only_uppercase * 3)); + + if (large_font == NULL) + { + fprintf(stderr, + "\nError: Can't load font file: " + DATA_PREFIX "fonts/default_font.ttf\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + small_font = TTF_OpenFont(DATA_PREFIX "fonts/default_font.ttf", + 14 - (only_uppercase * 2)); + + if (small_font == NULL) + { + fprintf(stderr, + "\nError: Can't load font file: " + DATA_PREFIX "fonts/default_font.ttf\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + if (need_own_font(language)) + { + snprintf(str, sizeof(str), "%sfonts/locale/%s.ttf", + DATA_PREFIX, lang_prefixes[language]); + + locale_font = TTF_OpenFont(str, 18); + + if (locale_font == NULL) + { + fprintf(stderr, + "\nWarning: Can't load font for this locale:\n" + "%s\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n" + "Will use default (American English) instead.\n\n", + str, SDL_GetError()); + + + /* Revert to default: */ + + putenv("LANG=C"); + setlocale(LC_ALL, ""); + + bindtextdomain("tuxpaint", LOCALEDIR); + textdomain("tuxpaint"); + language = current_language(); + } + } + + + if (locale_font == NULL) + locale_font = font; + + + /* Load other available fonts: */ + + num_fonts = 0; + + loadfonts(DATA_PREFIX "fonts", 1); + + homedirdir = get_fname("fonts"); + loadfonts(homedirdir, 0); + free(homedirdir); + + + /* Load stamps: */ + +#ifndef NOSOUND + loadarbitrary(img_stamps, txt_stamps, inf_stamps, snd_stamps, &num_stamps, 0, + MAX_STAMPS, DATA_PREFIX "stamps", 0, -1, -1); +#else + loadarbitrary(img_stamps, txt_stamps, inf_stamps, &num_stamps, 0, + MAX_STAMPS, DATA_PREFIX "stamps", 0, -1, -1); +#endif + + + homedirdir = get_fname("stamps"); +#ifndef NOSOUND + loadarbitrary(img_stamps, txt_stamps, inf_stamps, snd_stamps, + &num_stamps, num_stamps, + MAX_STAMPS, homedirdir, 0, -1, -1); +#else + loadarbitrary(img_stamps, txt_stamps, inf_stamps, &num_stamps, num_stamps, + MAX_STAMPS, homedirdir, 0, -1, -1); +#endif + + + if (num_stamps == 0) + { + fprintf(stderr, + "\nWarning: No stamps found in " DATA_PREFIX "stamps/\n" + "or %s\n\n", homedirdir); + } + + free(homedirdir); + + + /* Create stamp thumbnails: */ + + for (i = 0; i < num_stamps; i++) + { + if (img_stamps[i]->w > 40 || + img_stamps[i]->h > 40) + { + img_stamp_thumbs[i] = thumbnail(img_stamps[i], 40, 40, 1); + } + else + { + img_stamp_thumbs[i] = NULL; + } + + show_progress_bar(); + } + + + /* Load magic icons: */ + + for (i = 0; i < NUM_MAGICS; i++) + { + img_magics[i] = loadimage(magic_img_fnames[i]); + show_progress_bar(); + } + + + /* Load shape icons: */ + + for (i = 0; i < NUM_SHAPES; i++) + { + img_shapes[i] = loadimage(shape_img_fnames[i]); + show_progress_bar(); + } + + + /* Load tip tux images: */ + + for (i = 0; i < NUM_TIP_TUX; i++) + { + img_tux[i] = loadimage(tux_img_fnames[i]); + show_progress_bar(); + } + + + /* Create toolbox and selector labels: */ + + for (i = 0; i < NUM_TITLES; i++) + { + if (strlen(title_names[i]) > 0) + { + if (need_unicode(language) && locale_font != NULL && + strcmp(gettext(title_names[i]), title_names[i]) != 0) + { + tmp_surf = TTF_RenderUNICODE_Blended(locale_font, + (Uint16 *) gettext(title_names[i]), + black); + img_title_names[i] = thumbnail(tmp_surf, + min(84, tmp_surf->w), tmp_surf->h, 0); + SDL_FreeSurface(tmp_surf); + } + else if (need_utf8(language) && locale_font != NULL && + strcmp(gettext(title_names[i]), title_names[i]) != 0) + { + tmp_surf = TTF_RenderUTF8_Blended(locale_font, + gettext(title_names[i]), black); + img_title_names[i] = thumbnail(tmp_surf, + min(84, tmp_surf->w), tmp_surf->h, 0); + SDL_FreeSurface(tmp_surf); + } + else + { + upstr = uppercase(gettext(title_names[i])); + tmp_surf = RENDER_TEXT(large_font, upstr, black); + img_title_names[i] = thumbnail(tmp_surf, + min(84, tmp_surf->w), tmp_surf->h, 0); + SDL_FreeSurface(tmp_surf); + free(upstr); + } + } + else + { + img_title_names[i] = NULL; + } + } + + + + /* Generate color selection buttons: */ + +#ifndef LOW_QUALITY_COLOR_SELECTOR + + /* Create appropriately-shaped buttons: */ + + tmp_btn = thumbnail(img_btn_down, (WINDOW_WIDTH - 96) / NUM_COLORS, 48, 0); + + + /* Create surfaces to draw them into: */ + + for (i = 0; i < NUM_COLORS; i++) + { + + img_color_btns[i] = SDL_CreateRGBSurface(screen->flags, + /* (WINDOW_WIDTH - 96) / NUM_COLORS, 48, */ + tmp_btn->w, tmp_btn->h, + screen->format->BitsPerPixel, + screen->format->Rmask, + screen->format->Gmask, + screen->format->Bmask, + 0); + + if (img_color_btns[i] == NULL) + { + fprintf(stderr, "\nError: Can't build color button! (%d of %d)\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", i + 1, NUM_COLORS, SDL_GetError()); + + cleanup(); + exit(1); + } + + SDL_LockSurface(img_color_btns[i]); + } + + + /* Generate the buttons based on the thumbnails: */ + + + SDL_LockSurface(tmp_btn); + + for (y = 0; y < tmp_btn->h /* 48 */; y++) + { + for (x = 0; x < tmp_btn->w /* (WINDOW_WIDTH - 96) / NUM_COLORS */; x++) + { + SDL_GetRGB(getpixel(tmp_btn, x, y), tmp_btn->format, + &r, &g, &b); + a = 255 - ((r + g + b) / 3); + + for (i = 0; i < NUM_COLORS; i++) + { + putpixel(img_color_btns[i], x, y, + SDL_MapRGB(img_color_btns[i]->format, + alpha(color_hexes[i][0], 255, a), + alpha(color_hexes[i][1], 255, a), + alpha(color_hexes[i][2], 255, a))); + } + } + } + + for (i = 0; i < NUM_COLORS; i++) + SDL_UnlockSurface(img_color_btns[i]); + + SDL_UnlockSurface(tmp_btn); + SDL_FreeSurface(tmp_btn); + +#endif + + create_button_labels(); + + + /* Seed random-number generator: */ + + srand(SDL_GetTicks()); + + + SDL_EnableUNICODE(1); + + + /* Seed random-number generator: */ + + srand(SDL_GetTicks()); +} + + +/* Render a button label using the appropriate string/font: */ + +SDL_Surface * do_render_button_label(char * label) +{ + char * str; + SDL_Surface * tmp_surf, * surf; + SDL_Color black = {0, 0, 0, 0}; + + if (need_unicode(language) && locale_font != NULL && + strcmp(gettext(label), label) != 0) + { + tmp_surf = TTF_RenderUNICODE_Blended(locale_font, (Uint16 *) gettext(label), + black); + surf = thumbnail(tmp_surf, min(48, tmp_surf->w), tmp_surf->h, 0); + } + else if (need_utf8(language) && locale_font != NULL && + strcmp(gettext(label), label) != 0) + { + tmp_surf = TTF_RenderUTF8_Blended(locale_font, gettext(label), black); + surf = thumbnail(tmp_surf, min(48, tmp_surf->w), tmp_surf->h, 0); + } + else + { + str = uppercase(gettext(label)); + tmp_surf = RENDER_TEXT(small_font, str, black); + surf = thumbnail(tmp_surf, min(48, tmp_surf->w), tmp_surf->h, 0); + free(str); + SDL_FreeSurface(tmp_surf); + } + + return surf; +} + +static void create_button_labels(void) +{ + int i; + + for (i = 0; i < NUM_TOOLS; i++) + img_tool_names[i] = do_render_button_label(tool_names[i]); + + for (i = 0; i < NUM_MAGICS; i++) + img_magic_names[i] = do_render_button_label(magic_names[i]); + + for (i = 0; i < NUM_SHAPES; i++) + img_shape_names[i] = do_render_button_label(shape_names[i]); + + + /* 'Open' label: */ + + img_openlabels_open = do_render_button_label(gettext_noop("Open")); + + + /* 'Erase' label: */ + + img_openlabels_erase = do_render_button_label(gettext_noop("Erase")); + + + /* 'Back' label: */ + + img_openlabels_back = do_render_button_label(gettext_noop("Back")); +} + + +void seticon(void) +{ + int masklen; + Uint8 * mask; + SDL_Surface * icon; + + + /* Load icon into a surface: */ + +#ifndef WIN32 + icon = IMG_Load(DATA_PREFIX "images/icon.png"); +#else + icon = IMG_Load(DATA_PREFIX "images/icon-win32.png"); +#endif + + if (icon == NULL) + { + fprintf(stderr, + "\nWarning: I could not load the icon image: %s\n" + "The Simple DirectMedia error that occurred was:\n" + "%s\n\n", DATA_PREFIX "images/icon.png", SDL_GetError()); + return; + } + + + /* Create mask: */ + + masklen = (((icon -> w) + 7) / 8) * (icon -> h); + mask = malloc(masklen * sizeof(Uint8)); + memset(mask, 0xFF, masklen); + + + /* Set icon: */ + + SDL_WM_SetIcon(icon, mask); + + + /* Free icon surface & mask: */ + + free(mask); + SDL_FreeSurface(icon); + + + /* Grab keyboard and mouse, if requested: */ + + if (grab_input) + { + debug("Grabbing input!"); + SDL_WM_GrabInput(SDL_GRAB_ON); + } +} + + +/* Load a mouse pointer (cursor) shape: */ + +SDL_Cursor * get_cursor(char * bits, char * mask_bits, + int width, int height, int x, int y) +{ + Uint8 b; + Uint8 temp_bitmap[128], temp_bitmask[128]; + int i; + + + if (((width + 7) / 8) * height > 128) + { + fprintf(stderr, "Error: Cursor is too large!\n"); + cleanup(); + exit(1); + } + + for (i = 0; i < ((width + 7) / 8) * height; i++) + { + b = bits[i]; + + temp_bitmap[i] = (((b & 0x01) << 7) | + ((b & 0x02) << 5) | + ((b & 0x04) << 3) | + ((b & 0x08) << 1) | + ((b & 0x10) >> 1) | + ((b & 0x20) >> 3) | + ((b & 0x40) >> 5) | + ((b & 0x80) >> 7)); + + b = mask_bits[i]; + + temp_bitmask[i] = (((b & 0x01) << 7) | + ((b & 0x02) << 5) | + ((b & 0x04) << 3) | + ((b & 0x08) << 1) | + ((b & 0x10) >> 1) | + ((b & 0x20) >> 3) | + ((b & 0x40) >> 5) | + ((b & 0x80) >> 7)); + } + + return(SDL_CreateCursor(temp_bitmap, temp_bitmask, width, height, x, y)); +} + + +/* Load an image: */ + +SDL_Surface * loadimage(char * fname) +{ + SDL_Surface * s, * disp_fmt_s; + + + /* Load the image file: */ + + s = IMG_Load(fname); + if (s == NULL) + { + fprintf(stderr, + "\nError: I couldn't load a graphics file:\n" + "%s\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", fname, SDL_GetError()); + + cleanup(); + exit(1); + } + + + /* Convert to the display format: */ + + disp_fmt_s = SDL_DisplayFormatAlpha(s); + if (disp_fmt_s == NULL) + { + fprintf(stderr, + "\nError: I couldn't convert a graphics file:\n" + "%s\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", fname, SDL_GetError()); + + cleanup(); + exit(1); + } + + + /* Free the temp. surface & return the converted one: */ + + SDL_FreeSurface(s); + + return(disp_fmt_s); +} + + +/* Draw the toolbar: */ + +void draw_toolbar(void) +{ + int i; + SDL_Rect dest; + + + /* FIXME: A hack to make 'Print' button act just like 'New' button: */ + + if (!disable_print) + tool_avail[TOOL_PRINT] = tool_avail[TOOL_NEW]; + + + draw_image_title(TITLE_TOOLS, 0); + + for (i = 0; i < NUM_TOOLS + TOOLOFFSET; i++) + { + dest.x = ((i % 2) * 48); + dest.y = ((i / 2) * 48) + 40; + + + if (i < NUM_TOOLS) + { + if (i == cur_tool) + { + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + } + else if (tool_avail[i]) + { + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + + dest.x = ((i % 2) * 48) + 4; + dest.y = ((i / 2) * 48) + 40 + 4; + + SDL_BlitSurface(img_tools[i], NULL, screen, &dest); + + + dest.x = ((i % 2) * 48) + 4 + (40 - img_tool_names[i]->w) / 2; + dest.y = ((i / 2) * 48) + 40 + 4 + (44 - img_tool_names[i]->h); + + SDL_BlitSurface(img_tool_names[i], NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + } +} + + +/* Draw magic controls: */ + +void draw_magic(void) +{ + int i; + SDL_Rect dest; + + + /* FIXME: Should we worry about more than 14 magic effects? :^/ */ + + + draw_image_title(TITLE_MAGIC, WINDOW_WIDTH - 96); + + for (i = 0; i < 14 + TOOLOFFSET; i++) + { + dest.x = WINDOW_WIDTH - 96 + ((i % 2) * 48); + dest.y = ((i / 2) * 48) + 40; + + + if (i < NUM_MAGICS) + { + if (i == cur_magic) + { + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + } + + dest.x = WINDOW_WIDTH - 96 + ((i % 2) * 48) + 4; + dest.y = ((i / 2) * 48) + 40 + 4; + + SDL_BlitSurface(img_magics[i], NULL, screen, &dest); + + + dest.x = WINDOW_WIDTH - 96 + ((i % 2) * 48) + 4 + + (40 - img_magic_names[i]->w) / 2; + dest.y = ((i / 2) * 48) + 40 + 4 + (44 - img_magic_names[i]->h); + + SDL_BlitSurface(img_magic_names[i], NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + } +} + + +/* Draw color selector: */ + +void draw_colors(int enabled) +{ + int i; + SDL_Rect dest; + + dest.x = 0; + dest.y = 40 + ((NUM_TOOLS / 2) * 48) + HEIGHTOFFSET; + + if (enabled) + { + SDL_BlitSurface(img_title_large_on, NULL, screen, &dest); + + dest.x = 0; + dest.y = 40 + ((NUM_TOOLS / 2) * 48) + HEIGHTOFFSET; + SDL_BlitSurface(img_title_large_on, NULL, screen, &dest); + + dest.x = (96 - img_title_names[TITLE_COLORS]->w) / 2; + dest.y = (40 + ((NUM_TOOLS / 2) * 48) + HEIGHTOFFSET + + (48 - img_title_names[TITLE_COLORS]->h) / 2); + SDL_BlitSurface(img_title_names[TITLE_COLORS], NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_title_large_off, NULL, screen, &dest); + } + + for (i = 0; i < NUM_COLORS; i++) + { +#ifndef LOW_QUALITY_COLOR_SELECTOR + dest.x = (i * ((WINDOW_WIDTH - 96) / NUM_COLORS)) + 96; + dest.y = 40 + ((NUM_TOOLS / 2) * 48) + HEIGHTOFFSET; + + if (enabled) + SDL_BlitSurface(img_color_btns[i], NULL, screen, &dest); + else + SDL_BlitSurface(img_color_btns[COLOR_WHITE], NULL, screen, &dest); +#else + dest.x = (i * ((WINDOW_WIDTH - 96) / NUM_COLORS)) + 96; + dest.y = 40 + ((NUM_TOOLS / 2) * 48) + HEIGHTOFFSET; + dest.w = ((WINDOW_WIDTH - 96) / NUM_COLORS); + dest.h = 48 + HEIGHTOFFSET; + + if (enabled) + SDL_FillRect(screen, &dest, + SDL_MapRGB(screen->format, + color_hexes[i][0], + color_hexes[i][1], + color_hexes[i][2])); + else + SDL_FillRect(screen, &dest, + SDL_MapRGB(screen->format, 240, 240, 240)); +#endif + + if (i == cur_color && enabled) + { + dest.x = (i * ((WINDOW_WIDTH - 96) / NUM_COLORS)) + 96; + dest.y = 40 + ((NUM_TOOLS / 2) * 48) + HEIGHTOFFSET; + + SDL_BlitSurface(img_paintcan, NULL, screen, &dest); + } + } +} + + +/* Draw brushes: */ + +void draw_brushes(void) +{ + int i, off_y, max, brush; + SDL_Rect dest; + + + /* Draw the title: */ + + draw_image_title(TITLE_BRUSHES, WINDOW_WIDTH - 96); + + + /* Do we need scrollbars? */ + + if (num_brushes > 14 + TOOLOFFSET) + { + off_y = 24; + max = 12; + + dest.x = WINDOW_WIDTH - 96; + dest.y = 40; + + if (brush_scroll > 0) + { + SDL_BlitSurface(img_scroll_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_scroll_up_off, NULL, screen, &dest); + } + + dest.x = WINDOW_WIDTH - 96; + dest.y = 40 + 24 + ((6 + TOOLOFFSET / 2) * 48); + + if (brush_scroll < num_brushes - 12 - TOOLOFFSET) + { + SDL_BlitSurface(img_scroll_down, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_scroll_down_off, NULL, screen, &dest); + } + } + else + { + off_y = 0; + max = 14 + TOOLOFFSET; + } + + + /* Draw each of the shown brushes: */ + + for (brush = brush_scroll; + brush < brush_scroll + max; + brush++) + { + i = brush - brush_scroll; + + + dest.x = ((i % 2) * 48) + (WINDOW_WIDTH - 96); + dest.y = ((i / 2) * 48) + 40 + off_y; + + if (brush == cur_brush) + { + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + } + else if (brush < num_brushes) + { + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + + if (brush < num_brushes) + { + dest.x = ((i % 2) * 48) + (WINDOW_WIDTH - 96) + + ((48 - (img_brushes[brush]->w)) / 2); + + /* FIXME: Shouldn't that be ->h??? */ + + dest.y = ((i / 2) * 48) + 40 + ((48 - (img_brushes[brush]->w)) / 2) + + off_y; + + SDL_BlitSurface(img_brushes[brush], NULL, screen, &dest); + } + } +} + + +/* Draw fonts: */ + +void draw_fonts(void) +{ + int i, off_y, max, font; + SDL_Rect dest, src; + SDL_Surface * tmp_surf; + SDL_Color black = {0, 0, 0, 0}; + + + /* Draw the title: */ + + draw_image_title(TITLE_LETTERS, WINDOW_WIDTH - 96); + + + /* Do we need scrollbars? */ + + if (num_fonts > 14 + TOOLOFFSET) + { + off_y = 24; + max = 12 + TOOLOFFSET; + + dest.x = WINDOW_WIDTH - 96; + dest.y = 40; + + if (font_scroll > 0) + { + SDL_BlitSurface(img_scroll_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_scroll_up_off, NULL, screen, &dest); + } + + dest.x = WINDOW_WIDTH - 96; + dest.y = 40 + 24 + ((6 + TOOLOFFSET / 2) * 48); + + if (font_scroll < num_fonts - 12 - TOOLOFFSET) + { + SDL_BlitSurface(img_scroll_down, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_scroll_down_off, NULL, screen, &dest); + } + } + else + { + off_y = 0; + max = 14 + TOOLOFFSET; + } + + + /* Draw each of the shown fonts: */ + + for (font = font_scroll; + font < font_scroll + max; + font++) + { + i = font - font_scroll; + + + dest.x = ((i % 2) * 48) + (WINDOW_WIDTH - 96); + dest.y = ((i / 2) * 48) + 40 + off_y; + + if (font == cur_font) + { + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + } + else if (font < num_fonts) + { + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + + + /* FIXME: We should render the font buttons once, at startup! */ + + if (font < num_fonts) + { + tmp_surf = RENDER_TEXT(fonts[font], "A", black); + + src.x = (tmp_surf->w - 48) / 2; + src.y = (tmp_surf->h - 48) / 2; + src.w = 48; + src.h = 48; + + if (src.x < 0) + src.x = 0; + if (src.y < 0) + src.y = 0; + + dest.x = ((i % 2) * 48) + (WINDOW_WIDTH - 96); + if (src.w > tmp_surf->w) + { + src.w = tmp_surf->w; + dest.x = dest.x + ((48 - (tmp_surf->w)) / 2); + } + + + dest.y = ((i / 2) * 48) + 40 + off_y; + if (src.h > tmp_surf->h) + { + src.h = tmp_surf->h; + dest.y = dest.y + ((48 - (tmp_surf->h)) / 2); + } + + SDL_BlitSurface(tmp_surf, &src, screen, &dest); + + SDL_FreeSurface(tmp_surf); + } + } +} + + +/* Draw stamps: */ + +void draw_stamps(void) +{ + int i, off_y, max, stamp; + SDL_Rect dest; + SDL_Surface * img; + + + /* Draw the title: */ + + draw_image_title(TITLE_STAMPS, WINDOW_WIDTH - 96); + + + /* Do we need scrollbars? */ + + if (num_stamps > 14 + TOOLOFFSET) + { + off_y = 24; + max = 12 + TOOLOFFSET; + + dest.x = WINDOW_WIDTH - 96; + dest.y = 40; + + if (stamp_scroll > 0) + { + SDL_BlitSurface(img_scroll_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_scroll_up_off, NULL, screen, &dest); + } + + dest.x = WINDOW_WIDTH - 96; + dest.y = 40 + 24 + ((6 + TOOLOFFSET / 2) * 48); + + if (stamp_scroll < num_stamps - 12 - TOOLOFFSET) + { + SDL_BlitSurface(img_scroll_down, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_scroll_down_off, NULL, screen, &dest); + } + } + else + { + off_y = 0; + max = 14 + TOOLOFFSET; + } + + + /* Draw each of the shown stamps: */ + + for (stamp = stamp_scroll; + stamp < stamp_scroll + max; + stamp++) + { + i = stamp - stamp_scroll; + + + dest.x = ((i % 2) * 48) + (WINDOW_WIDTH - 96); + dest.y = ((i / 2) * 48) + 40 + off_y; + + if (stamp == cur_stamp) + { + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + } + else if (stamp < num_stamps) + { + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + + if (stamp < num_stamps) + { + if (img_stamp_thumbs[stamp] != NULL) + img = img_stamp_thumbs[stamp]; + else + img = img_stamps[stamp]; + + dest.x = ((i % 2) * 48) + (WINDOW_WIDTH - 96) + + ((48 - (img->w)) / 2); + + dest.y = ((i / 2) * 48) + 40 + ((48 - (img->h)) / 2) + off_y; + + SDL_BlitSurface(img, NULL, screen, &dest); + } + } +} + + +/* Draw the shape selector: */ + +void draw_shapes(void) +{ + int i; + SDL_Rect dest; + + + draw_image_title(TITLE_SHAPES, WINDOW_WIDTH - 96); + + for (i = 0; i < 14 + TOOLOFFSET; i++) + { + dest.x = ((i % 2) * 48) + WINDOW_WIDTH - 96; + dest.y = ((i / 2) * 48) + 40; + + + if (i == cur_shape) + { + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + } + else if (i < NUM_SHAPES) + { + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + } + else + { + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + + + if (i < NUM_SHAPES) + { + dest.x = ((i % 2) * 48) + 4 + WINDOW_WIDTH - 96; + dest.y = ((i / 2) * 48) + 40 + 4; + + SDL_BlitSurface(img_shapes[i], NULL, screen, &dest); + + dest.x = ((i % 2) * 48) + 4 + WINDOW_WIDTH - 96 + + (40 - img_shape_names[i]->w) / 2; + dest.y = ((i / 2) * 48) + 40 + 4 + (44 - img_shape_names[i]->h); + + SDL_BlitSurface(img_shape_names[i], NULL, screen, &dest); + } + } +} + + + + +/* Draw no selectables: */ + +void draw_none(void) +{ + int i; + SDL_Rect dest; + + dest.x = WINDOW_WIDTH - 96; + dest.y = 0; + SDL_BlitSurface(img_title_off, NULL, screen, &dest); + + for (i = 0; i < 14 + TOOLOFFSET; i++) + { + dest.x = ((i % 2) * 48) + WINDOW_WIDTH - 96; + dest.y = ((i / 2) * 48) + 40; + + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } +} + + +/* Load an arbitrary set of images into an array (e.g., brushes or stamps) */ + +#ifndef NOSOUND +void loadarbitrary(SDL_Surface * surfs[], char * descs[], info_type * infs[], + Mix_Chunk * sounds[], + int * count, int starting, int max, + char * dir, int fatal, int maxw, int maxh) +#else +void loadarbitrary(SDL_Surface * surfs[], char * descs[], info_type * infs[], + int * count, int starting, int max, + char * dir, int fatal, int maxw, int maxh) +#endif +{ + DIR * d; + struct dirent * f; + struct stat sbuf; + char fname[512]; + char * d_names[MAX_FILES]; + int num_files, i; + + + *count = starting; + + /* Open the directory: */ + + d = opendir(dir); + if (d == NULL) + { + if (fatal) + { + fprintf(stderr, + "\nError: I can't find a directory of images\n" + "%s\n" + "The system error that occurred was: %s\n", + dir, strerror(errno)); + + cleanup(); + exit(1); + } + else + { + return; + } + } + + + /* Read directory for images: */ + + num_files = 0; + do + { + f = readdir(d); + + if (f != NULL) + { + d_names[num_files] = strdup(f->d_name); + num_files++; + } + } + while (f != NULL && num_files < MAX_FILES); + + closedir(d); + + + qsort(d_names, num_files, sizeof(char *), + (int(*)(const void *, const void *))compare_strings); + + + /* Do something with each file (load if PNG, recurse if directory): */ + + for (i = 0; i < num_files && *count < max; i++) + { + /* Ignore things starting with "." (e.g., "." and ".." dirs): */ + + if (strstr(d_names[i], ".") != d_names[i]) + { + /* If it's a directory, recurse down into it: */ + + snprintf(fname, sizeof(fname), "%s/%s", dir, d_names[i]); + debug(fname); + + stat(fname, &sbuf); + + if (S_ISDIR(sbuf.st_mode)) + { + debug("...is a directory"); + +#ifndef NOSOUND + loadarbitrary(surfs, descs, infs, sounds, count, *count, max, fname, + fatal, maxw, maxh); +#else + loadarbitrary(surfs, descs, infs, count, *count, max, fname, + fatal, maxw, maxh); +#endif + } + else if (strstr(d_names[i], ".png") != NULL) + { + /* If it has ".png" in the filename, assume we can try to load it: */ + + surfs[*count] = loadimage(fname); + + if ((surfs[*count]->w <= maxw && + surfs[*count]->h <= maxh) || + (maxw == -1 || maxh == -1)) + { + /* Check for a companion ".txt" file! */ + + if (descs != NULL) + descs[*count] = loaddesc(fname); + + if (infs != NULL) + infs[*count] = loadinfo(fname); + + +#ifndef NOSOUND + if (use_sound) + { + if (sounds != NULL) + sounds[*count] = loadsound(fname); + } +#endif + + + *count = *count + 1; + } + else + { + fprintf(stderr, + "\nWarning: Image too large (%d x %d - max: %d x %d)\n" + "%s\n\n", + surfs[*count]->w, surfs[*count]->h, maxw, maxh, + fname); + } + + show_progress_bar(); + } + } + + free(d_names[i]); + } + + + /* Give warning if too many files were found (e.g., some not loaded): */ + + if (*count == max) + { + fprintf(stderr, + "\nWarning: Reached maximum images (%d) which can be stored in:\n" + "%s\n\n", + max, dir); + } + + debug("loadarbitrary() ends..."); +} + + +/* Create a thumbnail: */ + +SDL_Surface * thumbnail(SDL_Surface * src, int max_x, int max_y, + int keep_aspect) +{ + int x, y, src_x, src_y, off_x, off_y; + SDL_Surface * s; + Uint32 amask, tr, tg, tb, ta; + Uint8 r, g, b, a; + float xscale, yscale; + int tmp; + + + /* Determine scale and centering offsets: */ + + if (!keep_aspect) + { + yscale = (float) ((float) src->h / (float) max_y); + xscale = (float) ((float) src->w / (float) max_x); + + // off_x = ((src->h / yscale) - (src->w / xscale)) / 2; + // off_y = ((src->w / xscale) - (src->h / yscale)) / 2; + + off_x = 0; + off_y = 0; + } + else + { + if (src->h > src->w) + { + yscale = (float) ((float) src->h / (float) max_y); + xscale = yscale; + off_x = ((src->h - src->w) / xscale) / 2; + off_y = 0; + } + else + { + xscale = (float) ((float) src->w / (float) max_x); + yscale = xscale; + off_x = 0; + off_y = ((src->w - src->h) / xscale) / 2; + } + } + + + /* Create surface for thumbnail: */ + + amask = ~(src->format->Rmask | + src->format->Gmask | + src->format->Bmask); + + s = SDL_CreateRGBSurface(SDL_SWSURFACE, + max_x, max_y, + src->format->BitsPerPixel, + src->format->Rmask, + src->format->Gmask, + src->format->Bmask, + amask); + + + if (s == NULL) + { + fprintf(stderr, "\nError: Can't build stamp thumbnails\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + /* Create thumbnail itself: */ + + SDL_LockSurface(src); + SDL_LockSurface(s); + + for (y = 0; y < max_y; y++) + { + for (x = 0; x < max_x; x++) + { +#ifndef LOW_QUALITY_THUMBNAILS + tr = 0; + tg = 0; + tb = 0; + ta = 0; + + tmp = 0; + + for (src_y = y * yscale; src_y < y * yscale + yscale && + src_y < src->h; src_y++) + { + for (src_x = x * xscale; src_x < x * xscale + xscale && + src_x < src->w; src_x++) + { + SDL_GetRGBA(getpixel(src, src_x, src_y), + src->format, + &r, &g, &b, &a); + + tr = tr + r; + tb = tb + b; + tg = tg + g; + ta = ta + a; + + tmp++; + } + } + + if (tmp != 0) + { + tr = tr / tmp; + tb = tb / tmp; + tg = tg / tmp; + ta = ta / tmp; + + putpixel(s, x + off_x, y + off_y, SDL_MapRGBA(s->format, + (Uint8) tr, + (Uint8) tg, + (Uint8) tb, + (Uint8) ta)); + } +#else + src_x = x * xscale; + src_y = y * yscale; + + putpixel(s, x + off_x, y + off_y, getpixel(src, src_x, src_y)); +#endif + } + } + + SDL_UnlockSurface(s); + SDL_UnlockSurface(src); + + return s; +} + + +/* Get a pixel: */ + +Uint32 getpixel(SDL_Surface * surface, int x, int y) +{ + int bpp; + Uint8 * p; + Uint32 pixel; + + pixel = 0; + + + /* Assuming the X/Y values are within the bounds of this surface... */ + + if (x >= 0 && y >= 0 && x < surface -> w && y < surface -> h) + { + /* SDL_LockSurface(surface); */ + + + /* Determine bytes-per-pixel for the surface in question: */ + + bpp = surface->format->BytesPerPixel; + + + /* Set a pointer to the exact location in memory of the pixel + in question: */ + + p = (Uint8 *) (((Uint8 *)surface->pixels) + /* Start at top of RAM */ + (y * surface->pitch) + /* Go down Y lines */ + (x * bpp)); /* Go in X pixels */ + + + /* Return the correctly-sized piece of data containing the + * pixel's value (an 8-bit palette value, or a 16-, 24- or 32-bit + * RGB value) */ + + if (bpp == 1) /* 8-bit display */ + pixel = *p; + else if (bpp == 2) /* 16-bit display */ + pixel = *(Uint16 *)p; + else if (bpp == 3) /* 24-bit display */ + { + /* Depending on the byte-order, it could be stored RGB or BGR! */ + + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) + pixel = p[0] << 16 | p[1] << 8 | p[2]; + else + pixel = p[0] | p[1] << 8 | p[2] << 16; + } + else if (bpp == 4) /* 32-bit display */ + pixel = *(Uint32 *)p; + + /* SDL_UnlockSurface(surface); */ + } + + return pixel; +} + + +/* Draw a single pixel into the surface: */ + +void putpixel(SDL_Surface * surface, int x, int y, Uint32 pixel) +{ + int bpp; + Uint8 * p; + + + /* Assuming the X/Y values are within the bounds of this surface... */ + + if (x >= 0 && y >= 0 && x < surface->w && y < surface->h) + { + /* SDL_LockSurface(surface); */ + + + /* Determine bytes-per-pixel for the surface in question: */ + + bpp = surface->format->BytesPerPixel; + + + /* Set a pointer to the exact location in memory of the pixel + * in question: */ + + p = (Uint8 *) (((Uint8 *)surface->pixels) + /* Start: beginning of RAM */ + (y * surface->pitch) + /* Go down Y lines */ + (x * bpp)); /* Go in X pixels */ + + + /* Set the (correctly-sized) piece of data in the surface's RAM + * to the pixel value sent in: */ + + if (bpp == 1) + *p = pixel; + else if (bpp == 2) + *(Uint16 *)p = pixel; + else if (bpp == 3) + { + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) + { + p[0] = (pixel >> 16) & 0xff; + p[1] = (pixel >> 8) & 0xff; + p[2] = pixel & 0xff; + } + else + { + p[0] = pixel & 0xff; + p[1] = (pixel >> 8) & 0xff; + p[2] = (pixel >> 16) & 0xff; + } + } + else if (bpp == 4) + { + *(Uint32 *)p = pixel; + } + + /* SDL_UnlockSurface(surface); */ + } +} + + +/* Show debugging stuff: */ + +void debug(char * str) +{ +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s\n", str); + fflush(stderr); +#endif +} + + +/* Undo! */ + +void do_undo(void) +{ + int wanna_update_toolbar; + + wanna_update_toolbar = 0; + + if (cur_undo != oldest_undo) + { + cur_undo--; + + if (cur_undo < 0) + cur_undo = NUM_UNDO_BUFS - 1; + +#ifdef DEBUG + printf("BLITTING: %d\n", cur_undo); +#endif + SDL_BlitSurface(undo_bufs[cur_undo], NULL, canvas, NULL); + update_canvas(0, 0, (WINDOW_WIDTH - 96), (48 * 7) + 40 + HEIGHTOFFSET); + + if (cur_undo == oldest_undo) + { + tool_avail[TOOL_UNDO] = 0; + wanna_update_toolbar = 1; + } + + if (tool_avail[TOOL_REDO] == 0) + { + tool_avail[TOOL_REDO] = 1; + wanna_update_toolbar = 1; + } + + if (wanna_update_toolbar) + { + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, 96, (48 * (7 + TOOLOFFSET / 2)) + 40); + } + + been_saved = 0; + } + +#ifdef DEBUG + printf("UNDO: Current=%d Oldest=%d Newest=%d\n", + cur_undo, oldest_undo, newest_undo); +#endif +} + + +/* Redo! */ + +void do_redo(void) +{ + if (cur_undo != newest_undo) + { + cur_undo = (cur_undo + 1) % NUM_UNDO_BUFS; + +#ifdef DEBUG + printf("BLITTING: %d\n", cur_undo); +#endif + SDL_BlitSurface(undo_bufs[cur_undo], NULL, canvas, NULL); + update_canvas(0, 0, (WINDOW_WIDTH - 96), (48 * 7) + 40 + HEIGHTOFFSET); + + been_saved = 0; + } + +#ifdef DEBUG + printf("REDO: Current=%d Oldest=%d Newest=%d\n", + cur_undo, oldest_undo, newest_undo); +#endif + + + if (((cur_undo + 1) % NUM_UNDO_BUFS) == newest_undo) + { + tool_avail[TOOL_REDO] = 0; + } + + tool_avail[TOOL_UNDO] = 1; + + draw_toolbar(); + SDL_UpdateRect(screen, 0, 0, 96, (48 * (7 + TOOLOFFSET / 2)) + 40); +} + + +/* Create the current brush in the current color: */ + +void render_brush(void) +{ + Uint32 amask; + int x, y; + Uint8 r, g, b, a; + + + /* Free the old rendered brush (if any): */ + + if (img_cur_brush != NULL) + { + SDL_FreeSurface(img_cur_brush); + } + + + /* Create a surface to render into: */ + + amask = ~(img_brushes[cur_brush]->format->Rmask | + img_brushes[cur_brush]->format->Gmask | + img_brushes[cur_brush]->format->Bmask); + + img_cur_brush = + SDL_CreateRGBSurface(SDL_SWSURFACE, + img_brushes[cur_brush]->w, + img_brushes[cur_brush]->h, + img_brushes[cur_brush]->format->BitsPerPixel, + img_brushes[cur_brush]->format->Rmask, + img_brushes[cur_brush]->format->Gmask, + img_brushes[cur_brush]->format->Bmask, + amask); + + if (img_cur_brush == NULL) + { + fprintf(stderr, "\nError: Can't render a brush!\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", SDL_GetError()); + + cleanup(); + exit(1); + } + + + /* Render the new brush: */ + + SDL_LockSurface(img_brushes[cur_brush]); + SDL_LockSurface(img_cur_brush); + + for (y = 0; y < img_brushes[cur_brush]->h; y++) + { + for (x = 0; x < img_brushes[cur_brush]->w; x++) + { + SDL_GetRGBA(getpixel(img_brushes[cur_brush], x, y), + img_brushes[cur_brush]->format, + &r, &g, &b, &a); + + putpixel(img_cur_brush, x, y, + SDL_MapRGBA(img_cur_brush->format, + color_hexes[cur_color][0], + color_hexes[cur_color][1], + color_hexes[cur_color][2], + a)); + } + } + + SDL_UnlockSurface(img_cur_brush); + SDL_UnlockSurface(img_brushes[cur_brush]); + + brush_counter = 0; +} + + +/* Play a sound: */ + +void playsound(int chan, int s, int override) +{ +#ifndef NOSOUND + if (use_sound) + { + if (override || !Mix_Playing(chan)) + Mix_PlayChannel(chan, sounds[s], 0); + } +#endif +} + + +/* Draw a XOR line: */ + +void line_xor(int x1, int y1, int x2, int y2) +{ + int dx, dy, y, num_drawn; + float m, b; + + + /* Kludgey, but it works: */ + + SDL_LockSurface(screen); + + dx = x2 - x1; + dy = y2 - y1; + + num_drawn = 0; + + if (dx != 0) + { + m = ((float) dy) / ((float) dx); + b = y1 - m * x1; + + if (x2 >= x1) + dx = 1; + else + dx = -1; + + + while (x1 != x2) + { + y1 = m * x1 + b; + y2 = m * (x1 + dx) + b; + + if (y1 > y2) + { + y = y1; + y1 = y2; + y2 = y; + } + + for (y = y1; y <= y2; y++) + { + num_drawn++; + if (num_drawn < 10 || dont_do_xor == 0) + clipped_putpixel(screen, x1 + 96, y, + 0xFFFFFFFF - getpixel(screen, x1 + 96, y)); + } + + x1 = x1 + dx; + } + } + else + { + if (y1 > y2) + { + for (y = y1; y >= y2; y--) + { + num_drawn++; + + if (num_drawn < 10 || dont_do_xor == 0) + { + clipped_putpixel(screen, x1 + 96, y, + 0xFFFFFFFF - getpixel(screen, x1 + 96, y)); + } + } + } + else + { + for (y = y1; y <= y2; y++) + { + num_drawn++; + + if (num_drawn < 10 || dont_do_xor == 0) + { + clipped_putpixel(screen, x1 + 96, y, + 0xFFFFFFFF - getpixel(screen, x1 + 96, y)); + } + } + } + } + + SDL_UnlockSurface(screen); +} + + +/* Should really clip at the line level, but oh well... */ + +void clipped_putpixel(SDL_Surface * dest, int x, int y, Uint32 c) +{ + if (x >= 96 && x < (WINDOW_WIDTH - 96) && + y >= 0 && y < (48 * 7 + 40 + HEIGHTOFFSET)) + { + putpixel(dest, x, y, c); + } +} + + +/* Draw a XOR rectangle: */ + +void rect_xor(int x1, int y1, int x2, int y2) +{ + if (x1 < 0) + x1 = 0; + + if (x2 < 0) + x2 = 0; + + if (y1 < 0) + y1 = 0; + + if (y2 < 0) + y2 = 0; + + if (x1 >= (WINDOW_WIDTH - 96 - 96)) + x1 = (WINDOW_WIDTH - 96 - 96) - 1; + + if (x2 >= (WINDOW_WIDTH - 96 - 96)) + x2 = (WINDOW_WIDTH - 96 - 96) - 1; + + if (y1 >= (48 * 7) + 40 + HEIGHTOFFSET) + y1 = (48 * 7) + 40 + HEIGHTOFFSET - 1; + + if (y2 >= (48 * 7) + 40 + HEIGHTOFFSET) + y2 = (48 * 7) + 40 + HEIGHTOFFSET - 1; + + line_xor(x1, y1, x2, y1); + line_xor(x2, y1, x2, y2); + line_xor(x2, y2, x1, y2); + line_xor(x1, y2, x1, y1); +} + + +/* Erase at the cursor! */ + +void do_eraser(int x, int y) +{ + SDL_Rect dest; + + dest.x = x - 48; + dest.y = y - 48; + dest.w = 96; + dest.h = 96; + + SDL_FillRect(canvas, &dest, + SDL_MapRGB(canvas->format, 255, 255, 255)); + + +#ifndef NOSOUND + if (use_sound) + { + if (!Mix_Playing(0)) + { + eraser_sound = (eraser_sound + 1) % 2; + + playsound(0, SND_ERASER1 + eraser_sound, 0); + } + } +#endif + + update_canvas(x - 48, y - 48, x + 48, y + 48); + + rect_xor(x - 48, y - 48, + x + 48, y + 48); +} + + +/* Reset available tools (for new image / starting out): */ + +void reset_avail_tools(void) +{ + int i; + + for (i = 0; i < NUM_TOOLS; i++) + { + tool_avail[i] = 1; + } + + + /* Unavailable at the beginning of a new canvas: */ + + tool_avail[TOOL_UNDO] = 0; + tool_avail[TOOL_REDO] = 0; + tool_avail[TOOL_NEW] = 0; + + if (been_saved) + tool_avail[TOOL_SAVE] = 0; + + + /* Unavailable in rare circumstances: */ + + if (num_stamps == 0) + tool_avail[TOOL_STAMP] = 0; + + + /* Disable quit? */ + + if (disable_quit) + tool_avail[TOOL_QUIT] = 0; + + +#ifdef WIN32 + disable_print = !IsPrinterAvailable(); +#endif + +#ifdef __BEOS__ + disable_print = !IsPrinterAvailable(); +#endif + + + /* Disable print? */ + + if (disable_print) + tool_avail[TOOL_PRINT] = 0; +} + + +/* Save and disable available tools (for Open-Dialog) */ + +void disable_avail_tools(void) +{ + int i; + + for (i = 0; i < NUM_TOOLS; i++) + { + tool_avail_bak[i] = tool_avail[i]; + tool_avail[i]=0; + } +} + +/* Restore and enable available tools (for End-Of-Open-Dialog) */ + +void enable_avail_tools(void) +{ + int i; + + for (i = 0; i < NUM_TOOLS; i++) + { + tool_avail[i] = tool_avail_bak[i]; + } +} + + +/* Update a rect. based on two x/y coords (not necessarly in order): */ + +void update_screen(int x1, int y1, int x2, int y2) +{ + int tmp; + + if (x1 > x2) + { + tmp = x1; + x1 = x2; + x2 = tmp; + } + + if (y1 > y2) + { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + x1 = x1 - 1; + x2 = x2 + 1; + y1 = y1 - 1; + y2 = y2 + 1; + + + if (x1 < 0) + x1 = 0; + if (x2 < 0) + x2 = 0; + if (y1 < 0) + y1 = 0; + if (y2 < 0) + y2 = 0; + + if (x1 >= WINDOW_WIDTH) + x1 = WINDOW_WIDTH - 1; + if (x2 >= WINDOW_WIDTH) + x2 = WINDOW_WIDTH - 1; + if (y1 >= WINDOW_HEIGHT) + y1 = WINDOW_HEIGHT - 1; + if (y2 >= WINDOW_HEIGHT) + y2 = WINDOW_HEIGHT - 1; + + SDL_UpdateRect(screen, x1, y1, x2 - x1 + 1, y2 - y1 + 1); +} + + +/* Build a color based on two colors and an alpha... */ + +Uint8 alpha(Uint8 c1, Uint8 c2, Uint8 a) +{ + Uint16 c, nc1, nc2, na; + + na = a; + nc1 = c1; + nc2 = c2; + + if (nc1 > 200) + nc1 = 200; + + c = ((nc1 * na) / 255 + (nc2 * (255 - na)) / 255); + + return (Uint8) c; +} + + +/* For qsort() call in loadarbitrary()... */ + +int compare_strings(char * * s1, char * * s2) +{ + return (strcmp(*s1, *s2)); +} + + +/* For qsort() call in do_open()... */ + +int compare_dirents(struct dirent * f1, struct dirent * f2) +{ +#ifdef DEBUG + printf("compare_dirents: %s\t%s\n", f1->d_name, f2->d_name); +#endif + + return (strcmp(f1->d_name, f2->d_name)); +} + + +/* Draw tux's text on the screen: */ + +void draw_tux_text(int which_tux, char * str, int want_utf8, + int force_locale_font) +{ + SDL_Rect dest; + SDL_Color black = {0, 0, 0, 0}; + char * upper_str; + + + /* Remove any text-changing timer if one is running: */ + + control_drawtext_timer(0, ""); + + + /* Clear first: */ + + dest.x = 0; + dest.y = (48 * 7) + 40 + 48 + HEIGHTOFFSET; + dest.w = WINDOW_WIDTH; + dest.h = WINDOW_HEIGHT - ((48 * 7) + 40 + 48 + HEIGHTOFFSET); + + SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255)); + + + /* Draw tux: */ + + dest.x = 0; + dest.y = WINDOW_HEIGHT - (img_tux[which_tux] -> h); + + if (dest.y < ((48 * 7) + 40 + 48 + HEIGHTOFFSET)) + dest.y = ((48 * 7) + 40 + 48 + HEIGHTOFFSET); + + SDL_BlitSurface(img_tux[which_tux], NULL, screen, &dest); + + + upper_str = uppercase(str); + wordwrap_text(font, upper_str, black, + img_tux[which_tux] -> w + 5, + (48 * 7) + 40 + 48 + HEIGHTOFFSET + 5, + WINDOW_WIDTH, want_utf8, force_locale_font); + + free(upper_str); + + + /* Update the display: */ + + SDL_UpdateRect(screen, + 0, (48 * 7) + 40 + 48 + HEIGHTOFFSET, + WINDOW_WIDTH, + WINDOW_HEIGHT - ((48 * 7) + 40 + 48 + HEIGHTOFFSET)); +} + + +void wordwrap_text(TTF_Font * font, char * str, SDL_Color color, + int left, int top, int right, int want_utf8, + int force_locale_font) +{ + int x, y, i, j; + char substr[512]; + unsigned char * locale_str; + char * tstr; + Uint16 unicode_char[2]; + char utf8_char[5]; + int len; + SDL_Surface * text; + SDL_Rect dest; + + int utf8_str_len; + char utf8_str[512]; + + + /* Cursor starting position: */ + + x = left; + y = top; + + debug(str); + debug(gettext(str)); + debug("..."); + + if (strcmp(str, "") != 0 && + (want_utf8 || + (need_utf8(language) && strcmp(gettext(str), str) != 0))) + { + if (want_utf8) + locale_str = strdup(str); + else + locale_str = strdup(gettext(str)); + + +#ifdef OLD_UTF8_WRAP + + /* For each UTF8 character: */ + + for (i = 0; i < strlen(locale_str); i++) + { + /* How many bytes does this character need? */ + + if (locale_str[i] < 128) /* 0xxx xxxx - 1 byte */ + { + utf8_char[0] = locale_str[i]; + utf8_char[1] = '\0'; + } + else if ((locale_str[i] & 0xE0) == 0xC0) /* 110x xxxx - 2 bytes */ + { + utf8_char[0] = locale_str[i]; + utf8_char[1] = locale_str[i + 1]; + utf8_char[2] = '\0'; + i = i + 1; + } + else if ((locale_str[i] & 0xF0) == 0xE0) /* 1110 xxxx - 3 bytes */ + { + utf8_char[0] = locale_str[i]; + utf8_char[1] = locale_str[i + 1]; + utf8_char[2] = locale_str[i + 2]; + utf8_char[3] = '\0'; + i = i + 2; + } + else /* 1111 0xxx - 4 bytes */ + { + utf8_char[0] = locale_str[i]; + utf8_char[1] = locale_str[i + 1]; + utf8_char[2] = locale_str[i + 2]; + utf8_char[3] = locale_str[i + 3]; + utf8_char[4] = '\0'; + i = i + 3; + } + + text = TTF_RenderUTF8_Blended(locale_font, utf8_char, color); + + if (x + text->w > right) + { + x = left; + y = y + text->h; + } + + dest.x = x; + dest.y = y; + + SDL_BlitSurface(text, NULL, screen, &dest); + + x = x + text->w; + + SDL_FreeSurface(text); + } + +#else + /* For each UTF8 character: */ + + utf8_str_len = 0; + utf8_str[0] = '\0'; + + for (i = 0; i < strlen(locale_str); i++) + { + if (locale_str[i] < 128) + { + utf8_str[utf8_str_len++] = locale_str[i]; + utf8_str[utf8_str_len] = '\0'; + + + /* Space? Blit the word! (Word-wrap if necessary) */ + + if (locale_str[i] == ' ') + { + text = TTF_RenderUTF8_Blended(locale_font, utf8_str, color); + + if (x + text->w > right) + { + x = left; + y = y + text->h; + } + + dest.x = x; + dest.y = y; + + SDL_BlitSurface(text, NULL, screen, &dest); + + x = x + text->w; + + SDL_FreeSurface(text); + + utf8_str_len = 0; + utf8_str[0] = '\0'; + } + } + else if ((locale_str[i] & 0xE0) == 0xC0) + { + utf8_str[utf8_str_len++] = locale_str[i]; + utf8_str[utf8_str_len++] = locale_str[i + 1]; + utf8_str[utf8_str_len] = '\0'; + i++; + } + else if ((locale_str[i] & 0xF0) == 0xE0) + { + utf8_str[utf8_str_len++] = locale_str[i]; + utf8_str[utf8_str_len++] = locale_str[i + 1]; + utf8_str[utf8_str_len++] = locale_str[i + 2]; + utf8_str[utf8_str_len] = '\0'; + i = i + 2; + } + else + { + utf8_str[utf8_str_len++] = locale_str[i]; + utf8_str[utf8_str_len++] = locale_str[i + 1]; + utf8_str[utf8_str_len++] = locale_str[i + 2]; + utf8_str[utf8_str_len++] = locale_str[i + 3]; + utf8_str[utf8_str_len] = '\0'; + i = i + 3; + } + } + + if (utf8_str_len > 0) + { + text = TTF_RenderUTF8_Blended(locale_font, utf8_str, color); + + if (x + text->w > right) + { + x = left; + y = y + text->h; + } + + dest.x = x; + dest.y = y; + + SDL_BlitSurface(text, NULL, screen, &dest); + SDL_FreeSurface(text); + } +#endif + + free(locale_str); + } + else if (need_unicode(language) && locale_font != NULL && + strcmp(gettext(str), str) != 0 && strcmp(str, "") != 0) + { + locale_str = strdup(gettext(str)); + + + /* For each pair of bytes... */ + + for (i = 0; i < strlen(locale_str); i = i + 2) + { + /* FIXME: Is this endian-safe? */ + + unicode_char[0] = (locale_str[i] << 8) + (locale_str[i + 1]); + unicode_char[1] = 0; + + text = TTF_RenderUNICODE_Blended(locale_font, unicode_char, color); + + + /* Wrap, if needed: */ + + if (x + text->w > right) + { + x = left; + y = y + text->h; + } + + + dest.x = x; + dest.y = y; + + SDL_BlitSurface(text, NULL, screen, &dest); + + x = x + text->w; + + SDL_FreeSurface(text); + } + + free(locale_str); + } + else if (strlen(str) != 0) + { + /* Truncate if too big! (sorry!) */ + + tstr = strdup(uppercase(gettext(str))); + + if (strlen(tstr) > sizeof(substr) - 1) + tstr[sizeof(substr) - 1] = '\0'; + + + /* For each word... */ + + for (i = 0; i < strlen(tstr); i++) + { + /* Figure out the word... */ + + len = 0; + + for (j = i; tstr[j] != ' ' && tstr[j] != '\0'; j++) + { + substr[len++] = tstr[j]; + } + + substr[len++] = ' '; + substr[len] = '\0'; + + + /* Render the word for display... */ + + //if (force_locale_font && locale_font != NULL) + // text = RENDER_TEXT(locale_font, substr, color); + //else + text = RENDER_TEXT(font, substr, color); + + + /* If it won't fit on this line, move to the next! */ + + if (x + text->w > right) /* Correct? */ + { + x = left; + y = y + text->h; + } + + + /* Draw the word: */ + + dest.x = x; + dest.y = y; + + SDL_BlitSurface(text, NULL, screen, &dest); + + + /* Move the cursor one word's worth: */ + + x = x + text->w; + + + /* Free the temp. surface: */ + + SDL_FreeSurface(text); + + + /* Now on to the next word... */ + + i = j; + } + + free(tstr); + } +} + + +/* Load a file's sound: */ + +#ifndef NOSOUND + +Mix_Chunk * loadsound(char * fname) +{ + char * snd_fname; + char tmp_str[64]; + Mix_Chunk * tmp_snd; + + + debug(fname); + + + /* First, check for localized version of sound: */ + + snd_fname = malloc(strlen(fname) + strlen(lang_prefixes[language]) + 2); + + strcpy(snd_fname, fname); + snprintf(tmp_str, strlen(tmp_str), "_%s.wav", lang_prefixes[language]); + + + if (strstr(snd_fname, ".png") != NULL) + { + strcpy(strstr(snd_fname, ".png"), tmp_str); + debug(snd_fname); + + tmp_snd = Mix_LoadWAV(snd_fname); + + if (tmp_snd == NULL) + { + debug("...No local version of sound!"); + + /* Now, check for default sound: */ + + free(snd_fname); + + snd_fname = strdup(fname); + + if (strstr(snd_fname, ".png") != NULL) + { + strcpy(strstr(snd_fname, ".png"), ".wav"); + debug(snd_fname); + tmp_snd = Mix_LoadWAV(snd_fname); + free(snd_fname); + + if (tmp_snd == NULL) + { + debug("...No default version of sound!"); + return NULL; + } + + return (tmp_snd); + } + else + { + return NULL; + } + } + + return (tmp_snd); + } + else + { + return NULL; + } +} + +#endif + + +/* Strip any trailing spaces: */ + +void strip_trailing_whitespace( char *buf ) +{ + while (buf[strlen(buf) - 1] == ' ' || + buf[strlen(buf) - 1] == '\r' || + buf[strlen(buf) - 1] == '\n') + { + buf[strlen(buf) - 1] = '\0'; + } +} + + +/* Load a file's description: */ + +char * loaddesc(char * fname) +{ + char * txt_fname; + char buf[256], def_buf[256]; + int found, got_first, in_utf8, in_html_escape; + FILE * fi; + + + txt_fname = strdup(fname); + + if (strstr(txt_fname, ".png") != NULL) + { + strcpy(strstr(txt_fname, ".png"), ".txt"); + + fi = fopen(txt_fname, "r"); + + if (fi == NULL) + { + /* + fprintf(stderr, "\nWarning: Couldn't open a description file:\n"); + perror(txt_fname); + fprintf(stderr, "\n"); + */ + + free(txt_fname); + + return NULL; + } + + free(txt_fname); + + got_first = 0; + found = 0; + in_utf8 = 0; + in_html_escape = 0; + + strcpy(def_buf, ""); + + do + { + fgets(buf, sizeof(buf), fi); + + if (!feof(fi)) + { + strip_trailing_whitespace(buf); + + + if (!got_first) + { + /* First one is the default: */ + + strcpy(def_buf, buf); + got_first = 1; + } + + + debug(buf); + + + /* See if it's the one for this locale... */ + + if (strstr(buf, lang_prefixes[language]) == buf) + { + + debug(buf + strlen(lang_prefixes[language])); + + if (buf[strlen(lang_prefixes[language])] == '=') + { + found = 1; + in_utf8 = 0; + } + else if (strstr(buf + strlen(lang_prefixes[language]), ".utf8=") == + buf + strlen(lang_prefixes[language])) + { + found = 1; + in_utf8 = 1; + + debug("...IS UTF-8!"); + } + else if (strstr(buf + strlen(lang_prefixes[language]), ".esc=") == + buf + strlen(lang_prefixes[language])) + { + found = 1; + in_html_escape = 1; + + debug("...IS HTML ESCAPED!"); + } + } + } + } + while (!feof(fi) && !found); + + fclose(fi); + + + /* Return the string: */ + + if (found) + { + if (in_utf8 == 1) + { + /* UTF format! Decode! */ + + /* FIXME: Stupid... Using '=' at beginning to mark as a UTF8 string */ + + return(strdup(buf + (strlen(lang_prefixes[language])) + 5)); + } + else if (in_html_escape == 1) + { + /* HTML escape-code style! Unescape! */ + + return(unescape(buf + (strlen(lang_prefixes[language])) + 5)); + } + else + { + /* Plain old ASCII... just copy it: */ + + return(strdup(buf + (strlen(lang_prefixes[language])) + 1)); + } + } + else + { + /* No locale-specific translation; use the default (English) */ + + return(strdup(def_buf)); + } + } + else + { + return NULL; + } +} + + +/* Load a file's info: */ + +info_type * loadinfo(char * fname) +{ + char * dat_fname; + char buf[256]; + info_type inf; + info_type * inf_ret; + FILE * fi; + + + /* Clear info struct first: */ + + inf.colorable = 0; + inf.tintable = 0; + + + /* Load info! */ + + dat_fname = strdup(fname); + + if (strstr(dat_fname, ".png") != NULL) + { + strcpy(strstr(dat_fname, ".png"), ".dat"); + + fi = fopen(dat_fname, "r"); + + if (fi == NULL) + { + /* + fprintf(stderr, "\nWarning: Couldn't open an info file:\n"); + perror(txt_fname); + fprintf(stderr, "\n"); + */ + + free(dat_fname); + + return NULL; + } + + free(dat_fname); + + + do + { + fgets(buf, sizeof(buf), fi); + + if (!feof(fi)) + { + strip_trailing_whitespace(buf); + + if (strcmp(buf, "colorable") == 0) + inf.colorable = 1; + else if (strcmp(buf, "tintable") == 0) + inf.tintable = 1; + } + } + while (!feof(fi)); + + fclose(fi); + + + /* Return the info: */ + + inf_ret = malloc(sizeof(info_type)); + /* FIXME: Check for errors! */ + + memcpy(inf_ret, &inf, sizeof(info_type)); + + return(inf_ret); + } + else + { + return NULL; + } +} + + +/* Wait for a keypress or mouse click */ + +void do_wait(void) +{ + SDL_Event event; + int done, counter; + + done = 0; + + counter = 50; /* About 5 seconds */ + + do + { + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_QUIT) + { + done = 1; + + /* FIXME: Handle SDL_Quit better */ + } + else if (event.type == SDL_ACTIVEEVENT) + { + handle_active(&event); + } + else if (event.type == SDL_KEYDOWN) + { + done = 1; + } + else if (event.type == SDL_MOUSEBUTTONDOWN && + event.button.button >= 1 && + event.button.button <= 3) + { + done = 1; + } + } + + counter--; + SDL_Delay(100); + } + while (!done && counter > 0); +} + + +/* Load current (if any) image: */ + +void load_current(void) +{ + SDL_Surface * tmp; + char * fname; + char ftmp[1024]; + FILE * fi; + SDL_Rect dest; + + + /* Determine the current picture's ID: */ + + fname = get_fname("current_id.txt"); + + fi = fopen(fname, "r"); + if (fi == NULL) + { + fprintf(stderr, + "\nWarning: Couldn't determine the current image's ID\n" + "%s\n" + "The system error that occurred was:\n" + "%s\n\n", fname, strerror(errno)); + file_id[0] = '\0'; + } + else + { + fgets(file_id, sizeof(file_id), fi); + if (strlen(file_id) > 0) + { + file_id[strlen(file_id) - 1] = '\0'; + } + fclose(fi); + } + + free(fname); + + + /* Load that image: */ + + if (file_id[0] != '\0') + { + snprintf(ftmp, sizeof(ftmp), "saved/%s%s", file_id, FNAME_EXTENSION); + + fname = get_fname(ftmp); + +#ifdef SAVE_AS_BMP + tmp = SDL_LoadBMP(fname); +#else + tmp = IMG_Load(fname); +#endif + + if (tmp == NULL) + { + fprintf(stderr, + "\nWarning: Couldn't load any current image.\n" + "%s\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", fname, SDL_GetError()); + + file_id[0] = '\0'; + } + else + { + SDL_FillRect(canvas, NULL, SDL_MapRGB(canvas->format, 255, 255, 255)); + + dest.x = (canvas->w - tmp->w) / 2; + dest.y = (canvas->h - tmp->h) / 2; + SDL_BlitSurface(tmp, NULL, canvas, &dest); + + SDL_FreeSurface(tmp); + + tool_avail[TOOL_NEW] = 1; + } + + free(fname); + } +} + + +/* Save the current image to disk: */ + +void save_current(void) +{ + char * fname; + int res; + FILE * fi; + + + fname = get_fname(""); + + res = mkdir(fname, 0755); + + if (res != 0 && errno != EEXIST) + { + fprintf(stderr, + "\nError: Can't create user data directory:\n" + "%s\n" + "The error that occurred was:\n" + "%s\n\n", fname, strerror(errno)); + + draw_tux_text(TUX_OOPS, strerror(errno), 0, 0); + } + + free(fname); + + + fname = get_fname("current_id.txt"); + + fi = fopen(fname, "w"); + if (fi == NULL) + { + fprintf(stderr, + "\nError: Can't keep track of current image.\n" + "%s\n" + "The error that occred was:\n" + "%s\n\n", fname, strerror(errno)); + + draw_tux_text(TUX_OOPS, strerror(errno), 0, 0); + } + else + { + fprintf(fi, "%s\n", file_id); + fclose(fi); + } + + free(fname); +} + + +/* The filename for the current image: */ + +char * get_fname(char * name) +{ + char f[512]; + const char * tux_settings_dir; + + +#ifdef WIN32 + snprintf(f, sizeof(f), "%s/%s", savedir, name); +#elif __BEOS__ + if (*name == '\0') + strcpy(f, savedir); + else + snprintf(f, sizeof(f), "%s/%s", savedir, name); +#else + +#ifdef __APPLE__ + tux_settings_dir = "Library/Preferences/tuxpaint"; +#else + tux_settings_dir = ".tuxpaint"; +#endif + + if (savedir == NULL) + { + /* Save directory not overridden: */ + + if (getenv("HOME") != NULL) + { + if (*name == '\0') + { + /* (Some mkdir()'s don't like trailing slashes) */ + + snprintf(f, sizeof(f), "%s/%s", getenv("HOME"), tux_settings_dir); + } + else + { + snprintf(f, sizeof(f), "%s/%s/%s", + getenv("HOME"), tux_settings_dir, name); + } + } + else + { + strcpy(f, name); + } + } + else + { + printf("savedir set to: %s\n", savedir); + + snprintf(f, sizeof(f), "%s/%s", savedir, name); + } +#endif + + return strdup(f); +} + + +/* Prompt the user with a yes/no question: */ + +int do_prompt(char * text, char * btn_yes, char * btn_no) +{ + SDL_Event event; + SDL_Rect dest; + int done, ans, w; + SDL_Color black = {0, 0, 0, 0}; + SDLKey key; + SDLKey key_y, key_n; + char keystr[200]; +#ifndef NO_PROMPT_SHADOWS + int i; + SDL_Surface * alpha_surf; +#endif + + + /* FIXME: Move elsewhere! Or not?! */ + + strcpy(keystr, gettext("Yes")); + key_y = tolower(keystr[0]); + + strcpy(keystr, gettext("No")); + key_n = tolower(keystr[0]); + + + do_setcursor(cursor_arrow); + + + /* Move cursor automatically if in keymouse mode: */ + + if (keymouse) + { + mouse_x = WINDOW_WIDTH / 2; + mouse_y = WINDOW_HEIGHT / 2; + SDL_WarpMouse(mouse_x, mouse_y); + } + + + /* Draw button box: */ + + playsound(0, SND_PROMPT, 1); + + for (w = 0; w <= 96; w = w + 4) + { + dest.x = 160 + 96 - w + PROMPTOFFSETX; + dest.y = 94 + 96 - w + PROMPTOFFSETY; + dest.w = (320 - 96 * 2) + w * 2; + dest.h = w * 2; + SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 0, 0, 0)); + + SDL_UpdateRect(screen, dest.x, dest.y, dest.w, dest.h); + SDL_Delay(10); + } + + +#ifndef NO_PROMPT_SHADOWS + alpha_surf = SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_SRCALPHA, + (320 - 96 * 2) + (w - 4) * 2, + (w - 4) * 2, + screen->format->BitsPerPixel, + screen->format->Rmask, + screen->format->Gmask, + screen->format->Bmask, + screen->format->Amask); + + if (alpha_surf != NULL) + { + SDL_FillRect(alpha_surf, NULL, SDL_MapRGB(alpha_surf->format, 0, 0, 0)); + SDL_SetAlpha(alpha_surf, SDL_SRCALPHA, 64); + + for (i = 8; i > 0; i = i - 2) + { + dest.x = 160 + 96 - (w - 4) + i + PROMPTOFFSETX; + dest.y = 94 + 96 - (w - 4) + i + PROMPTOFFSETY; + dest.w = (320 - 96 * 2) + (w - 4) * 2; + dest.h = (w - 4) * 2; + + SDL_BlitSurface(alpha_surf, NULL, screen, &dest); + } + + SDL_FreeSurface(alpha_surf); + } +#endif + + + w = w - 6; + + dest.x = 160 + 96 - w + PROMPTOFFSETX; + dest.y = 94 + 96 - w + PROMPTOFFSETY; + dest.w = (320 - 96 * 2) + w * 2; + dest.h = w * 2; + SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255)); + + + /* Draw the question: */ + + wordwrap_text(font, text, black, + 166 + PROMPTOFFSETX, 100 + PROMPTOFFSETY, 482, 0, 0); + + + /* Draw yes button: */ + + dest.x = 166 + PROMPTOFFSETX; + dest.y = 178 + PROMPTOFFSETY; + SDL_BlitSurface(img_yes, NULL, screen, &dest); + + wordwrap_text(font, btn_yes, black, 166 + PROMPTOFFSETX + 48 + 4, + 183 + PROMPTOFFSETY, 482, 0, 0); + + + /* Draw no button: */ + + if (strlen(btn_no) != 0) + { + dest.x = 166 + PROMPTOFFSETX; + dest.y = 230 + PROMPTOFFSETY; + SDL_BlitSurface(img_no, NULL, screen, &dest); + + wordwrap_text(font, btn_no, black, + 166 + PROMPTOFFSETX + 48 + 4, 235 + PROMPTOFFSETY, 482, 0, 0); + } + + + /* Draw Tux, waiting... */ + + draw_tux_text(TUX_BORED, "", 0, 0); + + SDL_Flip(screen); + + done = 0; + ans = 0; + + do + { + SDL_WaitEvent(&event); + + if (event.type == SDL_QUIT) + { + ans = 0; + done = 1; + } + else if (event.type == SDL_ACTIVEEVENT) + { + handle_active(&event); + } + else if (event.type == SDL_KEYUP) + { + key = event.key.keysym.sym; + + handle_keymouse(key, SDL_KEYUP); + } + else if (event.type == SDL_KEYDOWN) + { + key = event.key.keysym.sym; + + handle_keymouse(key, SDL_KEYDOWN); + + + /* FIXME: Should use SDLK_{c} instead of '{c}'? How? */ + + if (key == key_y || key == SDLK_RETURN) + { + /* Y or ENTER - Yes! */ + + ans = 1; + done = 1; + } + else if (key == key_n || key == SDLK_ESCAPE) + { + /* N or ESCAPE - No! */ + + if (strlen(btn_no) != 0) + { + ans = 0; + done = 1; + } + else + { + if (key == SDLK_ESCAPE) + { + /* ESCAPE also simply dismisses if there's no Yes/No choice: */ + + ans = 1; + done = 1; + } + } + } + } + else if (event.type == SDL_MOUSEBUTTONDOWN && + event.button.button >= 1 && + event.button.button <= 3) + { + if (event.button.x >= 166 + PROMPTOFFSETX && + event.button.x < 166 + PROMPTOFFSETX + 48) + { + if (event.button.y >= 178 + PROMPTOFFSETY && + event.button.y < 178 + PROMPTOFFSETY + 48) + { + ans = 1; + done = 1; + } + else if (strlen(btn_no) != 0 && + event.button.y >= 230 + PROMPTOFFSETY && + event.button.y < 230 + PROMPTOFFSETY + 48) + { + ans = 0; + done = 1; + } + } + } + else if (event.type == SDL_MOUSEMOTION) + { + if (event.button.x >= 166 + PROMPTOFFSETX && + event.button.x < 166 + 48 + PROMPTOFFSETX && + ((event.button.y >= 178 + PROMPTOFFSETY && + event.button.y < 178 + 48 + PROMPTOFFSETY) || + (strlen(btn_no) != 0 && + event.button.y >= 230 && event.button.y < 230 + 48))) + { + do_setcursor(cursor_hand); + } + else + { + do_setcursor(cursor_arrow); + } + } + } + while (!done); + + + /* FIXME: Sound effect! */ + /* ... */ + + + /* Erase question prompt: */ + + update_canvas(0, 0, WINDOW_WIDTH - 96 - 96, 48 * 7 + 40 + HEIGHTOFFSET); + + return ans; +} + + +/* Free memory and prepare to quit: */ + +void cleanup(void) +{ + int i; + + for ( i = 0; i < MAX_STAMPS; ++i ) + { + if ( txt_stamps[i] ) + { + free(txt_stamps[i]); + txt_stamps[i] = NULL; + } + } + + for ( i = 0; i < MAX_STAMPS; ++i ) + { + if ( inf_stamps[i] ) + { + free(inf_stamps[i]); + inf_stamps[i] = NULL; + } + } + + free_surface_array( img_brushes, MAX_BRUSHES ); + free_surface_array( img_stamps, MAX_STAMPS ); + free_surface_array( img_tools, NUM_TOOLS ); + free_surface_array( img_tool_names, NUM_TOOLS ); + free_surface_array( img_title_names, NUM_TITLES ); + free_surface_array( img_magics, NUM_MAGICS ); + free_surface_array( img_magic_names, NUM_MAGICS ); + free_surface_array( img_shapes, NUM_SHAPES ); + free_surface_array( img_shape_names, NUM_SHAPES ); + free_surface_array( img_tux, NUM_TIP_TUX ); + + free_surface( &img_openlabels_open ); + free_surface( &img_openlabels_erase ); + free_surface( &img_openlabels_back ); + + free_surface( &img_progress ); + + free_surface( &img_yes ); + free_surface( &img_no ); + + free_surface( &img_title_on ); + free_surface( &img_title_off ); + free_surface( &img_title_large_on ); + free_surface( &img_title_large_off ); + + free_surface( &img_open ); + free_surface( &img_erase ); + free_surface( &img_back ); + + free_surface( &img_btn_up ); + free_surface( &img_btn_down ); + free_surface( &img_btn_off ); + + free_surface( &img_cursor_up ); + free_surface( &img_cursor_down ); + + free_surface( &img_scroll_up ); + free_surface( &img_scroll_down ); + free_surface( &img_scroll_up_off ); + free_surface( &img_scroll_down_off ); + + free_surface( &img_paintcan ); + + free_surface( &img_sparkles ); + + free_surface_array( undo_bufs, NUM_UNDO_BUFS ); +#ifndef LOW_QUALITY_COLOR_SELECTOR + free_surface_array( img_color_btns, NUM_COLORS ); +#endif + free_surface_array( img_stamp_thumbs, MAX_STAMPS ); + + free_surface( &screen ); + free_surface( &canvas ); + free_surface( &img_cur_brush ); + + if (font != NULL) + { + TTF_CloseFont(font); + font = NULL; + } + + if (small_font != NULL) + { + TTF_CloseFont(small_font); + small_font = NULL; + } + + if (large_font != NULL) + { + TTF_CloseFont(large_font); + large_font = NULL; + } + + for (i = 0; i < MAX_FONTS; i++) + { + if (fonts[i]) + { + TTF_CloseFont(fonts[i]); + fonts[i] = NULL; + } + } + +#ifndef NOSOUND + if (use_sound) + { + for (i = 0; i < NUM_SOUNDS; i++) + { + if (sounds[i]) + { + Mix_FreeChunk(sounds[i]); + sounds[i] = NULL; + } + } + + for (i = 0; i < num_stamps; i++) + { + if (snd_stamps[i]) + { + Mix_FreeChunk(snd_stamps[i]); + snd_stamps[i] = NULL; + } + } + + Mix_CloseAudio(); + } +#endif + + + free_cursor(&cursor_hand); + free_cursor(&cursor_arrow); + free_cursor(&cursor_watch); + free_cursor(&cursor_up); + free_cursor(&cursor_down); + free_cursor(&cursor_tiny); + free_cursor(&cursor_crosshair); + free_cursor(&cursor_brush); + free_cursor(&cursor_wand); + free_cursor(&cursor_insertion); + free_cursor(&cursor_rotate); + + + /* (Just in case...) */ + + SDL_WM_GrabInput(SDL_GRAB_OFF); + + + /* Close up! */ + + TTF_Quit(); + SDL_Quit(); +} + + +void free_cursor(SDL_Cursor ** cursor) +{ + if (*cursor) + { + SDL_FreeCursor(*cursor); + *cursor = NULL; + } +} + + +void free_surface(SDL_Surface **surface_array) +{ + if (*surface_array) + { + SDL_FreeSurface(*surface_array); + *surface_array = NULL; + } +} + + +void free_surface_array(SDL_Surface *surface_array[], int count) +{ + int i; + + for (i = 0; i < count; ++i) + { + free_surface(&surface_array[i]); + } +} + + +/* Update screen where shape is/was: */ + +void update_shape(int cx, int ox1, int ox2, int cy, int oy1, int oy2, int fix) +{ + int rx, ry; + + rx = abs(ox1 - cx); + if (abs(ox2 - cx) > rx) + rx = abs(ox2 - cx); + + ry = abs(oy1 - cy); + if (abs(oy2 - cy) > ry) + ry = abs(oy2 - cy); + + if (fix) + { + if (ry > rx) + rx = ry; + else + ry = rx; + } + + SDL_UpdateRect(screen, max((cx - rx), 0) + 96, max(cy - ry, 0), + min((cx + rx) + 96, screen->w), + min(cy + ry, screen->h)); +} + + + +/* Draw a shape! */ + +void do_shape(int cx, int cy, int ox, int oy, int rotn, int use_brush) +{ + int side, angle_skip, init_ang, rx, ry, rmax, x1, y1, x2, y2, xp, yp, + old_brush, step; + float a1, a2, rotn_rad; +#ifdef SCAN_FILL + point_type pts[1024]; /* Careful! */ + fpoint_type fpts_orig[1024], fpts_new[1024]; + int i; + int num_pts; +#else + int xx; +#endif + + + /* Determine radius/shape of the shape to draw: */ + + old_brush = 0; + rx = ox - cx; + ry = oy - cy; + + + /* If the shape has a 1:1 ("locked") aspect ratio, use the larger radius: */ + + if (shape_locked[cur_shape]) + { + if (rx > ry) + ry = rx; + else + rx = ry; + } + + + /* Render a default brush: */ + + if (use_brush) + { + old_brush = cur_brush; + cur_brush = 0; /* Kludgy! */ + render_brush(); + } + + + /* Draw the shape: */ + + angle_skip = 360 / shape_sides[cur_shape]; + + init_ang = shape_init_ang[cur_shape]; + + +#ifdef SCAN_FILL + num_pts = 0; +#endif + + + step = 1; + + if (dont_do_xor && !use_brush) + { + /* If we're in light outline mode & not drawing the shape with the brush, + if it has lots of sides (like a circle), reduce the number of sides: */ + + if (shape_sides[cur_shape] > 5) + step = (shape_sides[cur_shape] / 8); + } + + + for (side = 0; side < shape_sides[cur_shape]; side = side + step) + { + a1 = (angle_skip * side + init_ang) * M_PI / 180; + a2 = (angle_skip * (side + 1) + init_ang) * M_PI / 180; + + x1 = (int) (cos(a1) * rx); + y1 = (int) (-sin(a1) * ry); + + x2 = (int) (cos(a2) * rx); + y2 = (int) (-sin(a2) * ry); + + + /* Rotate the line: */ + + if (rotn != 0) + { + rotn_rad = rotn * M_PI / 180; + + xp = x1 * cos(rotn_rad) - y1 * sin(rotn_rad); + yp = x1 * sin(rotn_rad) + y1 * cos(rotn_rad); + + x1 = xp; + y1 = yp; + + xp = x2 * cos(rotn_rad) - y2 * sin(rotn_rad); + yp = x2 * sin(rotn_rad) + y2 * cos(rotn_rad); + + x2 = xp; + y2 = yp; + } + + + /* Center the line around the center of the shape: */ + + x1 = x1 + cx; + y1 = y1 + cy; + x2 = x2 + cx; + y2 = y2 + cy; + + + /* Draw: */ + + if (!use_brush) + { + /* (XOR) */ + + line_xor(x1, y1, x2, y2); + } + else + { + /* Brush */ + + brush_draw(x1, y1, x2, y2, 0); + } + +#ifdef SCAN_FILL + fpts_orig[num_pts].x = (float) x2; + fpts_orig[num_pts].y = (float) y2; + num_pts++; +#endif + } + + + if (use_brush && shape_filled[cur_shape]) + { +#ifdef SCAN_FILL + /* FIXME: This is all broken!!! */ + + num_pts = clip_polygon(num_pts, fpts_orig, fpts_new); + + for (i = 0; i < num_pts; i++) + { + pts[i].x = (int) (fpts_new[i].x); + pts[i].y = (int) (fpts_new[i].y); + } + + scan_fill(num_pts, pts); +#else + /* FIXME: In the meantime, we'll do this lame radius-based fill: */ + + for (xx = abs(rx); xx >= 0; xx--) + { + for (side = 0; side < shape_sides[cur_shape]; side++) + { + a1 = (angle_skip * side + init_ang) * M_PI / 180; + a2 = (angle_skip * (side + 1) + init_ang) * M_PI / 180; + + x1 = (int) (cos(a1) * xx); + y1 = (int) (-sin(a1) * ry); + + x2 = (int) (cos(a2) * xx); + y2 = (int) (-sin(a2) * ry); + + + /* Rotate the line: */ + + if (rotn != 0) + { + rotn_rad = rotn * M_PI / 180; + + xp = x1 * cos(rotn_rad) - y1 * sin(rotn_rad); + yp = x1 * sin(rotn_rad) + y1 * cos(rotn_rad); + + x1 = xp; + y1 = yp; + + xp = x2 * cos(rotn_rad) - y2 * sin(rotn_rad); + yp = x2 * sin(rotn_rad) + y2 * cos(rotn_rad); + + x2 = xp; + y2 = yp; + } + + + /* Center the line around the center of the shape: */ + + x1 = x1 + cx; + y1 = y1 + cy; + x2 = x2 + cx; + y2 = y2 + cy; + + + /* Draw: */ + + brush_draw(x1, y1, x2, y2, 0); + } + + if (xx % 10 == 0) + update_canvas(0, 0, WINDOW_WIDTH - 96, (48 * 7) + 40 + HEIGHTOFFSET); + } +#endif + } + + + /* Update it! */ + + if (use_brush) + { + if (abs(rx) > abs(ry)) + rmax = abs(rx) + 20; + else + rmax = abs(ry) + 20; + + update_canvas(cx - rmax, cy - rmax, + cx + rmax, cy + rmax); + } + + + /* Return to normal brush (for paint brush and line tools): */ + + if (use_brush) + { + cur_brush = old_brush; + render_brush(); + } +} + + +/* What angle is the mouse away from the center of a shape? */ + +int rotation(int ctr_x, int ctr_y, int ox, int oy) +{ + return(atan2(oy - ctr_y, ox - ctr_x) * 180 / M_PI); +} + + +/* FIXME: Move elsewhere!!! */ + +#define PROMPT_SAVE_OVER_TXT gettext_noop("Save over the older version of this drawing?") +#define PROMPT_SAVE_OVER_YES gettext_noop("Yes") +#define PROMPT_SAVE_OVER_NO gettext_noop("No, save a new file") + + +/* Save the current image: */ + +int do_save(void) +{ + int res; + char * fname; + char tmp[1024]; + SDL_Surface * thm; +#ifndef SAVE_AS_BMP + FILE * fi; +#endif + + + if (promptless_save == SAVE_OVER_NO) + { + /* Never save over - _always_ save a new file! */ + + get_new_file_id(); + } + else if (promptless_save == SAVE_OVER_PROMPT) + { + /* Saving the same picture? */ + + if (file_id[0] != '\0') + { + /* We sure we want to do that? */ + + if (do_prompt(PROMPT_SAVE_OVER_TXT, + PROMPT_SAVE_OVER_YES, + PROMPT_SAVE_OVER_NO) == 0) + { + /* No - Let's save a new picture! */ + + get_new_file_id(); + } + } + else + { + /* Saving a new picture: */ + + get_new_file_id(); + } + } + else if (promptless_save == SAVE_OVER_ALWAYS) + { + if (file_id[0] == '\0') + get_new_file_id(); + } + + + /* Make sure we have a ~/.tuxpaint directory: */ + + show_progress_bar(); + do_setcursor(cursor_watch); + + fname = get_fname(""); + + res = mkdir(fname, 0755); + + if (res != 0 && errno != EEXIST) + { + fprintf(stderr, + "\nError: Can't create user data directory:\n" + "%s\n" + "The error that occurred was:\n" + "%s\n\n", fname, strerror(errno)); + + fprintf(stderr, + "Cannot save the any pictures! SORRY!\n\n"); + + draw_tux_text(TUX_OOPS, SDL_GetError(), 0, 0); + + free(fname); + return 0; + } + free(fname); + + show_progress_bar(); + + + /* Make sure we have a ~/.tuxpaint/saved directory: */ + + fname = get_fname("saved"); + + res = mkdir(fname, 0755); + + if (res != 0 && errno != EEXIST) + { + fprintf(stderr, + "\nError: Can't create user data directory:\n" + "%s\n" + "The error that occurred was:\n" + "%s\n\n", fname, strerror(errno)); + + fprintf(stderr, + "Cannot save the any pictures! SORRY!\n\n"); + + draw_tux_text(TUX_OOPS, SDL_GetError(), 0, 0); + + free(fname); + return 0; + } + free(fname); + + show_progress_bar(); + + + /* Save the file: */ + + snprintf(tmp, sizeof(tmp), "saved/%s%s", file_id, FNAME_EXTENSION); + fname = get_fname(tmp); + debug(fname); + +#ifdef SAVE_AS_BMP + if (SDL_SaveBMP(canvas, fname)) + { + fprintf(stderr, + "\nError: Couldn't save the current image!\n" + "%s\n" + "The Simple DirectMedia Layer error that occurred was:\n" + "%s\n\n", fname, SDL_GetError()); + + draw_tux_text(TUX_OOPS, SDL_GetError(), 0, 0); + + free(fname); + return 0; + } + else + { + /* Ta-Da! */ + + playsound(0, SND_SAVE, 1); + draw_tux_text(TUX_DEFAULT, tool_tips[TOOL_SAVE], 0, 0); + } +#else + fi = fopen(fname, "wb"); + if (fi == NULL) + { + fprintf(stderr, + "\nError: Couldn't save the current image!\n" + "%s\n" + "The system error that occurred was:\n" + "%s\n\n", + fname, strerror(errno)); + + draw_tux_text(TUX_OOPS, strerror(errno), 0, 0); + } + else + { + if (!do_png_save(fi, fname, canvas)) + { + free(fname); + return 0; + } + } +#endif + + free(fname); + + show_progress_bar(); + + + /* Save thumbnail, too: */ + + snprintf(tmp, sizeof(tmp), "saved/%s-t%s", file_id, FNAME_EXTENSION); + fname = get_fname(tmp); + debug(fname); + + thm = thumbnail(canvas, THUMB_W - 20, THUMB_H - 20, 0); + + fi = fopen(fname, "wb"); + if (fi == NULL) + { + fprintf(stderr, "\nError: Couldn't save thumbnail of image!\n" + "%s\n" + "The system error that occurred was:\n" + "%s\n\n", + fname, strerror(errno)); + } + else + { + do_png_save(fi, fname, thm); + } + SDL_FreeSurface(thm); + + free(fname); + + + /* All happy! */ + + playsound(0, SND_SAVE, 1); + draw_tux_text(TUX_DEFAULT, tool_tips[TOOL_SAVE], 0, 0); + do_setcursor(cursor_arrow); + + return 1; +} + + +/* Actually save the PNG data to the file stream: */ + +int do_png_save(FILE * fi, char * fname, SDL_Surface * surf) +{ + png_structp png_ptr; + png_infop info_ptr; + unsigned char ** png_rows; + Uint8 r, g, b; + int x, y; + + + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (png_ptr == NULL) + { + fclose(fi); + png_destroy_write_struct(&png_ptr, (png_infopp) NULL); + + fprintf(stderr, "\nError: Couldn't save the image!\n%s\n\n", fname); + draw_tux_text(TUX_OOPS, strerror(errno), 0, 0); + } + else + { + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) + { + fclose(fi); + png_destroy_write_struct(&png_ptr, (png_infopp) NULL); + + fprintf(stderr, "\nError: Couldn't save the image!\n%s\n\n", fname); + draw_tux_text(TUX_OOPS, strerror(errno), 0, 0); + } + else + { + if (setjmp(png_jmpbuf(png_ptr))) + { + fclose(fi); + png_destroy_write_struct(&png_ptr, (png_infopp) NULL); + + fprintf(stderr, "\nError: Couldn't save the image!\n%s\n\n", fname); + draw_tux_text(TUX_OOPS, strerror(errno), 0, 0); + + return 0; + } + else + { + png_init_io(png_ptr, fi); + + info_ptr->width = surf->w; + info_ptr->height = surf->h; + info_ptr->bit_depth = 8; + info_ptr->color_type = PNG_COLOR_TYPE_RGB; + info_ptr->interlace_type = 1; + info_ptr->valid = 0; + + png_write_info(png_ptr, info_ptr); + + + /* Save the picture: */ + + png_rows = malloc(sizeof(char *) * surf->h); + + for (y = 0; y < surf->h; y++) + { + png_rows[y] = malloc(sizeof(char) * 3 * surf->w); + + for (x = 0; x < surf->w; x++) + { + SDL_GetRGB(getpixel(surf, x, y), surf->format, &r, &g, &b); + + png_rows[y][x * 3 + 0] = r; + png_rows[y][x * 3 + 1] = g; + png_rows[y][x * 3 + 2] = b; + } + } + + png_write_image(png_ptr, png_rows); + + for (y = 0; y < surf->h; y++) + free(png_rows[y]); + + free(png_rows); + + + png_write_end(png_ptr, NULL); + + png_destroy_write_struct(&png_ptr, &info_ptr); + fclose(fi); + + return 1; + } + } + } + + return 0; +} + + +/* Pick a new file ID: */ + +void get_new_file_id(void) +{ + time_t t; + + t = time(NULL); + + strftime(file_id, sizeof(file_id), "%Y%m%d%H%M%S", localtime(&t)); + debug(file_id); + + + /* FIXME: Show thumbnail and prompt for title: */ +} + + +/* Handle quitting (and prompting to save, if necessary!) */ + +int do_quit(void) +{ + int done; + + done = do_prompt(PROMPT_QUIT_TXT, + PROMPT_QUIT_YES, + PROMPT_QUIT_NO); + + if (done && !been_saved) + { + if (do_prompt(PROMPT_QUIT_SAVE_TXT, + PROMPT_QUIT_SAVE_YES, + PROMPT_QUIT_SAVE_NO)) + { + if (do_save()) + { + do_prompt(tool_tips[TOOL_SAVE], + "Okay", + ""); + } + else + { + /* Couldn't save! Abort quit! */ + + done = 0; + } + } + } + + return(done); +} + + +/* Open a saved image: */ + +int do_open(int want_new_tool) +{ + SDL_Surface * img, * img1, * img2; + SDL_Surface * thumbs[MAX_FILES]; + DIR * d; + struct dirent * f; +#ifndef __BEOS__ + struct dirent fs[MAX_FILES]; +#endif + char * dirname, * rfname; + char * d_names[MAX_FILES], * d_exts[MAX_FILES]; + FILE * fi; + char fname[1024]; + int num_files, i, done, update_list, want_erase, cur, which, + num_files_in_dir, j; + SDL_Rect dest; + SDL_Event event; + SDLKey key; + Uint32 last_click_time; + int last_click_which, last_click_button; +#ifdef __BEOS__ + char * dot = NULL; +#endif + + + + do_setcursor(cursor_watch); + + + /* Open directory of images: */ + + dirname = get_fname("saved"); + + d = opendir(dirname); + if (d == NULL) + { + fprintf(stderr, + "\nWarning: There's no directory of saved images\n" + "%s\n" + "The system error that occurred was: %s\n", + dirname, strerror(errno)); + } + + + /* Read directory of images and build thumbnails: */ + + num_files = 0; + + if (d != NULL) + { + /* Gather list of files (for sorting): */ + +#ifdef __BEOS__ + num_files_in_dir = 0; + do + { + f = readdir(d); + + if ( f && (dot = strstr(f->d_name, FNAME_EXTENSION)) != NULL) + { + if( strstr(f->d_name, "-t") == NULL) + { + d_exts[num_files_in_dir] = strdup(dot); + *dot = 0; + d_names[num_files_in_dir] = strdup(f->d_name); + + + /* Try to load thumbnail first: */ + + sprintf(fname, "%s/%s-t%s", dirname, d_names[num_files], + FNAME_EXTENSION); + + img = IMG_Load(fname); + if (img != NULL) + { + show_progress_bar(); + thumbs[num_files] = SDL_DisplayFormat(img); + SDL_FreeSurface(img); + if (thumbs[num_files] == NULL) + { + fprintf(stderr, + "\nError: Couldn't create a thumbnail of " + "saved image!\n" + "%s\n", fname); + } + num_files++; + } + else + { + /* No thumbnail - load original: */ + + sprintf(fname, "%s/%s%s", dirname, d_names[num_files], + FNAME_EXTENSION); + img = IMG_Load(fname); + show_progress_bar(); + if (img != NULL) + { + /* Turn it into a thumbnail: */ + img1 = SDL_DisplayFormat(img); + img2 = thumbnail(img1, THUMB_W - 20, THUMB_H - 20, 0); + SDL_FreeSurface(img1); + show_progress_bar(); + thumbs[num_files] = SDL_DisplayFormat(img2); + SDL_FreeSurface(img2); + if (thumbs[num_files] == NULL) + { + fprintf(stderr, + "\nError: Couldn't create a thumbnail of " + "saved image!\n" + "%s\n", fname); + } + SDL_FreeSurface(img); + show_progress_bar(); + + + /* Let's save this thumbnail, so we don't have to create it + again next time 'Open' is called: */ + + debug("Saving thumbnail for this one!"); + sprintf(fname, "%s/%s-t%s", dirname, d_names[num_files], + FNAME_EXTENSION); + fi = fopen(fname, "wb"); + if (fi == NULL) + { + fprintf(stderr, + "\nError: Couldn't save thumbnail of " + "saved image!\n" + "%s\n" + "The error that occurred was:\n" + "%s\n\n", + fname, strerror(errno)); + } + else + { + do_png_save(fi, fname, thumbs[num_files]); + + /* NOTE: fi is closed there so no need to fclose it here */ + } + + show_progress_bar(); + num_files++; + } + } + + *dot = '.'; + num_files_in_dir++; + } + } + } + while (f != NULL && num_files_in_dir < MAX_FILES); + + closedir(d); + } + +#else + + num_files_in_dir = 0; + do + { + f = readdir(d); + + if (f != NULL) + { + memcpy(&(fs[num_files_in_dir]), f, sizeof(struct dirent)); + num_files_in_dir++; + } + } + while (f != NULL && num_files_in_dir < MAX_FILES); + + + closedir(d); + + + /* Sort: */ + + qsort(fs, num_files_in_dir, sizeof(struct dirent), + (int(*)(const void *, const void *))compare_dirents); + + + /* Read directory of images and build thumbnails: */ + + for (j = 0; j < num_files_in_dir; j++) + { + f = &(fs[j]); + + show_progress_bar(); + + if (f != NULL) + { + debug(f->d_name); + + if (strstr(f->d_name, "-t") == NULL) + { + if (strstr(f->d_name, FNAME_EXTENSION) != NULL +#ifndef SAVE_AS_BMP + /* Support legacy BMP files for load: */ + + || strstr(f->d_name, ".bmp") != NULL +#endif + ) + { + strcpy(fname, f->d_name); + if (strstr(fname, FNAME_EXTENSION) != NULL) + { + strcpy(strstr(fname, FNAME_EXTENSION), ""); + d_exts[num_files] = strdup(FNAME_EXTENSION); + } + +#ifndef SAVE_AS_BMP + if (strstr(fname, ".bmp") != NULL) + { + strcpy(strstr(fname, ".bmp"), ""); + d_exts[num_files] = strdup(".bmp"); + } +#endif + + d_names[num_files] = strdup(fname); + + + /* Try to load thumbnail first: */ + + snprintf(fname, sizeof(fname), "%s/%s-t.png", dirname, + d_names[num_files]); + debug(fname); + img = IMG_Load(fname); + + if (img != NULL) + { + show_progress_bar(); + + thumbs[num_files] = SDL_DisplayFormat(img); + SDL_FreeSurface(img); + + if (thumbs[num_files] == NULL) + { + fprintf(stderr, + "\nError: Couldn't create a thumbnail of " + "saved image!\n" + "%s\n", fname); + } + + num_files++; + } + else + { + /* No thumbnail - load original: */ + + snprintf(fname, sizeof(fname), "%s/%s", + dirname, f->d_name); + debug(fname); +#ifdef SAVE_AS_BMP + img = SDL_LoadBMP(fname); +#else + img = IMG_Load(fname); +#endif + + show_progress_bar(); + + if (img == NULL) + { + fprintf(stderr, + "\nWarning: I can't open one of the " + "saved files!\n" + "%s\n" + "The Simple DirectMedia Layer error that " + "occurred was:\n" + "%s\n\n", + fname, SDL_GetError()); + + free(d_names[num_files]); + free(d_exts[num_files]); + } + else + { + /* Turn it into a thumbnail: */ + + img1 = SDL_DisplayFormat(img); + img2 = thumbnail(img1, THUMB_W - 20, THUMB_H - 20, 0); + SDL_FreeSurface(img1); + + show_progress_bar(); + + thumbs[num_files] = SDL_DisplayFormat(img2); + SDL_FreeSurface(img2); + if (thumbs[num_files] == NULL) + { + fprintf(stderr, + "\nError: Couldn't create a thumbnail of " + "saved image!\n" + "%s\n", fname); + } + + SDL_FreeSurface(img); + + show_progress_bar(); + + + /* Let's save this thumbnail, so we don't have to + create it again next time 'Open' is called: */ + + debug("Saving thumbnail for this one!"); + + snprintf(fname, sizeof(fname), "%s/%s-t.png", dirname, + d_names[num_files]); + + fi = fopen(fname, "wb"); + if (fi == NULL) + { + fprintf(stderr, + "\nError: Couldn't save thumbnail of " + "saved image!\n" + "%s\n" + "The error that occurred was:\n" + "%s\n\n", + fname, strerror(errno)); + } + else + { + do_png_save(fi, fname, thumbs[num_files]); + } + + show_progress_bar(); + + + num_files++; + } + } + } + } + else + { + /* It was a thumbnail file ("...-t.png") */ + } + } + } + } + +#endif + + free(dirname); + + +#ifdef DEBUG + printf("%d saved files were found!\n", num_files); +#endif + + if (num_files == 0) + { + do_prompt(PROMPT_OPEN_NOFILES_TXT, PROMPT_OPEN_NOFILES_YES, ""); + } + else + { + /* Let user choose an image: */ + + draw_tux_text(TUX_BORED, + gettext_noop("Choose the picture you want, " + "then click 'Open'"), 0, 0); + + cur = 0; + update_list = 1; + want_erase = 0; + + done = 0; + which = 0; + + last_click_which = -1; + last_click_time = 0; + last_click_button = -1; + + + do_setcursor(cursor_arrow); + + + do + { + /* Update screen: */ + + if (update_list) + { + /* Erase: */ + + dest.x = 96; + dest.y = 0; + dest.w = WINDOW_WIDTH - 96 - 96; + dest.h = 48 * 7 + 40 + HEIGHTOFFSET; + + SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, + 255, 255, 255)); + + + /* Draw icons: */ + + for (i = cur; i < cur + 16 && i < num_files; i++) + { + /* Draw cursor: */ + + dest.x = THUMB_W * ((i - cur) % 4) + 96; + dest.y = THUMB_H * ((i - cur) / 4) + 24; + + if (i == which) + { + SDL_BlitSurface(img_cursor_down, NULL, screen, &dest); + debug(d_names[i]); + } + else + SDL_BlitSurface(img_cursor_up, NULL, screen, &dest); + + + + dest.x = THUMB_W * ((i - cur) % 4) + 96 + 10 + + (THUMB_W - 20 - thumbs[i]->w) / 2; + dest.y = THUMB_H * ((i - cur) / 4) + 24 + 10 + + (THUMB_H - 20 - thumbs[i]->h) / 2; + + if (thumbs[i] != NULL) + SDL_BlitSurface(thumbs[i], NULL, screen, &dest); + } + + + /* Draw arrows: */ + + dest.x = (WINDOW_WIDTH - img_scroll_up->w) / 2; + dest.y = 0; + + if (cur > 0) + SDL_BlitSurface(img_scroll_up, NULL, screen, &dest); + else + SDL_BlitSurface(img_scroll_up_off, NULL, screen, &dest); + + dest.x = (WINDOW_WIDTH - img_scroll_up->w) / 2; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - 48; + + if (cur < num_files - 16) + SDL_BlitSurface(img_scroll_down, NULL, screen, &dest); + else + SDL_BlitSurface(img_scroll_down_off, NULL, screen, &dest); + + + /* "Open" button: */ + + dest.x = 96; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - 48; + SDL_BlitSurface(img_open, NULL, screen, &dest); + + dest.x = 96 + (48 - img_openlabels_open->w) / 2; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - img_openlabels_open->h; + SDL_BlitSurface(img_openlabels_open, NULL, screen, &dest); + + + /* "Back" button: */ + + dest.x = WINDOW_WIDTH - 96 - 48; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - 48; + SDL_BlitSurface(img_back, NULL, screen, &dest); + + dest.x = WINDOW_WIDTH - 96 - 48 + (48 - img_openlabels_back->w) / 2; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - img_openlabels_back->h; + SDL_BlitSurface(img_openlabels_back, NULL, screen, &dest); + + + /* "Erase" button: */ + + dest.x = WINDOW_WIDTH - 96 - 48 - 48; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - 48; + SDL_BlitSurface(img_erase, NULL, screen, &dest); + + dest.x = WINDOW_WIDTH - 96 - 48 - 48 + (48 - img_openlabels_erase->w) / 2; + dest.y = (48 * 7 + 40 + HEIGHTOFFSET) - img_openlabels_erase->h; + SDL_BlitSurface(img_openlabels_erase, NULL, screen, &dest); + + + SDL_Flip(screen); + + update_list = 0; + } + + + SDL_WaitEvent(&event); + + if (event.type == SDL_QUIT) + { + done = 1; + + /* FIXME: Handle SDL_Quit better */ + } + else if (event.type == SDL_ACTIVEEVENT) + { + handle_active(&event); + } + else if (event.type == SDL_KEYUP) + { + key = event.key.keysym.sym; + + handle_keymouse(key, SDL_KEYUP); + } + else if (event.type == SDL_KEYDOWN) + { + key = event.key.keysym.sym; + + handle_keymouse(key, SDL_KEYDOWN); + + if (key == SDLK_LEFT) + { + if (which > 0) + { + which--; + + if (which < cur) + cur = cur - 4; + + update_list = 1; + } + } + else if (key == SDLK_RIGHT) + { + if (which < num_files - 1) + { + which++; + + if (which >= cur + 16) + cur = cur + 4; + + update_list = 1; + } + } + else if (key == SDLK_UP) + { + if (which >= 0) + { + which = which - 4; + + if (which < 0) + which = 0; + + if (which < cur) + cur = cur - 4; + + update_list = 1; + } + } + else if (key == SDLK_DOWN) + { + if (which < num_files) + { + which = which + 4; + + if (which >= num_files) + which = num_files - 1; + + if (which >= cur + 16) + cur = cur + 4; + + update_list = 1; + } + } + else if (key == SDLK_RETURN || key == SDLK_SPACE) + { + /* Open */ + + done = 1; + playsound(1, SND_CLICK, 1); + } + else if (key == SDLK_ESCAPE) + { + /* Go back: */ + + which = -1; + done = 1; + playsound(1, SND_CLICK, 1); + } + else if (key == SDLK_d && + (event.key.keysym.mod & KMOD_CTRL || + event.key.keysym.mod & KMOD_LCTRL || + event.key.keysym.mod & KMOD_RCTRL)) + { + /* Delete! */ + + want_erase = 1; + } + } + else if (event.type == SDL_MOUSEBUTTONDOWN && + event.button.button >= 1 && + event.button.button <= 3) + { + if (event.button.x >= 96 && event.button.x < WINDOW_WIDTH - 96 && + event.button.y >= 24 && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET - 48)) + { + /* Picked an icon! */ + + which = ((event.button.x - 96) / (THUMB_W) + + (((event.button.y - 24) / THUMB_H) * 4)) + cur; + + if (which < num_files) + { + playsound(1, SND_BLEEP, 1); + update_list = 1; + + + if (which == last_click_which && + SDL_GetTicks() < last_click_time + 1000 && + event.button.button == last_click_button) + { + /* Double-click! */ + + done = 1; + } + + last_click_which = which; + last_click_time = SDL_GetTicks(); + last_click_button = event.button.button; + } + } + else if (event.button.x >= (WINDOW_WIDTH - img_scroll_up->w) / 2 && + event.button.x <= (WINDOW_WIDTH + img_scroll_up->w) / 2) + { + if (event.button.y < 24) + { + /* Up scroll button: */ + + if (cur > 0) + { + cur = cur - 4; + update_list = 1; + playsound(1, SND_SCROLL, 1); + + if (cur == 0) + do_setcursor(cursor_arrow); + } + + if (which > cur + 16) + which = which - 4; + } + else if (event.button.y >= (48 * 7 + 40 + HEIGHTOFFSET - 48) && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET - 24)) + { + /* Down scroll button: */ + + if (cur < num_files - 16) + { + cur = cur + 4; + update_list = 1; + playsound(1, SND_SCROLL, 1); + + if (cur >= num_files - 16) + do_setcursor(cursor_arrow); + } + + if (which < cur) + which = which + 4; + } + } + else if (event.button.x >= 96 && event.button.x < 96 + 48 && + event.button.y >= (48 * 7 + 40 + HEIGHTOFFSET) - 48 && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET)) + { + /* Open */ + + done = 1; + playsound(1, SND_CLICK, 1); + } + else if (event.button.x >= (WINDOW_WIDTH - 96 - 48) && + event.button.x < (WINDOW_WIDTH - 96) && + event.button.y >= (48 * 7 + 40 + HEIGHTOFFSET) - 48 && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET)) + { + /* Back */ + + which = -1; + done = 1; + playsound(1, SND_CLICK, 1); + } + else if (event.button.x >= (WINDOW_WIDTH - 96 - 48 - 48) && + event.button.x < (WINDOW_WIDTH - 48 - 96) && + event.button.y >= (48 * 7 + 40 + HEIGHTOFFSET) - 48 && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET)) + { + /* Erase */ + + want_erase = 1; + } + } + else if (event.type == SDL_MOUSEMOTION) + { + /* Deal with mouse pointer shape! */ + + if (event.button.y < 24 && + event.button.x >= (WINDOW_WIDTH - img_scroll_up->w) / 2 && + event.button.x <= (WINDOW_WIDTH + img_scroll_up->w) / 2 && + cur > 0) + { + /* Scroll up button: */ + + do_setcursor(cursor_up); + } + else if (event.button.y >= (48 * 7 + 40 + HEIGHTOFFSET - 48) && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET - 24) && + event.button.x >= (WINDOW_WIDTH - img_scroll_up->w) / 2 && + event.button.x <= (WINDOW_WIDTH + img_scroll_up->w) / 2 && + cur < num_files - 16) + { + /* Scroll down button: */ + + do_setcursor(cursor_down); + } + else if (((event.button.x >= 96 && event.button.x < 96 + 48) || + (event.button.x >= (WINDOW_WIDTH - 96 - 48) && + event.button.x < (WINDOW_WIDTH - 96)) || + (event.button.x >= (WINDOW_WIDTH - 96 - 48 - 48) && + event.button.x < (WINDOW_WIDTH - 48 - 96))) && + event.button.y >= (48 * 7 + 40 + HEIGHTOFFSET) - 48 && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET)) + { + /* One of the command buttons: */ + + do_setcursor(cursor_hand); + } + else if (event.button.x >= 96 && event.button.x < WINDOW_WIDTH - 96 && + event.button.y > 24 && + event.button.y < (48 * 7 + 40 + HEIGHTOFFSET) - 48 && + ((((event.button.x - 96) / (THUMB_W) + + (((event.button.y - 24) / THUMB_H) * 4)) + + cur) < num_files)) + { + /* One of the thumbnails: */ + + do_setcursor(cursor_hand); + } + else + { + /* Unclickable... */ + + do_setcursor(cursor_arrow); + } + } + + + if (want_erase) + { + want_erase = 0; + + if (do_prompt(PROMPT_ERASE_TXT, + PROMPT_ERASE_YES, PROMPT_ERASE_NO)) + { + snprintf(fname, sizeof(fname), "saved/%s%s", + d_names[which], d_exts[which]); + + rfname = get_fname(fname); + debug(rfname); + + if (unlink(rfname) == 0) + { + thumbs[which] = NULL; + update_list = 1; + + + /* Delete the thumbnail, too: */ + + snprintf(fname, sizeof(fname), "saved/%s-t.png", + d_names[which]); + + free(rfname); + rfname = get_fname(fname); + debug(rfname); + + unlink(rfname); + + + /* Move all other files up a notch: */ + + free(d_names[which]); + free(d_exts[which]); + free_surface(&thumbs[which]); + + for (i = which; i < num_files - 1; i++) + { + d_names[i] = d_names[i + 1]; + d_exts[i] = d_exts[i + 1]; + thumbs[i] = thumbs[i + 1]; + } + + num_files--; + + + /* Make sure the cursor doesn't go off the end! */ + + if (which >= num_files) + which = num_files - 1; + + + /* No files to open now? */ + + if (which < 0) + { + do_prompt(PROMPT_OPEN_NOFILES_TXT, + PROMPT_OPEN_NOFILES_YES, ""); + done = 1; + } + } + else + { + perror(rfname); + + do_prompt("CAN'T", "OK", ""); + update_list = 1; + } + + free(rfname); + } + else + { + update_list = 1; + } + } + + } + while (!done); + + + /* Load the chosen picture: */ + + if (which != -1) + { + /* Save old one first? */ + + if (!been_saved) + { + if (do_prompt(PROMPT_OPEN_SAVE_TXT, + PROMPT_OPEN_SAVE_YES, + PROMPT_OPEN_SAVE_NO)) + { + do_save(); + } + } + + snprintf(fname, sizeof(fname), "saved/%s%s", + d_names[which], d_exts[which]); + + rfname = get_fname(fname); + +#ifdef SAVE_AS_BMP + img = SDL_LoadBMP(rfname); +#else + img = IMG_Load(rfname); +#endif + + if (img == NULL) + { + fprintf(stderr, + "\nWarning: Couldn't load the saved image!\n" + "%s\n" + "The Simple DirectMedia Layer error that occurred " + "was:\n" + "%s\n\n", fname, SDL_GetError()); + + do_prompt(PROMPT_OPEN_UNOPENABLE_TXT, + PROMPT_OPEN_UNOPENABLE_YES, ""); + } + else + { + SDL_FillRect(canvas, NULL, + SDL_MapRGB(canvas->format, 255, 255, 255)); + + /* FIXME: What to do when in 640x480 mode, and loading an + 800x600 image!? */ + + dest.x = (canvas->w - img->w) / 2; + dest.y = (canvas->h - img->h) / 2; + + SDL_BlitSurface(img, NULL, canvas, &dest); + SDL_FreeSurface(img); + + cur_undo = 0; + oldest_undo = 0; + newest_undo = 0; + + been_saved = 1; + reset_avail_tools(); + tool_avail[TOOL_NEW] = 1; + + tool_avail_bak[TOOL_UNDO] = 0; + tool_avail_bak[TOOL_REDO] = 0; + + strcpy(file_id, d_names[which]); + + want_new_tool = 1; + } + + free(rfname); + } + + + update_canvas(0, 0, WINDOW_WIDTH - 96 - 96, 48 * 7 + 40 + HEIGHTOFFSET); + } + + + /* Clean up: */ + + free_surface_array(thumbs, num_files); + + for (i = 0; i < num_files; i++) + { + free(d_names[i]); + free(d_exts[i]); + } + + return(want_new_tool); +} + + +/* -------------- Poly Fill Stuff -------------- */ + +void insert_edge(edge * list, edge * edg) +{ + edge * p, * q; + + debug("insert_edge()"); + + q = list; + + p = q->next; + while (p != NULL) + { + if (edg->x_intersect < p->x_intersect) + { + p = NULL; + } + else + { + q = p; + p = p->next; + } + } + + edg->next = q->next; + q->next = edg; +} + + +int y_next(int k, int cnt, point_type * pts) +{ + int j; + + debug("y_next()"); + + if ((k + 1) > (cnt - 1)) + j = 0; + else + j = k + 1; + + while (pts[k].y == pts[j].y) + { + if ((j + 1) > (cnt - 1)) + j = 0; + else + j++; + } + + return (pts[j].y); +} + + +void make_edge_rec(point_type lower, point_type upper, + int y_comp, edge * edg, edge * edges[]) +{ + debug("make_edge_rec()"); + + edg->dx_per_scan = (float)((upper.x - lower.x) / (upper.y - lower.y)); + edg->x_intersect = lower.x; + + if (upper.y < y_comp) + edg->y_upper = upper.y - 1; + else + edg->y_upper = upper.y; + + insert_edge(edges[lower.y], edg); +} + + +void build_edge_list(int cnt, point_type * pts, edge * edges[]) +{ + edge * edg; + point_type v1, v2; + int i, y_prev; + + debug("build_edge_list()"); + + y_prev = pts[cnt - 2].y; + + v1.x = pts[cnt - 1].x; + v1.y = pts[cnt - 1].y; + + for (i = 0; i < cnt; i++) + { + v2 = pts[i]; + if (v1.y != v2.y) + { + edg = (edge *) malloc(sizeof(edge)); + if (v1.y < v2.y) + make_edge_rec(v1, v2, y_next(i, cnt, pts), edg, edges); + else + make_edge_rec(v2, v1, y_prev, edg, edges); + } + + y_prev = v1.y; + v1 = v2; + } +} + + +void build_active_list(int scan, edge * active, edge * edges[]) +{ + edge * p, * q; + + debug("build_active_list()"); + + p = edges[scan]->next; + while (p != NULL) + { + q = p->next; + insert_edge(active, p); + p = q; + } +} + + +void fill_scan(int scan, edge * active) +{ + edge * p1, * p2; + int i; + Uint32 color; + + + debug("fill_scan()"); + + color = SDL_MapRGB(canvas->format, + color_hexes[cur_color][0] / 2, + color_hexes[cur_color][1] / 2, + color_hexes[cur_color][2] / 2); + + SDL_LockSurface(canvas); + + p1 = active->next; + while (p1 != NULL) + { + p2 = p1->next; + + for (i = p1->x_intersect; i < p2->x_intersect; i++) + { + putpixel(canvas, i, scan, color); + } + + p1 = p2->next; + } + + SDL_UnlockSurface(canvas); +} + + +void delete_after(edge * q) +{ + edge * p; + + debug("delete_after()"); + + p = q->next; + q->next = p->next; + free(p); +} + + +void update_active_list(int scan, edge * active) +{ + edge * q, * p; + + debug("update_active_list()"); + + q = active; + p = active->next; + + while (p != NULL) + { + if (scan >= p->y_upper) + { + p = p->next; + delete_after(q); + } + else + { + p->x_intersect = p->x_intersect + p->dx_per_scan; + q = p; + p = p->next; + } + } +} + + +void resort_active_list(edge * active) +{ + edge * q, * p; + + debug("resort_active_list()"); + + p = active->next; + + active->next = NULL; + + while (p != NULL) + { + q = p->next; + insert_edge(active, p); + p = q; + } +} + + +void scan_fill(int cnt, point_type * pts) +{ + edge * edges[48 * 7 + 40 + HEIGHTOFFSET + 5], * active; + int i, scan; + + debug("scan_fill()"); + + + /* Create empty edges: */ + + for (i = 0; i < 48 * 7 + 40 + HEIGHTOFFSET + 5; i++) + { + edges[i] = (edge *) malloc(sizeof(edge)); + edges[i]->next = NULL; + } + + + /* Build edge list: */ + + build_edge_list(cnt, pts, edges); + + + /* Set active edge: */ + + active = (edge *) malloc(sizeof(edge)); + active->next = NULL; + + + /* Scan! */ + + for (scan = 0; scan < 48 * 7 + 40 + HEIGHTOFFSET; scan++) + { + build_active_list(scan, active, edges); + + if (active->next) + { + fill_scan(scan, active); + + update_canvas(0, scan, WINDOW_WIDTH - 96, scan); + SDL_Flip(screen); + SDL_Delay(10); + + update_active_list(scan, active); + resort_active_list(active); + } + } + + + /* Free edge list: */ + + debug("Freeing..."); + + for (i = 0; i < 48 * 7 + 40 + HEIGHTOFFSET; i++) + { + free(edges[i]); + } +} + + +/* ------------- Poly clipping stuff: -------------- */ + +int inside(fpoint_type p, an_edge b) +{ + if (b == Left) + { + if (p.x < 0) + return 0; + } + else if (b == Right) + { + if (p.x >= WINDOW_WIDTH - 96) + return 0; + } + else if (b == Bottom) + { + if (p.y >= 48 * 7 + 40 + HEIGHTOFFSET) + return 0; + } + else if (b == Top) + { + if (p.y < 0) + return 0; + } + + return 1; +} + + +int cross(fpoint_type p1, fpoint_type p2, an_edge b) +{ + if (inside(p1, b) == inside(p2, b)) + return 0; + else + return 1; +} + + +fpoint_type intersect(fpoint_type p1, fpoint_type p2, an_edge b) +{ + fpoint_type ipt; + float m; + + if (p1.x != p2.x) + m = (p1.y - p2.y) / (p1.x - p2.x); + else + m = 1.0; + + if (b == Left) + { + ipt.x = 0; + ipt.y = p2.y + (-p2.x) * m; + } + else if (b == Right) + { + ipt.x = WINDOW_WIDTH - 96 - 1; + ipt.y = p2.y + ((WINDOW_WIDTH - 96 - 1) - p2.x) * m; + } + else if (b == Top) + { + ipt.y = 0; + if (p1.x != p2.x) + ipt.x = p2.x + (-p2.y) / m; + else + ipt.x = p2.x; + } + else if (b == Bottom) + { + ipt.y = (48 * 7 + 40 + HEIGHTOFFSET) - 1; + if (p1.x != p2.x) + ipt.x = p2.x + (((48 * 7 + 40 + HEIGHTOFFSET) - 1) - p2.y) / m; + else + ipt.x = p2.x; + } + + return(ipt); +} + + +void clip_point(fpoint_type p, an_edge b, fpoint_type * pout, int * cnt, + fpoint_type * first[], fpoint_type * s) +{ + fpoint_type ipt; + + if (first[b] == NULL) + { + first[b] = &p; + } + else + { + if (cross(p, s[b], b)) + { + ipt = intersect(p, s[b], b); + + if (b < Top) /* Should be NUM_EDGES? */ + { + clip_point(ipt, b + 1, pout, cnt, first, s); + } + else + { + pout[*cnt] = ipt; + (*cnt)++; + } + } + } + + s[b] = p; + + + if (inside(p, b)) + { + if (b < Top) /* Should be NUM_EDGES? */ + { + clip_point(p, b + 1, pout, cnt, first, s); + } + else + { + pout[*cnt] = p; + (*cnt)++; + } + } +} + + +void close_clip(fpoint_type * pout, int * cnt, fpoint_type * first[], + fpoint_type * s) +{ + fpoint_type i; + an_edge b; + + for (b = Left; b <= Top; b++) + { + if (cross(s[b], *first[b], b)) + { + i = intersect(s[b], *first[b], b); + if (b < Top) + { + clip_point(i, b + 1, pout, cnt, first, s); + } + else + { + pout[*cnt] = i; + (*cnt)++; + } + } + } +} + + +int clip_polygon(int n, fpoint_type * pin, fpoint_type * pout) +{ + fpoint_type * first[NUM_EDGES] = {0, 0, 0, 0}; + fpoint_type s[NUM_EDGES]; + int i, cnt; + + cnt = 0; + + for (i = 0; i < n; i++) + { + clip_point(pin[i], Left, pout, &cnt, first, s); + } + + close_clip(pout, &cnt, first, s); + + return(cnt); +} + + +/* Let sound effects (e.g., "Save" sfx) play out before quitting... */ + +void wait_for_sfx(void) +{ +#ifndef NOSOUND + if (use_sound) + { + while (Mix_Playing(-1)) + SDL_Delay(10); + } +#endif +} + + +/* Determine the current language/locale, and set the language string: */ + +int current_language(void) +{ + char * loc; +#ifdef WIN32 + char str[128]; +#endif + int lang, i; + + + /* Default... */ + + lang = LANG_EN; + + +#ifndef WIN32 + loc = setlocale(LC_MESSAGES, NULL); + if (loc != NULL) + { + if (strstr(loc, "LC_MESSAGES") != NULL) + loc = getenv("LANG"); + } +#else + loc = getenv("LANG"); + if (!loc) + { + loc = g_win32_getlocale(); + if (loc) + { + snprintf(str, sizeof(str), "LANG=%s", loc); + putenv(str); + } + } +#endif + + debug(loc); + + if (loc != NULL) + { + /* Which, if any, of the locales is it? */ + + for (i = 0; i < NUM_LANGS; i++) + { + /* Case-insensitive */ + /* (so that, e.g. "pt_BR" is recognized as "pt_br") */ + + if (strncasecmp(loc, lang_prefixes[i], strlen(lang_prefixes[i])) == 0) + { + lang = i; + } + } + } + +#ifdef DEBUG + printf("lang=%d\n\n", lang); +#endif + + return lang; +} + + +/* XOR-based outline of rubber stamp shapes + (unused if LOW_QUALITY_STAMP_OUTLINE is #defined) */ + +void stamp_xor(int x, int y) +{ + int xx, yy; + Uint8 r, g, b, a, olda, abovea; + + SDL_LockSurface(img_stamps[cur_stamp]); + SDL_LockSurface(screen); + + for (yy = (y % 2) + 1; yy < img_stamps[cur_stamp]->h; yy = yy + 2) + { + olda = 0; + + for (xx = (x % 2); xx < img_stamps[cur_stamp]->w; xx = xx + 2) + { + SDL_GetRGBA(getpixel(img_stamps[cur_stamp], xx, yy), + img_stamps[cur_stamp]->format, &r, &g, &b, &a); + + SDL_GetRGBA(getpixel(img_stamps[cur_stamp], xx, yy - 1), + img_stamps[cur_stamp]->format, &r, &g, &b, &abovea); + + if ((a < 128 && olda >= 128) || + (a >= 128 && olda < 128) || + (a < 128 && abovea >= 128) || + (a >= 128 && abovea < 128)) + { + clipped_putpixel(screen, x + 96 + xx, y + yy, + 0xFFFFFFFF - getpixel(screen, x + 96 + xx, y + yy)); + } + + olda = a; + } + } + + SDL_UnlockSurface(screen); + SDL_UnlockSurface(img_stamps[cur_stamp]); +} + + +/* Returns whether a particular stamp can be colored: */ + +int stamp_colorable(int stamp) +{ + if (inf_stamps[stamp] != NULL) + { + return inf_stamps[stamp]->colorable; + } + else + { + return 0; + } +} + + +/* Returns whether a particular stamp can be tinted: */ + +int stamp_tintable(int stamp) +{ + if (inf_stamps[stamp] != NULL) + { + return inf_stamps[stamp]->tintable; + } + else + { + return 0; + } +} + + + +void rgbtohsv(Uint8 r8, Uint8 g8, Uint8 b8, float *h, float *s, float *v) +{ + float rgb_min, rgb_max, delta, r, g, b; + + r = (r8 / 255.0); + g = (g8 / 255.0); + b = (b8 / 255.0); + + rgb_min = min(r, min(g, b)); + rgb_max = max(r, max(g, b)); + *v = rgb_max; + + delta = rgb_max - rgb_min; + + if (rgb_max == 0) + { + /* Black */ + + *s = 0; + *h = -1; + } + else + { + *s = delta / rgb_max; + + if (r == rgb_max) + *h = (g - b) / delta; + else if (g == rgb_max) + *h = 2 + (b - r) / delta; /* between cyan & yellow */ + else + *h = 4 + (r - g) / delta; /* between magenta & cyan */ + + *h = (*h * 60); /* degrees */ + + if (*h < 0) + *h = (*h + 360); + } +} + + +void hsvtorgb(float h, float s, float v, Uint8 *r8, Uint8 *g8, Uint8 *b8) +{ + int i; + float f, p, q, t, r, g, b; + + if (s == 0) + { + /* Achromatic (grey) */ + + r = v; + g = v; + b = v; + } + else + { + h = h / 60; + i = floor(h); + f = h - i; + p = v * (1 - s); + q = v * (1 - s * f); + t = v * (1 - s * (1 - f)); + + if (i == 0) + { + r = v; + g = t; + b = p; + } + else if (i == 1) + { + r = q; + g = v; + b = p; + } + else if (i == 2) + { + r = p; + g = v; + b = t; + } + else if (i == 3) + { + r = p; + g = q; + b = v; + } + else if (i == 4) + { + r = t; + g = p; + b = v; + } + else + { + r = v; + g = p; + b = q; + } + } + + + *r8 = (Uint8) (r * 255); + *g8 = (Uint8) (g * 255); + *b8 = (Uint8) (b * 255); +} + + +void show_progress_bar(void) +{ + SDL_Rect dest, src; + int x; + + + for (x = 0; x < WINDOW_WIDTH; x = x + 65) + { + src.x = 65 - (prog_bar_ctr % 65); + src.y = 0; + src.w = 65; + src.h = 24; + + dest.x = x; + dest.y = WINDOW_HEIGHT - 24; + + SDL_BlitSurface(img_progress, &src, screen, &dest); + } + + prog_bar_ctr++; + + SDL_UpdateRect(screen, 0, WINDOW_HEIGHT - 24, WINDOW_WIDTH, 24); +} + + +void do_print(void) +{ +#if !defined(WIN32) && !defined(__BEOS__) + /* Linux, Unix, etc. */ + + FILE * pi; + + pi = popen(printcommand, "w"); + + if (pi == NULL) + { + perror(printcommand); + } + else + { + if (do_png_save(pi, printcommand, canvas)) + do_prompt(PROMPT_PRINT_TXT, PROMPT_PRINT_YES, ""); + } +#else +#ifdef WIN32 + /* Win32 */ + + char f[512]; + + int show = (SDL_GetModState() & KMOD_ALT) && !fullscreen; + + sprintf(f, sizeof(f), "%s/%s", savedir, "print.cfg"); + SurfacePrint(canvas, use_print_config?f:NULL, show); +#else + /* BeOS */ + + SurfacePrint(canvas); +#endif +#endif +} + + +void do_render_cur_text(int do_blit) +{ + int w, h; + SDL_Color color = {color_hexes[cur_color][0], + color_hexes[cur_color][1], + color_hexes[cur_color][2], + 0}; + SDL_Surface * tmp_surf; + SDL_Rect dest, src; + char * str; + + + /* Keep cursor on the screen! */ + + if (cursor_y > ((48 * 7 + 40 + HEIGHTOFFSET) - + TTF_FontHeight(fonts[cur_font]))) + { + cursor_y = ((48 * 7 + 40 + HEIGHTOFFSET) - + TTF_FontHeight(fonts[cur_font])); + } + + + /* Render the text: */ + + if (texttool_len > 0) + { + str = uppercase(texttool_str); + + tmp_surf = RENDER_TEXT(fonts[cur_font], str, color); + + w = tmp_surf->w; + h = tmp_surf->h; + + cursor_textwidth = w; + + free(str); + } + else + { + /* FIXME: Do something different! */ + + update_canvas(0, 0, WINDOW_WIDTH - 96, (48 * 7) + 40 + HEIGHTOFFSET); + cursor_textwidth = 0; + return; + } + + + if (!do_blit) + { + /* FIXME: Only delete what's changed! */ + + update_canvas(0, 0, WINDOW_WIDTH - 96, (48 * 7) + 40 + HEIGHTOFFSET); + + + /* Draw outline around text: */ + + dest.x = cursor_x - 2 + 96; + dest.y = cursor_y - 2; + dest.w = w + 4; + dest.h = h + 4; + + if (dest.x + dest.w > WINDOW_WIDTH - 96) + dest.w = WINDOW_WIDTH - 96 - dest.x; + if (dest.y + dest.h > (48 * 7 + 40 + HEIGHTOFFSET)) + dest.h = (48 * 7 + 40 + HEIGHTOFFSET) - dest.y; + + SDL_FillRect(screen, &dest, + SDL_MapRGB(canvas->format, 0, 0, 0)); + + + /* FIXME: This would be nice if it were alpha-blended: */ + + dest.x = cursor_x + 96; + dest.y = cursor_y; + dest.w = w; + dest.h = h; + + if (dest.x + dest.w > WINDOW_WIDTH - 96) + dest.w = WINDOW_WIDTH - 96 - dest.x; + if (dest.y + dest.h > (48 * 7 + 40 + HEIGHTOFFSET)) + dest.h = (48 * 7 + 40 + HEIGHTOFFSET) - dest.y; + + if ((color_hexes[cur_color][0] + + color_hexes[cur_color][1] + + color_hexes[cur_color][2]) >= 384) + { + /* Grey background if blit is white!... */ + + SDL_FillRect(screen, &dest, + SDL_MapRGB(canvas->format, 64, 64, 64)); + } + else + { + /* White background, normally... */ + + SDL_FillRect(screen, &dest, + SDL_MapRGB(canvas->format, 255, 255, 255)); + } + } + + + /* Draw the text itself! */ + + if (tmp_surf != NULL) + { + dest.x = cursor_x; + dest.y = cursor_y; + + src.x = 0; + src.y = 0; + src.w = tmp_surf->w; + src.h = tmp_surf->h; + + if (dest.x + src.w > WINDOW_WIDTH - 96 - 96) + src.w = WINDOW_WIDTH - 96 - 96 - dest.x; + if (dest.y + src.h > (48 * 7 + 40 + HEIGHTOFFSET)) + src.h = (48 * 7 + 40 + HEIGHTOFFSET) - dest.y; + + if (do_blit) + { + SDL_BlitSurface(tmp_surf, &src, canvas, &dest); + update_canvas(dest.x, dest.y, dest.x + tmp_surf->w, dest.y + tmp_surf->h); + } + else + { + dest.x = dest.x + 96; + SDL_BlitSurface(tmp_surf, &src, screen, &dest); + } + } + + + /* FIXME: Only update what's changed! */ + + SDL_Flip(screen); + + + if (tmp_surf != NULL) + SDL_FreeSurface(tmp_surf); +} + + +void loadfonts(char * dir, int fatal) +{ + DIR * d; + struct dirent * f; + struct stat sbuf; + char fname[512]; + char * d_names[MAX_FILES]; + int num_files, i; + + + /* Open the directory: */ + + d = opendir(dir); + if (d == NULL) + { + if (fatal) + { + fprintf(stderr, + "\nError: I can't find a directory of fonts\n" + "%s\n" + "The system error that occurred was: %s\n", + dir, strerror(errno)); + + cleanup(); + exit(1); + } + else + return; + } + + + /* Read directory for images: */ + + num_files = 0; + do + { + f = readdir(d); + + if (f != NULL) + { + d_names[num_files] = strdup(f->d_name); + num_files++; + } + } + while (f != NULL && num_files < MAX_FILES); + + closedir(d); + + + qsort(d_names, num_files, sizeof(char *), + (int(*)(const void *, const void *))compare_strings); + + + /* Do something with each file (load TTFs): */ + + for (i = 0; i < num_files && num_fonts + 3 < MAX_FONTS; i++) + { + /* Ignore things starting with "." (e.g., "." and ".." dirs): */ + + if (strstr(d_names[i], ".") != d_names[i]) + { + /* If it's a directory, recurse down into it: */ + + snprintf(fname, sizeof(fname), "%s/%s", dir, d_names[i]); + debug(fname); + + stat(fname, &sbuf); + + if (strstr(d_names[i], ".ttf") != NULL) + { + /* If it has ".ttf" in the filename, assume we can try to load it: */ + + fonts[num_fonts++] = TTF_OpenFont(fname, 16); + fonts[num_fonts++] = TTF_OpenFont(fname, 24); + fonts[num_fonts++] = TTF_OpenFont(fname, 32); + fonts[num_fonts++] = TTF_OpenFont(fname, 48); + + show_progress_bar(); + } + } + + free(d_names[i]); + } + + + /* Give warning if too many files were found (e.g., some not loaded): */ + + if (num_fonts == MAX_FONTS) + { + fprintf(stderr, + "\nWarning: Reached maximum fonts (%d) which can be loaded.\n\n", + MAX_FONTS); + } +} + + +char * uppercase(char * str) +{ + char * ustr; + int i; + + ustr = strdup(str); + + if (only_uppercase) + { + for (i = 0; i < strlen(ustr); i++) + ustr[i] = toupper(ustr[i]); + } + +#ifdef DEBUG + printf(" ORIGINAL: %s\n" + "UPPERCASE: %s\n\n", str, ustr); +#endif + + return (ustr); +} + + +/* For flood fill... */ + +int colors_close(Uint32 c1, Uint32 c2) +{ +#ifdef LOW_QUALITY_FLOOD_FILL + return (c1 == c2); +#else + Uint8 r1, g1, b1, + r2, g2, b2; + + if (c1 == c2) + { + /* Get it over with quick, if possible! */ + + return 1; + } + else + { + SDL_GetRGB(c1, canvas->format, &r1, &g1, &b1); + SDL_GetRGB(c2, canvas->format, &r2, &g2, &b2); + + if (abs(r1 - r2) <= 64 && + abs(g1 - g2) <= 64 && + abs(b1 - b2) <= 64) + return 1; + else + return 0; + } +#endif +} + + +/* Flood fill! */ + +void do_flood_fill(int x, int y, Uint32 cur_colr, Uint32 old_colr) +{ + int fillL, fillR, i, in_line; + static unsigned char prog_anim; + + + if (cur_colr == old_colr || + colors_close(cur_colr, old_colr)) + return; + + + fillL = x; + fillR = x; + + prog_anim++; + if ((prog_anim % 4) == 0) + { + show_progress_bar(); + playsound(0, SND_BUBBLE, 0); + } + + + /* Find left side, filling along the way */ + + in_line = 1; + + while (in_line) + { + putpixel(canvas, fillL, y, cur_colr); + fillL--; + + in_line = (fillL < 0) ? 0 : colors_close(getpixel(canvas, fillL, y), + old_colr); + } + + fillL++; + + + /* Find right side, filling along the way */ + + in_line = 1; + while (in_line) + { + putpixel(canvas, fillR, y, cur_colr); + fillR++; + + in_line = (fillR >= canvas->w) ? 0 : colors_close(getpixel(canvas, + fillR, y), + old_colr); + } + + fillR--; + + + /* Search top and bottom */ + + for (i = fillL; i <= fillR; i++) + { + if (y > 0 && colors_close(getpixel(canvas, i, y - 1), old_colr)) + do_flood_fill(i, y - 1, cur_colr, old_colr); + + if (y < canvas->h && colors_close(getpixel(canvas, i, y + 1), old_colr)) + do_flood_fill(i, y + 1, cur_colr, old_colr); + } +} + + +/* Scroll Timer */ + +static Uint32 scrolltimer_callback(Uint32 interval, void *param) +{ + SDL_PushEvent((SDL_Event*)param); + + return interval; +} + + +/* Controls the Text-Timer - interval == 0 removes the timer */ + +void control_drawtext_timer(Uint32 interval, char* text) +{ + static int activated = 0; + static SDL_TimerID TimerID = 0; + static SDL_Event drawtext_event; + + + /* Remove old timer if any is running */ + + if (activated) + { + SDL_RemoveTimer(TimerID); + activated = 0; + TimerID = 0; + } + + if (interval == 0) + return; + + drawtext_event.type = SDL_USEREVENT; + drawtext_event.user.code = USEREVENT_TEXT_UPDATE; + drawtext_event.user.data1 = (void*) text; + + + /* Add new timer */ + + TimerID = SDL_AddTimer(interval, drawtext_callback, (void*) &drawtext_event); + activated = 1; +} + + +/* Drawtext Timer */ + +static Uint32 drawtext_callback(Uint32 interval, void *param) +{ + SDL_PushEvent((SDL_Event*)param); + + return 0; /* Remove timer */ +} + + +void parse_options(FILE * fi) +{ + char str[256]; + + do + { + fgets(str, sizeof(str), fi); + + strip_trailing_whitespace(str); + + if (!feof(fi)) + { + debug(str); + + + /* Should "lang=" and "locale=" be here as well??? + Comments welcome ... bill@newbreedsoftware.com */ + + + /* FIXME: This should be handled better! */ + /* (e.g., complain on illegal lines, support comments, blanks, etc.) */ + + if (strcmp(str, "fullscreen=yes") == 0) + { + fullscreen = 1; + } + else if (strcmp(str, "fullscreen=no") == 0 || + strcmp(str, "windowed=yes") == 0) + { + fullscreen = 0; + } + else if (strcmp(str, "800x600=yes") == 0) + { + WINDOW_WIDTH = 800; + WINDOW_HEIGHT = 600; + } + else if (strcmp(str, "800x600=no") == 0 || + strcmp(str, "640x480=yes") == 0) + { + WINDOW_WIDTH = 640; + WINDOW_HEIGHT = 480; + } + else if (strcmp(str, "nooutlines=yes") == 0) + { + dont_do_xor = 1; + } + else if (strcmp(str, "nooutlines=no") == 0 || + strcmp(str, "outlines=yes") == 0) + { + dont_do_xor = 0; + } + else if (strcmp(str, "keyboard=yes") == 0) + { + keymouse = 1; + } + else if (strcmp(str, "keyboard=no") == 0 || + strcmp(str, "mouse=yes") == 0) + { + keymouse = 0; + } + else if (strcmp(str, "nowheelmouse=yes") == 0) + { + wheely = 0; + } + else if (strcmp(str, "nowheelmouse=no") == 0 || + strcmp(str, "wheelmouse=yes") == 0) + { + wheely = 1; + } + else if (strcmp(str, "grab=yes") == 0) + { + grab_input = 1; + } + else if (strcmp(str, "grab=no") == 0 || + strcmp(str, "nograb=yes") == 0) + { + grab_input = 0; + } + else if (strcmp(str, "nofancycursors=yes") == 0) + { + no_fancy_cursors = 1; + } + else if (strcmp(str, "nofancycursors=no") == 0 || + strcmp(str, "fancycursors=yes") == 0) + { + no_fancy_cursors = 0; + } + else if (strcmp(str, "uppercase=yes") == 0) + { + only_uppercase = 1; + } + else if (strcmp(str, "uppercase=no") == 0 || + strcmp(str, "mixedcase=yes") == 0) + { + only_uppercase = 0; + } + else if (strcmp(str, "noquit=yes") == 0) + { + disable_quit = 1; + } + else if (strcmp(str, "noquit=no") == 0 || + strcmp(str, "quit=yes") == 0) + { + disable_quit = 0; + } + else if (strcmp(str, "noprint=yes") == 0) + { + disable_print = 1; + } + else if (strcmp(str, "noprint=no") == 0 || + strcmp(str, "print=yes") == 0) + { + disable_print = 0; + } + else if (strcmp(str, "nosound=yes") == 0) + { + use_sound = 0; + } + else if (strcmp(str, "nosound=no") == 0 || + strcmp(str, "sound=yes") == 0) + { + use_sound = 1; + } + else if (strcmp(str, "simpleshapes=yes") == 0) + { + simple_shapes = 1; + } + else if (strcmp(str, "simpleshapes=no") == 0 || + strcmp(str, "complexshapes=yes") == 0) + { + simple_shapes = 1; + } + else if (strstr(str, "lang=") == str) + { + langstr = strdup(str + 5); +#ifdef DEBUG + printf("langstr set to: %s\n", langstr); +#endif + } + else if (strstr(str, "printdelay=") == str) + { + sscanf(str + 11, "%d", &print_delay); +#ifdef DEBUG + printf("Print delay set to %d seconds\n", print_delay); +#endif + } + else if (strcmp(str, "printcfg=yes") == 0) + { +#ifndef WIN32 + fprintf(stderr, "Note: printcfg option only applies to Windows!\n"); +#endif + use_print_config = 1; + } + else if (strcmp(str, "printcfg=no") == 0 || + strcmp(str, "noprintcfg=yes") == 0) + { +#ifndef WIN32 + fprintf(stderr, "Note: printcfg option only applies to Windows!\n"); +#endif + use_print_config = 0; + } + else if (strstr(str, "printcommand=") == str) + { + printcommand = strdup(str + 13); + } + else if (strcmp(str, "saveover=yes") == 0) + { + promptless_save = SAVE_OVER_ALWAYS; + } + else if (strcmp(str, "saveover=ask") == 0) + { + /* (Default) */ + + promptless_save = SAVE_OVER_PROMPT; + } + else if (strcmp(str, "saveover=new") == 0) + { + promptless_save = SAVE_OVER_NO; + } + else if (strstr(str, "savedir=") == str) + { + savedir = strdup(str + 8); + remove_slash(savedir); + +#ifdef DEBUG + printf("savedir set to: %s\n", savedir); +#endif + } + } + } + while (!feof(fi)); +} + + +char * debug_gettext(const char * str) +{ + if (strcmp(str, dgettext(NULL, str)) == 0) + { + printf("NOTRANS: %s\n", str); + } + + return(dgettext(NULL, str)); +} + + +void do_setcursor(SDL_Cursor * c) +{ + if (!no_fancy_cursors) + SDL_SetCursor(c); +} + + +char * great_str(void) +{ + return(great_strs[rand() % (sizeof(great_strs) / sizeof(char *))]); +} + + +int charsize(char c) +{ + Uint16 str[2]; + int w, h; + + str[0] = c; + str[1] = '\0'; + + TTF_SizeUNICODE(fonts[cur_font], str, &w, &h); + + return w; +} + + +void draw_image_title(int t, int x) +{ + SDL_Rect dest; + + dest.x = x; + dest.y = 0; + SDL_BlitSurface(img_title_on, NULL, screen, &dest); + + dest.x = x + (96 - img_title_names[t]->w) / 2;; + dest.y = (40 - img_title_names[t]->h) / 2; + SDL_BlitSurface(img_title_names[t], NULL, screen, &dest); +} + + +int need_unicode(int l) +{ + int i, need; + + need = 0; + + for (i = 0; lang_use_unicode[i] != -1 && need == 0; i++) + { + if (lang_use_unicode[i] == l) + { + need = 1; + } + } + + return need; +} + + +int need_utf8(int l) +{ + int i, need; + + need = 0; + + for (i = 0; lang_use_utf8[i] != -1 && need == 0; i++) + { + if (lang_use_utf8[i] == l) + { + need = 1; + } + } + +return need; +} + + +int need_own_font(int l) +{ + if (need_utf8(l) || need_unicode(l)) + return 1; + else + return 0; +} + + +/* Handle keyboard events to control the mouse: */ + +void handle_keymouse(SDLKey key, Uint8 updown) +{ + SDL_Event event; + + if (keymouse) + { + if (key == SDLK_LEFT) + mousekey_left = updown; + else if (key == SDLK_RIGHT) + mousekey_right = updown; + else if (key == SDLK_UP) + mousekey_up = updown; + else if (key == SDLK_DOWN) + mousekey_down = updown; + else if (key == SDLK_SPACE) + { + if (updown == SDL_KEYDOWN) + event.type = SDL_MOUSEBUTTONDOWN; + else + event.type = SDL_MOUSEBUTTONUP; + + event.button.x = mouse_x; + event.button.y = mouse_y; + event.button.button = 1; + + SDL_PushEvent(&event); + } + + if (mousekey_up == SDL_KEYDOWN && mouse_y > 0) + mouse_y = mouse_y - 8; + else if (mousekey_down == SDL_KEYDOWN && mouse_y < WINDOW_HEIGHT - 1) + mouse_y = mouse_y + 8; + + if (mousekey_left == SDL_KEYDOWN && mouse_x > 0) + mouse_x = mouse_x - 8; + if (mousekey_right == SDL_KEYDOWN && mouse_x < WINDOW_WIDTH - 1) + mouse_x = mouse_x + 8; + + SDL_WarpMouse(mouse_x, mouse_y); + } +} + + +/* Unblank screen in fullscreen mode, if needed: */ + +void handle_active( SDL_Event *event ) +{ + if (event->active.state & SDL_APPACTIVE) + { + if (event->active.gain == 1 ) + { + if ( fullscreen ) + SDL_Flip(screen); + } + } +} + + +/* removes a single '\' or '/' from end of path */ + +char *remove_slash( char *path ) +{ + int len = strlen(path); + + if (!len) + return path; + + if (path[len-1] == '/' || path[len-1] == '\\') + path[len-1] = 0; + + return path; +} + + +/* Decode a UTF8 string */ + +unsigned char * utf8_decode(unsigned char * str) +{ + int i; + unsigned char utf8_char[4]; + unsigned char utf8_str[1024]; + + + utf8_str[0] = '\0'; + + for (i = 0; i < strlen(str); i++) + { + /* How many bytes does this character need? */ + + if (str[i] < 128) /* 0xxx xxxx - 1 byte */ + { + utf8_char[0] = str[i]; + utf8_char[1] = '\0'; + } + else if ((str[i] & 0xE0) == 0xC0) /* 110x xxxx - 2 bytes */ + { + utf8_char[0] = str[i]; + utf8_char[1] = str[i + 1]; + utf8_char[2] = '\0'; + i = i + 1; + } + else if ((str[i] & 0xF0) == 0xE0) /* 1110 xxxx - 3 bytes */ + { + utf8_char[0] = str[i]; + utf8_char[1] = str[i + 1]; + utf8_char[2] = str[i + 2]; + utf8_char[3] = '\0'; + i = i + 2; + } + else /* 1111 0xxx - 4 bytes */ + { + utf8_char[0] = str[i]; + utf8_char[1] = str[i + 1]; + utf8_char[2] = str[i + 2]; + utf8_char[3] = str[i + 3]; + utf8_char[4] = '\0'; + i = i + 3; + } + + strcat(utf8_str, utf8_char); + } + + return(strdup(utf8_str)); +} + + +/* Escape codes for HTML-style escaping of stamp description strings: */ + +typedef struct escape_string_type { + char * str; + unsigned int chr; +} escape_string_type; + + +/* Thanks to http://bushong.net/dawn/links/htmlCodes.shtml + for the list of escape codes */ + +escape_string_type escape_strings[] = { + {"quot", '\"'}, + {"amp", '&'}, + {"lt", '<'}, + {"gt", '>'}, + {"iexcl", 161}, + {"cent", 162}, + {"pound", 163}, + {"curren", 164}, + {"yen", 165}, + {"brvbar", 166}, + {"sect", 167}, + {"uml", 168}, + {"copy", 169}, + {"ordf", 170}, + {"laquo", 171}, + {"not", 172}, + {"shy", 173}, + {"reg", 174}, + {"macr", 175}, + {"deg", 176}, + {"plusmn", 177}, + {"sup2", 178}, + {"sup3", 179}, + {"acute", 180}, + {"micro", 181}, + {"para", 182}, + {"middot", 183}, + {"cedil", 184}, + {"sup1", 185}, + {"ordm", 186}, + {"raquo", 187}, + {"frac14", 188}, + {"frac12", 189}, + {"frac34", 190}, + {"iquest", 191}, + {"Agrave", 192}, + {"Aacute", 193}, + {"Acirc", 194}, + {"Atilde", 195}, + {"Auml", 196}, + {"Aring", 197}, + {"AElig", 198}, + {"Ccedil", 199}, + {"Egrave", 200}, + {"Eacute", 201}, + {"Ecirc", 202}, + {"Euml", 203}, + {"Igrave", 204}, + {"Iacute", 205}, + {"Icirc", 206}, + {"Iuml", 207}, + {"ETH", 208}, + {"Ntilde", 209}, + {"Ograve", 210}, + {"Oacute", 211}, + {"Ocirc", 212}, + {"Otilde", 213}, + {"Ouml", 214}, + {"times", 215}, + {"Oslash", 216}, + {"Ugrave", 217}, + {"Uacute", 218}, + {"Ucirc", 219}, + {"Uuml", 220}, + {"Yacute", 221}, + {"THORN", 222}, + {"szlig", 223}, + {"agrave", 224}, + {"aacute", 225}, + {"acirc", 226}, + {"atilde", 227}, + {"auml", 228}, + {"aring", 229}, + {"aelig", 230}, + {"ccedil", 231}, + {"egrave", 232}, + {"eacute", 233}, + {"ecirc", 234}, + {"euml", 235}, + {"igrave", 236}, + {"iacute", 237}, + {"icirc", 238}, + {"iuml", 239}, + {"eth", 240}, + {"ntilde", 241}, + {"ograve", 242}, + {"oacute", 243}, + {"ocirc", 244}, + {"otilde", 245}, + {"ouml", 246}, + {"divide", 247}, + {"oslash", 248}, + {"ugrave", 249}, + {"uacute", 250}, + {"ucirc", 251}, + {"uuml", 252}, + {"yacute", 253}, + {"thorn", 254}, + {"yuml", 255}, + {"OElig", 338}, + {"oelig", 339}, + {"Scaron", 352}, + {"scaron", 353}, + {"Yuml", 376}, + {"circ", 710}, + {"tilde", 732}, + {"ensp", 8194}, + {"emsp", 8195}, + {"thinsp", 8201}, + {"zwnj", 8204}, + {"zwj", 8205}, + {"lrm", 8206}, + {"rlm", 8207}, + {"ndash", 8211}, + {"mdash", 8212}, + {"lsquo", 8216}, + {"rsquo", 8217}, + {"sbquo", 8218}, + {"ldquo", 8220}, + {"rdquo", 8221}, + {"bdquo", 8222}, + {"dagger", 8224}, + {"Dagger", 8225}, + {"permil", 8240}, + {"lsaquo", 8249}, + {"rsaquo", 8250}, + {"euro", 8364}, + {NULL, 0} +}; + + +/* Unescape an HTML-escaped-style string (e.g., convert "ñ" and such) */ + +unsigned char * unescape(char * str) +{ + int i, j, len, esclen, inside_escape; + char outstr[strlen(str + 1)], escapestr[strlen(str + 1)]; + + inside_escape = 0; + len = 0; + esclen = 0; + + + /* For each character in the input string: */ + + for (i = 0; i < strlen(str); i++) + { + if (str[i] == '&') + { + /* Starting an escape character! */ + + inside_escape = 1; + esclen = 0; + } + else + { + if (inside_escape == 0) + { + /* Not within an escaped character... simply append this literally: */ + + outstr[len++] = str[i]; + } + else + { + /* Within an escaped character! */ + + if (str[i] == ';') + { + /* We're ending it! */ + + inside_escape = 0; + + escapestr[esclen] = '\0'; + + + /* What string was it!? */ + + for (j = 0; escape_strings[j].str != NULL; j++) + { + if (strcmp(escape_strings[j].str, escapestr) == 0) + { + if (escape_strings[j].chr <= 255) + { + outstr[len++] = escape_strings[j].chr; + } + else + { + /* Needs to be represented by two bytes: */ + + /* FIXME: How should this be handled!? */ + + outstr[len++] = + ((((escape_strings[j].chr & 0xFF00) >> 8) & 0x1F) | 0xC0); + outstr[len++] = ((escape_strings[j].chr & 0x00FF) >> 0); + } + } + } + } + else + { + /* Collect the escaped character: */ + + escapestr[esclen++] = str[i]; + } + } + } + } + + outstr[len] = '\0'; + + + return(strdup(outstr)); +} + diff --git a/src/tuxpaint.conf b/src/tuxpaint.conf new file mode 100644 index 000000000..062561bcd --- /dev/null +++ b/src/tuxpaint.conf @@ -0,0 +1,176 @@ +# /etc/tuxpaint/tuxpaint.conf +# +# Configuration file for Tux Paint +# See tuxpaint(1) or run 'tuxpaint --help' for details on using Tux Paint +# +# Bill Kendrick +# Default distribution version last modified: +# February 1, 2003 + + +# The variables described below are initially commented out. +# +# Most options come in pairs: +# +# The top examples change the default behavior +# (e.g., "fullscreen=yes" enables full-screen mode, while +# the default mode is windowed, not fullscreen.) +# +# The bottom examples reenable the default behavior +# (e.g., "windowed=yes" enables fullscreen mode.) +# +# In the system-wide Tux Paint configuration file +# (e.g. "/etc/tuxpaint/tuxpaint.conf" +# or "/usr/local/etc/tuxpaint/tuxpaint.conf") +# the default options are redundant. +# +# They are, however, useful to place in a user's personal confiugration file +# ("~/.tuxpaintrc"), to override any settings they don't like in the +# system-wide configuration file, and which they don't want to always have +# to override via command-line options. +# +# For more information, see Tux Paint's main documentation file: README.txt + + +### Fullscreen or Windowed? +### ----------------------- +# +# fullscreen=yes +# windowed=yes + + +### Larger, 800x600 mode (EXPERIMENTAL), or smaller 640x480 mode? +### ------------------------------------------------------------- +# +# 800x600=yes +# 640x480=yes + + +### Disable sound effects? +### ---------------------- +# +# nosound=yes +# sound=yes + + +### Disable the on-screen 'Quit' button in the toolbar? +### --------------------------------------------------- +### Note: Pressing the [Escape] key, +### or clicking the window's 'Close' button will still work +# +# noquit=yes +# quit=yes + + +### Disable the printing feature? +### ----------------------------- +# +# noprint=yes +# print=yes + + +### Restrict printing? +### ------------------ +### For example, if 'printdelay=60', +### the user can only print once per minute (60 seconds) +# +# printdelay={SECONDS} +# printdelay=0 + + +### Use a different print command? +### ------------------------------ +### Note: The command should expect a PNG file on its STDIN (standard-in) +### +### For example, to convert the image to greyscale before converting +### to PostScript, use "pngtopnm | ppmtopgm | pnmtops | lpr" as the command +# +# printcommand={COMMAND} +# printcommand=pngtopnm | pnmtops | lpr + + +### Use the simpler shape tool? (No rotating) +### ----------------------------------------- +# +# simpleshapes=yes +# complexshapes=yes + + +### Display only uppercase letters? +### ------------------------------- +# +# uppercase=yes +# mixedcase=yes + + +### Don't use special mouse pointer (cursor) shapes? +### ------------------------------------------------ +# +# nofancycursors=yes +# fancycursors=yes + + +### Grab the mouse and keyboard? +### ---------------------------- +# +# grab=yes +# dontgrab=yes + + +### Disable wheel mouse support? +### ---------------------------- +# +# nowheelmouse=yes +# wheelmouse=yes + + +### Use the keyboard to control the mouse pointer (cursor)? +### ------------------------------------------------------- +# +# keyboard=yes +# mouse=yes + + +### Use less graphics-intensive outlines? +### ------------------------------------- +# +# nooutlines=yes +# outlines=yes + + +### Disable 'Save Over Older Picture?' Prompt +### Always save over, instead +### ----------------------------------------- +# +# saveover=yes +# saveover=ask + + +### Disable 'Save Over Older Picture?' Prompt +### Always make a new picture, instead +### ----------------------------------------- +# +# saveover=new +# saveover=ask + + +### Save images somewhere different? +### -------------------------------- +# +# savedir={PATH} +# savedir=~/.tuxpaint/saved + + +### Use a different language? +### ------------------------- +### Note: Where the language is a known language name (e.g., "spanish") +### +### For a full list, see tuxpaint(1) man page, README.txt documentation, +### or usage output ("tuxpaint --usage") +# +# lang={LANGUAGE} +# lang=english + + +# (End of configuration file) + diff --git a/src/tuxpaint.desktop b/src/tuxpaint.desktop new file mode 100644 index 000000000..c397ff6a8 --- /dev/null +++ b/src/tuxpaint.desktop @@ -0,0 +1,29 @@ +[Desktop Entry] +Name=Tux Paint +Type=Application +Exec=tuxpaint +Icon=tuxpaint.png +Terminal=0 +Comment=Tux Paint: a drawing program for children. +Comment[ca]=Tux Paint: un programa de dibuix per a nens petits. +#Comment[cz]= +#Comment[da]= +Comment[de]=Tux Paint: ein Malprogramm fr (kleine) Kinder. +#Comment[el]= +Comment[es]=Tux Paint: un programa de dibujo para nios chicos. +Comment[fi]=Tux Paint: on piirto-ohjelma pienille lapsille. +Comment[fr]=Tux Paint: est un programme de dessin pour les jeunes enfants. +Comment[hu]=Tux Paint: rajzprogram gyermekeknek. +Comment[id]=Tux Paint: adalah sebuah program gambar untuk anak-anak. +Comment[is]=Tux Paint: teikniforrit fyrir unga krakka. +#Comment[it]= +Comment[ja]=Tux Paint: 子供向けお絵描きプログラム +#Comment[ko]= +Comment[nl]=Tux Paint: een tekenprogramma voor kinderen. +Comment[nn]=Tux Paint: eit teikneprogram for dei yngste. +#Comment[pl]= +Comment[pt]=Tux Paint: um programa de desenho para crianas. +#Comment[ro]= +Comment[sv]=Tux Paint: ett ritprogram fr yngre barn. +#Comment[tr]= +#Comment[zh]= diff --git a/src/tuxpaint.nsi b/src/tuxpaint.nsi new file mode 100644 index 000000000..bc3f2a57e --- /dev/null +++ b/src/tuxpaint.nsi @@ -0,0 +1,114 @@ +# vim: noai et ts=4 tw=0 + +!define PKG_VERSION "0.9.6" +!define PKG_PREFIX "tuxpaint" + +!define APP_PREFIX "TuxPaint" +!define APP_EXE "${APP_PREFIX}.exe" +!define APP_NAME "Tux Paint" + +OutFile "${PKG_PREFIX}-${PKG_VERSION}-win32-installer.exe" +Name "${APP_NAME}" +Caption "" +CRCCheck on +WindowIcon off +BGGradient off + +# Default to not silent +SilentInstall normal +SilentUnInstall normal + +# Various default text options +MiscButtonText +InstallButtonText +FileErrorText + +# Default installation dir and registry key of install directory +InstallDir "$PROGRAMFILES\${APP_PREFIX}" +InstallDirRegKey HKLM SOFTWARE\${APP_PREFIX} "Install_Dir" + +# Licence text +LicenseText "You must agree to this license before installing ${APP_NAME}" +LicenseData "docs/copying.txt" + +# Directory browsing +DirShow show +ComponentText "This will install ${APP_NAME} on your computer. Select which optional things you want installed." +DirText "Choose a directory to install ${APP_NAME} in to:" +AllowRootDirInstall false + +# Install page stuff +InstProgressFlags smooth +AutoCloseWindow true + +Section + SetOutPath $INSTDIR + File "visualc\release\${APP_EXE}" + File "visualc\release\*.dll" + File "tuxpaint.cfg" + SetOutPath $INSTDIR\data + File /r "data\*.*" + SetOutPath $INSTDIR\docs + File /r "docs\*.*" + SetOutPath $INSTDIR\locale + File /r "locale\*.*" + SetOutPath $INSTDIR\userdata + File /r "userdata\*.*" + + WriteRegStr HKLM SOFTWARE\${APP_PREFIX} "Install_Dir" "$INSTDIR" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_PREFIX}" "DisplayName" "${APP_NAME} (remove only)" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_PREFIX}" "UninstallString" '"$INSTDIR\uninstall.exe"' + WriteUninstaller "uninstall.exe" +SectionEnd + + +Section "Start Menu Shortcuts" + SetOutPath $INSTDIR + CreateDirectory "$SMPROGRAMS\${APP_NAME}" + CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0 + CreateShortCut "$SMPROGRAMS\${APP_NAME}\Readme.lnk" "$INSTDIR\docs\html\README.html" "" "$INSTDIR\docs\html\README.html" 0 + CreateShortCut "$SMPROGRAMS\${APP_NAME}\Licence.lnk" "$INSTDIR\docs\copying.txt" "" "$INSTDIR\docs\copying.txt" 0 + CreateShortCut "$SMPROGRAMS\${APP_NAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 +SectionEnd + + +Section "Desktop Shortcut" + SetOutPath $INSTDIR + CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" "" "$INSTDIR\${APP_EXE}" 0 +SectionEnd + +Section "View README" + SetOutPath $INSTDIR + ExecShell "open" "docs\html\README.html" +SectionEnd + +;Function .onInstSuccess +; BringToFront +; MessageBox MB_YESNO|MB_ICONQUESTION \ +; "${APP_NAME} was installed. Would you like to run ${APP_NAME} now ?" \ +; IDNO NoExec +; Exec '$INSTDIR\${APP_EXE}' +; NoExec: +;FunctionEnd + +; uninstall stuff + +UninstallText "This will uninstall ${APP_NAME}. Hit 'Uninstall' to continue." + +; special uninstall section. +Section "Uninstall" + ; remove registry keys + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_PREFIX}" + DeleteRegKey HKLM SOFTWARE\${APP_PREFIX} + + RMDir /r "$INSTDIR\data" + RMDir /r "$INSTDIR\docs" + RMDir /r "$INSTDIR\locale" + Delete "$INSTDIR\*.*" + + Delete "$DESKTOP\${APP_NAME}.lnk" + Delete "$SMPROGRAMS\${APP_NAME}\*.*" + RMDir "$SMPROGRAMS\${APP_NAME}" +SectionEnd + + diff --git a/src/tuxpaint.sgml b/src/tuxpaint.sgml new file mode 100644 index 000000000..5b48e850c --- /dev/null +++ b/src/tuxpaint.sgml @@ -0,0 +1,252 @@ + + Bill Kendrick + + 2002.July.09 - 2002.September.28 + --> + + + + + Bill"> + Kendrick"> + + September 28, 2002"> + 1"> + bill@newbreedsoftware.com"> + + TUXPAINT"> + + + Debian"> + GNU"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2002 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + Painting program for kids + + + + &dhpackage; + --fullscreen + --nosound + --noquit + --noprint + --printdelay=SECONDS + --simpleshapes + --uppercase + --grab + --nowheelmouse + --nofancycursors + --saveover + --saveovernew + + + &dhpackage; + --windowed + --sound + --quit + --print + --printdelay=0 + --complexshapes + --mixedcase + --dontgrab + --wheelmouse + --fancycursors + --saveoverask + + + &dhpackage; + --lang + + english + danishdansk + dutch + finnishsuomi + frenchfrancais + germandeutsch + icelandicislenska + italianitaliano + + norwegiannynorsknorsk + + spanishespanol + swedishsvenska + turkish + + + --locale LOCALE + + + &dhpackage; + --nosysconfig + + + &dhpackage; + + --help + --usage + --version + --copying + + + + + DESCRIPTION + + &dhpackage; is a drawing program for young children. + It is meant to be easy and fun to use. + + The screen is divided into five (5) areas: + + + The toolbar, on the left. + This lists the available tools in Tux Paint: + + + Brush - Draw using various brush shapes and + colors. + + Stamp - Paste pre-drawn pictures into your + drawing. + + Lines - Draw straight lines using various brush shapes + and colors. + + Shapes - Draw various polygon shapes, both outlined + and filled. + + Text - Add text to your picture using various + typefaces (fonts), sizes, and colors. + + Magic - A collection of filters and effects. + (See below.) + + Undo and Redo - Undo the last changes you made + to your picture, or bring the changes back. + + Eraser - A large eraser you can use to wipe + parts of the picture blank (white). + + New - Erase the entire picture and start + over. + + Open and Save - Open a previously-saved picture, + or save the current one. (If saving again, by default you will + be prompted whether you want to save over, or save a new + file.) + + Print - Print the current drawing. + + Quit - Exit Tux Paint. + + + + + The selector, on the right. + Depending on the current tool, this will show different items. + In Brush and Lines mode, it will show a collection of brush shapes. + In Stamp mode, it will show rubber-stamp pictures. + In Shapes mode, it will show different filled and unfilled shapes. + In Text mode, it will show various fonts and sizes. + And in Magic mode, it will show the different Magic effect tools + (see below). + + The canvas, in the middle. + This is where your picture is! + + The color palette, near the + bottom. + + + + Tips and information, at the very + bottom. + + + + + + + SEE ALSO + + tuxpaint-import (1), xpaint (1), gpaint (1X), gimp (1). + + Tux Paint documentation in /usr/local/share/doc/tuxpaint/ + + + + AUTHOR + + This manual page was originally written by + Ben Armstrong synrg@sanctuary.nslug.ns.ca for + the &debian; system (but may be used by others). It is now maintained + by Bill Kendrick bill@newbreedsoftware.com. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation + License, Version 1.1 or any later version published by the Free + Software Foundation; with no Invariant Sections, no Front-Cover + Texts and no Back-Cover Texts. + + +
+ + diff --git a/src/win32_dirent.c b/src/win32_dirent.c new file mode 100644 index 000000000..3f6b23ce1 --- /dev/null +++ b/src/win32_dirent.c @@ -0,0 +1,115 @@ +/****************************************************/ +/* */ +/* For Win32 that lacks Unix direct support. */ +/* - avoids including "windows.h" */ +/* */ +/* Copyright (c) 2002 John Popplewell */ +/* john@johnnypops.demon.co.uk */ +/* */ +/* Version 1.0.1 - fixed bug in opendir() */ +/* Version 1.0.0 - initial version */ +/* */ +/****************************************************/ + +#include +#include +#include + +#include "win32_dirent.h" + +DIR *opendir( const char *pSpec ) +{ + char pathname[MAX_PATH+2]; + DIR *pDir = calloc( 1, sizeof(DIR) ); + + if ( !pDir ) return NULL; + strcpy( pathname, pSpec ); + strcat( pathname, "/*" ); + pDir->hFind = FindFirstFile(pathname, &pDir->wfd); + if ( pDir->hFind == INVALID_HANDLE_VALUE ) + { + free(pDir); + pDir = NULL; + } + return pDir; +} + + +void closedir( DIR *pDir ) +{ + assert(pDir != NULL); + free(pDir); +} + + +struct dirent *readdir(struct DIR *pDir) +{ + assert(pDir != NULL); + if (pDir->hFind) + { + strcpy(pDir->de.d_name, (const char *)pDir->wfd.cFileName); + if (!FindNextFile(pDir->hFind, &pDir->wfd)) + { + FindClose(pDir->hFind); + pDir->hFind = NULL; + } + return &pDir->de; + } + return NULL; +} + + +int alphasort(const void *a, const void *b) +{ + return(strcmp((*(const struct dirent **)a)->d_name, (*(const struct dirent **)b)->d_name)); +} + + +static int addToList( int i, struct dirent ***namelist, struct dirent *entry ) +{ + int size; + struct dirent *block; + + *namelist = (struct dirent**)realloc( (void*)(*namelist), (size_t)((i+1)*sizeof(struct dirent*)) ); + if ( *namelist == NULL ) return -1; + + size = (((char*)&entry->d_name)-((char*)entry))+strlen(entry->d_name)+1; + block = (struct dirent*)malloc( size ); + + if ( block == NULL ) return -1; + + (*namelist)[i] = block; + memcpy( block, entry, size ); + + return ++i; +} + + +int scandir( const char *dir, struct dirent ***namelist, selectCB select, comparCB compar) +{ + DIR *pDir; + int count; + struct dirent *entry; + + assert( (dir != NULL) && (namelist != NULL) ); + + pDir = opendir(dir); + + if ( !pDir ) return -1; + + count = 0; + while( (entry = readdir(pDir)) != NULL ) + { + if ( select == NULL || (select != NULL && select( entry )) ) + if ( (count = addToList( count, namelist, entry )) < 0 ) + break; + } + closedir( pDir ); + if ( count <= 0 ) return -1; + + if ( compar != NULL ) + qsort( (void *)(*namelist), (size_t)count, sizeof(struct dirent *), compar ); + + return count; +} + diff --git a/src/win32_dirent.h b/src/win32_dirent.h new file mode 100644 index 000000000..c13f1665e --- /dev/null +++ b/src/win32_dirent.h @@ -0,0 +1,80 @@ +/****************************************************/ +/* */ +/* For Win32 that lacks Unix direct support. */ +/* - avoids including "windows.h" */ +/* */ +/* Copyright (c) 2002 John Popplewell */ +/* john@johnnypops.demon.co.uk */ +/* */ +/****************************************************/ +typedef long BOOL; +typedef unsigned int DWORD; +typedef wchar_t TCHAR; +typedef void* HANDLE; + +#define MAX_PATH 256 +#define INVALID_HANDLE_VALUE ((HANDLE)(-1)) +#define WINAPI __stdcall + +typedef struct +{ + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} FILETIME; + +typedef struct +{ + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + TCHAR cFileName[ MAX_PATH ]; + TCHAR cAlternateFileName[ 14 ]; +} WIN32_FIND_DATA; + + +#define FindFirstFile FindFirstFileA +#define FindNextFile FindNextFileA +#define FindClose FindClose + + +#ifdef __cplusplus +extern "C" { +#endif + +extern HANDLE WINAPI FindFirstFile( const char*, WIN32_FIND_DATA* ); +extern BOOL WINAPI FindNextFile( HANDLE, WIN32_FIND_DATA* ); +extern BOOL WINAPI FindClose( HANDLE ); + +#ifdef __cplusplus +}; +#endif + + +struct dirent +{ + char d_name[MAX_PATH]; +}; + + +typedef struct +{ + WIN32_FIND_DATA wfd; + HANDLE hFind; + struct dirent de; +} DIR; + + +extern DIR *opendir(const char *pSpec); +extern void closedir(DIR *pDir); +extern struct dirent *readdir(struct DIR *pDir); + +typedef int (*selectCB)(const struct dirent *); +typedef int (*comparCB)(const void*, const void*); + +extern int alphasort( const void *a, const void *b ); +extern int scandir( const char *dir, struct dirent ***namelist, selectCB select, comparCB compar); diff --git a/src/win32_print.c b/src/win32_print.c new file mode 100644 index 000000000..e837f6b12 --- /dev/null +++ b/src/win32_print.c @@ -0,0 +1,449 @@ +/* win32_print.c */ + +/* printing support for Tux Paint */ +/* John Popplewell */ + +/* Sept. 30, 2002 - Oct. 17, 2002 */ + + +#include "SDL_syswm.h" +#include "win32_print.h" +#include "resource.h" + + +#define NOREF(x) ((x)=(x)) +#define GETHINST(hWnd) ((HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE )) +#define MIR( id ) (MAKEINTRESOURCE( id )) + + +static int bPrint = FALSE; +static HWND hDlgCancel = NULL; + +static PRINTDLG global_pd = { + sizeof(PRINTDLG), + NULL, NULL, NULL, NULL, + PD_RETURNDC, + 0xFFFF, + 0xFFFF, + 0xFFFF, + 0xFFFF, + 1, + NULL, +}; + +//static DEVMODE *devmode = NULL; + +BOOL CALLBACK AbortProc( HDC hDC, int nCode ) +{ + MSG msg; + + NOREF(nCode); + NOREF(hDC); + while ( PeekMessage( (LPMSG)&msg, (HWND)NULL, 0, 0, PM_REMOVE) ) + { + if ( !IsDialogMessage( hDlgCancel, (LPMSG)&msg ) ) + { + TranslateMessage( (LPMSG)&msg ); + DispatchMessage( (LPMSG)&msg ); + } + } + + return bPrint; +} + + +LRESULT CALLBACK AbortPrintJob( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) +{ + NOREF(hDlg); + NOREF(lParam); + NOREF(wParam); + NOREF(message); + switch ( message ) + { + case WM_INITDIALOG : + return TRUE; + case WM_COMMAND : + bPrint = FALSE; + return TRUE; + default : + return FALSE; + } +} + + +static SDL_Surface *make32bitDIB( SDL_Surface *surf ) +{ + SDL_PixelFormat pixfmt; + SDL_Surface *surf32; + SDL_Surface *surfDIB; + Uint8 *src,*dst; + Uint32 linesize; + int i; + + memset( &pixfmt, 0, sizeof(pixfmt) ); + pixfmt.palette = NULL; + pixfmt.BitsPerPixel = 32; + pixfmt.BytesPerPixel= 4; + pixfmt.Rmask = 0x00FF0000; + pixfmt.Gmask = 0x0000FF00; + pixfmt.Bmask = 0x000000FF; + pixfmt.Amask = 0xFF000000; + pixfmt.Rshift = 16; + pixfmt.Gshift = 8; + pixfmt.Bshift = 0; + pixfmt.Ashift = 24; + pixfmt.Rloss = 0; + pixfmt.Gloss = 0; + pixfmt.Bloss = 0; + pixfmt.Aloss = 0; + pixfmt.colorkey = 0; + pixfmt.alpha = 0; + + surf32 = SDL_ConvertSurface( surf, &pixfmt, SDL_SWSURFACE ); + surfDIB = SDL_CreateRGBSurface( SDL_SWSURFACE, surf32->w, surf32->h, 32, + pixfmt.Rmask, pixfmt.Gmask, pixfmt.Bmask, pixfmt.Amask ); + + linesize = surf32->w*sizeof(Uint32); /* Flip top2bottom */ + dst = surfDIB->pixels; + src = ((Uint8*)surf32->pixels)+((surf32->h-1)*surf32->pitch); + for ( i = 0; i < surf32->h; ++i ) + { + memcpy( dst, src, linesize ); + src -= surf32->pitch; + dst += surfDIB->pitch; + } + + SDL_FreeSurface( surf32 ); /* Free temp surface */ + + return surfDIB; +} + +/* returns 0 if failed */ +static int GetDefaultPrinterStrings( char *device, char *driver, char *output ) +{ + char buff[MAX_PATH]; + char *section = "windows"; + char *key = "device"; + char *def = "NODEFAULTPRINTER"; + char *dev,*drv,*out; + + if ( !GetProfileString( section, key, def, buff, sizeof(buff) ) ) + return 0; + + if ( strcmp( buff, def ) == 0 ) + return 0; + + if ( ((dev = strtok( buff, "," )) != NULL) && + ((drv = strtok( NULL, ", ")) != NULL) && + ((out = strtok( NULL, ", ")) != NULL) ) + { + if ( device ) strcpy( device, dev ); + if ( driver ) strcpy( driver, drv ); + if ( output ) strcpy( output, out ); + return 1; + } + + return 0; +} + + +static HDC GetDefaultPrinterDC( void ) +{ + char device[MAX_PATH],driver[MAX_PATH],output[MAX_PATH]; + + if ( GetDefaultPrinterStrings( device, driver, output ) ) + return CreateDC( driver, device, output, NULL ); + + return NULL; +} + + +static HANDLE LoadCustomPrinterHDEVMODE( HWND hWnd, const char *filepath ) +{ + char device[MAX_PATH]; + HANDLE hPrinter = NULL; + int sizeof_devmode; + HGLOBAL hDevMode = NULL; + DEVMODE *devmode = NULL; + int res; + FILE *fp = NULL; + + if ( !GetDefaultPrinterStrings( device, NULL, NULL ) ) + return NULL; + + if (!OpenPrinter( device, &hPrinter, NULL )) + return NULL; + + sizeof_devmode = (int)DocumentProperties( hWnd, hPrinter, device, + NULL, NULL, 0 ); + + if ( !sizeof_devmode ) + goto err_exit; + + hDevMode = GlobalAlloc( GHND, sizeof_devmode ); + if ( !hDevMode ) + goto err_exit; + + devmode = (DEVMODE*)GlobalLock( hDevMode ); + if ( !devmode ) + goto err_exit; + + res = DocumentProperties( hWnd, hPrinter, device, devmode, NULL, + DM_OUT_BUFFER); + if ( res != IDOK ) + goto err_exit; + + if ( (fp = fopen( filepath, "rb" )) != NULL ) + { + int block_size = devmode->dmSize + devmode->dmDriverExtra; + int block_read = fread( devmode, 1, block_size, fp ); + + fclose( fp ); + if ( block_size != block_read ) + goto err_exit; + } + + res = DocumentProperties( hWnd, hPrinter, device, devmode, devmode, + DM_IN_BUFFER|DM_OUT_BUFFER); + if ( res != IDOK ) + goto err_exit; + + GlobalUnlock( hDevMode ); + ClosePrinter( hPrinter ); + return hDevMode; + +err_exit: + if ( devmode ) GlobalUnlock( hDevMode ); + if ( hDevMode ) GlobalFree( hDevMode ); + if ( hPrinter ) ClosePrinter( hPrinter ); + return NULL; +} + + +static int SaveCustomPrinterHDEVMODE( HWND hWnd, const char *filepath, HANDLE hDevMode ) +{ + FILE *fp = NULL; + + NOREF(hWnd); + if ( (fp = fopen( filepath, "wb" )) != NULL ) + { + DEVMODE *devmode = (DEVMODE*)GlobalLock( hDevMode ); + int block_size = devmode->dmSize + devmode->dmDriverExtra; + int block_writ = fwrite( devmode, 1, block_size, fp ); + + GlobalUnlock( hDevMode ); + fclose( fp ); + return block_size == block_writ; + } + return 0; +} + + +static HDC GetCustomPrinterDC( HWND hWnd, const char *printcfg, int show ) +{ + global_pd.hwndOwner = hWnd; + global_pd.hDC = NULL; + global_pd.hDevNames = NULL; + + if ( global_pd.hDevMode == NULL ) + { + global_pd.hDevMode = LoadCustomPrinterHDEVMODE( hWnd, printcfg ); + } + + if ( show ) + { + if ( PrintDlg( &global_pd ) ) + { + SaveCustomPrinterHDEVMODE( hWnd, printcfg, global_pd.hDevMode ); + return global_pd.hDC; + } + return NULL; + } + + { + DEVMODE *devmode = (DEVMODE*)GlobalLock( global_pd.hDevMode ); + + global_pd.hDC = CreateDC( NULL, (const char*)devmode->dmDeviceName, NULL, devmode ); + GlobalUnlock( global_pd.hDevMode ); + } + return global_pd.hDC; +} + + +int IsPrinterAvailable( void ) +{ + return (GetDefaultPrinterStrings( NULL, NULL, NULL ) != 0); +} + + +int SurfacePrint( SDL_Surface *surf, const char *printcfg, int showdialog ) +{ + int res = 0; + HWND hWnd; + DOCINFO di; + int nError; + SDL_SysWMinfo wminfo; + HDC hDCwindow; + HDC hDCprinter; + BITMAPINFOHEADER bmih; + SDL_Surface *surf32 = NULL; + RECT rc; + float fLogPelsX1, fLogPelsY1, fLogPelsX2, fLogPelsY2; + float fScaleX, fScaleY; + int cWidthPels, xLeft, yTop; + float subscaler,subscalerx,subscalery; + int hDCCaps; + HANDLE hOldObject = NULL; + HBITMAP hbm = NULL; + HDC hdcMem = NULL; + + SDL_VERSION(&wminfo.version); + if ( !SDL_GetWMInfo( &wminfo ) ) + return -1; + hWnd = wminfo.window; + + if ( !printcfg ) + hDCprinter = GetDefaultPrinterDC(); + else + hDCprinter = GetCustomPrinterDC( hWnd, printcfg, showdialog ); + + if ( !hDCprinter ) + return -1; + + bPrint = TRUE; + SetAbortProc( hDCprinter, AbortProc ); + hDlgCancel = CreateDialog( GETHINST(hWnd), MIR(IDD_ABORTDLG), hWnd, (DLGPROC)AbortPrintJob ); + EnableWindow( hWnd, FALSE ); + + di.cbSize = sizeof(DOCINFO); + di.lpszDocName = "Tux Paint"; + di.lpszOutput = (LPTSTR)NULL; + di.lpszDatatype = (LPTSTR)NULL; + di.fwType = 0; + + nError = StartDoc( hDCprinter, &di ); + if ( nError == SP_ERROR ) + { + res = -2; + goto error; + } + + nError = StartPage(hDCprinter); + if (nError <= 0) + { + res = -3; + goto error; + } + +////////////////////////////////////////////////////////////////////////////////////// + + surf32 = make32bitDIB( surf ); + if ( !surf32 ) + { + res = -4; + goto error; + } + + memset( &bmih,0, sizeof(bmih) ); + bmih.biSize = sizeof(bmih); + bmih.biPlanes = 1; + bmih.biCompression = BI_RGB; + bmih.biBitCount = 32; + bmih.biWidth = surf32->w; + bmih.biHeight = surf32->h; + + GetClientRect( hWnd, &rc ); + subscalerx = (float)rc.right/surf32->w; + subscalery = (float)rc.bottom/surf32->h; + subscaler = subscalery; + if ( subscalerx < subscalery ) + subscaler = subscalerx; + + hDCwindow = GetDC( hWnd ); + fLogPelsX1 = (float)GetDeviceCaps(hDCwindow, LOGPIXELSX); + fLogPelsY1 = (float)GetDeviceCaps(hDCwindow, LOGPIXELSY); + ReleaseDC( hWnd, hDCwindow ); + fLogPelsX2 = (float)GetDeviceCaps(hDCprinter, LOGPIXELSX); + fLogPelsY2 = (float)GetDeviceCaps(hDCprinter, LOGPIXELSY); + + if (fLogPelsX1 > fLogPelsX2) + fScaleX = (fLogPelsX1/fLogPelsX2); + else + fScaleX = (fLogPelsX2/fLogPelsX1); + + if (fLogPelsY1 > fLogPelsY2) + fScaleY = (fLogPelsY1/fLogPelsY2); + else + fScaleY = (fLogPelsY2/fLogPelsY1); + + fScaleX *= subscaler; + fScaleY *= subscaler; + + yTop = 0; + cWidthPels = GetDeviceCaps(hDCprinter, PHYSICALWIDTH); + xLeft = ((cWidthPels - ((int)(fScaleX*bmih.biWidth)))/2)- + GetDeviceCaps(hDCprinter, PHYSICALOFFSETX); + + hDCCaps = GetDeviceCaps(hDCprinter, RASTERCAPS); + + if ( hDCCaps & RC_STRETCHDIB ) + { + StretchDIBits(hDCprinter, xLeft, yTop, + (int)(fScaleX*bmih.biWidth), + (int)(fScaleY*bmih.biHeight), + 0, 0, bmih.biWidth, bmih.biHeight, + surf32->pixels, (BITMAPINFO*)&bmih, + DIB_RGB_COLORS, SRCCOPY); + } + else + if ( hDCCaps & RC_STRETCHBLT ) + { + hbm = CreateDIBitmap(hDCprinter, &bmih, CBM_INIT, + surf32->pixels, (const BITMAPINFO*)&bmih, 0); + if ( hbm ) + { + hdcMem = CreateCompatibleDC( hDCprinter ); + if ( hdcMem ) + { + hOldObject = SelectObject(hdcMem, hbm); + if ( hOldObject ) + { + StretchBlt(hDCprinter, xLeft, yTop, + (int)(fScaleX*bmih.biWidth), + (int)(fScaleY*bmih.biHeight), + hdcMem, 0, 0, bmih.biWidth, bmih.biHeight, SRCCOPY); + SelectObject(hdcMem, hOldObject); + } + } + } + } + else + { + res = -10; + goto error; + } + +////////////////////////////////////////////////////////////////////////////////////// + + nError = EndPage( hDCprinter ); + if ( nError <= 0 ) + { + res = -9; + goto error; + } + + EndDoc( hDCprinter ); + +error: + if ( hdcMem ) DeleteDC( hdcMem ); + if ( hbm ) DeleteObject( hbm ); + if ( surf32 ) SDL_FreeSurface( surf32 ); + + EnableWindow( hWnd, TRUE ); + DestroyWindow( hDlgCancel ); + DeleteDC( hDCprinter ); + + return res; +} + + diff --git a/src/win32_print.c-old b/src/win32_print.c-old new file mode 100644 index 000000000..22dbc111d --- /dev/null +++ b/src/win32_print.c-old @@ -0,0 +1,301 @@ +/* win32_print.c */ + +/* printing support for Tux Paint */ +/* John Popplewell */ + +/* Sept. 30, 2002 - Oct. 17, 2002 */ + + +#include "SDL_syswm.h" +#include "win32_print.h" +#include "resource.h" + + +#define NOREF(x) ((x)=(x)) +#define GETHINST(hWnd) ((HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE )) +#define MIR( id ) (MAKEINTRESOURCE( id )) + + +static int bPrint; +static HWND hDlgCancel; + + +static int GetPrinterContext( HWND hWnd, PRINTDLG *pd ) +{ + pd->hwndOwner = hWnd; + pd->Flags = PD_RETURNDC; + pd->nFromPage = 0xFFFF; + pd->nToPage = 0xFFFF; + pd->nMinPage = 0xFFFF; + pd->nMaxPage = 0xFFFF; + pd->nCopies = 1; + + return PrintDlg( pd ); +} + + +BOOL CALLBACK AbortProc( HDC hDC, int nCode ) +{ + MSG msg; + + NOREF(nCode); + NOREF(hDC); + while ( PeekMessage( (LPMSG)&msg, (HWND)NULL, 0, 0, PM_REMOVE) ) + { + if ( !IsDialogMessage( hDlgCancel, (LPMSG)&msg ) ) + { + TranslateMessage( (LPMSG)&msg ); + DispatchMessage( (LPMSG)&msg ); + } + } + + return bPrint; +} + + +LRESULT CALLBACK AbortPrintJob( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) +{ + NOREF(hDlg); + NOREF(lParam); + NOREF(wParam); + NOREF(message); + switch ( message ) + { + case WM_INITDIALOG : + return TRUE; + case WM_COMMAND : + bPrint = FALSE; + return TRUE; + default : + return FALSE; + } +} + + +static SDL_Surface *make32bitDIB( SDL_Surface *surf ) +{ + SDL_PixelFormat pixfmt; + SDL_Surface *surf32; + SDL_Surface *surfDIB; + Uint8 *src,*dst; + Uint32 linesize; + int i; + + memset( &pixfmt, 0, sizeof(pixfmt) ); + pixfmt.palette = NULL; + pixfmt.BitsPerPixel = 32; + pixfmt.BytesPerPixel= 4; + pixfmt.Rmask = 0x00FF0000; + pixfmt.Gmask = 0x0000FF00; + pixfmt.Bmask = 0x000000FF; + pixfmt.Amask = 0xFF000000; + pixfmt.Rshift = 16; + pixfmt.Gshift = 8; + pixfmt.Bshift = 0; + pixfmt.Ashift = 24; + pixfmt.Rloss = 0; + pixfmt.Gloss = 0; + pixfmt.Bloss = 0; + pixfmt.Aloss = 0; + pixfmt.colorkey = 0; + pixfmt.alpha = 0; + + surf32 = SDL_ConvertSurface( surf, &pixfmt, SDL_SWSURFACE ); + surfDIB = SDL_CreateRGBSurface( SDL_SWSURFACE, surf32->w, surf32->h, 32, + pixfmt.Rmask, pixfmt.Gmask, pixfmt.Bmask, pixfmt.Amask ); + + linesize = surf32->w*sizeof(Uint32); /* Flip top2bottom */ + dst = surfDIB->pixels; + src = ((Uint8*)surf32->pixels)+((surf32->h-1)*surf32->pitch); + for ( i = 0; i < surf32->h; ++i ) + { + memcpy( dst, src, linesize ); + src -= surf32->pitch; + dst += surfDIB->pitch; + } + + SDL_FreeSurface( surf32 ); /* Free temp surface */ + + return surfDIB; +} + + +int IsPrinterAvailable( void ) +{ + char *section = "windows"; + char *key = "device"; + char *def = "NODEFAULTPRINTER"; + char buff[256]; + + if ( !GetProfileString( section, key, def, buff, sizeof(buff) ) ) + return 0; + + return (strcmp( buff, def ) != 0); +} + + +int SurfacePrint( SDL_Surface *surf ) +{ + int res = 0; + HWND hWnd; + PRINTDLG pd; + DOCINFO di; + int nError; + SDL_SysWMinfo wminfo; + HDC hDC; + BITMAPINFOHEADER bmih; + SDL_Surface *surf32 = NULL; + RECT rc; + float fLogPelsX1, fLogPelsY1, fLogPelsX2, fLogPelsY2; + float fScaleX, fScaleY; + int cWidthPels, xLeft, yTop; + float subscaler,subscalerx,subscalery; + int hDCCaps; + HANDLE hOldObject = NULL; + HBITMAP hbm = NULL; + HDC hdcMem = NULL; + + SDL_VERSION(&wminfo.version); + if ( !SDL_GetWMInfo( &wminfo ) ) + return -1; + hWnd = wminfo.window; + + memset( &pd, 0, sizeof(PRINTDLG) ); + pd.lStructSize = sizeof(PRINTDLG); + if ( !GetPrinterContext( hWnd, &pd ) || (pd.hDC == NULL) ) + return -1; + + bPrint = TRUE; + SetAbortProc( pd.hDC, AbortProc ); + hDlgCancel = CreateDialog( GETHINST(hWnd), MIR(IDD_ABORTDLG), hWnd, (DLGPROC)AbortPrintJob ); + EnableWindow( hWnd, FALSE ); + + di.cbSize = sizeof(DOCINFO); + di.lpszDocName = "Tux Paint"; + di.lpszOutput = (LPTSTR)NULL; + di.lpszDatatype = (LPTSTR)NULL; + di.fwType = 0; + + nError = StartDoc( pd.hDC, &di ); + if ( nError == SP_ERROR ) + { + res = -2; + goto error; + } + + nError = StartPage(pd.hDC); + if (nError <= 0) + { + res = -3; + goto error; + } + +////////////////////////////////////////////////////////////////////////////////////// + + surf32 = make32bitDIB( surf ); + if ( !surf32 ) + { + res = -4; + goto error; + } + + memset( &bmih,0, sizeof(bmih) ); + bmih.biSize = sizeof(bmih); + bmih.biPlanes = 1; + bmih.biCompression = BI_RGB; + bmih.biBitCount = 32; + bmih.biWidth = surf32->w; + bmih.biHeight = surf32->h; + + GetClientRect( hWnd, &rc ); + subscalerx = (float)rc.right/surf32->w; + subscalery = (float)rc.bottom/surf32->h; + subscaler = subscalery; + if ( subscalerx < subscalery ) + subscaler = subscalerx; + + hDC = GetDC( hWnd ); + fLogPelsX1 = (float)GetDeviceCaps(hDC, LOGPIXELSX); + fLogPelsY1 = (float)GetDeviceCaps(hDC, LOGPIXELSY); + ReleaseDC( hWnd, hDC ); + fLogPelsX2 = (float)GetDeviceCaps(pd.hDC, LOGPIXELSX); + fLogPelsY2 = (float)GetDeviceCaps(pd.hDC, LOGPIXELSY); + + if (fLogPelsX1 > fLogPelsX2) + fScaleX = (fLogPelsX1/fLogPelsX2); + else + fScaleX = (fLogPelsX2/fLogPelsX1); + + if (fLogPelsY1 > fLogPelsY2) + fScaleY = (fLogPelsY1/fLogPelsY2); + else + fScaleY = (fLogPelsY2/fLogPelsY1); + + fScaleX *= subscaler; + fScaleY *= subscaler; + + yTop = 0; + cWidthPels = GetDeviceCaps(pd.hDC, PHYSICALWIDTH); + xLeft = ((cWidthPels - ((int)(fScaleX*bmih.biWidth)))/2)- + GetDeviceCaps(pd.hDC, PHYSICALOFFSETX); + + hDCCaps = GetDeviceCaps(pd.hDC, RASTERCAPS); + + if ( hDCCaps & RC_STRETCHDIB ) + { + StretchDIBits(pd.hDC, xLeft, yTop, + (int)(fScaleX*bmih.biWidth), + (int)(fScaleY*bmih.biHeight), + 0, 0, bmih.biWidth, bmih.biHeight, + surf32->pixels, (BITMAPINFO*)&bmih, + DIB_RGB_COLORS, SRCCOPY); + } + else + if ( hDCCaps & RC_STRETCHBLT ) + { + hbm = CreateDIBitmap(pd.hDC, &bmih, CBM_INIT, + surf32->pixels, (const BITMAPINFO*)&bmih, 0); + if ( hbm ) + { + hdcMem = CreateCompatibleDC( pd.hDC ); + if ( hdcMem ) + { + hOldObject = SelectObject(hdcMem, hbm); + if ( hOldObject ) + { + StretchBlt(pd.hDC, xLeft, yTop, + (int)(fScaleX*bmih.biWidth), + (int)(fScaleY*bmih.biHeight), + hdcMem, 0, 0, bmih.biWidth, bmih.biHeight, SRCCOPY); + SelectObject(hdcMem, hOldObject); + } + } + } + } + else + { + res = -10; + goto error; + } + +////////////////////////////////////////////////////////////////////////////////////// + + nError = EndPage( pd.hDC ); + if ( nError <= 0 ) + { + res = -9; + goto error; + } + + EndDoc( pd.hDC ); + +error: + if ( hdcMem ) DeleteDC( hdcMem ); + if ( hbm ) DeleteObject( hbm ); + if ( surf32 ) SDL_FreeSurface( surf32 ); + + EnableWindow( hWnd, TRUE ); + DestroyWindow( hDlgCancel ); + DeleteDC( pd.hDC ); + return res; +} diff --git a/src/win32_print.h b/src/win32_print.h new file mode 100644 index 000000000..7abb767b0 --- /dev/null +++ b/src/win32_print.h @@ -0,0 +1,22 @@ +/* win32_print.h */ + +/* printing support for Tux Paint */ +/* John Popplewell */ + +/* Sept. 30, 2002 - Oct. 1, 2002 */ + + +#ifndef __WIN32_PRINT_H__ +#define __WIN32_PRINT_H__ + +#ifndef _SDL_H +#include "SDL.h" +#endif + +/* if printcfg is NULL, uses the default printer */ +extern int SurfacePrint( SDL_Surface *surf, + const char *printcfg, + int showdialog ); +extern int IsPrinterAvailable( void ); + +#endif diff --git a/src/win32_print.h-old b/src/win32_print.h-old new file mode 100644 index 000000000..c0ca9434a --- /dev/null +++ b/src/win32_print.h-old @@ -0,0 +1,19 @@ +/* win32_print.h */ + +/* printing support for Tux Paint */ +/* John Popplewell */ + +/* Sept. 30, 2002 - Oct. 1, 2002 */ + + +#ifndef __WIN32_PRINT_H__ +#define __WIN32_PRINT_H__ + +#ifndef _SDL_H +#include "SDL.h" +#endif + +extern int SurfacePrint( SDL_Surface *surf ); +extern int IsPrinterAvailable( void ); + +#endif