Sync docs after Swedish update (needs work)

Many strings ended up being fuzzy; will talk with Daniel
This commit is contained in:
Bill Kendrick 2025-04-19 12:32:19 -07:00
parent 34937ef37a
commit 136d77ac27
308 changed files with 29528 additions and 0 deletions

View file

@ -0,0 +1,346 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint Advanced Stamps 'How-To' </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<style>
body { font-size: large; }
table { font-size: large; }
div.screenshot-center {
text-align: center;
}
div.screenshot-right {
float: right;
margin-left: 1em;
margin-bottom: 1em;
}
div.screenshot-right-after {
clear: both;
}
div.keeptogether { page-break-inside: avoid; }
section h1 { font-size: 2em; }
h1, h2, h3, h4, h5 { font-family: sans; }
h1 { color: #800; page-break-before: always; break-before: always; }
h2 { color: #440; page-break-after: avoid; break-after: avoid; }
h3 { color: #080; page-break-after: avoid; break-after: avoid; }
h4 { color: #008; page-break-after: avoid; break-after: avoid; }
h5 { color: #808; page-break-after: avoid; break-after: avoid; }
h1 + p { page-break-inside: avoid; }
h2 + p { page-break-inside: avoid; }
h3 + p { page-break-inside: avoid; }
h4 + p { page-break-inside: avoid; }
h5 + p { page-break-inside: avoid; }
dt {
font-size: large;
color: #404;
font-family: sans;
margin-top: 1em;
margin-bottom: 0.25em;
}
dd, blockquote {
border-left: 1px solid #888;
padding-left: 1em;
border-radius: 0 0 0 1em;
}
p.note {
border: 1px solid #000;
background-color: #eee;
border-radius: 0.5em;
padding: 0.5em;
display: inline-block;
margin-right: 3em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
section.outer {
padding-bottom: 1em;
border-bottom: 2px solid #000;
}
section.indent p,dl {
margin-left: 2em;
}
section.indent dl p {
margin-left: 0;
}
p + ul, p + ol {
margin-left: 2em;
}
@media print {
p {
orphans: 3;
widows: 3;
}
}
</style>
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<center>
<h1>
<img src="../../html/images/tuxpaint-title.png"
width="205"
height="210"
alt="Tux Paint"><br>
version 0.9.35<br/>
Advanced Stamps 'How-To' </h1>
<p>
Copyright &copy; 2006-2024 by Albert Cahalan med flera; see <a href="../../AUTHORS.txt">AUTHORS.txt</a>.<br>
<a href="https://tuxpaint.org/">https://tuxpaint.org/</a>
</p>
<p>
juni 2, 2024 </p>
</center>
<table border="2"
cellspacing="0"
cellpadding="2"
summary="Table of Contents"
align="center"
style="page-break-inside: avoid;">
<tr>
<th>
Table of Contents </th>
</tr>
<tr>
<td>
<ul>
<li><a href="#about">About this 'How-To'</a></li> <li><a href="#choice">Image choice is crucial</a></li> <li><a href="#prepare_mask">Prepare the mask</a></li> <li><a href="#replace_fringe">Replace the fringe and junk pixels</a></li> <li><a href="#save">Save the image for Tux Paint</a></li> </ul>
</td>
</tr>
</table>
<hr size="2"
noshade>
<h2>
<a name="about" id="about">
About this 'How-To' </a>
</h2>
<blockquote>
<p>
This 'How-To' 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. </p>
<p>
This 'How-To' assumes you are dealing with normal opaque objects. Dealing with semi-transparent objects (fire, moving fan blade, kid's balloon) or light-giving objects (fire, lightbulb, sun) is best done with custom software. Images with perfect solid-color backgrounds are also best done with custom software, but are not troublesome to do as follows. </p>
</blockquote>
<hr size="2"
noshade>
<h2>
<a name="choice" id="choice">
Image choice is crucial </a>
</h2>
<blockquote>
<h3>
Licens </h3>
<blockquote>
<p>
If you wish to submit artwork to the Tux Paint developers for consideration for inclusion in the official project, or if you wish to release your own copy of Tux Paint, bundled with your own graphics, you need an image that is compatible with the GNU General Public License used by Tux Paint. </p>
<p>
Images produced by the US government are Public Domain, but be aware that the US government sometimes uses other images on the web. <a href="http://images.google.com/">Google image</a> queries including either <code>site:gov</code> or <code>site:mil</code> will supply many suitable images. (Note: the *.mil sites include non-military content, too!) </p>
<p>
Your own images can be placed in the Public Domain or a suitable license, such as the <a href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons CC0</a> by declaring it so. (Hire a lawyer if you feel the need for legal advice.) </p>
<p>
For personal use, any image you can legitimately modify and use for your own personal use should be fine. </p>
</blockquote>
<h3>
Image Size and Orientation </h3>
<blockquote>
<p>
You need an image that has a useful orientation. Perspective is an enemy. Images that show an object from the corner are difficult to fit into a nice drawing. As a general rule, telephoto side views are the best. The impossible ideal is that, for example, two wheels of a car are perfectly hidden behind the other two. </p>
<p>
Rotating an image can make it blurry, especially if you only rotate by a few degrees. Images that don't need rotation are best, images that need lots of rotation (30 to 60 degrees) are next best, and images that need just a few degrees are worst. Rotation will also make an image darker because most image editing software is very bad about gamma handling. (Rotation is only legitimate for gamma=1.0 images.) </p>
<p>
Very large images are more forgiving of mistakes, and thus easier to work with. Choose an image with an object that is over 1000 pixels across if you can. You can shrink this later to hide your mistakes. </p>
<p>
Be sure that the image is not too grainy, dim, or washed out. </p>
<p>
Pay attention to feet and wheels. If they are buried in something, you will need to draw new ones. If only one is buried, you might be able to copy the other one as a replacement. </p>
</blockquote>
</blockquote>
<hr size="2"
noshade>
<h2>
Prepare the image </h2>
<blockquote>
<p>
First of all, be sure to avoid re-saving the image as a JPEG. This causes quality loss. There is a special tool called <a href="https://jpegclub.org/">jpegtran</a> that lets you crop an image without the normal quality loss. </p>
<blockquote>
<p>
<code>jpegtran -trim -copy none -crop 512x1728+160+128 &lt; src.jpg &gt; cropped.jpg</code>
</p>
</blockquote>
<p>
Bring that image up in your image editor. If you didn't crop it yet, you may find that your image editor is very slow. Rotate and crop the image as needed. Save the image — choose whatever native format supports layers, masks, alpha, etc. <a href="http://www.gimp.org/">GIMP</a> users should choose "XCF", and Adobe Photoshop users should choose "PSD", for example. </p>
<p>
If you have rotated or cropped the image in your image editor, flatten it now. You need to have just one RGB layer <i>without mask or alpha</i>. </p>
<p>
Open the layers dialog box. Replicate the one layer several times. From top to bottom you will need something like this: </p>
<ol>
<li>unmodified image (write-protect this if you can)</li>
<li>an image you will modify — the "work in progress" layer</li>
<li>solid green (write-protect this if you can)</li>
<li>solid magenta (write-protect this if you can)</li>
<li>unmodified image (write-protect this if you can)</li>
</li>
</ol>
<p>
Give the work in progress (WIP) layer a rough initial mask. You might start with a selection, or by using the grayscale value of the WIP layer. You might invert the mask. </p>
<p>
<b>Warning:</b> once you have the mask, you may not rotate or scale the image normally. This would cause data loss. You will be given special scaling instructions later. </p>
</blockquote>
<hr size="2"
noshade>
<h2>
<a name="prepare_mask" id="prepare_mask">
Prepare the mask </a>
</h2>
<blockquote>
<p>
Get used to doing <b>[Kontroll]</b>-click and <b>[Alt]</b>-click on the thumbnail images in the layers dialog. You will need this to control what you are looking at and what you are editing. Sometimes you will be editing things you can't see. For example, you might edit the mask of the WIP layer while looking at the unmodified image. Pay attention so you don't screw up. Always verify that you are editing the right thing. </p>
<p>
Set an unmodified image as what you will view (the top one is easiest). Set the WIP mask as what you will edit. At some point, perhaps not immediately, you should magnify the image to about 400% (each pixel of the image is seen and edited as a 4x4 block of pixels on your screen). </p>
<p>
Select parts of the image that need to be 100% opaque or 0% opaque. If you can select the object or background somewhat accurately by color, do so. As needed to avoid selecting any pixels that should be partially opaque (generally at the edge of the object) you should grow, shrink, and invert the selection. </p>
<p>
Fill the 100% opaque areas with white, and the 0% opaque areas with black. This is most easily done by drag-and-drop from the foreground/background color indicator. You should not see anything happen, because you are viewing the unmodified image layer while editing the mask of the WIP layer. Large changes might be noticable in the thumbnail. </p>
<p>
Now you must be zoomed in. </p>
<p>
Check your work. Hide the top unmodified image layer. Display just the mask, which should be a white object on a black background (probably with unedited grey at the edge). Now display the WIP layer normally, so that the mask is active. This should show your object over top of the next highest enabled layer, which should be green or magenta as needed for maximum contrast. You might wish to flip back and forth between those backgrounds by repeatedly clicking to enable/disable the green layer. Fix any obvious and easy problems by editing the mask while viewing the mask. </p>
<p>
Go back to viewing the top unmodified layer while editing the WIP mask. Set your drawing tool the paintbrush. For the brush, choose a small fuzzy circle. The 5x5 size is good for most uses. </p>
<p>
With a steady hand, trace around the image. Use black around the outside, and white around the inside. Avoid making more than one pass without switching colors (and thus sides). </p>
<p>
Flip views a bit, checking to see that the mask is working well. When the WIP layer is composited over the green or magenta, you should see a tiny bit of the original background as an ugly fringe around the edge. If this fringe is missing, then you made the object mask too small. The fringe consists of pixels that are neither 100% object nor 0% object. For them, the mask should be neither 100% nor 0%. The fringe gets removed soon. </p>
<p>
View and edit the mask. Select by color, choosing either black or white. Most likely you will see unselected specks that are not quite the expected color. Invert the selection, then paint these away using the pencil tool. Do this operation for both white and black. </p>
</blockquote>
<hr size="2"
noshade>
<h2>
<a name="replace_fringe" id="replace_fringe">
Replace the fringe and junk pixels </a>
</h2>
<blockquote>
<p>
Still viewing the mask, select by color. Choose black. Shrink the selection by several pixels, being sure to NOT shrink from the edges of the mask (the shrink helps you avoid and recover from mistakes). </p>
<p>
Now disable the mask. View and edit the unmasked WIP layer. Using the color picker tool, choose a color that is average for the object. Drag-and-drop this color into the selection, thus removing most of the non-object pixels. </p>
<p>
This solid color will compress well and will help prevent ugly color fringes when Tux Paint scales the image down. If the edge of the object has multiple colors that are very different, you should split up your selection so that you can color the nearby background to be similar. </p>
<p>
Now you will paint away the existing edge fringe. Be sure that you are editing and viewing the WIP image. Frequent layer visibility changes will help you to see what you are doing. You are likely to use all of: </p>
<ul>
<li>composited over grön (mask enabled)</li>
<li>composited over magenta (mask enabled)</li>
<li>original (the top or bottom layer)</li>
<li>composited over the original (mask enabled)</li>
<li>raw WIP layer (mask <strong>disabled</strong>)</li>
</ul>
<p>
To reduce accidents, you may wish to select only those pixels that are not grey in the mask. (Select by color from the mask, choose black, add mode, choose white, invert. Alternately: Select all, select by color from the mask, subtract mode, choose black, choose white.) If you do this, you'll probably want to expand the selection a bit and/or hide the "crawling ants" line that marks the selection. </p>
<p>
Use the clone tool and the brush tool. Vary the opacity as needed. Use small round brushes mostly, perhaps 3x3 or 5x5, fuzzy or not. (It is generally nice to pair up fuzzy brushes with 100% opacity and non-fuzzy brushes with about 70% opacity.) Unusual drawing modes can be helpful with semi-transparent objects. </p>
<p>
The goal is to remove the edge fringe, both inside and outside of the object. The inside fringe, visible when the object is composited over magenta or green, must be removed for obvious reasons. The outside fringe must also be removed because it will become visible when the image is scaled down. As an example, consider a 2x2 region of pixels at the edge of a sharp-edged object. The left half is black and 0% opaque. The right half is white and 100% opaque. That is, we have a white object on a black background. When Tux Paint scales this to 50% (a 1x1 pixel area), the result will be a grey 50% opaque pixel. The correct result would be a white 50% opaque pixel. To get this result, we would paint away the black pixels. They matter, despite being 0% opaque. </p>
<p>
Tux Paint can scale images down by a very large factor, so it is important to extend the edge of your object outward by a great deal. Right at the edge of your object, you should be very accurate about this. As you go outward away from the object, you can get a bit sloppy. It is reasonable to paint outward by a dozen pixels or more. The farther you go, the more Tux Paint can scale down without creating ugly color fringes. For areas that are more than a few pixels away from the object edge, you should use the pencil tool (or sloppy select with drag-and-drop color) to ensure that the result will compress well. </p>
</blockquote>
<hr size="2"
noshade>
<h2>
<a name="save" id="save">
Save the image for Tux Paint </a>
</h2>
<blockquote>
<p>
It is very easy to ruin your hard work. Image editors can silently destroy pixels in 0% opaque areas. The conditions under which this happens may vary from version to version. If you are very trusting, you can try saving your image directly as a PNG. Be sure to read it back in again to verify that the 0% opaque areas didn't turn black or white, which would create fringes when Tux Paint scales the image down. If you need to scale your image to save space (and hide your mistakes), you are almost certain to destroy all the 0% opaque areas. So here is a better way... </p>
<h3>
Ett säkrare sätt att spara </h3>
<blockquote>
<p>
Drag the mask from the layers dialog to the unused portion of the toolbar (right after the last drawing tool). This will create a new image consisting of one layer that contains the mask data. Scale this as desired, remembering the settings you use. Often you should start with an image that is about 700 to 1500 pixels across, and end up with one that is 300 to 400. </p>
<p>
Save the mask image as a NetPBM portable greymap ("<code>.pgm</code>") file. (If you are using an old release of The GIMP, you might need to convert the image to greyscale before you can save it.) Choose the more compact "RAW PGM" format. (The second character of the file should be the ASCII digit "5", hex byte 0x35.) </p>
<p>
You may close the mask image. </p>
<p>
Going back to the multi-layer image, now select the WIP layer. As you did with the mask, drag this from the layers dialog to the toolbar. You should get a single-layer image of your WIP data. If the mask came along too, get rid of it. You should be seeing the object and the painted-away surroundings, without any mask thumbnail in the layers dialog. If you scaled the mask, then scale this image in exactly the same way. Save this image as a NetPBM portable pixmap ("<code>.ppm</code>") file. (Note: <code>.ppm</code>, not <code>.pgm</code>.) (If you choose the RAW PPM format, the second byte of the file should be the ASCII digit "6", hex byte 0x36.) </p>
<p>
Now you need to merge the two files into one. Do that with the <a href="http://netpbm.sourceforge.net/">pnmtopng</a> command, like this: </p>
<blockquote>
<p>
<code>pnmtopng -force -compression 9 -alpha mask.pgm fg.ppm &gt; final-stamp.png</code>
</p>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>

View file

@ -0,0 +1,204 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint Environment Variables Documentation </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<style>
body { font-size: large; }
table { font-size: large; }
div.screenshot-center {
text-align: center;
}
div.screenshot-right {
float: right;
margin-left: 1em;
margin-bottom: 1em;
}
div.screenshot-right-after {
clear: both;
}
div.keeptogether { page-break-inside: avoid; }
section h1 { font-size: 2em; }
h1, h2, h3, h4, h5 { font-family: sans; }
h1 { color: #800; page-break-before: always; break-before: always; }
h2 { color: #440; page-break-after: avoid; break-after: avoid; }
h3 { color: #080; page-break-after: avoid; break-after: avoid; }
h4 { color: #008; page-break-after: avoid; break-after: avoid; }
h5 { color: #808; page-break-after: avoid; break-after: avoid; }
h1 + p { page-break-inside: avoid; }
h2 + p { page-break-inside: avoid; }
h3 + p { page-break-inside: avoid; }
h4 + p { page-break-inside: avoid; }
h5 + p { page-break-inside: avoid; }
dt {
font-size: large;
color: #404;
font-family: sans;
margin-top: 1em;
margin-bottom: 0.25em;
}
dd, blockquote {
border-left: 1px solid #888;
padding-left: 1em;
border-radius: 0 0 0 1em;
}
p.note {
border: 1px solid #000;
background-color: #eee;
border-radius: 0.5em;
padding: 0.5em;
display: inline-block;
margin-right: 3em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
section.outer {
padding-bottom: 1em;
border-bottom: 2px solid #000;
}
section.indent p,dl {
margin-left: 2em;
}
section.indent dl p {
margin-left: 0;
}
p + ul, p + ol {
margin-left: 2em;
}
@media print {
p {
orphans: 3;
widows: 3;
}
}
</style>
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<center>
<h1>
<img src="../../html/images/tuxpaint-title.png"
width="205"
height="210"
alt="Tux Paint"><br>
version 0.9.35<br/>
Environment Variables Documentation </h1>
<p>
Copyright &copy; 2021-2024 by olika bidragsgivare; see <a href="../../AUTHORS.txt">AUTHORS.txt</a>.<br>
<a href="https://tuxpaint.org/">https://tuxpaint.org/</a>
</p>
<p>
maj 14, 2024 </p>
</center>
<hr>
<p>
Tux Paint understands a number of environment variables, either directly, or indirectly by the libraries that it utilizes. </p>
<h2>
Storage-related environment variables </h2>
<dl>
<dt>
<code>HOME</code>
</dt>
<dd>
<p>
Specifies the user's "home directory", which is used to locate numerous other files or directories. In some cases, it is utilized as part of a fall-back location, when other environment variables (elsewhere in this documentation) are not set. Sometimes, the location to use can be overridden by options provided on the command-line or via Tux Paint's configuration file. See the "OPTIONS" documentation for details. </p>
<p>
A few examples of where "<code>$HOME</code>" is used include: </p>
<ul>
<li>The location of Tux Paint's configuration file</li>
<li>The basis of where Tux Paint saves and loads users' drawings</li>
<li>The location of a user's private collection of data files &mdash; stamps, brushes, etc. &mdash; (versus those available system wide)</li>
</ul>
</dd>
<dt>
<code>XDG_CONFIG_HOME</code>
</dt>
<dd>
<p>
On Linux and other platforms where the X Desktop Group standards are used, the location of the user's configuration files. Specifically, where to find "<code>user-dirs.dirs</code>", where the "<code>XDG_PICTURES_DIR</code>" might be defined. It is used for exporting drawings and animated GIFs. Generally it's set to something like "<code>$HOME/Pictures/</code>". If not specified, Tux Paint checks in the directory "<code>$HOME/.config/</code>". If the configuration cannot be found, Tux Paint simply exports drawings and GIFs to "<code>$HOME</code>". </p>
</dd>
<dt>
<code>XDG_DATA_HOME</code>
</dt>
<dd>
<p>
On Linux and other platforms where the X Desktop Group standards are used, the location of the user's data directories. Specifically, where to find the "<code>Trash</code>" directory. It is used when deleting images from Tux Paint's "Open" dialog. If not set, the location "<code>$HOME/.local/share/Trash/</code>" is used, if available. If not, images are simply deleted, rather than moved anywhere. </p>
</dd>
<dt>
<code>TEMP</code>
</dt>
<dd>
<p>
Specifies the location where temporary files may be created. Only used by Tux Paint on Microsoft Windows OSes. Uses "<code>userdata</code>" if not set. </p>
</dl>
<h2>
Language-related environment variables </h2>
<dl>
<dt>
<code>LANG</code>
</dt>
<dt>
<code>LANGUAGE</code>
</dt>
<dt>
<code>LC_ALL</code>
</dt>
<dt>
<code>LC_MESSAGES</code>
</dt>
<dd>
<p>
Specify the language Tux Paint should utilize in its user interface. Overridden by the "<code>--lang</code>" and "<code>--locale</code>" command-line options or their configuration file counterparts. The "<code>LANGUAGE</code>" environment variable is used, if set. If not, "<code>LC_ALL</code>" is used as a fallback. Then "<code>LC_MESSAGES</code>", and finally "<code>LANG</code>". </p>
</dd>
</dl>
<h2>
Display-related environment variables </h2>
<p>
The following are a few of the environment variables supported by Simple DirectMedia Layer (libSDL) &mdash; which Tux Paint utilizes for displaying graphics, playing sounds, and receiving mouse, keyboard, and joystick input &mdash; and which may be useful to users of Tux Paint.
<dl>
<dt>
<code>SDL_VIDEO_ALLOW_SCREENSAVER</code>
</dt>
<dd>
<p>
Specifies whether Tux Paint should allow a screensaver to run. Can be set to '1' (true) by Tux Paint itself by issuing the command-line option "<code>--allowscreensaver</code>" or its configuration file counterpart. </p>
</dd>
<dt>
<code>SDL_VIDEO_WINDOW_POS</code>
</dt>
<dd>
<p>
Requests where to position Tux Paint's window, and can be used to specify what display to place a fullscreen Tux Paint in a multi-monitor configuration. If not set, or set to "<code>nopref</code>" (meaning "no preference"), Simple DirectMedia Layer (libSDL) decides. Can be set to an <code>X,Y</code> coordinate (e.g. <code>200,100</code>), or "<code>center</code>" (meaning "center"). </p>
</dd>
</dl>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,924 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint Frequently Asked Questions </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<style>
body { font-size: large; }
table { font-size: large; }
div.screenshot-center {
text-align: center;
}
div.screenshot-right {
float: right;
margin-left: 1em;
margin-bottom: 1em;
}
div.screenshot-right-after {
clear: both;
}
div.keeptogether { page-break-inside: avoid; }
section h1 { font-size: 2em; }
h1, h2, h3, h4, h5 { font-family: sans; }
h1 { color: #800; page-break-before: always; break-before: always; }
h2 { color: #440; page-break-after: avoid; break-after: avoid; }
h3 { color: #080; page-break-after: avoid; break-after: avoid; }
h4 { color: #008; page-break-after: avoid; break-after: avoid; }
h5 { color: #808; page-break-after: avoid; break-after: avoid; }
h1 + p { page-break-inside: avoid; }
h2 + p { page-break-inside: avoid; }
h3 + p { page-break-inside: avoid; }
h4 + p { page-break-inside: avoid; }
h5 + p { page-break-inside: avoid; }
dt {
font-size: large;
color: #404;
font-family: sans;
margin-top: 1em;
margin-bottom: 0.25em;
}
dd, blockquote {
border-left: 1px solid #888;
padding-left: 1em;
border-radius: 0 0 0 1em;
}
p.note {
border: 1px solid #000;
background-color: #eee;
border-radius: 0.5em;
padding: 0.5em;
display: inline-block;
margin-right: 3em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
section.outer {
padding-bottom: 1em;
border-bottom: 2px solid #000;
}
section.indent p,dl {
margin-left: 2em;
}
section.indent dl p {
margin-left: 0;
}
p + ul, p + ol {
margin-left: 2em;
}
@media print {
p {
orphans: 3;
widows: 3;
}
}
</style>
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<center>
<h1>
<img src="../../html/images/tuxpaint-title.png"
width="205"
height="210"
alt="Tux Paint"><br>
version 0.9.35<br/>
Frequently Asked Questions </h1>
<p>
Copyright &copy; 2002-2025 by olika bidragsgivare; see <a href="../../AUTHORS.txt">AUTHORS.txt</a>.<br>
<a href="https://tuxpaint.org/">https://tuxpaint.org/</a>
</p>
<p>
januari 23, 2025 </p>
</center>
<table border="2"
cellspacing="0"
cellpadding="2"
summary="Table of Contents"
align="center"
style="page-break-inside: avoid;">
<tr>
<th>
Table of Contents </th>
</tr>
<tr>
<td>
<ul>
<li><a href="#drawing">Drawing-related</a></li> <li><a href="#interface">Interface Problems</a></li> <li><a href="#printing">Printing</a></li> <li><a href="#saving">Saving</a></li> <li><a href="#audio">Ljudproblem</a></li> <li><a href="#fullscreen">Fullscreen Mode Problems</a></li> <li><a href="#other">Other Problems</a></li> <li><a href="#contact">Hjälp / Kontakt</a></li> </ul>
</td>
</tr>
</table>
<hr size="2"
noshade>
<h2>
<a name="drawing" id="drawing">
Drawing-related </a>
</h2>
<dl>
<dt>
Fonts I added to Tux Paint only show squares </dt>
<dd>
The TrueType Font you're using might have the wrong encoding. If it's 'custom' encoded, for example, you can try running it through FontForge (<a href="http://fontforge.sourceforge.net/">http://fontforge.sourceforge.net/</a>) to convert it to an ISO-8859 format. (Email us if you need help with special fonts.) </dd>
<dt>
The Rubber Stamp tool is greyed out! </dt>
<dd>
<p>
This means that Tux Paint either couldn't find any stamp images, or was asked not to load them. </p>
<p>
If you installed Tux Paint, but did not install the separate, optional "Stamps" collection, quit Tux Paint and install it now. It should be available from the same place you got the main Tux Paint program. <i>(Note: Tux Paint ships with a very small collection of example stamps.)</i> </p>
<p>
If you don't want to install the default collection of stamps, you can just create your own. See the "Extending Tux Paint" documentation for more on creating PNG and SVG image files, TXT text description files, Ogg Vorbis, MP3 or WAV sound files, and DAT text data files that make up stamps. </p>
<p>
Finally, if you installed stamps, and think they should be loading, check to see that the "nostamps" option isn't being set. (Either via a "<code>--nostamps</code>" option to Tux Paint's command line, or "<code>nostamps=yes</code>" in the configuration file.) </p>
<p>
Either change/remove the "nostamps" option, or you can override it with "<code>--stamps</code>" on the command line or either "<code>nostamps=no</code>" or "<code>stamps=yes</code>" in a configuration file. </p>
</dd>
<dt>
Stamp outlines are always rectangles </dt>
<dd>
<p>
Tux Paint was built with low-quality (but faster) stamp outlines. </p>
<p>
To change this, you must rebuild Tux Paint from source. Be sure to remove or comment out any line that says: </p>
<blockquote>
<p>
<code>#define LOW_QUALITY_STAMP_OUTLINE</code>
</p>
</blockquote>
<p>
in the "tuxpaint.c" file in the "src" directory. </p>
</dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="interface" id="interface">
Interface Problems </a>
</h2>
<dl>
<dt>
Stamp thumbnails in the Stamp Selector look bad </dt>
<dd>
<p>
Tux Paint was probably compiled with the faster, lower quality thumbnail code enabled. Run the command: "<code>tuxpaint --verbose-version</code>" from a command line. If, amongst the other output, you see the text: "Low Quality Thumbnails enabled", then this is what's happening. </p>
<p>
To change this, you must rebuild Tux Paint from source. Be sure to remove or comment out any line that says: </p>
<blockquote>
<p>
<code>#define LOW_QUALITY_THUMBNAILS</code>
</p>
</blockquote>
<p>
in the "tuxpaint.c" file in the "src" directory. </p>
</dd>
<dt>
Pictures in the 'Open' dialog look bad </dt>
<dd>
"Low Quality Thumbnails" is probably enabled. See: "Stamp thumbnails in the Stamp Selector look bad", above. </dd>
<dt>
All text är skriven med versaler! </dt>
<dd>
<p>
The "uppercase" option is on. </p>
<p>
Either change/remove the "uppercase" option, or you can override it with "<code>--mixedcase</code>" on the command line or either "<code>uppercase=no</code>" or "<code>mixedcase=yes</code>" in a configuration file. </dd>
<dt>
Tux Paint is in a different language </dt>
<dd>
Make sure your locale setting is correct. See "Tux Paint won't switch to my language", below. </dd>
<dt>
Tux Paint won't switch to my language </dt>
<dd>
<ul>
<li>
<i>Linux and Unix users: Make sure the locale is available</i>
<p>
Make sure the locale you want is available. Check your "/etc/locale.gen" file. See the "Options Documentation" for the locales Tux Paint uses (especially when using the "<code>--lang</code>" option). </p>
<p>
Note: Debian and derivative (e.g., Ubuntu) users can simply run "<code>dpkg-reconfigure locales</code>" if the locales are managed by "dpkg". </p>
</li>
<li>If you're using the "<code>--lang</code>" command-line option <p>
Try using the "<code>--locale</code>" command-line option, or your operating system's locale settings (e.g., the "<code>$LANG</code>" environment variable), and please e-mail us regarding your trouble. </p>
</li>
<li>If you're using the "<code>--locale</code>" command-line option <p>
If this doesn't work, please e-mail us regarding your trouble. </p>
</li>
<li>If you're trying to use your Operating System's locale <p>
If this doesn't work, please e-mail us regarding your trouble. </p>
</li>
<li>Make sure you have the necessary font <p>
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. </p>
<p>
The appropriate fonts for such locales can be downloaded from the Tux Paint website: </p>
<blockquote>
<p>
<a href=
"https://tuxpaint.org/download/fonts/">https://tuxpaint.org/download/fonts/</a>
</p>
</blockquote>
</li>
</ul>
</dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="printing" id="printing">
Printing </a>
</h2>
<dl>
<dt>
Tux Paint won't print, gives an error, or prints garbage (Unix/Linux) </dt>
<dd>
<p>
Tux Paint prints by creating a PostScript rendition of the picture and sending it to an external command. By default, this command is the "<code>lpr</code>" printing tool. </p>
<p>
If that program is not available (for example, you're using CUPS, the Common Unix Printing System, and do not have "<code>cups-lpr</code>" installed), you will need to specify an appropriate command using the "<code>printcommand</code>" option in Tux Paint's configuration file. (See the "Options Documentation".) </p>
</dd>
<dt>
I get the message "You can't print yet!" when I go to print </dt>
<dd>
<p>
The "print delay" option is on. You can only print once every <i>X</i> seconds. </p>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "<code>--printdelay=...</code>" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "<code>--printdelay=...</code>" is listed as a command-line argument. </p>
<p>
If a "<code>--printdelay=...</code>" option isn't being sent on the command line, check Tux Paint's configuration file for a line reading: "<code>printdelay=...</code>". </p>
<p>
Either remove that line, set the delay value to 0 (no delay), or decrease the delay to a value you prefer. (See the "Options Documentation".) </p>
<p>
Or, you can simply run Tux Paint with the command-line argument: "<code>--printdelay=0</code>", which will override the configuration file's setting, and allow unlimited printing. (You won't have to wait between prints.) </p>
</dd>
<dt>
I simply can't print! The button is greyed out! </dt>
<dd>
<p>
The "no print" option is on. </p>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "<code>--noprint</code>" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "<code>--noprint</code>" is listed as a command-line argument. </p>
<p>
If a "<code>--noprint</code>" option isn't being sent on the command line, check Tux Paint's configuration file for a line reading: "<code>noprint=yes</code>". </p>
<p>
Either remove that line, or simply run Tux Paint with the command-line argument: "<code>--print</code>", which will override the configuration file's setting. </p>
<p>
Or use Tux Paint Config. and make sure "Allow Printing" (under "Printing") is checked. </p>
</dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="saving" id="saving">
Saving </a>
</h2>
<dl>
<dt>
Where does Tux Paint save my drawings? </dt>
<dd>
<p>
Unless you asked Tux Paint to save into a specific location (using the "savedir" option), Tux Paint saves into a standard location on your local drive: </p>
<dl>
<dt>
<cite>Windows Windows 8, Windows 10, Windows 11</cite>
</dt>
<dd>
In the user's "AppData" folder:<br> e.g., <nobr>"<code style='background: #EEE;'>C:\Users\<i>användarnamn</i>\AppData\Roaming\TuxPaint\saved\</code>"</nobr> <br/>
<br/>
(Note: The "<nobr><code style='background: #EEE;'>AppData</code></nobr>" folder is hidden (not visible) by default. You can enter the path manually in the location bar of your file browser (e.g., <cite>File Explorer</cite>).) <br/>
<br/>
You can use the <nobr><code style='background: #EEE;'>%APPDATA%</code></nobr> variable as a shorthand, i.e. <nobr>"<code style='background: #EEE;'>%APPDATA%\Tuxpaint\Saved</code>"</nobr>. <br/>
<br/>
You can use the <b><code>[&#8862; (Windows)]</code></b> + <b><code>[R]</code></b> key combination to bring up the <cite>Run</cite> command window, and then type the path and hit <b><code>[Enter / Return]</code></b>. </dd>
<dt>
<cite>macOS</cite>
</dt>
<dd>
In the user's "Application Support" folder:<br> e.g., <nobr>"<code style='background: #EEE;'>/Användare/<i>användarnamn</i>/Bibliotek/Application Support/TuxPaint/saved/</code>"</nobr> </dd>
<dt>
<cite>Linux / Unix</cite>
</dt>
<dd>
In the user's "home directory" folder:<br> e.g., <nobr>"<code style='background: #EEE;'>/home/<i>användarnamn</i>/.tuxpaint/saved/</code>"</nobr> <br/>
<br/>
(Note: The ".tuxpaint" folder is hidden (not visible) by default. You can enter the path manually in the location bar of your file browser (e.g., <cite>GNOME-filer</cite> eller <cite>Dolphin</cite>).) <br/>
<br/>
You can use the <nobr><code style='background: #EEE;'>$HOME</code></nobr> variable as a shorthand, i.e. <nobr>"<code style='background: #EEE;'>$HOME/.tuxpaint/saved</code>"</nobr>. </dd>
<dt>
<cite>Haiku</cite>
</dt>
<dd>
In the user's "settings" folder:<br> e.g., <nobr>"<code style='background: #EEE;'>/boot/home/config/settings/TuxPaint/saved/</code>"</nobr> </dd>
</dl>
<p>
The images are stored as PNG bitmaps, which most modern programs should be able to load (image editors, word processors, web browsers, etc.) </p>
</dd>
<dt>
Tux Paint always saves over my old picture </dt>
<dd>
<p>
The "save over" option is enabled. (This disables the prompt that would appear when you click 'Save.') </p>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "<code>--saveover</code>" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "<code>--saveover</code>" is listed as a command-line argument. </p>
<p>
If a "--saveover" option isn't being sent on the command line, check Tux Paint's configuration file for a line reading: "saveover=yes". </p>
<p>
Either remove that line, or simply run Tux Paint with the command-line argument: "<code>--saveoverask</code>", which will override the configuration file's setting. </p>
<p>
Or use Tux Paint Config. and make sure "Ask Before Overwriting" (under "Saving") is checked. </p>
<p>
Also, see "Tux Paint always saves a new picture!", below. </p>
</dd>
<dt>
Tux Paint always saves a new picture! </dt>
<dd>
<p>
The "never save over" option is enabled. (This disables the prompt that would appear when you click 'Save.') </p>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "<code>--saveovernew</code>" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "<code>--saveovernew</code>" is listed as a command-line argument. </p>
<p>
If a "<code>--saveovernew</code>" option isn't being sent on the command line, check Tux Paint's configuration file for a line reading: "<code>saveover=new</code>". </p>
<p>
Either remove that line, or simply run Tux Paint with the command-line argument: "<code>--saveoverask</code>", which will override the configuration file's setting. </p>
<p>
Or use Tux Paint Config. and make sure "Ask Before Overwriting" (under "Saving") is checked. </p>
<p>
Also, see "Tux Paint always saves over my old picture!", above. </p>
</dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="audio" id="audio">
Ljudproblem </a>
</h2>
<dl>
<dt>
There's no sound! </dt>
<dd>
<ul>
<li>
<em>First, check the obvious:</em>
<ul>
<li>Are your speakers connected and turned on?</li>
<li>Is the volume turned up on your speakers?</li>
<li>Is the volume turned up in your Operating System's "mixer?"</li>
<li>Are you certain you're using a computer with a sound card?</li>
<li>Are any other programs running that use sound? (They may be 'blocking' Tux Paint from accessing your sound device)</li>
<li>(Unix/Linux) Are you using a sound system, such as aRts, ESD or GStreamer? If so, try setting the "SDL_AUDIODRIVER" environment variable before running Tux Paint (e.g., "<code>export SDL_AUDIODRIVER=arts</code>"). Or, run Tux Paint through the system's rerouter (e.g., run "<code>artsdsp tuxpaint</code>" or "<code>esddsp tuxpaint</code>", instead of simply "<code>tuxpaint</code>"). </li>
</ul>
</li>
<li>
<em>Is sound disabled in Tux Paint?</em>
<p>
If sound seems to work otherwise (and you're sure no other program is "blocking" the sound device), then Tux Paint may be running with a "no sound" option. </p>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "--nosound" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "--nosound" is listed as a command-line argument. </p>
If a "<code>--nosound</code>" option isn't being sent on the command line, check Tux Paint's configuration file for a line reading: "<code>nosound=yes</code>". </p>
<p>
Either remove that line, or simply run Tux Paint with the command-line argument: "<code>--sound</code>", which will override the configuration file's setting. </p>
<p>
Or, you can simply run Tux Paint with the command-line argument: "Aktivera ljudeffekter", which will override the configuration file's setting, and allow unlimited printing. (You won't have to wait between prints.) </p>
</li>
<li>
<em>Were sounds temporarily disabled?</em>
<p>
Even if sounds are enabled in Tux Paint, it is possible to disable and re-enable them temporarily using the <b>[Alt]</b> + <b>[S]</b> key sequence. Try pressing those keys to see if sounds begin working again. </p>
</li>
<li>
<em>Was Tux Paint built without sound support?</em>
<p>
Tux Paint may have been compiled with sound support disabled. To test whether sound support was enabled when Tux Paint was compiled, run Tux Paint from a command line, like so: </p>
<blockquote>
<p>
<code>tuxpaint --verbose-version</code>
</p>
</blockquote>
<p>
If, amongst the other information, you see "Sound disabled", then the version of Tux Paint you're running has sound disabled. Recompile Tux Paint, and be sure NOT to build the "nosound" target. (i.e., don't run "<code>make nosound</code>") Be sure the SDL_mixer library and its development headers are available! </p>
</li>
</ul>
</dd>
<dt>
Tux Paint makes too much noise! Can I turn them off? </dt>
<dd>
<p>
Yes, there are a number of ways to disable sounds in Tux Paint: </p>
<ul>
<li>Press <b>[Alt]</b> + <b>[S]</b> while in Tux Paint to temporarily disable sounds. (Press that key sequence again to re-enable sounds.) </li>
<li>Run Tux Paint with the "no sound" option: <ul>
<li>Run "<code>tuxpaint --nosound</code>" from the command line or shortcut or desktop icon. </li>
<li>Edit Tux Paint's configuration file (see "Options Documentation" for details) and add a line containing "<code>nosound=yes</code>". </li>
<li>
Or use Tux Paint Config. and make sure "Aktivera ljudeffekter" (under "Video &amp; Sound") is not checked. </li>
<li>
Alternatively, recompile Tux Paint with sound support disabled. (See above, and the 'Install' documentation.) </li>
</ul>
</li>
</ul>
</dd>
<dt>
The stereo panning of sound effects is bothersome; can sound effects be monophonic? </dt>
<dd>
<p>
Run Tux Paint with the "no stereo" option: </p>
<ul>
<li>Run "<code>tuxpaint --nostereo</code>" from the command line or shortcut or desktop icon. </li>
<li>Edit Tux Paint's configuration file (see "Options Documentation" for details) and add a line containing "<code>nostereo=yes</code>". </li>
<li>
Or use Tux Paint Config. and make sure "Aktivera stereoeffekter" (under "Video &amp; Sound") is not checked. </li>
</ul>
</dd>
<dt>
The sound effects sound strange </dt>
<dd>
<p>
This could have to do with how SDL and SDL_mixer were initialized. (The buffer size chosen.) </p>
<p>
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 "<code>tuxpaint --version</code>" to verify), and so on.) </p>
</dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="fullscreen" id="fullscreen">
Fullscreen Mode Problems </a>
</h2>
<dl>
<dt>
When I run Tux Paint full-screen and <b>[Alt]</b> + <b>[Tab]</b> out, the window turns black! </dt>
<dd>
This is apparently a bug in the SDL library. Sorry. </dd>
<dt>
When I run Tux Paint full-screen, it has large borders around it </dt>
<dd>
<p>
Linux users - Your X-Window server is probably not set with the ability to switch to the desired resolution: 800×600. (or whatever resolution you have Tux Paint set to run at.) (This is typically done manually under the X-Window server by pressing <span style="white-space: nowrap;"><b><code>[Kontroll]</code></b> + <b><code>[Alt]</code></b> + <b><code>[<span style="white-space: nowrap;">Keypad Plus (+)</span>]</code></b></span> and <span style="white-space: nowrap;"><b><code>[Kontroll]</code></b> + <b><code>[Alt]</code></b> + <b><code>[<span style="white-space: nowrap;">Keypad Minus (-)</span>]</code></b></span>.) </p>
<p>
For this to work, your monitor must support that resolution, and you need to have it listed in your X server configuration. </p>
<p>
Check the "Display" subsection of the "Screen" section of your XFree86 or X.org configuration file (typically "<code>/etc/X11/XF86Config-4</code>" or "<code>/etc/X11/XF86Config</code>", depending on the version of XFree86 you're using; 3.x or 4.x, respectively, or "<code>/etc/X11/xorg.conf</code>" for X.org). </p>
<p>
Add "<code>800x600</code>" (or whatever resolution(s) you want) to the appropriate "Modes" line. (e.g., in the "Display" subsection that contains 24-bit color depth ("Depth 24"), which is what Tux Paint tries to use.) </p>
<blockquote>
<p>
<code>Modes "1280x1024" "1024x768" "800x600" "640x480"</code>
</p>
</blockquote>
<p>
Note that some Linux distributions have tools that can make these changes for you. Debian users can run the command "<code>dpkg-reconfigure xserver-xfree86</code>" as root, for example. </p>
</dd>
<dt>
Tux Paint keeps running in Full Screen mode - I want it windowed! </dt>
<dd>
<p>
The "fullscreen" option is set. </p>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "<code>--fullscreen=...</code>" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "<code>--fullscreen=yes</code>" or "<code>--fullscreen=native</code>" is listed as a command-line argument. </p>
<p>
If "<code>--fullscreen=yes</code>" or "<code>--fullscreen=native</code>" options aren't being sent on the command line, check Tux Paint's configuration file for a line reading: "<code>fullscreen=yes</code>" or "<code>fullscreen=native</code>". </p>
<p>
Either remove that line, or simply run Tux Paint with the command-line argument: "<code>--windowed</code>" or "<code>--fullscreen=no</code>", which will override the configuration file's setting. </p>
<p>
Or use Tux Paint Config. and make sure "Helskärm" (under "Video &amp; Sound") is not checked. </p>
</dd>
<dt>
How do I access other applications when Tux Paint is running in Full Screen? </dt>
<dd>
<ul>
<li>
Windows and Linux users, try the <b><code>[Alt]</code></b> + <b><code>[Tab]</code></b> key combination to switch between applications. </li>
<li>
macOS users, switch to other applications using <b><code>[Kontroll]</code></b> + <b><code>[Left Arrow]</code></b>, then back to Tux Paint using <b><code>[Kontroll]</code></b> + <b><code>[Pil höger]</code></b>. </li>
</ul>
</dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="other" id="other">
Other Problems </a>
</h2>
<dl>
<dt>
Tux Paint won't run </dt>
<dd>
<p>
If Tux Paint aborts with the message: "You're already running a copy of Tux Paint!", this means it has been launched in the last 30 seconds. (On Unix/Linux, this message would appear in a terminal console if you ran Tux Paint from a command-line. On Windows, this message would appear in a file named "<code>stdout.txt</code>" in the same folder where <code>TuxPaint.exe</code> resides (e.g., in <nobr>"<code style='background: #EEE;'>C:\Program Files\TuxPaint\</code>"</nobr>). </p>
<p>
A lockfile (e.g., <nobr>"<code style='background: #EEE;'>/home/<i>användarnamn</i>/.tuxpaint/lockfile.dat</code>"</nobr> on Linux and Unix, <nobr>"<code style='background: #EEE;'>userdata\lockfile.dat</code>"</nobr> on Windows) is used to make sure Tux Paint isn't run too many times at once (e.g., due to a child impatiently clicking its icon more than once). </p>
<p>
Even if the lockfile exists, it contains the 'time' Tux Paint was last run. If it's been more than 30 seconds, Tux Paint should run fine, and simply update the lockfile with the current time. </p>
<p>
If multiple users are sharing the directory where this file is stored (e.g., on a shared network drive), then you'll need to disable this feature. </p>
<p>
To disable the lockfile, add the "<code>--nolockfile</code>" argument to Tux Paint's command-line, or "<code>nolockfile=yes</code>" to the configuration file. </p>
</dd>
<dt>
Tux Paint launches very slowly </dt>
<dd>
<p>
The first time Tux Paint is launched (for a particular user), it may take a minute or more to respond. The font system used by Tux Paint (FontConfig, via Pango) is creating a 'cache' of information about the fonts on your system. Subsequent launches of Tux Paint should be fast. </p>
<p>
While the font cache is generated behind the scenes, Tux Paint should remain interactive (showing an animated 'please wait' animation) as this process runs. </p>
<p>
If this delay persists or reoccurs, it could be that the cache is being deleted &mdash; for example, in an environment (such as a school computer lab) where a system is returned into a default state when a user finishes using the program. Some versions of Tux Paint ship with a file, <nobr>"<code style='background: #EEE;'>fonts.conf</code>"</nobr> (<a href="https://fontconfig.pages.freedesktop.org/fontconfig/fontconfig-user.html">documented at freedesktop.org</a>), which can be modified to have FontConfig store the file elsewhere, e.g.: <blockquote>
<code>&lt;cachedir&gt;C:\Documents and Settings\All Users\Application Data\fontconfig\cache&lt;/cachedir&gt;</code>
</blockquote>
</p>
</dd>
<dt>
I can't quit Tux Paint </dt>
<dd>
<p>
The "no quit" option is set. This disables the "Quit" button in Tux Paint's toolbar (greying it out), and prevents Tux Paint from being exited via the <b>[Escape]</b> key. </p>
<p>
If Tux Paint is not in fullscreen mode, simply click the window close button on Tux Paint's title bar. (i.e., the "&#9447;" at the upper right.) </p>
<p>
If Tux Paint is in fullscreen mode, you will need to use the <b>[Shift]</b> + <b>[Kontroll]</b> + <b>[Escape]</b> sequence on the keyboard to quit Tux Paint. </p>
<p>
(Note: with or without "no quit" set, you can always use the <b>[Alt]</b> + <b>[F4]</b> combination on your keyboard to quit Tux Paint.) </p>
</dd>
<dt>
I don't want "no quit" mode enabled! </dt>
<dd>
<p>
If you're running Tux Paint from a command-line, make sure you're not giving it a "--noquit" option. </p>
<p>
If you're running Tux Paint by double-clicking an icon, check the properties of the icon to see if "<code>--noquit</code>" is listed as a command-line argument. </p>
<p>
If a "<code>--noquit</code>" option isn't being sent on the command line, check Tux Paint's configuration file for a line reading: "<code>noquit=yes</code>". </p>
<p>
Either remove that line, or simply run Tux Paint with the command-line argument: "<code>--quit</code>", which will override the configuration file's setting. </p>
<p>
Or use Tux Paint Config. and make sure "Disable Quit Button and [Escape] Key" (under "Simplification") is not checked. </p>
</dd>
<dt>
Tux Paint keeps writing weird messages to the screen / to a text file </dt>
<dd>
<p>
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. </p>
<p>
To change this, you must rebuild Tux Paint from source. Be sure to remove or comment out any line that says: </p>
<blockquote>
<p>
<code>#define DEBUG</code>
</p>
</blockquote>
<p>
in the "tuxpaint.c" file in the "src" directory. </p>
</dd>
<dt>
Tux Paint is using options I didn't specify! </dt>
<dd>
<p>
By default, Tux Paint first looks at configuration files for options. </p>
<ul>
<li>
<cite>Windows</cite>
<p>
Under Windows, it first examines the system-wide configuration file, located here: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>C:\Program Files\TuxPaint\tuxpaint.cfg</code></nobr> </p>
</blockquote>
<p>
It then examines the user's personal configuration file: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>C:\Users\<i>användarnamn</i>\AppData\Roaming\TuxPaint\tuxpaint.cfg</code></nobr> </p>
</blockquote>
<p>
Finally, any options sent as command-line arguments are used. </p>
</li>
<li>
<cite>macOS</cite>
<p>
Under macOS, it first examines the system-wide configuration file, located here: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>/Bibliotek/Application Support/TuxPaint/tuxpaint.cfg</code></nobr> </p>
</blockquote>
<p>
It then examines the user's personal configuration file: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>/Användare/<i>användarnamn</i>/Bibliotek/Application Support/TuxPaint/tuxpaint.cfg</code></nobr> </p>
</blockquote>
<p>
Finally, any options sent as command-line arguments are used. </p>
</li>
<li>
<cite>Linux / Unix</cite>
<p>
Under Unix and Linux, it first examines the system-wide configuration file, located here: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>/etc/tuxpaint/tuxpaint.conf</code></nobr> </p>
</blockquote>
<p>
It then examines the user's personal configuration file: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>/home/<i>användarnamn</i>/.tuxpaintrc</code></nobr> </p>
</blockquote>
<p>
Finally, any options sent as command-line arguments are used. </p>
</li>
<li>
<cite>Haiku</cite>
<p>
Under Haiku, Tux Paint first examines the configuration file: </p>
<blockquote>
<p>
<nobr><code style='background: #EEE;'>/boot/home/config/settings/TuxPaint/tuxpaint.conf</code></nobr> </p>
</blockquote>
<p>
Finally, any options sent as command-line arguments are used. </p>
</li>
</ul>
<p>
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. </p>
<p>
For example, on Linux and Unix, if <nobr>"<code style='background: #EEE;'>/etc/tuxpaint/tuxpaint.conf</code>"</nobr> includes this option to disable sound... </p>
<blockquote>
<p>
<code>nosound=yes</code>
</p>
</blockquote>
<p>
...then you can reenable sound by either adding this option to your own <nobr>"<code style='background: #EEE;'>/home/<i>användarnamn</i>/.tuxpaintrc</code>"</nobr> file: </p>
<blockquote>
<p>
<code>sound=yes</code>
</p>
</blockquote>
<p>
...or by using this command-line argument: </p>
<blockquote>
<p>
<code>--sound</code>
</p>
</blockquote>
<p>
On platforms where Tux Paint offers a system-wide configuration file, the settings in that file may be skipped (so only the user configuration file and other command-line arguments will be used) by including the following command-line argument: </p>
<blockquote>
<p>
<code>--nosysconfig</code>
</p>
</blockquote>
</dd>
<dt>
I need to deploy Tux Paint on many Windows systems at once </dt>
<dd>
The installers for both Tux Paint (plus Tux Paint Config.) (<code>tuxpaint-X.Y.Z-windows-ARCH-installer.exe</code>) and Tux Paint Stamps (<code>tuxpaint-stamps-YYYY.MM.DD-windows-installer.exe</code>) accept the command-line options "<code>/SILENT</code>" ("silent") or "<code>/VERYSILENT</code>" ("very silent") which can be used to install and uninstall their component without use of an interactive set-up window. This can be useful for automating installation on a collection of PCs, for example using Microsoft <cite>Intune</cite> cloud-based endpoint management solution (see <a href="https://learn.microsoft.com/mem/intune/">https://learn.microsoft.com/mem/intune/</a>). </dd>
</dl>
<hr size="2"
noshade>
<h2>
<a name="contact" id="contact">
Hjälp / Kontakt </a>
</h2>
<p>
Any questions you don't see answered? Please let us know! You can subscribe and post to our "tuxpaint-users" mailing list: </p>
<blockquote>
<p>
<a href="https://tuxpaint.org/lists/">https://tuxpaint.org/lists/</a>
</p>
</blockquote>
<p>
Or, contact lead developer Bill Kendrick directly: </p>
<blockquote>
<p>
<a href=
"mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a>
</p>
</blockquote>
</body>
</html>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,212 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint PNG Documentation </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<style>
body { font-size: large; }
table { font-size: large; }
div.screenshot-center {
text-align: center;
}
div.screenshot-right {
float: right;
margin-left: 1em;
margin-bottom: 1em;
}
div.screenshot-right-after {
clear: both;
}
div.keeptogether { page-break-inside: avoid; }
section h1 { font-size: 2em; }
h1, h2, h3, h4, h5 { font-family: sans; }
h1 { color: #800; page-break-before: always; break-before: always; }
h2 { color: #440; page-break-after: avoid; break-after: avoid; }
h3 { color: #080; page-break-after: avoid; break-after: avoid; }
h4 { color: #008; page-break-after: avoid; break-after: avoid; }
h5 { color: #808; page-break-after: avoid; break-after: avoid; }
h1 + p { page-break-inside: avoid; }
h2 + p { page-break-inside: avoid; }
h3 + p { page-break-inside: avoid; }
h4 + p { page-break-inside: avoid; }
h5 + p { page-break-inside: avoid; }
dt {
font-size: large;
color: #404;
font-family: sans;
margin-top: 1em;
margin-bottom: 0.25em;
}
dd, blockquote {
border-left: 1px solid #888;
padding-left: 1em;
border-radius: 0 0 0 1em;
}
p.note {
border: 1px solid #000;
background-color: #eee;
border-radius: 0.5em;
padding: 0.5em;
display: inline-block;
margin-right: 3em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
section.outer {
padding-bottom: 1em;
border-bottom: 2px solid #000;
}
section.indent p,dl {
margin-left: 2em;
}
section.indent dl p {
margin-left: 0;
}
p + ul, p + ol {
margin-left: 2em;
}
@media print {
p {
orphans: 3;
widows: 3;
}
}
</style>
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<section class="outer">
<header>
<center>
<h1>
<img src="../../html/images/tuxpaint-title.png"
width="205"
height="210"
alt="Tux Paint"><br>
version 0.9.35<br/>
PNG Documentation </h1>
<p>
Copyright &copy; 2007-2022 by olika bidragsgivare; see <a href="../../AUTHORS.txt">AUTHORS.txt</a>.<br>
<a href="https://tuxpaint.org/">https://tuxpaint.org/</a>
</p>
<p>
juni 4, 2022 </p>
</center>
</header>
</section>
<section class="indent">
<header>
<h1>Om PNG</h1>
</header>
<p>
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. </p>
<p>
For more information, visit: <a href="http://www.libpng.org/">http://www.libpng.org/</a> </p>
<p>
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.) </p>
<p>
Support for many colors allows photo-quality "rubber stamp" images to be used in Tux Paint, and alpha transparency allows for high-quality brushes. </p>
</section>
<section class="indent">
<header>
<h2>Hur man skapar PNG-filer</h2>
</header>
<p>The following is a very <em>brief</em> list of ways to create PNGs or convert existing images into PNGs.
<dl>
<dt>GIMP &amp; Krita</dt>
<dd>
<p>
Excellent tools with which to create PNG images for use in Tux Paint are GIMP and Krita, both high-quality Open Source interactive drawing and photo editing programs. </p>
<p>
It is likely that one or both are already installed on your system. If not, they should be readily available from your Linux distribution's software repository. If not, or to learn more, visit <a href="http://www.gimp.org/">http://www.gimp.org/</a> and <a href="http://www.krita.org/">http://www.krita.org/</a>, respectively. </p>
</dd>
<dt>Command-line Tools</dt>
<dd>
<dl>
<dt>NetPBM</dt>
<dd>
<p>
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. </p>
<p>
It is possible that it's already installed on your system. If not, they it be readily available from your Linux distribution's software repository. If not, or to learn more, visit <a href="http://netpbm.sourceforge.net/">http://netpbm.sourceforge.net/</a>. </p>
</dd>
<dt>cjpeg/djpeg</dt>
<dd>
<p>
The "cjpeg" and "djpeg" command-line programs convert between the NetPBM Portable Any Map (PNM) format and JPEGs.
It is possible that it's already installed on your system. If not, they it be readily available from your Linux distribution's software repository. If not, or to learn more, visit <a href="https://jpegclub.org/">https://jpegclub.org/</a>. </p>
</dd>
</dl>
</dd>
<dt>Proprietary Software for Windows</dt>
<dd>
<ul>
<li> <cite>CorelDRAW</cite>
(Corel)
&mdash;
<a href="http://www.corel.com/">http://www.corel.com/</a>
<li> <cite>Illustrator</cite>
(Adobe)
&mdash;
<a href="http://www.adobe.com/products/illustrator.html">http://www.adobe.com/products/illustrator.html</a>
<li> <cite>Paint Shop Pro</cite>
(Corel)
&mdash;
<a href="https://www.paintshoppro.com/">https://www.paintshoppro.com/</a>
<li> <cite>Photoshop</cite>
(Adobe)
&mdash;
<a href="http://www.adobe.com/products/photoshop.html">http://www.adobe.com/products/photoshop.html</a>
<li> <cite>PIXresizer</cite>
(Bluefive software)
&mdash;
<a href="http://bluefive.pair.com/pixresizer.htm">http://bluefive.pair.com/pixresizer.htm</a>
</ul>
</dd>
<dt>Macintosh Users</dt>
<dd>
<ul>
<li> <cite>CorelDRAW</cite>
(Corel)
&mdash;
<a href="http://www.corel.com/">http://www.corel.com/</a>
<li> <cite>GraphicConverter</cite>
(Lemke Software)
&mdash;
<a href="https://www.lemkesoft.de/mac-fotobearbeitung-mac-diashow-mac-grafikprogramm-mac-bildbetrachter/">https://www.lemkesoft.de/mac-fotobearbeitung-mac-diashow-mac-grafikprogramm-mac-bildbetrachter/</a>
<li> <cite>Illustrator</cite>
(Adobe)
&mdash;
<a href="http://www.adobe.com/products/illustrator.html">http://www.adobe.com/products/illustrator.html</a>
<li> <cite>Photoshop</cite>
(Adobe)
&mdash;
<a href="http://www.adobe.com/products/photoshop.html">http://www.adobe.com/products/photoshop.html</a>
</ul>
</dd>
</dl>
</section>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,149 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint Signals Documentation </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<style>
body { font-size: large; }
table { font-size: large; }
div.screenshot-center {
text-align: center;
}
div.screenshot-right {
float: right;
margin-left: 1em;
margin-bottom: 1em;
}
div.screenshot-right-after {
clear: both;
}
div.keeptogether { page-break-inside: avoid; }
section h1 { font-size: 2em; }
h1, h2, h3, h4, h5 { font-family: sans; }
h1 { color: #800; page-break-before: always; break-before: always; }
h2 { color: #440; page-break-after: avoid; break-after: avoid; }
h3 { color: #080; page-break-after: avoid; break-after: avoid; }
h4 { color: #008; page-break-after: avoid; break-after: avoid; }
h5 { color: #808; page-break-after: avoid; break-after: avoid; }
h1 + p { page-break-inside: avoid; }
h2 + p { page-break-inside: avoid; }
h3 + p { page-break-inside: avoid; }
h4 + p { page-break-inside: avoid; }
h5 + p { page-break-inside: avoid; }
dt {
font-size: large;
color: #404;
font-family: sans;
margin-top: 1em;
margin-bottom: 0.25em;
}
dd, blockquote {
border-left: 1px solid #888;
padding-left: 1em;
border-radius: 0 0 0 1em;
}
p.note {
border: 1px solid #000;
background-color: #eee;
border-radius: 0.5em;
padding: 0.5em;
display: inline-block;
margin-right: 3em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
section.outer {
padding-bottom: 1em;
border-bottom: 2px solid #000;
}
section.indent p,dl {
margin-left: 2em;
}
section.indent dl p {
margin-left: 0;
}
p + ul, p + ol {
margin-left: 2em;
}
@media print {
p {
orphans: 3;
widows: 3;
}
}
</style>
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<section class="outer">
<center>
<header>
<h1>
<img src="../../html/images/tuxpaint-title.png"
width="205"
height="210"
alt="Tux Paint"><br>
version 0.9.35<br/>
Signals Documentation </h1>
<p>
Copyright &copy; 2019-2022 by olika bidragsgivare; see <a href="../../AUTHORS.txt">AUTHORS.txt</a>.<br>
<a href="https://tuxpaint.org/">https://tuxpaint.org/</a>
</p>
<p>
juni 4, 2022 </p>
</header>
</center>
</section>
<section>
<p>
Tux Paint responds to the following signals (which can be sent to the program's process via `<code>kill</code>` or `<code>killall</code>`, for example). </p>
<dl>
<dt>
<code>SIGTERM</code>
(also, <b><code>[Kontroll]</code></b> + <b><code>[C]</code></b> from a terminal running `<code>tuxpaint</code>`) </dt>
<dd>
<p>
Tux Paint responds as if the "Quit" button were pressed, or the desktop environment was told to close Tux Paint (e.g., by clicking a window close button, or pressing <b><code>[Alt]</code></b> + <b><code>[F4]</code></b> on most systems). </p>
<p>
From the main interface, Tux Paint will prompt whether or not you wish to quit, and (unless overridden by the auto-save option, e.g. "<code>--autosave</code>") if you'd like to save the current drawing (if unsaved), and if so, and it's a modified version of an existing drawing (unless overridden by the options to save over old images, or always save new images; e.g. "<code>--saveover</code>" and "<code>--saveovernew</code>", respectively), whether or not to overwrite the existing drawing, or save to a new file. </p>
<p>
Exempel: <code>killall tuxpaint</code> </p>
<p class="note">
<span title="Information">&#128161;</span> <strong>Note:</strong> From other parts of the interface, the signal is currently interpreted as a request to go back (e.g., from the "New" dialog back to the main interface), as if a "Back" button in Tux Paint were clicked, or the <b><code>[Esc]</code></b> was key pressed. </p>
</dd>
<dt>
<code>SIGUSR1</code> &amp; <code>SIGUSR2</code>
</dt>
<dd>
<p>
Tux Paint responds by setting its auto-save option (as if it had been launched with "<code>--autosave</code>"), as well as either the option to always save new images (as if launched with "<code>--saveovernew</code>") in the case of receiving a <code>SIGUSR1</code> signal, or to always save over the existing image (as if launched with "<code>--saveover</code>") in the case of receiving <code>SIGUSR2</code>. Then Tux Paint sends itself a <code>SIGTERM</code> signal, in an attempt to quit. (See above.) </p>
<p>
So, from the main interface, Tux Paint should quit almost immediately, with no questions asked. </p>
<p>
Exempel: <code>killall -s SIGUSR1 tuxpaint</code> </p>
<p class="note">
<span title="Information">&#128161;</span> <strong>Note:</strong> From other parts of the interface, unfortunately, Tux Paint will go back one level in the interface. Therefore, at this time, it may be necessary to send this signal to Tux Paint a few times, for it to quit completely. </p>
</dd>
</dl>
</section>
</body>
</html>

View file

@ -0,0 +1,169 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint SVG Documentation </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<style>
body { font-size: large; }
table { font-size: large; }
div.screenshot-center {
text-align: center;
}
div.screenshot-right {
float: right;
margin-left: 1em;
margin-bottom: 1em;
}
div.screenshot-right-after {
clear: both;
}
div.keeptogether { page-break-inside: avoid; }
section h1 { font-size: 2em; }
h1, h2, h3, h4, h5 { font-family: sans; }
h1 { color: #800; page-break-before: always; break-before: always; }
h2 { color: #440; page-break-after: avoid; break-after: avoid; }
h3 { color: #080; page-break-after: avoid; break-after: avoid; }
h4 { color: #008; page-break-after: avoid; break-after: avoid; }
h5 { color: #808; page-break-after: avoid; break-after: avoid; }
h1 + p { page-break-inside: avoid; }
h2 + p { page-break-inside: avoid; }
h3 + p { page-break-inside: avoid; }
h4 + p { page-break-inside: avoid; }
h5 + p { page-break-inside: avoid; }
dt {
font-size: large;
color: #404;
font-family: sans;
margin-top: 1em;
margin-bottom: 0.25em;
}
dd, blockquote {
border-left: 1px solid #888;
padding-left: 1em;
border-radius: 0 0 0 1em;
}
p.note {
border: 1px solid #000;
background-color: #eee;
border-radius: 0.5em;
padding: 0.5em;
display: inline-block;
margin-right: 3em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
section.outer {
padding-bottom: 1em;
border-bottom: 2px solid #000;
}
section.indent p,dl {
margin-left: 2em;
}
section.indent dl p {
margin-left: 0;
}
p + ul, p + ol {
margin-left: 2em;
}
@media print {
p {
orphans: 3;
widows: 3;
}
}
</style>
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<!-- Title -->
<section class="outer">
<header>
<center>
<h1>
<img src="../../html/images/tuxpaint-title.png"
width="205"
height="210"
alt="Tux Paint"><br>
version 0.9.35<br/>
SVG Documentation </h1>
<p>
Copyright &copy; 2007-2022 by olika bidragsgivare; see <a href="../../AUTHORS.txt">AUTHORS.txt</a>.<br>
<a href="https://tuxpaint.org/">https://tuxpaint.org/</a>
</p>
<p>
juni 4, 2022 </p>
</center>
</header>
</section>
<section class="indent">
<header>
<h1>Om SVG:er</h1>
</header>
<p>
SVG (Scalable Vector Graphics) is an open standard used to describe two-dimensional vector graphics. It is great for diagrams and shapes, while PNGs are better for photographs. SVG files are a bit like instructions on how to make an image. This means that they can be resized without looking pixelated or blocky. </p>
<p>
For more information, visit: <a href="https://www.w3.org/Graphics/SVG/">https://www.w3.org/Graphics/SVG/</a> </p>
</section>
<section class="indent">
<header>
<h1>Hur man gör SVG:er</h1>
</header>
<p>
An excellent tool with which to create SVG images for use in Tux Paint is Inkscape, a high-quality Open Source interactive drawing program available for Windows, macOS, and Linux. There are also other applications that can produce SVGs, both free/open source, and commerical/proprietary. </p>
<dl>
<dt><strong>Open Source</strong></dt>
<dd>
<ul>
<li> <cite>Inkscape</cite>
&mdash;
<a href="http://www.inkscape.org/">http://www.inkscape.org/</a>
</li>
<li> <cite>Karbon</cite>
&mdash;
<a href="https://calligra.org/karbon/">https://calligra.org/karbon/</a>
</li>
</ul>
</dd>
<dt><strong>Proprietär</strong></dt>
<dd>
<ul>
<li> <cite>CorelDRAW</cite>
(Corel)
&mdash;
<a href="https://www.coreldraw.com/en/">https://www.coreldraw.com/en/</a>
</li>
<li> <cite>Illustrator</cite>
(Adobe)
&mdash;
<a href="http://www.adobe.com/products/illustrator.html">http://www.adobe.com/products/illustrator.html</a>
</li>
<li> <cite>Boxy SVG</cite>
&mdash;
<a href="https://boxy-svg.com/">https://boxy-svg.com/</a>
</li>
<li> <cite>Sketch</cite>
(Sketch B.V.)
&mdash;
<a href="https://boxy-svg.com/">https://boxy-svg.com/</a>
</li>
</ul>
</dl>
</section>
</body>
</html>

View file

@ -0,0 +1,700 @@
/* tp_magic_example.c
An example of a "Magic" tool plugin for Tux Paint
maj 10, 2024
*/
/* Inclusion of header files */
/* ---------------------------------------------------------------------- */
#include <stdio.h>
#include <string.h> // För "strdup()"
#include <libintl.h> // För "gettext()"
#include "tp_magic_api.h" // Tux Paint "Magic" tool API header
#include "SDL_image.h" // For IMG_Load(), to load our PNG icon
#include "SDL_mixer.h" // For Mix_LoadWAV(), to load our sound effects
/* Tool Enumerations: */
/* ---------------------------------------------------------------------- */
/* What tools we contain: */
enum
{
TOOL_ONE, // Becomes '0'
TOOL_TWO, // Becomes '1'
NUM_TOOLS // Becomes '2'
};
/* Lists of filenames for sounds and icons to load at startup: */
const char *sound_filenames[NUM_TOOLS] = {
"tool_one.wav",
"tool_two.wav"
};
const char *icon_filenames[NUM_TOOLS] = {
"tool_one.png",
"tool_two.png"
};
/*
NOTE: We use a macro called "gettext_noop()" below in some arrays of
strings (char *'s) that hold the names and descriptions of our "Magic"
tools. This allows the strings to be localized into other languages.
*/
/* A list of names for the tools */
const char *tool_names[NUM_TOOLS] = {
gettext_noop("A tool"),
gettext_noop("Another tool")
};
/* How to group the tools with other similar tools, within the 'Magic' selector: */
const int tool_groups[NUM_TOOLS] = {
MAGIC_TYPE_PAINTING,
MAGIC_TYPE_DISTORTS
};
/* A list of descriptions of the tools */
const char *tool_descriptions[NUM_TOOLS] = {
gettext_noop("This is example tool number 1."),
gettext_noop("This is example tool number 2.")
};
/* Our global variables: */
/* ---------------------------------------------------------------------- */
/* Sound effects: */
Mix_Chunk *sound_effects[NUM_TOOLS];
/* The current color (an "RGB" -- red, green, blue -- value) the user has
selected in Tux Paint (for tool 1): */
Uint8 example_r, example_g, example_b;
/* The size the user has selected in Tux Paint (for tool 2): */
Uint8 example_size;
/* Our local function prototypes: */
/* ---------------------------------------------------------------------- */
/*
These functions are called by other functions within our plugin, so we
provide a 'prototype' of them, so the compiler knows what they accept and
return. This lets us use them in other functions that are declared
_before_ them.
*/
void example_drag(magic_api * api, int which, SDL_Surface * canvas,
SDL_Surface * ogonblicksbild, int old_x, int old_y, int x,
int y, SDL_Rect * update_rect);
void example_line_callback(void *pointer, int which, SDL_Surface * canvas,
SDL_Surface * ogonblicksbild, int x, int y);
/* Setup Functions: */
/* ---------------------------------------------------------------------- */
/*
API Version check
The running copy of Tux Paint that has loaded us first asks us what version
of the Tux Paint 'Magic' tool plugin API we were built against. If it
deems us compatible, we'll be used!
All we need to do here is return "TP_MAGIC_API_VERSION", which is defined
(#define) in the header file "tp_magic_api.h".
*/
Uint32 example_api_version(void)
{
return (TP_MAGIC_API_VERSION);
}
/*
Initialization
This happens once, when Tux Paint starts up and is loading all of the
'Magic' tool plugins. (Assuming what we returned from api_version was
acceptable!)
All we're doing in this example is loading our sound effects, which we'll
use later (in example_click(), example_drag(), and example_release()) when
the user is using our Magic tools.
The memory we allocate here to store the sounds will be freed (aka
released, aka deallocated) when the user quits Tux Paint, when our
example_shutdown() function is called.
*/
int example_init(magic_api *api, Uint8 disabled_features,
Uint8 complexity_level)
{
int i;
char filnamn[1024];
for (i = 0; i < NUM_TOOLS; i++)
{
/*
Assemble the filename from the "sound_filenames[]" array into a full path
to a real file.
Use "api->data_directory" to figure out where our sounds should be. (The
"tp-magic-config --dataprefix" command would have told us when we installed
our plugin and its data.)
*/
snprintf(filnamn, sizeof(filnamn), "%ssounds/magic/%s",
api->data_directory, sound_filenames[i]);
printf("Trying to load %s sound file\n", filnamn);
/* Try to load the file! */
sound_effects[i] = Mix_LoadWAV(filnamn);
}
return (1);
}
/*
Report our tool count
Tux Paint needs to know how many 'Magic' tools we'll be providing. Return
that number here. (We simply grab the value of 'NUM_TOOLS' from our 'enum'
above!)
When Tux Paint is starting up and loading plugins, it will call some of the
following setup functions once for each tool we report.
*/
int example_get_tool_count(magic_api *api)
{
return (NUM_TOOLS);
}
/*
Load our icons
When Tux Paint is starting up and loading plugins, it asks us to provide
icons for the 'Magic' tool buttons.
*/
SDL_Surface *example_get_icon(magic_api *api, int which)
{
char filnamn[1024];
/*
Assemble the filename from the "icon_filenames[]" array into a full path to
a real file.
Use "api->data_directory" to figure out where our sounds should be. (The
"tp-magic-config --dataprefix" command would have told us when we installed
our plugin and its data.)
We use "which" (which of our tools Tux Paint is asking about) as an index
into the array.
*/
snprintf(filnamn, sizeof(filnamn), "%simages/magic/%s",
api->data_directory, icon_filenames[which]);
printf("Trying to load %s icon\n", filnamn);
/* Try to load the image, and return the results to Tux Paint: */
return (IMG_Load(filnamn));
}
/*
Report our 'Magic' tool names
When Tux Paint is starting up and loading plugins, it asks us to provide
names (labels) for the 'Magic' tool buttons.
*/
char *example_get_name(magic_api *api, int which)
{
const char *our_name_english;
const char *our_name_localized;
/*
Get our name from the "tool_names[]" array.
We use 'which' (which of our tools Tux Paint is asking about) as an index
into the array.
*/
our_name_english = tool_names[which];
/*
Return a localized (aka translated) version of our name, if possible.
We send "gettext()" the English version of the name from our array.
*/
our_name_localized = gettext(our_name_english);
/*
Finally, duplicate the string into a new section of memory, and send it to
Tux Paint. (Tux Paint keeps track of the string and will free it for us,
so we have one less thing to keep track of.)
*/
return (strdup(our_name_localized));
}
/*
Report our 'Magic' tool groups
When Tux Paint is starting up and loading plugins, it asks us to specify
where the tool should be grouped.
*/
int example_get_group(magic_api *api, int which)
{
/*
Return our group, found in the "tool_groups[]" array.
We use 'which' (which of our tools Tux Paint is asking about) as an index
into the array.
*/
return (tool_groups[which]);
}
/*
Return grouping/ordering number
When Tux Paint is starting up and loading plugins, it asks us to provide a
numeric value used for sorting 'Magic' tools within a group. Tools will be
ordered based on this number, and those with the same number will be sorted
alphabetically by their localized name (see 'example_get_name').
*/
int *example_get_order(int which)
{
return 0;
}
/*
Report our 'Magic' tool descriptions
When Tux Paint is starting up and loading plugins, it asks us to provide
descriptions of each 'Magic' tool.
*/
char *example_get_description(magic_api *api, int which, int mode)
{
const char *our_desc_english;
const char *our_desc_localized;
/*
Get our description from the "tool_descriptions[]" array.
We use 'which' (which of our tools Tux Paint is asking about) as an index
into the array.
*/
our_desc_english = tool_descriptions[which];
/*
Return a localized (aka translated) version of our description, if
possible.
We send "gettext" the English version of the description from our array.
*/
our_desc_localized = gettext(our_desc_english);
/*
Finally, duplicate the string into a new section of memory, and send it to
Tux Paint. (Tux Paint keeps track of the string and will free it for us,
so we have one less thing to keep track of.)
*/
return (strdup(our_desc_localized));
}
// Report whether we accept colors
int example_requires_colors(magic_api *api, int which)
{
if (which == TOOL_ONE)
return 1;
else
return 0;
}
// Report what modes we work in
int example_modes(magic_api *api, int which)
{
/*
Both of our tools are painted (neither affect the full-screen), so we're
always returning 'MODE_PAINT'
*/
return MODE_PAINT;
}
// Report whether the tools offer sizing options
Uint8 example_accepted_sizes(magic_api *api, int which, int mode)
{
if (which == TOOL_ONE)
return 1;
else
return 4;
}
// Return our default sizing option
Uint8 example_default_size(magic_api *api, int which, int mode)
{
return 1;
}
/*
Stäng av
Tux Paint is quitting. When it quits, it asks all of the plugins to 'clean
up' after themselves. We, for example, loaded some sound effects at
startup (in our example_init() function), so we should free the memory used
by them now.
*/
void example_shutdown(magic_api *api)
{
int i;
/*
Free (aka release, aka deallocate) the memory used to store the sound
effects that we loaded during example_init():
*/
for (i = 0; i < NUM_TOOLS; i++)
Mix_FreeChunk(sound_effects[i]);
}
/* Functions that respond to events in Tux Paint: */
/* ---------------------------------------------------------------------- */
/* Affect the canvas on click: */
void
example_click(magic_api *api, int which, int mode,
SDL_Surface *canvas, SDL_Surface *ogonblicksbild, int x, int y,
SDL_Rect *update_rect)
{
/*
In our case, a single click (which is also the start of a drag!) is
identical to what dragging does, but just at one point, rather than across
a line.
So we 'cheat' here, by calling our "example_draw()" function with (x,y) for
both the beginning and end points of a line.
*/
example_drag(api, which, canvas, ogonblicksbild, x, y, x, y, update_rect);
}
/* Affect the canvas on drag: */
void
example_drag(magic_api *api, int which,
SDL_Surface *canvas, SDL_Surface *ogonblicksbild,
int old_x, int old_y, int x, int y, SDL_Rect *update_rect)
{
/*
Call Tux Paint's "line()" (line-traversing) function.
It will calculate a straight line between (old_x,old_y) and (x,y). Every
N steps along that line (in this case, N is '1'), it will call _our_
function, "example_line_callback()", and send the current X,Y
coordinates along the line, as well as other useful things (which of our
'Magic' tools is being used and the current and snapshot canvases).
*/
SDL_LockSurface(ogonblicksbild);
SDL_LockSurface(canvas);
api->line((void *) api, which, canvas, ogonblicksbild,
old_x, old_y, x, y, 1, example_line_callback);
SDL_UnlockSurface(canvas);
SDL_UnlockSurface(ogonblicksbild);
/*
If we need to, swap the X and/or Y values, so that the coordinates
(old_x,old_y) is always the top left, and the coordinates (x,y) is
always the bottom right, so the values we put inside "update_rect" make
sense:
*/
if (old_x > x)
{
int temp = old_x;
old_x = x;
x = temp;
}
if (old_y > y)
{
int temp = old_y;
old_y = y;
y = temp;
}
/*
Fill in the elements of the "update_rect" SDL_Rect structure that Tux
Paint is sharing with us, therefore telling Tux Paint which part of the
canvas has been modified and should be updated.
*/
if (which == TOOL_ONE)
{
update_rect->x = old_x;
update_rect->y = old_y;
update_rect->w = (x - old_x) + 1;
update_rect->h = (y - old_y) + 1;
}
else
{
update_rect->x = old_x - example_size;
update_rect->y = old_y - example_size;
update_rect->w = (x + example_size) - update_rect->x + 1;
update_rect->h = (y + example_size) - update_rect->y + 1;
}
/*
Play the appropriate sound effect
We're calculating a value between 0-255 for where the mouse is
horizontally across the canvas (0 is the left, ~128 is the center, 255
is the right).
These are the exact values Tux Paint's "playsound()" wants, to determine
what speaker to play the sound in. (So the sound will pan from speaker
to speaker as you drag the mouse around the canvas!)
*/
api->playsound(sound_effects[which], (x * 255) / canvas->w, /* Left/right pan */
255 /* Near/far distance (loudness) */ );
}
/* Affect the canvas on release: */
void
example_release(magic_api *api, int which,
SDL_Surface *canvas, SDL_Surface *ogonblicksbild, int x,
int y, SDL_Rect *update_rect)
{
/*
Neither of our effects do anything special when the mouse is released
from a click or click-and-drag, so there's no code here...
*/
}
/*
Accept colors
When any of our 'Magic' tools are activated by the user, if that tool
accepts colors, the current color selection is sent to us.
Additionally, if one of our color-accepting tools is active when the user
changes their chosen, we'll be informed of that as well.
The color comes in as RGB (red, green, and blue) values from 0 (darkest) to
255 (brightest).
*/
void example_set_color(magic_api *api, int which, SDL_Surface *canvas,
SDL_Surface *ogonblicksbild, Uint8 r, Uint8 g, Uint8 b,
SDL_Rect *update_rect)
{
/*
We simply store the RGB values in the global variables we declared at
the top of this file.
*/
example_r = r;
example_g = g;
example_b = b;
}
/*
Accept sizes
When any of our 'Magic' tools are activated by the user, if that tool
offer's sizes, the current size selection is sent to us.
Additionally, if the user changes the tool's size, we'll be informed of
that as well.
The size comes in as an unsigned integer (Uint8) between 1 and the value
returned by our example_accepted_sizes() function during setup.
*/
void example_set_size(magic_api *api, int which, int mode,
SDL_Surface *canvas, SDL_Surface *ogonblicksbild,
Uint8 size, SDL_Rect *update_rect)
{
/*
Store the new size into the global variable we declared at the top of
this file.
*/
example_size = size * 4;
}
/* The Magic Effect Routines! */
/* ---------------------------------------------------------------------- */
/*
Our 'callback' function
We do the 'work' in this callback. Our plugin file has just one. Some
'Magic' tool plugins may have more, depending on the tools they're
providing. Some have none (since they're not click-and-drag painting-style
tools).
Our callback function gets called once for every point along a line between
the mouse's previous and current position, as it's being dragged.
Our callback pays attention to 'which' to determine which of our plugin's
tools is currently selected.
*/
void example_line_callback(void *pointer, int which, SDL_Surface *canvas,
SDL_Surface *ogonblicksbild, int x, int y)
{
/*
For technical reasons, we can't accept a pointer to the Tux Paint API's
"magic_api" struct, like the other functions do.
Instead, we receive a 'generic' pointer (a "void *"). The line below
declares a local "magic_api" pointer variable called "api", and then
assigns it to the value of the 'generic' pointer we received.
The "(magic_api *)" seen below casts the generic "void *" pointer into
the 'type' of pointer we want, a pointer to a "magic_api" struct.)
*/
magic_api *api = (magic_api *) pointer;
int xx, yy;
/*
This function handles both of our tools, so we need to check which is
being used right now. We compare the 'which' argument that Tux Paint
sends to us with the values we enumerated above.
*/
if (which == TOOL_ONE)
{
/*
Tool number 1 simply draws a single pixel at the (x,y) location. It acts
as a 1x1 pixel brush.
*/
api->putpixel(canvas, x, y,
SDL_MapRGB(canvas->format,
example_r, example_g, example_b));
/*
We use "SDL_MapRGB()" to convert the RGB value we receive from Tux Paint
for the user's current color selection to a 'Uint32' pixel value we can
send to Tux Paint's "putpixel()" function.
*/
}
else if (which == TOOL_TWO)
{
/*
Tool number 2 copies a square of pixels (of the size chosen by the user)
from the opposite side of the canvas and puts it under the cursor.
*/
for (yy = -example_size; yy < example_size; yy++)
{
for (xx = -example_size; xx < example_size; xx++)
{
api->putpixel(canvas, x + xx, y + yy,
api->getpixel(ogonblicksbild,
ogonblicksbild->w - x - xx,
ogonblicksbild->h - y - yy));
/*
Here we have simply use Tux Paint's "getpixel()" routine to pull pixel
values from the 'snapshot', and then "putpixel()" to draw them right
into the 'canvas'.
Note: putpixel() and getpixel() are safe to use, even if your X,Y values
are outside of the SDL surface (e.g., negative, or greater than the
surface's width and/or height).
*/
}
}
}
}
/*
Switch-In event
This happens whenever a Magic tool is enabled, either because the user just
selected it, or they just came back to 'Magic' after using another tool
(e.g., Brush or Text), and this was the most-recently selected Magic tool.
(This also applies to momentary tools, like Undo and Redo, and
image-changing tools such as New and Open.)
It also happens when a Magic tool's mode changes (we will first receive a
call to 'example_switchout()', below, for the old mode).
Our example doesn't do anything when we switch to, or away from, our Magic
tools, so we just do nothing here.
*/
void example_switchin(magic_api *api, int which, int mode,
SDL_Surface *canvas)
{
}
/*
Switch-Out event
This happens whenever a Magic tool is disabled, either because the user
selected a different Magic tool, or they selected a completely different
tool (e.g., Brush or Text).
(This also applies to momentary tools, like Undo and Redo, and
image-changing tools such as New and Open.)
(And in that case, our example_switchin() function will be called moments
later.)
It also happens when a Magic tool's mode changes (we will then receive a
call to 'example_switchin()', above, for the new mode).
Our example doesn't do anything when we switch to, or away from, our Magic
tools, so we just do nothing here.
*/
void example_switchout(magic_api *api, int which, int mode,
SDL_Surface *canvas)
{
}

View file

@ -0,0 +1,238 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
Tux Paint 0.9.35 Quickstart Guide </title>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" />
</head>
<body bgcolor="#FFFFFF"
text="#000000"
link="#0000FF"
vlink="#FF0000"
alink="#FF00FF">
<h1>Tux Paint 0.9.35 Quickstart Guide</h1>
<h2>Tools (Drawing)</h2>
<h3>🖌Paint</h3>
<ul>
<li>Choose a brush on the right.</li></li>
<li>Some brushes are animated 🎞, some are directional ✲, some are both.</li>
<li>Change brush spacing with the bars 📶 at the bottom right.</li>
<li>Choose a color (see "Colors").</li>
<li>Click/tap and drag in the canvas to paint.</li>
</ul>
<h3>⌧Stämplar</h3>
<ul>
<li>Change categories with the arrow buttons ⇦⇨ near the bottom right.</li>
<li>Choose a stamp on the right.</li>
<li>Some stamps may be mirrored 🪞, and/or flipped ↕, using controls near the bottom right.</li>
<li>Some stamps allow you to choose their color (see "Colors").</li>
<li>Change stamp size with the bars 📶 at the bottom right.</li>
<li>Rotation ⟳ may be enabled, if desired.</li>
<li>
Click/tap in the canvas to place a stamp. <ul>
<li>If rotation is enabled, drag to rotate it, and click/tap again to add it to the drawing.</li>
</ul>
</li>
<li>Some stamps play sound effects; press the speaker 🕪 button to hear it again.</li>
<li>Some stamps play descriptive sounds; press the headphones 🎧 button to hear it again.</li>
</ul>
<h3>⚟Lines</h3>
<ul>
<li>(See Paint)</li>
<li>Click/tap and drag to draw a line.</li>
</ul>
<h3>⭓Shapes</h3>
<ul>
<li>Choose a shape on the right.</li>
<li>Select whether you want to extend the shape from the center ⧈, or a corner ◰, using controls at the bottom right.</li>
<li>Click/tap to position, and drag to set the size of the shape.</li>
<li>Drag to rotate it, and click/tap again to add it to the drawing.</li>
</ul>
<h3>🄰Text</h3>
<ul>
<li>Choose a font on the right.</li>
<li>Select whether you want the text bold 𝗔 and/or italic 𝘈, using controls near the bottom right.</li>
<li>Change text size using the up 🡁 and down 🡃 arrow buttons at the bottom right.</li>
<li>Choose a color (see "Colors").</li>
<li>Click/tap the canvas to position an insertion cursor.</li>
<li>Enter text via your keyboard or the on-screen keyboard.</li>
<li>Click/tap the canvas again if you wish to reposition the text.</li>
<li>Press [Enter]/[Return] or click/tap ⮨ to add the text to the drawing and begin entering more text one line down.</li>
<li>Or, press [Tab] or click/tap or ⟷ to add the text to the drawing and continue entering more text immediately to the right.</li>
<li>Press [Control]+[V] or click/tap "Paste" to paste clipboard text into your input</li>
<li>
Använda tangentbordet på skärmen: <ul>
<li>"Cmp" can be used to compose characters, e.g. Cmp ' a results in á.</li>
<li>"AltGr" can be used to quickly access more characters.</li>
<li>Left/Right arrows switches keyboard layouts (e.g., "QWERTY" vs. "ABC")</li>
</ul>
</li>
</ul>
<h3>🅰Etikett</h3>
<ul>
<li>(Se text)</li>
<li>Labels float 'above' the drawing; you cannot paint or stamp over them, apply Magic effects, etc.</li>
<li>Labels may be edited, repositioned, and styled after they've been added to the drawing.</li>
<li>Click/tap the ☝ button near the lower right to choose a label. Click/tap the label you wish to modify, then click/tap somewhere else in the canvas to reposition, or change the font/style, change color, and/or type to edit the text.</li>
<li>Or, use the 🖑 button near the lower right to "flatten" a label, applying it to the canvas; it may no longer be edited with the Label tool.</li>
</ul>
<h3>🪣Fyll</h3>
<ul>
<li>Choose a fill mode on the right.</li>
<li>Choose a color (see "Colors").</li>
<li>
Click/tap (and drag, with Brush and Linear modes) to fill an area of the picture with a color. <ul>
<li>Solid - Flood-fills an area with a solid color</li>
<li>Brush - Paints with a solid color, without drawing outside the chosen area</li>
<li>Linear - Fills the area with a linear gradient (drag to choose angle and gradient)</li>
<li>Radial - Fills the area with a radial gradient, centered where you clicked/tapped</li>
<li>Shaped - Fills the area with a gradient that follows the contours of the area being filled</li>
<li>Eraser - Replaces an area with the background color, or Starter or Template background image</li>
</ul>
</li>
</ul>
<h3>🪄Magisk</h3>
<ul>
<li>Choose a magic tool on the right.</li>
<li>Change categories with the arrow buttons ⇦⇨ near the bottom right.</li>
<li>Some magic tools draw or apply effects via click/tap and drag 〰🪄, some affect the entire drawing 🖻🪄, and some offer both options; use the controls at the bottom right.</li>
<li>Some magic tools offer various sizes; change it with the bars 📶 at the bottom right.</li>
<li>Some magic tools allow you to choose their color.</li>
</ul>
<h3>🖓Ångra</h3>
<ul>
<li>Use to undo the most recent changes (multiple undo available).</li>
<li>Shortcut: [Control]+[Z]</li>
</ul>
<h3>🖒Gör om</h3>
<ul>
<li>Use to redo the most recent undone change (multiple redo available).</li>
<li>Shortcut: [Control]+[R]</li>
</ul>
<h3>◪Eraser</h3>
<ul>
<li>Choose the size and shape of the eraser on the right.</li>
<li>Click/tap and drag to erase parts of the picture (solid color, or starter or template image).</li>
<li>Shortcut: [X] and click/tap in the drawing (not always available)</li>
</ul>
<h2>Tools (Controls)</h2>
<h3>🗏Ny</h3>
<ul>
<li>
Choose a solid color, starter, or template image to start with. <ul>
<li>Starters allow drawing "under" a picture (e.g., a coloring book outline), sometimes with a background layer, too.</li>
<li>Templates are pictures to start with (background only).</li>
<li>Eraser tool ◪ reveals the solid color, or starter/template background.</li>
</ul>
</li>
<li>Click/tap "🕮⮫Open" to begin a new drawing.</li>
<li>Click/tap "⤺Back" to abort and return to your current drawing.</li>
<li>Shortcut: [Control]+[N]</li>
</ul>
<h3>🕮⮫Open</h3>
<ul>
<li>Choose a previously-saved drawing to open (or export or erase).</li>
<li>Click/tap "🕮⮫Open" to open the saved drawing and continue editing it.</li>
<li>Click/tap "🗏⮫Export" to save the drawing to your system's "Pictures" folder.</li>
<li>Click/tap "🗑Erase" to move the drawing to your system's Trash/Recycle Bin.</li>
<li>Click/tap "⤺Back" to abort and return to your current drawing.</li>
<li>
Click/tap "📽Slides" to switch to slideshow mode: <ul>
<li>Click/tap two or more of your previously-saved drawings, in the order you want them shown. Numbers will appear on them.</li>
<li>Choose the playback speed using the bars 📶 near the lower left.</li>
<li>Click/tap "⯈Play" to watch the slideshow/animation.</li>
<li>Or, click/tap "🎞GIF Export" to save an animated GIF of the animation to your system's "Pictures" folder.</li>
<li>Click/tap "⤺Back" to return to the Open dialog.</li>
</ul>
</li>
<li>Click/tap "🖻⮫🗏Template" to turn the drawing into a new template.</li>
<li>Shortcut: [Control]+[O]</li>
</ul>
<h3>🕮⮪Save</h3>
<ul>
<li>Click/tap to save your drawing.</li>
<li>If you've saved previously, you'll be prompted whether to overwrite the previously-saved drawing (a la "File→Save") or create a new saved drawing (a la "File→Save As...")</li>
<li>Shortcut: [Control]+[S]</li>
</ul>
<h3>🖶Print</h3>
<ul>
<li>Click/tap to print your drawing.</li>
<li>Hold [Alt] or [Option] while clicking/tapping to bring up printer dialog, if available.</li>
<li>Shortcut: [Control]+[P]</li>
</ul>
<h3>🗙Quit</h3>
<ul>
<li>Click/tap to quit Tux Paint.</li>
<li>Shortcut: [Escape]</li>
</ul>
<h2>Färger</h2>
<ul>
<li>Click/tap to choose a color to use with the Paint, Lines, and Shapes tools, and Stamps and Magic tools that support colors.</li>
<li>
Use the pipette / color picker 💉 button to choose a color from a pixel in your current drawing. <ul>
<li>Shortcut: When colors are available, press [Control] and click/tap in your drawing, to quickly pick a color from your drawing.</li>
</ul>
</li>
<li>
Click/tap the rainbow 🌈 button to choose a arbitrary color. <ul>
<li>Click/tap in the rainbow square to pick a color (hue and saturation).</li>
<li>Click/tap in the grey gradient bar to adjust brightness (value).</li>
<li>Click/tap the green checkbox ✓ to accept.</li>
<li>Click/tap "⤺Back" to abort and dismiss the palette.</li>
<li>You may grab the currently-chosen built-in color (if any), the color in the pipette / color picker, or the color in the color mixer, by clicking one of the colored arrow ⇫ buttons.</li>
</ul>
<li>
Click/tap the paint palette 🎨 button to create a color by mixing primary colors: red, yellow, and blue, and white (tint), grey (tone), and black (shade). <ul>
<li>Click/tap the green checkbox ✓ to accept.</li>
<li>Color mixing offers its own 🖓Undo and 🖒Redo options.</li>
<li>Click/tap "🗑Clear" to start over with no mixed colors.</li>
<li>Click/tap "⤺Back" to abort and dismiss the color mixer.</li>
</ul>
</li>
</ul>
<h2>Shortcuts while drawing:</h2>
<ul>
<li>[Control]+Click/tap - Quick pipette / color picker 💉 access</li>
<li>[X]+Click/tap - Quick eraser ◪ access</li>
<li>[Control]+[Z] - 🖓Ångra</li>
<li>[Control]+[R] - 🖒Gör om</li>
<li>[Control]+[N] - 🗏Ny</li>
<li>[Control]+[O] - 🕮⮫Öppna</li>
<li>[Control]+[S] - 🕮⮪Spara</li>
<li>[Control]+[P] - 🖶Skriv ut</li>
<li>[Alt]+[S] - Toggle sound effects on/off</li>
<li>[Escape] - ⤺Bakåt eller 🗙Avsluta</li>
</ul>
<p>
<strong>Note:</strong> On macOS, use the [&#8984; (Command)] key in place of the [Control] key.</p>
<p>
<em>Last updated: december 29, 2024</em>
</p>
</body>
</html>