* Updated version to 0.9.17

* Stamps now supports SVG vector-based graphics!  (Via Cairo library)
* Discussed SVG Stamps in "Extending Tux Paint."
* Created an "SVG.txt" document, covering SVG software.
* Mentioned descriptive sounds (e.g., "stamp_desc_ll.ogg") in "Extending..."
* Listing new www.tuxpaint.org website URL.
This commit is contained in:
William Kendrick 2006-10-26 08:54:24 +00:00
parent f802626da4
commit b765c86e50
14 changed files with 622 additions and 120 deletions

View file

@ -7,12 +7,12 @@
# bill@newbreedsoftware.com
# http://www.newbreedsoftware.com/tuxpaint/
# June 14, 2002 - October 13, 2006
# June 14, 2002 - October 26, 2006
# The version number, for release:
VER_VERSION=0.9.16
VER_VERSION=0.9.17
VER_DATE=`date +"%Y-%m-%d"`
@ -78,6 +78,11 @@ LOCALE_PREFIX=$(PKG_ROOT)$(PREFIX)/share/locale
NOSOUNDFLAG=__SOUND
# Built with SVG support (via Cairo) by default (override with "make nosvg")
NOSVGFLAG=__SVG
# Where to find cursor shape XBMs
MOUSEDIR=mouse
@ -91,7 +96,9 @@ CURSOR_SHAPES=LARGE
SDL_LIBS=$(shell sdl-config --libs) -lSDL_image -lSDL_ttf $(SDL_MIXER_LIB)
SDL_MIXER_LIB=-lSDL_mixer
SDL_CFLAGS=$(shell sdl-config --cflags)
SDL_CFLAGS=$(shell sdl-config --cflags) $(SVG_CFLAGS)
SVG_LIB=-lcairo -lsvg -lsvg-cairo
SVG_CFLAGS=-I/usr/include/cairo
# The entire set of CFLAGS:
@ -105,7 +112,7 @@ CFLAGS=-O2 -W -Wall -fno-common -ffloat-store \
`src/test-option.sh -Wdeclaration-after-statement`
DEFS=-DDATA_PREFIX=\"$(DATA_PREFIX)/\" \
-D$(NOSOUNDFLAG) -DDOC_PREFIX=\"$(DOC_PREFIX)/\" \
-D$(NOSOUNDFLAG) -D$(NOSVGFLAG) -DDOC_PREFIX=\"$(DOC_PREFIX)/\" \
-DLOCALEDIR=\"$(LOCALE_PREFIX)/\" -DCONFDIR=\"$(CONFDIR)/\" \
-DVER_VERSION=\"$(VER_VERSION)\" \
-DVER_DATE=\"$(VER_DATE)\"
@ -159,8 +166,7 @@ release: releasedir
tar -czvf tuxpaint-$(VER_VERSION).tar.gz tuxpaint-$(VER_VERSION)
# "make nosound" builds the program with sound disabled, and man page,
# from sources:
# "make nosound" builds the program with sound disabled:
nosound:
@echo
@ -169,6 +175,15 @@ nosound:
make SDL_MIXER_LIB= NOSOUNDFLAG=NOSOUND
# "make nosvg" builds the program with SVG (Cairo) support disabled:
nosvg:
@echo
@echo "Building with SVG DISABLED"
@echo
make SVG_LIB= SVG_CFLAGS= NOSVGFLAG=NOSVG
# "make beos" builds the program for BeOS
beos:
@ -1034,6 +1049,7 @@ tuxpaint: obj/tuxpaint.o obj/i18n.o obj/cursor.o obj/pixels.o \
$^ \
$(HQXX_O) \
$(SDL_LIBS) \
$(SVG_LIB) \
-lm $(ARCH_LINKS)
@$(RSRC_CMD)
@$(MIMESET_CMD)

View file

