Brushes can include spacing information.

Added an animated, directional, colored, spaced 'squirrel' brush, as an
example of all new brush features.
----------------------------------------------------------------------
This commit is contained in:
William Kendrick 2006-09-04 11:06:23 +00:00
parent 1f5665437e
commit b5a3d6a6d8
4 changed files with 232 additions and 195 deletions

View file

@ -9,7 +9,8 @@ http://www.newbreedsoftware.com/tuxpaint/
$Id$
2006.September.3 (0.9.16)
2006.September.4 (0.9.16)
* Interface improvements:
-----------------------
* New slideshow tool! ("Slides", available in "Open" dialog.)
@ -70,19 +71,24 @@ $Id$
* Brushes may be animated. (Implements RFE #1522694)
(Create an image (W*N) x H in size (where N is number of frames),
then create a ".dat" file for the brush containing "frames=N".
then create a ".dat" file for the brush, containing the line "frames=N".
* Brushes can include directional variations. (Implements RFE #1522694)
(Create an image (W*3) x (H*3) in size, then create a ".dat" file
for the brush containing the line: "directional". Each of the 9
for the brush, containing the line: "directional". Each of the 9
sectors corresponds to 8 different directions, and center.)
* Brushes can include spacing information.
(Create a ".dat" file for the brush, containing the line "spacing=N".
* New Brushes:
------------
* Vines (animated)
* Angle Lines (directional)
* Squirrel (animated, directional)
* New Starter Images:
-------------------

View file

@ -143,6 +143,16 @@ Brushes
(e.g., "brush.png"'s data file is the text file "brush.dat" in the
same directory.)
Brush Spacing
As of Tux Paint version 0.9.16, you can now specify the spacing for
brushes (that is, how often they are drawn). By default, the spacing
will be the brush's height, divided by 4.
Add a line containing the line "spacing=N" to the brush's data file,
where N is the spacing you want for the brush. (The lower the
number, the more often the brush is drawn.)
Animated Brushes
As of Tux Paint version 0.9.16, you may now create animated brushes.
@ -181,296 +191,293 @@ Brushes
pixels of the image represent the 9 direction shapes for the first
frame, for example.)
Place the brush image PNGs (and any data text files) in the "brushes"
directory.
Place the brush image PNGs (and any data text files) 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.
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.)
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.
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 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.
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.
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.
Advanced Users: The Advanced Stamps HOWTO describes, in detail, how
to make images which will scale perfectly when used as stamps in
Tux Paint.
Advanced Users: The Advanced Stamps HOWTO describes, in detail, how to
make 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.,
"picture.png"'s description is stored in "picture.txt" in the same
directory.)
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 US English
description of the stamp's image. It must be encoded in UTF-8.
The first line of the text file will be used as the US English
description of the stamp's image. It must be encoded in UTF-8.
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).
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).
The beginning of the line should correspond to the language code
of the language in question (e.g., "fr" for French, and "zh_tw"
for Traditional Chinese), followed by ".utf8=" and the translated
description (encoded in UTF-8).
The beginning of the line should correspond to the language code of
the language in question (e.g., "fr" for French, and "zh_tw" for
Traditional Chinese), followed by ".utf8=" and the translated
description (encoded in UTF-8).
There are scripts in the "po" directory for converting the text
files to PO format (and back) for easy translation to different
languages. Therefore you should never add or change translations
in the .txt files directly.
There are scripts in the "po" directory for converting the text
files to PO format (and back) for easy translation to different
languages. Therefore you should never add or change translations in
the .txt files directly.
If no translation is available for the language Tux Paint is
currently running in, the US English text is used.
If no translation is available for the language Tux Paint is
currently running in, the US English text 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...
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.)
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"
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...
"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")
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.
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.
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 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."
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.)
"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
(from "alpha" channel). The color of the stamp comes out solid.
Nothing about the original image is used except the transparency
(from "alpha" channel). The color of the stamp comes out solid.
Add a line containing the word "colorable" to the stamp's data
file.
Add a line containing 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.)
"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 a line containing the word "tintable" to the stamp's data
file.
Add a line containing the word "tintable" to the stamp's data
file.
Tinting Options:
Depending on the contents of your stamp, you might want to
have Tux Paint use one of a numer of methods when tinting it.
Add one of the following lines to the stamp's data file:
Depending on the contents of your stamp, you might want to have
Tux Paint use one of a numer of methods when tinting it. Add one
of the following lines to the stamp's data file:
"tinter=normal" (default)
This is the normal tinting mode.
"tinter=normal" (default)
This is the normal tinting mode.
"tinter=anyhue"
This is ???.
"tinter=anyhue"
This is ???.
"tinter=narrow"
This is ???.
"tinter=narrow"
This is ???.
"tinter=vector"
This is ???.
"tinter=vector"
This is ???.
Unalterable Stamps
By default, a stamp can be flipped upside down, shown as a mirror
image, or both. This is done using the control buttons below the
stamp selector, at the lower right side of the screen in
Tux Paint.
By default, a stamp can be flipped upside down, shown as a mirror
image, or both. This is done using the control buttons below the
stamp selector, at the lower right side of the screen in Tux Paint.
Sometimes, it doesn't make sense for a stamp to be flippable or
mirrored; for example, stamps of letters or numbers. Sometimes
stamps are symmetrical, so letting the user flip or mirror them
isn't useful.
Sometimes, it doesn't make sense for a stamp to be flippable or
mirrored; for example, stamps of letters or numbers. Sometimes
stamps are symmetrical, so letting the user flip or mirror them
isn't useful.
To make a stamp un-flippable, add the option "noflip" to the
stamp's data file.
To make a stamp un-flippable, add the option "noflip" to the stamp's
data file.
To keep a stamp from being mirrored, add a line containing the
word "nomirror" to the stamp's data file.
To keep a stamp from being mirrored, add a line containing the word
"nomirror" to the stamp's data file.
Initial Stamp Size
By default, Tux Paint assumes that your stamp is sized
appropriately for unscaled display on a 608x472 canvas. This is
the original Tux Paint canvas size, provided by a 640x480 screen.
Tux Paint will then adjust the stamp according to the current
canvas size and, if enabled, the user's stamp size controls.
By default, Tux Paint assumes that your stamp is sized appropriately
for unscaled display on a 608x472 canvas. This is the original
Tux Paint canvas size, provided by a 640x480 screen. Tux Paint will
then adjust the stamp according to the current canvas size and, if
enabled, the user's stamp size controls.
If your stamp would be too big or too small, you can specify a
scale factor. If your stamp would be 2.5 times as wide (or tall)
as it should be, add the option "scale 40%" or "scale 5/2" or
"scale 2.5" or "scale 2:5" to your image. You may include an "="
if you wish, as in "scale=40%".
If your stamp would be too big or too small, you can specify a scale
factor. If your stamp would be 2.5 times as wide (or tall) as it
should be, add the option "scale 40%" or "scale 5/2" or "scale 2.5"
or "scale 2:5" to your image. You may include an "=" if you wish, as
in "scale=40%".
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"...
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"...
Pre-Mirrored Images
In some cases, you may wish to provide a pre-drawn version of a
stamp's mirror-image. For example, imagine a picture of a fire truck
with the words "Fire Department" written across the side. You
probably do not want that text to appear backwards when the image is
flipped!
In some cases, you may wish to provide a pre-drawn version of a
stamp's mirror-image. For example, imagine a picture of a fire truck
with the words "Fire Department" written across the side. You probably
do not want that text to appear backwards when the image is flipped!
To create a mirrored version of a stamp that you want Tux Paint to
use, rather than mirroring one on its own, simply create a second
".png" graphics file with the same name, except with the string
"_mirror" before the filename extension.
To create a mirrored version of a stamp that you want Tux Paint to
use, rather than mirroring one on its own, simply create a second
".png" graphics file with the same name, except with the string
"_mirror" before the filename extension.
For example, for the stamp "truck.png" you would create another file
named "truck_mirror.png", which will be used when the stamp is
mirrored (rather than using a backwards version of 'truck.png').
For example, for the stamp "truck.png" you would create another file
named "truck_mirror.png", which will be used when the stamp is
mirrored (rather than using a backwards version of 'truck.png').
--------------------------------------------------------------------------
Fonts
The fonts used by Tux Paint are TrueType Fonts (TTF).
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.
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.
--------------------------------------------------------------------------
'Starters'
'Starter' images appear in the 'Open' dialog, along with pictures
you've created. They have a green button background, instead of blue.
'Starter' images appear in the 'Open' dialog, along with pictures you've
created. They have a green button background, instead of blue.
Unlike your saved pictures, however, when you select and open a
'starter,' you're actually creating a new drawing. Instead of being
blank, though, the new drawing contains the contents of the 'starter.'
Additionally, as you edit your new picture, the contents of the
original 'starter' affect it.
Unlike your saved pictures, however, when you select and open a
'starter,' you're actually creating a new drawing. Instead of being
blank, though, the new drawing contains the contents of the 'starter.'
Additionally, as you edit your new picture, the contents of the original
'starter' affect it.
Coloring-Book Style
Coloring-Book Style
The most basic kind of 'starter' is similar to a picture in a
coloring book. It's an outline of a shape which you can then color
in and add details to. In Tux Paint, as you draw, type text, or
stamp stamps, the outline remains 'above' what you draw. You can
erase the parts of the drawing you made, but you can't erase the
outline.
The most basic kind of 'starter' is similar to a picture in a coloring
book. It's an outline of a shape which you can then color in and add
details to. In Tux Paint, as you draw, type text, or stamp stamps, the
outline remains 'above' what you draw. You can erase the parts of the
drawing you made, but you can't erase the outline.
To create this kind of 'starter' image, simply draw an outlined
picture in a paint program, make the rest of the graphic transparent
(that will come out as white in Tux Paint), and save it as a PNG
format file.
To create this kind of 'starter' image, simply draw an outlined
picture in a paint program, make the rest of the graphic transparent
(that will come out as white in Tux Paint), and save it as a PNG
format file.
Scene-Style
Scene-Style
Along with the 'coloring-book' style overlay, you can also provide a
separate background image as part of a 'starter' picture. The
overlay acts the same: it can't be drawn over, erased, or affected
by 'Magic' tools. However, the background can be!
Along with the 'coloring-book' style overlay, you can also provide a
separate background image as part of a 'starter' picture. The overlay
acts the same: it can't be drawn over, erased, or affected by 'Magic'
tools. However, the background can be!
When the 'Eraser' tool is used on a picture based on this kind of
'starter' image, rather than turning the canvas white, it returns
that part of the canvas to the original background picture.
When the 'Eraser' tool is used on a picture based on this kind of
'starter' image, rather than turning the canvas white, it returns that
part of the canvas to the original background picture.
By creating both an overlay and a background, you can create a
'starter' which simulates depth. Imagine a background that shows the
ocean, and an overlay that's a picture of a reef. You can then draw
(or stamp) fish in the picture. They'll appear in the ocean, but
never 'in front of' the reef.
By creating both an overlay and a background, you can create a
'starter' which simulates depth. Imagine a background that shows the
ocean, and an overlay that's a picture of a reef. You can then draw
(or stamp) fish in the picture. They'll appear in the ocean, but never
'in front of' the reef.
To create this kind of 'starter' picture, simply create an overlay
(with alpha transparency) as described above, and save it as a PNG.
Then create another image (without transparency), and save it with
the same filename, but with "-back" appended to the name. (e.g.,
"reef-back.png" would be the background ocean picture that
corresponds to the "reef.png" overlay, or foreground.)
To create this kind of 'starter' picture, simply create an overlay
(with alpha transparency) as described above, and save it as a PNG.
Then create another image (without transparency), and save it with the
same filename, but with "-back" appended to the name. (e.g.,
"reef-back.png" would be the background ocean picture that corresponds
to the "reef.png" overlay, or foreground.)
The 'starter' images should be the same size as Tux Paint's canvas. In
the default 640x480 mode, that is 448x376 pixels. If you're using
800x600 mode, it should be 608x496. (It should be 192 pixels less
wide, and 104 pixels less tall than the resolution.)
The 'starter' images should be the same size as Tux Paint's canvas. In
the default 640x480 mode, that is 448x376 pixels. If you're using
800x600 mode, it should be 608x496. (It should be 192 pixels less wide,
and 104 pixels less tall than the resolution.)
Place them in the "starters" directory. When the 'Open' dialog is
accessed in Tux Paint, the 'starter' images will appear at the
beginning of the list with a green background.
Place them in the "starters" directory. When the 'Open' dialog is
accessed in Tux Paint, the 'starter' images will appear at the beginning
of the list with a green background.
Note: 'Starters' can't be saved over from within Tux Paint, since
loading a 'starter' is really like creating a new image. (Instead of
being blank, though there's already something there to work with.) The
'Save' command simply creates a new picture, like it would if the
'New' command had been used.
Note: 'Starters' can't be saved over from within Tux Paint, since
loading a 'starter' is really like creating a new image. (Instead of
being blank, though there's already something there to work with.) The
'Save' command simply creates a new picture, like it would if the 'New'
command had been used.
Note: 'Starters' are 'attached' to saved pictures, via a small text
file that has the same name as the saved file, but with ".dat" as the
extension. This allows the overlay and background, if any, to continue
to affect the drawing even after Tux Paint has been quit, or another
picture loaded or started. (In other words, if you base a drawing on a
'starter' image, it will always be affected by it.)
Note: 'Starters' are 'attached' to saved pictures, via a small text file
that has the same name as the saved file, but with ".dat" as the
extension. This allows the overlay and background, if any, to continue
to affect the drawing even after Tux Paint has been quit, or another
picture loaded or started. (In other words, if you base a drawing on a
'starter' image, it will always be affected by it.)

View file

@ -215,7 +215,19 @@ effect.</p>
<p>The file has the same name as the PNG image, but a "<code>.dat</code>"
extension. (e.g., "<code>brush.png</code>"'s data file is the text
file "<code>brush.dat</code>" in the same directory.)</p>
<h4>Brush Spacing</h4>
<blockquote>
<p>As of Tux&nbsp;Paint version 0.9.16, you can now specify the spacing
for brushes (that is, how often they are drawn). By default, the
spacing will be the brush's height, divided by 4.</p>
<p>Add a line containing the line "<code><b>spacing=<i>N</i></b></code>"
to the brush's data file, where <i>N</i> is the spacing you want
for the brush. (The lower the number, the more often the brush is
drawn.)</p>
</blockquote>
<h4>Animated Brushes</h4>
<blockquote>
<p>As of Tux&nbsp;Paint version 0.9.16, you may now create animated
@ -259,6 +271,7 @@ effect.</p>
and there are 5 frames, it would be 450x90. (The leftmost 150x90 pixels
of the image represent the 9 direction shapes for the first frame,
for example.)</p>
</blockquote>
</blockquote>
<p>Place the brush image PNGs (and any data text files) in the

View file

@ -22,7 +22,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
(See COPYING.txt)
June 14, 2002 - September 3, 2006
June 14, 2002 - September 4, 2006
$Id$
*/
@ -949,8 +949,9 @@ static int stamp_tintable(int stamp)
static int num_brushes, num_brushes_max;
static SDL_Surface **img_brushes;
static int * brushes_frames;
static short * brushes_directional;
static int * brushes_frames = NULL;
static int * brushes_spacing = NULL;
static short * brushes_directional = NULL;
static SDL_Surface *img_shapes[NUM_SHAPES], *img_shape_names[NUM_SHAPES];
static SDL_Surface *img_magics[NUM_MAGICS], *img_magic_names[NUM_MAGICS];
@ -985,7 +986,7 @@ enum {
static SDL_Surface *img_cur_brush;
int img_cur_brush_frame_w, img_cur_brush_w, img_cur_brush_h,
img_cur_brush_frames, img_cur_brush_directional;
img_cur_brush_frames, img_cur_brush_directional, img_cur_brush_spacing;
static int brush_counter, rainbow_color, brush_frame;
#define NUM_ERASERS 12 /* How many sizes of erasers
@ -3535,7 +3536,7 @@ static void blit_brush(int x, int y, int direction)
brush_counter++;
if (brush_counter >= (img_cur_brush_h / 4))
if (brush_counter >= img_cur_brush_spacing)
{
brush_counter = 0;
@ -5255,6 +5256,8 @@ static void loadbrush_callback(SDL_Surface * screen,
realloc(brushes_frames, num_brushes_max * sizeof(int));
brushes_directional =
realloc(brushes_directional, num_brushes_max * sizeof(short));
brushes_spacing =
realloc(brushes_spacing, num_brushes_max * sizeof(int));
}
img_brushes[num_brushes] = loadimage(fname);
@ -5263,6 +5266,7 @@ static void loadbrush_callback(SDL_Surface * screen,
brushes_frames[num_brushes] = 1;
brushes_directional[num_brushes] = 0;
brushes_spacing[num_brushes] = img_brushes[num_brushes]->h / 4;
strcpy(strcasestr(fname, ".png"), ".dat");
fi = fopen(fname, "r");
@ -5278,6 +5282,11 @@ static void loadbrush_callback(SDL_Surface * screen,
brushes_frames[num_brushes] =
atoi(strstr(buf, "frames=") + 7);
}
else if (strstr(buf, "spacing=") != NULL)
{
brushes_spacing[num_brushes] =
atoi(strstr(buf, "spacing=") + 8);
}
else if (strstr(buf, "directional") != NULL)
{
brushes_directional[num_brushes] = 1;
@ -8648,6 +8657,7 @@ static void render_brush(void)
img_cur_brush_h = img_cur_brush->h / (brushes_directional[cur_brush] ? 3 : 1);
img_cur_brush_frames = brushes_frames[cur_brush];
img_cur_brush_directional = brushes_directional[cur_brush];
img_cur_brush_spacing = brushes_spacing[cur_brush];
brush_counter = 0;
}
@ -10585,6 +10595,7 @@ static void cleanup(void)
free_surface_array(img_brushes, num_brushes);
free(brushes_frames);
free(brushes_directional);
free(brushes_spacing);
free_surface_array(img_tools, NUM_TOOLS);
free_surface_array(img_tool_names, NUM_TOOLS);
free_surface_array(img_title_names, NUM_TITLES);