From 8c6fbb8cf5646d17a710b7325ecf728989c839af Mon Sep 17 00:00:00 2001 From: William Kendrick Date: Tue, 8 Jul 2008 18:31:51 +0000 Subject: [PATCH] [Ctrl]+[P] keyboard shortcut for printing was not complying with option to disable printing capability (e.g., "--noprint"). Fixed. Regenerated killed docs. --- docs/ADVANCED-STAMPS-HOWTO.txt | 272 +++++++++++++++++++++++++++++++++ docs/CHANGES.txt | 6 + src/tuxpaint.c | 20 ++- 3 files changed, 290 insertions(+), 8 deletions(-) diff --git a/docs/ADVANCED-STAMPS-HOWTO.txt b/docs/ADVANCED-STAMPS-HOWTO.txt index e69de29bb..66e9286b4 100644 --- a/docs/ADVANCED-STAMPS-HOWTO.txt +++ b/docs/ADVANCED-STAMPS-HOWTO.txt @@ -0,0 +1,272 @@ + Tux Paint + version 0.9.21 + Advanced Stamps HOWTO + + Copyright 2006-2008 by Albert Cahalan for the Tux Paint project + New Breed Software + + albert@users.sf.net + http://www.tuxpaint.org/ + + March 8, 2006 - July 7, 2008 + +About this HOWTO + + This HOWTO assumes that you want to make an excellent Tux Paint stamp, + in PNG bitmapped format, from a JPEG image (e.g., a digital photograph). + There are easier and faster methods that produce lower quality. + + This HOWTO assumes you are dealing with normal opaque objects. Dealing + with semi-transparent objects (fire, moving fan blade, kid's baloon) or + 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. + +Image choice is crucial + + License + + 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. + + Images produced by the US government are Public Domain, but be aware + that the US government sometimes uses other images on the web. Google + image queries including either site:gov or site:mil will supply many + suitable images. (Note: the *.mil sites include non-military content, + too!) + + Your own images can be placed in the Public Domain by declaring it so. + (Hire a lawyer if you feel the need for legal advice.) + + For personal use, any image you can legitimately modify and use for + your own personal use should be fine. + + Image Size and Orientation: + + 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. + + 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.) + + 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. + + Be sure that the image is not too grainy, dim, or washed out. + + 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. + +Prepare the image: + + First of all, be sure to avoid re-saving the image as a JPEG. This + causes quality loss. There is a special tool called jpegtran that lets + you crop an image without the normal quality loss. If you want a GUI for + it, use ljcrop. Otherwise, use it like this: + + jpegtran -trim -copy none -crop 512x1728+160+128 < src.jpg > + cropped.jpg + + 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. GIMP users should choose "XCF", and Adobe + Photoshop users should choose "PSD", for example. + + If you have rotated or cropped the image in your image editor, flatten + it now. You need to have just one RGB layer without mask or alpha. + + Open the layers dialog box. Replicate the one layer several times. From + top to bottom you will need something like this: + + 1. unmodified image (write-protect this if you can) + 2. an image you will modify - the "WIP" layer + 3. solid green (write-protect this if you can) + 4. solid magenta (write-protect this if you can) + 5. unmodified image (write-protect this if you can) + + Give the 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. + + Warning: 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. + +Prepare the mask: + + Get used to doing Ctrl-click and Alt-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. + + 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). + + 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. + + 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. + + Now you must be zoomed in. + + 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. + + 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. + + 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). + + 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. + + 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. + +Replace the fringe and junk pixels: + + 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). + + 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. + + 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. + + 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: + + * composited over green (mask enabled) + * composited over magenta (mask enabled) + * original (the top or bottom layer) + * composited over the original (mask enabled) + * raw WIP layer (mask DISABLED) + + 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. + + 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. + + 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. + + 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. + +Save the image for Tux Paint + + 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... + + A Safer Way to Save: + + 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. + + Save the mask image as a NetPBM portable greymap (".pgm") 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.) + + You may close the mask image. + + 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 (".ppm") file. + (Note: ppm, not pgm.) (If you choose the RAW PPM format, the second + byte of the file should be the ASCII digit "6", hex byte 0x36.) + + Now you need to merge the two files into one. Do that with the + pnmtopng command, like this: + + pnmtopng -force -compression 9 -alpha mask.pgm fg.ppm > + final-stamp.png diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt index 5ac83b011..4a106e49f 100644 --- a/docs/CHANGES.txt +++ b/docs/CHANGES.txt @@ -28,6 +28,12 @@ $Id$ ------------------------- * Adhering to Debian & FreeDesktop.org standards regarding .desktop file. + * Bug Fixes + --------- + * [Ctrl]+[P] keyboard shortcut for printing was not complying with + option to disable printing capability (e.g., "--noprint")! Fixed. + + 2008.June.26 (0.9.20) * New translations: ----------------- diff --git a/src/tuxpaint.c b/src/tuxpaint.c index 7f2100c45..9242befff 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (See COPYING.txt) - June 14, 2002 - July 7, 2008 + June 14, 2002 - July 8, 2008 $Id$ */ @@ -2167,15 +2167,18 @@ static void mainloop(void) else if (key == SDLK_p && (mod & KMOD_CTRL) && (mod & KMOD_SHIFT) && !noshortcuts) { /* Ctrl-Shft-P - Page Setup */ - DisplayPageSetup(canvas); + if (!disable_print) + DisplayPageSetup(canvas); } #endif else if (key == SDLK_p && (mod & KMOD_CTRL) && !noshortcuts) { /* Ctrl-P - Print */ - /* If they haven't hit [Enter], but clicked 'Print', add their text now -bjk 2007.10.25 */ - if (cur_tool == TOOL_TEXT && texttool_len > 0) + if (!disable_print) + { + /* If they haven't hit [Enter], but clicked 'Print', add their text now -bjk 2007.10.25 */ + if (cur_tool == TOOL_TEXT && texttool_len > 0) { rec_undo_buffer(); do_render_cur_text(1); @@ -2183,10 +2186,11 @@ static void mainloop(void) cursor_textwidth = 0; } - print_image(); - draw_toolbar(); - draw_tux_text(TUX_BORED, "", 0); - update_screen_rect(&r_tools); + print_image(); + draw_toolbar(); + draw_tux_text(TUX_BORED, "", 0); + update_screen_rect(&r_tools); + } } else {