@ -1,20 +1,20 @@
Tux Paint
version 0.9.16
Advanced Stamps HOWTO
version 0.9.17
Advanced Stamps HOWTO
Copyright 2006 by Albert Cahalan for the Tux Paint project
New Breed Software
albert@users.sf.net
http://www.newbreedsoftware .com/tuxpaint/
http://www.tuxpaint.org/
March 8, 2006 - March 8, 2006
March 8, 2006 - October 26, 2006
About this HOWTO
This HOWTO assumes that you want to make an excellent Tux Paint stamp
from a JPEG image. There are easier and faster methods that produce
lower quality.
This HOWTO assumes that you want to make an excellent Tux Paint stamp,
in PNG bitmapped format, from a JPEG image (e.g., a digital photograph).
There are easier and faster methods that produce lower quality.
This HOWTO assumes you are dealing with normal opaque objects. Dealing
with semi-transparent objects (fire, moving fan blade, kid's baloon) or

View file

@ -9,6 +9,25 @@ http://www.newbreedsoftware.com/tuxpaint/
$Id$
2006.October.26 (0.9.17)
* Tool Improvements:
------------------
* Stamps now supports SVG vector-based graphics! (Via Cairo library)
(Experimental; build with "make nosvg" to disable SVG support and
Cairo dependency.)
* Documentation Improvements:
---------------------------
* Discussed SVG Stamps in "Extending Tux Paint."
* Created an "SVG.txt" document, covering SVG software.
* Mentioned descriptive sounds (e.g., "stamp_desc_ll.ogg") in "Extending..."
* Listing new www.tuxpaint.org website URL.
2006.October.19 (0.9.16)
* Interface improvements:

View file

@ -1,14 +1,14 @@
Tux Paint
version 0.9.16
version 0.9.17
Extending Tux Paint
Copyright 2002-2006 by Bill Kendrick and others
New Breed Software
bill@newbreedsoftware.com
http://www.newbreedsoftware.com/tuxpaint/
http://www.tuxpaint.org/
June 14, 2002 - September 28, 2006
June 14, 2002 - October 26, 2006
--------------------------------------------------------------------------
@ -217,28 +217,39 @@ Stamps
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).
As of Tux Paint version 0.9.17, Stamps may be either PNG bitmap images
or SVG vector images. They can be full-color or greyscale. The alpha
(transparency) channel of PNGs 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.
PNGs can be any size, and Tux Paint (by default) provides a set of
sizing buttons to let the user scale the stamp up (larger) and down
(smaller).
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
SVGs are vector-based, and will be scaled appropriately for the canvas
being used in Tux Paint.
Note: If your new PNG 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.
Note: If your new SVG stamps seem to have a lot of whitespace, make
sure the SVG 'document' is no larger than the shape(s) within. If they
are being clipped, make sure the 'document' is large enough to contain
the shape(s). See the documentation file "SVG.txt" for more
information and tips.
Advanced Users: The Advanced Stamps HOWTO describes, in detail, how to
make images which will scale perfectly when used as stamps in
make PNG images which will scale perfectly when used as stamps in
Tux Paint.
--------------------------------------------------------------------------
Description Text
Text (".TXT") files with the same name as the PNG. (e.g.,
Text (".TXT") files with the same name as the PNG or SVG. (e.g.,
"picture.png"'s description is stored in "picture.txt" in the same
directory.)
@ -274,16 +285,16 @@ Stamps
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.)
WAVE (".wav") or OGG Vorbis (".ogg") files with the same name as the
PNG or SVG. (e.g., "picture.svg"'s sound effect is the sound file
"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"
also create WAV or OGG files with the locale's label in the
filename, in the form: "STAMP_LOCALE.EXT"
"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
@ -292,6 +303,31 @@ Stamps
If no localized sound effect can be loaded, Tux Paint will attempt
to load the 'default' sound file. (e.g., "picture.wav")
Note: For descriptive sounds (not sound effects, like a bang or a bird
chirping), consider using the Descriptive Sounds, described below.
--------------------------------------------------------------------------
Descriptive Sound
WAVE (".wav") or OGG Vorbis (".ogg") files with the same name as the
PNG or SVG, followed by "_desc" (e.g., "picture.svg"'s descriptive
sound is the sound file "picture_desc.ogg" in the same directory.)
Language Support
For descriptions in different languages, also create WAV or OGG
files with both "_desc" and the locale's label in the filename, in
the form: "STAMP_desc_LOCALE.EXT"
"picture.png"'s descriptive sound, when Tux Paint is run in Spanish
mode, would be "picture_desc_es.wav". In French mode,
"picture_desc_fr.wav". And so on...
If no localized descriptive sound can be loaded, Tux Paint will
attempt to load the 'default' descriptive sound file. (e.g.,
"picture_desc.wav")
--------------------------------------------------------------------------
Stamp Options
@ -302,9 +338,9 @@ Stamps
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.)
The file has the same name as the PNG or SVG image, but a ".dat"
extension. (e.g., "picture.png"'s data file is the text file
"picture.dat" in the same directory.)
Colored Stamps

View file

@ -1,14 +1,14 @@
Tux Paint
version 0.9.16
version 0.9.17
Frequently Asked Questions
Copyright 2002-2006 by Bill Kendrick and others
New Breed Software
bill@newbreedsoftware.com
http://www.newbreedsoftware.com/tuxpaint/
http://www.tuxpaint.org/
September 14, 2002 - March 8, 2006
September 14, 2002 - October 26, 2006
Drawing-related
@ -168,7 +168,7 @@ Interface Problems
The appropriate fonts for such locales can be downloaded
from the Tux Paint website:
http://www.newbreedsoftware.com/tuxpaint/download/fonts/
http://www.tuxpaint,org/download/fonts/
Printing
@ -571,4 +571,4 @@ Help / Contact
Or post to our 'tuxpaint-users' mailing list:
http://www.newbreedsoftware.com/tuxpaint/lists/
http://www.tuxpaint.org/lists/

View file

@ -2,11 +2,11 @@ INSTALL.txt for Tux Paint
Tux Paint - A simple drawing program for children.
Copyright 2005 by Bill Kendrick and others
Copyright 2006 by Bill Kendrick and others
bill@newbreedsoftware.com
http://www.newbreedsoftware.com/tuxpaint/
http://www.tuxpaint.org/
June 27, 2002 - February 26, 2005
June 27, 2002 -October 26, 2006
$Id$
@ -76,7 +76,14 @@ Requirements:
http://www.gnu.org/software/gettext/
NetPBM Tools [OPTIONAL]
Cairo, libsvg, svg-cairo [EXPERIMENTAL] [can be disabled]
----------------------------------------
As of Tux Paint 0.9.17, SVG vector graphics are supported by the
'Stamps' tool.
http://www.cairographics.org/
NetPBM Tools [OPTIONAL] [No longer used, by default]
------------------------
Under Linux and Unix, the NetPBM tools are what are currently
used for printing. (A PNG is generated by TuxPaint, and converted
@ -183,6 +190,15 @@ Compiling and Installation:
$ make
Disabling SVG support (and hence Cairo, libSVG and svg-cairo dependencies):
---------------------------------------------------------------------------
To disable SVG support (e.g., if your system is not currently supported
by the Cairo library or other SVG-related dependencies), you can
run "make" with "nosvg" as the 'target', instead:
$ make nosvg
Disabling Sound at Compile-time:
--------------------------------
Alternatively, if you don't have a sound card, or would prefer to build

View file

@ -1,5 +1,5 @@
Tux Paint
version 0.9.16
version 0.9.17
Options Documentation
@ -7,9 +7,9 @@
New Breed Software
bill@newbreedsoftware.com
http://www.newbreedsoftware.com/tuxpaint/
http://www.tuxpaint.org/
October 11, 2006
October 26, 2006
--------------------------------------------------------------------------
@ -899,8 +899,8 @@ Setting Your Environment's Locale
/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.')
website, http://www.tuxpaint.org/. (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.

View file

@ -1,5 +1,5 @@
Tux Paint
version 0.9.16
version 0.9.17
A simple drawing program for children
@ -7,9 +7,9 @@
New Breed Software
bill@newbreedsoftware.com
http://www.newbreedsoftware.com/tuxpaint/
http://www.tuxpaint.org/
June 14, 2002 - September 9, 2006
June 14, 2002 - October 26, 2006
--------------------------------------------------------------------------
@ -785,7 +785,9 @@ Doing it Manually
Detailed instructions on command-line and configuration-file
options, for those who don't want to use Tux Paint Config.
* PNG.txt
Notes on creating PNG format images for use in Tux Paint
Notes on creating PNG format bitmapped images for use in Tux Paint
* SVG.txt
Notes on creating SVG format vector images for use in Tux Paint
--------------------------------------------------------------------------
@ -798,4 +800,4 @@ Doing it Manually
You may also wish to participate in the numerous Tux Paint mailing
lists:
http://www.newbreedsoftware.com/tuxpaint/lists/
http://www.tuxpaint.org/lists/

View file

@ -11,7 +11,7 @@ alink="#FF00FF">
alt="Tux&nbsp;Paint"><br>
version
0.9.16
0.9.17
<br>
Advanced Stamps HOWTO</h1>
@ -19,10 +19,9 @@ Advanced Stamps HOWTO</h1>
<p>Copyright 2006 by Albert Cahalan for the Tux Paint project<br>
New Breed Software</p>
<p><a href="mailto:albert@users.sf.net">albert@users.sf.net</a><br>
<a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware
.com/tuxpaint/</a></p>
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
<p>March 8, 2006 - March 8, 2006</p>
<p>March 8, 2006 - October 26, 2006</p>
</center>
@ -30,7 +29,8 @@ New Breed Software</p>
<blockquote>
<p>This HOWTO assumes that you want to make an excellent Tux&nbsp;Paint
stamp from a JPEG image. There are easier and faster methods that
stamp, in PNG bitmapped format, from a JPEG image (e.g., a digital
photograph). There are easier and faster methods that
produce lower quality.</p>
<p>This HOWTO assumes you are dealing with normal opaque objects. Dealing

View file

@ -12,7 +12,7 @@ alt="Tux&nbsp;Paint"><br>
version
0.9.16
0.9.17
<br>
Extending Tux Paint</h1>
@ -21,9 +21,9 @@ Extending Tux Paint</h1>
New Breed Software</p>
<p><a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a><br>
<a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware.com/tuxpaint/</a></p>
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
<p>June 14, 2002 - September 28, 2006</p>
<p>June 14, 2002 - October 26, 2006</p>
</center>
<hr size=2 noshade>
@ -307,23 +307,34 @@ effect.</p>
<img src="images/stamp_edit.png" width=128 height=147 alt="" align=right>
<p>The Stamps used by Tux&nbsp;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).</p>
<p>As of Tux&nbsp;Paint version 0.9.17, Stamps may be either PNG
bitmap images or SVG vector images. They can be full-color or greyscale.
The alpha (transparency) channel of PNGs is used to determine the actual
shape of the picture (otherwise you'll stamp a large rectangle on your
drawings).</p>
<p>The PNGs can be any size, but in practice, a 100&nbsp;pixels wide by
100&nbsp;pixels tall (100&nbsp;x&nbsp;100) is quite large for
Tux&nbsp;Paint.</p>
<p>PNGs can be any size, and Tux&nbsp;Paint (by default) provides
a set of sizing buttons to let the user scale the stamp up (larger)
and down (smaller).</p>
<p>Note: If your new stamps all have solid rectangular-shaped outlines
<p>SVGs are vector-based, and will be scaled appropriately for the
canvas being used in Tux&nbsp;Paint.</p>
<p>Note: If your new PNG 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
"<a href="../PNG.txt">PNG.txt</a>" for more information and tips.</p>
<p><b>Advanced Users:</b> The <a href="ADVANCED-STAMPS-HOWTO.html">Advanced
Stamps HOWTO</a> describes, in detail, how to make images which will
scale perfectly when used as stamps in Tux&nbsp;Paint.</p>
<p>Note: If your new SVG stamps seem to have a lot of whitespace,
make sure the SVG 'document' is no larger than the shape(s) within.
If they are being clipped, make sure the 'document' is large enough
to contain the shape(s). See the documentation file
"<a href="../SVG.txt">SVG.txt</a>" for more information and tips.</p>
<p><b>Advanced Users:</b> The
<a href="ADVANCED-STAMPS-HOWTO.html">Advanced Stamps HOWTO</a> describes,
in detail, how to make PNG images which will scale perfectly when used as
stamps in Tux&nbsp;Paint.</p>
<br clear=all>
</blockquote>
@ -332,7 +343,7 @@ effect.</p>
<h3>Description Text</h3>
<blockquote>
<p>Text (".TXT") files with the same name as the PNG.
<p>Text (".TXT") files with the same name as the PNG or SVG.
(e.g., "<code>picture.png</code>"'s description is stored in
"<code>picture.txt</code>" in the same directory.)</p>
@ -372,17 +383,18 @@ effect.</p>
<h3>Sound Effects</h3>
<blockquote>
<p>WAVE (".WAV") files with the same name as the PNG.
(e.g., "<code>picture.png</code>"'s sound effect is the sound
<p>WAVE (".wav") or OGG Vorbis (".ogg")
files with the same name as the PNG or SVG.
(e.g., "<code>picture.svg</code>"'s sound effect is the sound file
"<code>picture.wav</code>" in the same directory.)</p>
<h4>Language Support</h4>
<blockquote>
<p>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: "<code><b>STAMP_LOCALE</b>.wav</code>"</p>
also create WAV or OGG files with the locale's label in the filename, in
the form: "<code><b>STAMP_LOCALE.EXT</b></code>"</p>
<p>"<code>picture.png</code>"'s sound effect, when Tux&nbsp;Paint is run
in Spanish mode, would be "<code>picture_es.wav</code>".
In French mode, "<code>picture_fr.wav</code>". And so on...</p>
@ -391,6 +403,37 @@ effect.</p>
attempt to load the 'default' sound file.
(e.g., "<code>picture.wav</code>")</p>
</blockquote>
<p>Note: For descriptive sounds (not sound effects, like a bang or
a bird chirping), consider using the Descriptive&nbsp;Sounds,
described below.</p>
</blockquote>
<hr size=1 noshade>
<h3>Descriptive Sound</h3>
<blockquote>
<p>WAVE (".wav") or OGG Vorbis (".ogg")
files with the same name as the PNG or SVG, followed by
"<code>_desc</code>" (e.g., "<code>picture.svg</code>"'s descriptive
sound is the sound file "<code>picture_desc.ogg</code>" in the same
directory.)</p>
<h4>Language Support</h4>
<blockquote>
<p>For descriptions in different languages,
also create WAV or OGG files with both "<code>_desc</code>" and
the locale's label in the filename, in
the form: "<code><b>STAMP_desc_LOCALE.EXT</b></code>"</p>
<p>"<code>picture.png</code>"'s descriptive sound, when Tux&nbsp;Paint
is run in Spanish mode, would be "<code>picture_desc_es.wav</code>".
In French mode, "<code>picture_desc_fr.wav</code>". And so on...</p>
<p>If no localized descriptive sound can be loaded, Tux&nbsp;Paint will
attempt to load the 'default' descriptive sound file.
(e.g., "<code>picture_desc.wav</code>")</p>
</blockquote>
</blockquote>
<hr size=1 noshade>
@ -403,9 +446,10 @@ effect.</p>
<p>A stamp data file is simply a text file containing the options.</p>
<p>The file has the same name as the PNG image, but a "<code>.dat</code>"
extension. (e.g., "<code>picture.png</code>"'s data file is the text
file "<code>picture.dat</code>" in the same directory.)</p>
<p>The file has the same name as the PNG or SVG image, but a
"<code>.dat</code>" extension. (e.g., "<code>picture.png</code>"'s
data file is the text file "<code>picture.dat</code>" in the same
directory.)</p>
<h4>Colored Stamps</h4>
<blockquote>

View file

@ -11,7 +11,7 @@ alink="#FF00FF">
alt="Tux&nbsp;Paint"><br>
version
0.9.16
0.9.17
<br>
Frequently Asked Questions</h1>
@ -20,9 +20,9 @@ Frequently Asked Questions</h1>
New Breed Software</p>
<p><a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a><br>
<a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware.com/tuxpaint/</a></p>
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
<p>September 14, 2002 - March 8, 2006</p>
<p>September 14, 2002 - October 26, 2006</p>
</center>
<h2>Drawing-related</h2>
@ -197,8 +197,8 @@ New Breed Software</p>
Tux&nbsp;Paint website:</p>
<blockquote><p>
<a href="http://www.newbreedsoftware.com/tuxpaint/download/fonts/"
>http://www.newbreedsoftware.com/tuxpaint/download/fonts/</a>
<a href="http://www.tuxpaint.org/download/fonts/"
>http://www.tuxpaint,org/download/fonts/</a>
</p></blockquote>
</li>
</ul>
@ -648,8 +648,7 @@ New Breed Software</p>
<p>Or post to our 'tuxpaint-users' mailing list:</p>
<blockquote><p><a href="http://www.newbreedsoftware.com/tuxpaint/lists/"
>http://www.newbreedsoftware.com/tuxpaint/lists/</a></p></blockquote>
<blockquote><p><a href="http://www.tuxpaint.org/lists/">http://www.tuxpaint.org/lists/</a></p></blockquote>
</body></html>

View file

@ -11,7 +11,7 @@ alink="#FF00FF">
version
0.9.16
0.9.17
</h1>
<h2>Options Documentation</h2>
@ -20,9 +20,9 @@ version
New Breed Software</p>
<p><a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a><br>
<a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware.com/tuxpaint/</a></p>
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
<p>October 11, 2006</p>
<p>October 26, 2006</p>
</center>
<hr size=2 noshade>
@ -1477,8 +1477,7 @@ New Breed Software</p>
You can download fonts for supported languages from Tux&nbsp;Paint's
website,
<a href="http://www.newbreedsoftware.com/tuxpaint/">
http://www.newbreedsoftware.com/tuxpaint/</a>.
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a>.
(Look in the 'Fonts' section under 'Download.')<p>
Under Unix and Linux, you can use the <code>Makefile</code> that comes

View file

@ -12,7 +12,7 @@ alt="Tux&nbsp;Paint"><br>
version
0.9.16
0.9.17
</h1>
<h3>A simple drawing program for children</h3>
@ -21,9 +21,9 @@ version
New Breed Software</p>
<p><a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a><br>
<a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware.com/tuxpaint/</a></p>
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
<p>June 14, 2002 - September 9, 2006</p>
<p>June 14, 2002 - October 26, 2006</p>
</center>
<hr size=2 noshade>
@ -1005,8 +1005,9 @@ New Breed Software</p>
manually.</p>
<p>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.)</p>
and saving a PNG format file. (See the documentation file
"<a href="../PNG.txt">PNG.txt</a>" for a list of suggested software,
and other references.)</p>
<p>Reduce the size of the image to no wider than 448&nbsp;pixels across and
no taller than 376&nbsp;pixels tall. (i.e., the maximum size
@ -1070,7 +1071,10 @@ New Breed Software</p>
for those who don't want to use Tux&nbsp;Paint&nbsp;Config.
<li><a href="../PNG.txt">PNG.txt</a><br>
Notes on creating PNG format images for use in Tux&nbsp;Paint
Notes on creating PNG format bitmapped images for use in Tux&nbsp;Paint
<li><a href="../SVG.txt">SVG.txt</a><br>
Notes on creating SVG format vector images for use in Tux&nbsp;Paint
</ul>
</blockquote>
@ -1090,7 +1094,7 @@ New Breed Software</p>
lists:</p>
<blockquote>
<a href="http://www.newbreedsoftware.com/tuxpaint/lists/">http://www.newbreedsoftware.com/tuxpaint/lists/</a>
<a href="http://www.tuxpaint.org/lists/">http://www.tuxpaint.org/lists/</a>
</blockquote>
</blockquote>

View file

@ -22,7 +22,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
(See COPYING.txt)
June 14, 2002 - October 9, 2006
June 14, 2002 - October 26, 2006
$Id$
*/
@ -116,6 +116,9 @@ static unsigned draw_colors(unsigned action);
/////////////////////////////////////////////////////////////////////
// hide all scale-related values here
// FIXME: Does this take into account taller-than-wide canvas sizes?
// (e.g., 768x1024 on a tablet PC in 'portrait' configuration?)
// -bjk 2006.10.26
typedef struct scaleparams
{
unsigned numer, denom;
@ -335,6 +338,19 @@ typedef struct safer_dirent
#endif
#endif
#ifndef NOSVG
#include "cairo.h"
#include "svg.h"
#include "svg-cairo.h"
#if !defined(CAIRO_H) || !defined(SVG_H) || !defined(SVG_CAIRO_H)
#error "---------------------------------------------------"
#error "If you installed Cairo, libSVG or svg-cairo from packages, be sure"
#error "to get the development package, as well!"
#error "(e.g., 'libcairo2-dev.rpm')"
#error "---------------------------------------------------"
#endif
#endif
#ifndef SAVE_AS_BMP
#include <png.h>
#define FNAME_EXTENSION ".png"
@ -958,7 +974,7 @@ static int stamp_tintable(int stamp)
#define SHAPE_BRUSH_NAME "round_03.png"
#define SHAPE_BRUSH_NAME "aa_round_03.png"
static int num_brushes, num_brushes_max, shape_brush = 0;
static SDL_Surface **img_brushes;
static int * brushes_frames = NULL;
@ -1224,6 +1240,15 @@ static char *debug_gettext(const char *str);
static int charsize(char c);
#endif
#ifndef NOSVG
SDL_Surface * load_svg(char * file);
SDL_Surface * myIMG_Load(char * file);
float pick_best_scape(unsigned int orig_w, unsigned int orig_h,
unsigned int max_w, unsigned int max_h);
#else
#define myIMG_Load IMG_Load
#endif
#define MAX_UTF8_CHAR_LENGTH 6
@ -5496,7 +5521,7 @@ static void set_active_stamp(void)
{
stamp_type *sd = stamp_data[cur_stamp];
unsigned len = strlen(sd->stampname);
char *buf = alloca(len + strlen("_mirror.png") + 1);
char *buf = alloca(len + strlen("_mirror.EXT") + 1);
if (active_stamp)
SDL_FreeSurface(active_stamp);
@ -5508,11 +5533,29 @@ static void set_active_stamp(void)
{
memcpy(buf + len, "_mirror.png", 12);
active_stamp = do_loadimage(buf, 0);
#ifndef NOSVG
if (active_stamp == NULL)
{
memcpy(buf + len, "_mirror.svg", 12);
active_stamp = do_loadimage(buf, 0);
}
#endif
}
if (!active_stamp)
{
memcpy(buf + len, ".png", 5);
active_stamp = do_loadimage(buf, 0);
#ifndef NOSVG
if (active_stamp == NULL)
{
memcpy(buf + len, ".svg", 5);
active_stamp = do_loadimage(buf, 0);
}
#endif
if (!active_stamp)
active_stamp = thumbnail(img_dead40x40, 40, 40, 1); // copy it
if (sd->mirrored)
@ -5527,7 +5570,7 @@ static void get_stamp_thumb(stamp_type * sd)
{
SDL_Surface *bigimg = NULL;
unsigned len = strlen(sd->stampname);
char *buf = alloca(len + strlen("_mirror.png") + 1);
char *buf = alloca(len + strlen("_mirror.EXT") + 1);
SDL_Surface *wrongmirror = NULL;
int need_mirror = 0;
double ratio;
@ -5591,6 +5634,15 @@ static void get_stamp_thumb(stamp_type * sd)
{
memcpy(buf + len, "_mirror.png", 12);
bigimg = do_loadimage(buf, 0);
#ifndef NOSVG
if (bigimg == NULL)
{
memcpy(buf + len, "_mirror.svg", 12);
bigimg = do_loadimage(buf, 0);
}
#endif
if (bigimg)
{
if (wrongmirror)
@ -5615,6 +5667,15 @@ static void get_stamp_thumb(stamp_type * sd)
{
memcpy(buf + len, ".png", 5);
bigimg = do_loadimage(buf, 0);
#ifndef NOSVG
if (bigimg == NULL)
{
memcpy(buf + len, ".svg", 5);
bigimg = do_loadimage(buf, 0);
}
#endif
if (sd->mirrored)
need_mirror = 1; // want to mirror after scaling
}
@ -5661,13 +5722,26 @@ static void loadstamp_callback(SDL_Surface * screen,
while (i--)
{
char fname[512];
char *dotpng = (char *) strcasestr(files[i].str, ".png");
const char *dotext, *ext, *mirror_ext;
ext = ".png";
mirror_ext = "_mirror.png";
dotext = (char *) strcasestr(files[i].str, ext);
#ifndef NOSVG
if (dotext == NULL)
{
ext = ".svg";
mirror_ext = "_mirror.svg";
dotext = (char *) strcasestr(files[i].str, ext);
}
#endif
show_progress_bar(screen);
if (dotpng > files[i].str && !strcasecmp(dotpng, ".png")
&& (dotpng - files[i].str + 1 + dirlen < sizeof fname)
&& !strcasestr(files[i].str, "_mirror.png"))
if (dotext > files[i].str && !strcasecmp(dotext, ext)
&& (dotext - files[i].str + 1 + dirlen < sizeof fname)
&& !strcasestr(files[i].str, mirror_ext))
{
snprintf(fname, sizeof fname, "%s/%s", dir, files[i].str);
if (num_stamps == max_stamps)
@ -5677,10 +5751,10 @@ static void loadstamp_callback(SDL_Surface * screen,
}
stamp_data[num_stamps] = calloc(1, sizeof *stamp_data[num_stamps]);
stamp_data[num_stamps]->stampname =
malloc(dotpng - files[i].str + 1 + dirlen + 1);
malloc(dotext - files[i].str + 1 + dirlen + 1);
memcpy(stamp_data[num_stamps]->stampname, fname,
dotpng - files[i].str + 1 + dirlen);
stamp_data[num_stamps]->stampname[dotpng - files[i].str + 1 + dirlen] =
dotext - files[i].str + 1 + dirlen);
stamp_data[num_stamps]->stampname[dotext - files[i].str + 1 + dirlen] =
'\0';
num_stamps++;
}
@ -7419,7 +7493,7 @@ static SDL_Surface *do_loadimage(const char *const fname, int abort_on_error)
/* Load the image file: */
s = IMG_Load(fname);
s = myIMG_Load(fname);
if (s == NULL)
{
if (abort_on_error)
@ -9784,7 +9858,7 @@ static void strip_trailing_whitespace(char *buf)
static char *loaddesc(const char *const fname, Uint8 * locale_text)
{
char *txt_fname;
char *txt_fname, *extptr;
char buf[256], def_buf[256];
int found, got_first;
FILE *fi;
@ -9793,9 +9867,16 @@ static char *loaddesc(const char *const fname, Uint8 * locale_text)
txt_fname = strdup(fname);
*locale_text = 0;
if (strcasestr(txt_fname, ".png") != NULL) // FIXME: isn't this always OK?
extptr = strcasestr(txt_fname, ".png");
#ifndef NOSVG
if (extptr == NULL)
extptr = strcasestr(txt_fname, ".svg");
#endif
if (extptr != NULL)
{
strcpy((char *) strcasestr(txt_fname, ".png"), ".txt");
strcpy((char *) extptr, ".txt");
fi = fopen(txt_fname, "r");
free(txt_fname);
@ -10173,6 +10254,16 @@ static void load_starter(char *img_id)
snprintf(fname, sizeof(fname), "%s/%s.png", dirname, img_id);
tmp_surf = IMG_Load(fname);
#ifndef NOSVG
if (tmp_surf == NULL)
{
/* Try loading an SVG */
snprintf(fname, sizeof(fname), "%s/%s.svg", dirname, img_id);
tmp_surf = load_svg(fname);
}
#endif
if (tmp_surf != NULL)
{
img_starter = SDL_DisplayFormatAlpha(tmp_surf);
@ -10211,6 +10302,15 @@ static void load_starter(char *img_id)
tmp_surf = IMG_Load(fname);
}
#ifndef NOSVG
/* (Failed? Try SVG next) */
if (tmp_surf == NULL)
{
snprintf(fname, sizeof(fname), "%s/%s-back.svg", dirname, img_id);
tmp_surf = load_svg(fname);
}
#endif
if (tmp_surf != NULL)
{
img_starter_bkgd = SDL_DisplayFormat(tmp_surf);
@ -12152,6 +12252,17 @@ void do_open(void)
img = IMG_Load(fname);
}
#ifndef NOSVG
if (img == NULL)
{
/* (Try SVG next) */
snprintf(fname, sizeof(fname), "%s/%s-back.svg",
dirname[d_places[num_files]], d_names[num_files]);
img = load_svg(fname);
}
#endif
}
@ -12166,7 +12277,7 @@ void do_open(void)
#ifdef SAVE_AS_BMP
img = SDL_LoadBMP(fname);
#else
img = IMG_Load(fname);
img = myIMG_Load(fname);
#endif
}
@ -12885,7 +12996,7 @@ void do_open(void)
#ifdef SAVE_AS_BMP
img = SDL_LoadBMP(fname);
#else
img = IMG_Load(fname);
img = myIMG_Load(fname);
#endif
if (img == NULL)
@ -13226,7 +13337,7 @@ int do_slideshow(void)
#ifdef SAVE_AS_BMP
img = SDL_LoadBMP(fname);
#else
img = IMG_Load(fname);
img = myIMG_Load(fname);
#endif
@ -13818,7 +13929,7 @@ void play_slideshow(int * selected, int num_selected, char * dirname,
#ifdef SAVE_AS_BMP
img = SDL_LoadBMP(fname);
#else
img = IMG_Load(fname);
img = myIMG_Load(fname);
#endif
if (img != NULL)
@ -15455,3 +15566,259 @@ int paintsound(int size)
else
return(SND_PAINT1 + (size / 12));
}
#ifndef NOSVG
// Based on cairo-demo/sdl/main.c from Cairo (GPL'd, (c) 2004 Eric Windisch):
SDL_Surface * load_svg(char * file)
{
svg_cairo_t * scr;
int bpp, btpp, stride;
unsigned int width, height;
unsigned int rwidth, rheight;
float scale;
unsigned char * image;
cairo_surface_t * cairo_surface;
cairo_t * cr;
SDL_Surface * sdl_surface, * sdl_surface_tmp;
Uint32 rmask, gmask, bmask, amask;
svg_cairo_status_t res;
#ifdef DEBUG
printf("Attempting to load \"%s\" as an SVG\n", file);
#endif
// Create the SVG cairo stuff:
if (svg_cairo_create(&scr) != SVG_CAIRO_STATUS_SUCCESS)
{
#ifdef DEBUG
printf("svg_cairo_create() failed\n");
#endif
return(NULL);
}
// Parse the SVG file:
if (svg_cairo_parse(scr, file) != SVG_CAIRO_STATUS_SUCCESS)
{
svg_cairo_destroy(scr);
#ifdef DEBUG
printf("svg_cairo_parse(%s) failed\n", file);
#endif
return(NULL);
}
// Get the natural size of the SVG
svg_cairo_get_size(scr, &rwidth, &rheight);
#ifdef DEBUG
printf("svg_get_size(): %d x %d\n", rwidth, rheight);
#endif
if (rwidth == 0 || rheight == 0)
{
svg_cairo_destroy(scr);
#ifdef DEBUG
printf("SVG %s had 0 width or height!\n", file);
#endif
return(NULL);
}
// We will create a CAIRO_FORMAT_ARGB32 surface. We don't need to match
// the screen SDL format, but we are interested in the alpha bit...
bpp = 32;
btpp = 4;
// We want to render at full Tux Paint canvas size, so that the stamp
// at its largest scale remains highest quality (no pixelization):
// (but not messing up the aspect ratio)
scale = pick_best_scape(rwidth, rheight, r_canvas.w, r_canvas.h);
width = ((float) rwidth * scale);
height = ((float) rheight * scale);
#ifdef DEBUG
printf("scaling to %d x %d (%f scale)\n", width, height, scale);
#endif
// scanline width
stride = width * btpp;
// Allocate space for an image:
image = calloc(stride * height, 1);
#ifdef DEBUG
printf("calling cairo_image_surface_create_for_data(..., CAIRO_FORMAT_ARGB32, %d(w), %d(h), %d(stride))\n", width, height, stride);
#endif
// Create the cairo surface with the adjusted width and height
cairo_surface = cairo_image_surface_create_for_data(image,
CAIRO_FORMAT_ARGB32,
width, height, stride);
cr = cairo_create(cairo_surface);
if (cr == NULL)
{
svg_cairo_destroy(scr);
#ifdef DEBUG
printf("cairo_create() failed\n");
#endif
return(NULL);
}
// Scale it (proportionally)
cairo_scale(cr, scale, scale); // no return value :(
// Render SVG to our surface:
res = svg_cairo_render(scr, cr);
// Clean up:
cairo_surface_destroy(cairo_surface);
cairo_destroy(cr);
svg_cairo_destroy(scr);
if (res != SVG_CAIRO_STATUS_SUCCESS)
{
#ifdef DEBUG
printf("svg_cairo_render() failed\n");
#endif
return(NULL);
}
// Adjust the SDL surface to match the cairo surface created
// (surface mask of ARGB) NOTE: Is this endian-agnostic? -bjk 2006.10.25
rmask = 0x00ff0000;
gmask = 0x0000ff00;
bmask = 0x000000ff;
amask = 0xff000000;
// Create the SDL surface using the pixel data stored:
sdl_surface_tmp = SDL_CreateRGBSurfaceFrom((void *) image, width, height,
bpp, stride,
rmask, gmask, bmask, amask);
if (sdl_surface_tmp == NULL)
{
#ifdef DEBUG
printf("SDL_CreateRGBSurfaceFrom() failed\n");
#endif
return(NULL);
}
// Convert the SDL surface to the display format, for faster blitting:
sdl_surface = SDL_DisplayFormatAlpha(sdl_surface_tmp);
SDL_FreeSurface(sdl_surface_tmp);
if (sdl_surface == NULL)
{
#ifdef DEBUG
printf("SDL_DisplayFormatAlpha() failed\n");
#endif
return(NULL);
}
#ifdef DEBUG
printf("SDL surface from %d x %d SVG is %d x %d\n",
rwidth, rheight, sdl_surface->w, sdl_surface->h);
#endif
return(sdl_surface);
}
// Load an image; call load_svg() (above, to call Cairo and SVG-Cairo funcs)
// if we notice it's an SVG file,
// otherwise call SDL_Image lib's IMG_Load() (for PNGs, JPEGs, BMPs, etc.)
SDL_Surface * myIMG_Load(char * file)
{
if (strlen(file) > 4 && strcasecmp(file + strlen(file) - 4, ".svg") == 0)
return(load_svg(file));
else
return(IMG_Load(file));
}
float pick_best_scape(unsigned int orig_w, unsigned int orig_h,
unsigned int max_w, unsigned int max_h)
{
float aspect, scale, wscale, hscale;
aspect = (float) orig_w / (float) orig_h;
#ifdef DEBUG
printf("trying to fit %d x %d (aspect: %.4f) into %d x %d\n",
orig_w, orig_h, aspect, max_w, max_h);
#endif
wscale = (float) max_w / (float) orig_w;
hscale = (float) max_h / (float) orig_h;
#ifdef DEBUG
printf("max_w / orig_w = wscale: %.4f\n", wscale);
printf("max_h / orig_h = hscale: %.4f\n", hscale);
printf("\n");
#endif
if (aspect >= 1)
{
// Image is wider-than-tall (or square)
scale = wscale;
#ifdef DEBUG
printf("Wider-than-tall. Using wscale.\n");
printf("new size would be: %d x %d\n",
(int) ((float) orig_w * scale),
(int) ((float) orig_h * scale));
#endif
if ((float) orig_h * scale > (float) max_h)
{
scale = hscale;
#ifdef DEBUG
printf("Too tall! Using hscale!\n");
printf("new size would be: %d x %d\n",
(int) ((float) orig_w * scale),
(int) ((float) orig_h * scale));
#endif
}
}
else
{
// Taller-than-wide
scale = hscale;
#ifdef DEBUG
printf("Taller-than-wide. Using hscale.\n");
printf("new size would be: %d x %d\n",
(int) ((float) orig_w * scale),
(int) ((float) orig_h * scale));
#endif
if ((float) orig_w * scale > (float) max_w)
{
scale = wscale;
#ifdef DEBUG
printf("Too wide! Using wscale!\n");
printf("new size would be: %d x %d\n",
(int) ((float) orig_w * scale),
(int) ((float) orig_h * scale));
#endif
}
}
#ifdef DEBUG
printf("\n");
printf("Final scale: %.4f\n", scale);
#endif
return(scale);
}
#endif