From b16832d76a6ee9fb62f7af79df6daef517e085e6 Mon Sep 17 00:00:00 2001
From: William Kendrick
Date: Mon, 25 Jun 2007 18:00:49 +0000
Subject: [PATCH] PostScript printing code rewritten, based on NetPBM's
'pnmtops' tool by Jef Poskanzer. PostScript printing now uses libprint to
determine papersize, and scale and position image accordingly. Thanks to
Henry House. "--papersize" option added to allow PostScript printing code to
use a different size than libpaper reports as the user's or system's
default.
---
Makefile | 1 +
docs/AUTHORS.txt | 12 +-
docs/CHANGES.txt | 16 ++-
docs/OPTIONS.txt | 19 ++-
docs/html/OPTIONS.html | 27 +++-
src/manpage/tuxpaint.1 | 11 +-
src/postscript_print.c | 310 +++++++++++++++++++++++++++++++++--------
src/postscript_print.h | 41 +++++-
src/tuxpaint.c | 34 ++++-
src/tuxpaint.conf | 23 ++-
10 files changed, 420 insertions(+), 74 deletions(-)
diff --git a/Makefile b/Makefile
index 10daa535f..0259d1e31 100644
--- a/Makefile
+++ b/Makefile
@@ -714,6 +714,7 @@ tuxpaint: obj/tuxpaint.o obj/i18n.o obj/im.o obj/cursor.o obj/pixels.o \
$(HQXX_O) \
$(SDL_LIBS) \
$(SVG_LIB) \
+ $(PAPER_LIB) \
-lm $(ARCH_LINKS)
@$(RSRC_CMD)
@$(MIMESET_CMD)
diff --git a/docs/AUTHORS.txt b/docs/AUTHORS.txt
index 9253f5376..aa4e5c016 100644
--- a/docs/AUTHORS.txt
+++ b/docs/AUTHORS.txt
@@ -7,7 +7,7 @@ bill@newbreedsoftware.com
http://www.tuxpaint.org/
-June 17, 2002 - June 19, 2007
+June 17, 2002 - June 25, 2007
$Id$
@@ -35,6 +35,16 @@ $Id$
Input Method (IM) Framework and Korean/Japanese IM implemented by:
Mark K. Kim
+ PostScript printing code based loosely on NetPBM's "pnmtops",
+ copyright (c) 1989 by Jef Poskanzer.
+ License of "pnmtops.c":
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose and without fee is hereby granted, provided
+ that the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation. This software is provided "as is" without express or
+ implied warranty.
+
* Graphics
diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt
index de5050740..ceb1e1cf7 100644
--- a/docs/CHANGES.txt
+++ b/docs/CHANGES.txt
@@ -4,12 +4,12 @@ Tux Paint - A simple drawing program for children.
Copyright (c) 2002-2007 by Bill Kendrick and others
bill@newbreedsoftware.com
-http://www.newbreedsoftware.com/tuxpaint/
+http://www.tuxpaint.org/
$Id$
-2007.June.24 (0.9.17)
+2007.June.25 (0.9.17)
* Interface Improvements:
-----------------------
@@ -110,6 +110,18 @@ $Id$
* Split PostScript printing code (for Linux/Unix/etc.) into its own
source file. (Mac OS X, Windows and BeOS all had their own.)
+ * PostScript printing code rewritten, based on NetPBM's 'pnmtops' tool
+ by Jef Poskanzer.
+
+ * PostScript printing now uses libprint to determine papersize, and
+ scale and position image accordingly. (No longer depending on printer
+ to figure out its own paper size; not the recommended method.)
+ Thanks to Henry House
+
+ * "--papersize" option added to allow PostScript printing code to
+ use a different size than libpaper reports as the user's or system's
+ default.
+
* Documentation Improvements:
---------------------------
* Discussed SVG Stamps in "Extending Tux Paint."
diff --git a/docs/OPTIONS.txt b/docs/OPTIONS.txt
index 43d4b826c..2aeafda56 100644
--- a/docs/OPTIONS.txt
+++ b/docs/OPTIONS.txt
@@ -9,7 +9,7 @@
bill@newbreedsoftware.com
http://www.tuxpaint.org/
- June 19, 2007
+ June 25, 2007
--------------------------------------------------------------------------
@@ -196,6 +196,22 @@ Windows Users
Clicking 'Print' without holding [Alt] prints without showing a
dialog.
+ papersize=PAPERSIZE
+
+ (Platforms that use Tux Paint's internal PostScript generator --
+ not Windows, Mac OS X or BeOS.)
+
+ Tell Tux Paint what size PostScript to generate. If none is
+ specified, Tux Paint first checks your $PAPER environment
+ variable, then the file /etc/papersize, then uses the the
+ 'libpaper' library's default paper size.
+
+ Valid paper sizes include: letter, legal, tabloid, executive,
+ note, statement, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ b0, b1, b2 b3, b4, 10x14, 11x17, halfletter, halfexecutive,
+ halfnote, folio, quarto, ledger, archA, archB, archC, archD,
+ archE, flsa, flse, csheet, dsheet, esheet.
+
simpleshapes=yes
Disable the rotation step of the 'Shape' tool. Click, drag and
release is all that will be needed to draw a shape.
@@ -563,6 +579,7 @@ Windows Users
--noprint
--printdelay=SECONDS
--printcfg
+ --papersize=PAPERSIZE
--simpleshapes
--uppercase
--grab
diff --git a/docs/html/OPTIONS.html b/docs/html/OPTIONS.html
index 418639276..c1eae1bd9 100644
--- a/docs/html/OPTIONS.html
+++ b/docs/html/OPTIONS.html
@@ -23,7 +23,7 @@ New Breed Software
http://www.tuxpaint.org/
-June 19, 2007
+June 25, 2007
@@ -252,6 +252,30 @@ New Breed Software
a dialog.
+ papersize=PAPERSIZE
+
+ (Platforms that use Tux Paint's internal PostScript
+ generator — not Windows, Mac OS X or BeOS.)
+
+ Tell Tux Paint what size PostScript to generate.
+ If none is specified, Tux Paint first checks
+ your $PAPER environment variable, then
+ the file /etc/papersize, then uses the the
+ 'libpaper' library's default paper size.
+
+ Valid paper sizes include:
+ letter, legal, tabloid, executive, note, statement,
+ a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ b0, b1, b2 b3, b4,
+ 10x14, 11x17,
+ halfletter, halfexecutive, halfnote,
+ folio, quarto, ledger,
+ archA, archB, archC, archD, archE,
+ flsa, flse,
+ csheet, dsheet, esheet.
+
+
+
simpleshapes=yes
Disable the rotation step of the 'Shape' tool.
@@ -882,6 +906,7 @@ New Breed Software
--noprint
--printdelay=SECONDS
--printcfg
+ --papersize=PAPERSIZE
--simpleshapes
--uppercase
--grab
diff --git a/src/manpage/tuxpaint.1 b/src/manpage/tuxpaint.1
index 0e838a947..1dcb1d13c 100644
--- a/src/manpage/tuxpaint.1
+++ b/src/manpage/tuxpaint.1
@@ -1,5 +1,5 @@
-.\" tuxpaint.1 - 2007.06.19
-.TH TUXPAINT 1 "19 June 2007" "0.9.17" "Tux Paint"
+.\" tuxpaint.1 - 2007.06.25
+.TH TUXPAINT 1 "25 June 2007" "0.9.17" "Tux Paint"
.SH NAME
tuxpaint -- A drawing program for young children.
@@ -18,6 +18,7 @@ tuxpaint -- A drawing program for young children.
[\-\-noprint]
[\-\-printdelay=\fISECONDS\fP]
[\-\-printcfg]
+[\-\-papersize=\fIPAPERSIZE\fP]
[\-\-simpleshapes]
[\-\-uppercase]
[\-\-grab]
@@ -155,6 +156,12 @@ fullscreen mode.) If \-\-printcfg is used, your previous settings will
be loaded when \fITux Paint\fP starts up, and setting changes will be saved
for next time.
+.TP 8
+.B \-\-papersize=\fIPAPERSIZE\fP
+(Only when PostScript printing is used \- not Windows, Mac OS X or BeOS.)
+Ask \fITux Paint\fP to generate PostScript of a particular paper size.
+Valid sizes are those supported by libpaper. See papersize(5).
+
.TP 8
.B \-\-simpleshapes \-\-complexshapes
Disable or enable (default) the \fIrotation\fP step when using the
diff --git a/src/postscript_print.c b/src/postscript_print.c
index eb8371cfc..a745caf42 100644
--- a/src/postscript_print.c
+++ b/src/postscript_print.c
@@ -1,97 +1,288 @@
+/*
+ postscript_print.c
+
+ For Tux Paint
+ PostScript(r) printing routine.
+ (for non-Windows, non-Mac OS X, non-BeOS platforms, e.g. Linux)
+ (moved from tuxpaint.c in 0.9.17)
+
+ Copyright (c) 2007 by Bill Kendrick and others
+ bill@newbreedsoftware.com
+ http://www.tuxpaint.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ (See COPYING.txt)
+
+ Based loosely on examination of NetPBM's "pnmtops" code and output:
+ copyright (c) 1989 by Jef Poskanzer.
+ License from "pnmtops.c":
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose and without fee is hereby granted, provided
+ that the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation. This software is provided "as is" without express or
+ implied warranty.
+
+
+ June 24, 2007 - June 25, 2007
+ $Id$
+*/
+
+#include "postscript_print.h"
+
+#ifdef PRINTMETHOD_PS
#include
#include
#include
#include
#include
-#include "postscript_print.h"
+#include
+
+#ifndef PAPER_H
+#error "---------------------------------------------------"
+#error "If you installed libpaper from a package, be sure"
+#error "to get the development package, as well!"
+#error "(e.g., 'libpaper-dev.rpm')"
+#error "---------------------------------------------------"
+#endif
+
#include "pixels.h"
-///////////////////////////////////// PostScript printing ///////////
-#ifdef PRINTMETHOD_PS
+#define my_min(x,y) ((x < y) ? (x) : (y))
/* Actually save the PostScript data to the file stream: */
int do_ps_save(FILE * fi,
- // const char *restrict const fname,
- const char * fname,
- SDL_Surface * surf)
+ // const char *restrict const fname,
+ const char * fname,
+ SDL_Surface * surf,
+ char * pprsize)
{
- unsigned char * /* restrict const */ ps_row = malloc(surf->w * 3);
+ const struct paper * ppr;
+ int img_w = surf->w;
+ int img_h = surf->h;
+ int r_img_w, r_img_h;
+ int ppr_w, ppr_h;
int x, y;
+ float tlate_x, tlate_y;
+ int cur_line_len;
+ int plane;
+ Uint8 r, g, b;
char buf[256];
Uint32(*getpixel) (SDL_Surface *, int, int) =
getpixels[surf->format->BytesPerPixel];
+ int printed_img_w, printed_img_h;
time_t t = time(NULL);
+ int rotate;
+ float scale;
+
+
+ /* Determine paper size: */
+
+ paperinit(); // FIXME: Should we do this at startup? -bjk 2007.06.25
+
+ if (pprsize == NULL)
+ {
+ /* User did not request a specific paper size (on command-line or
+ in config file), ask the system. It will return either their
+ $PAPER env. var., the value from /etc/papersize, or NULL: */
+
+ pprsize = (char *) systempapername();
+
+ if (pprsize == NULL)
+ {
+ /* No setting, env. var. or /etc/ file; use the default! */
+
+ pprsize = (char *) defaultpapername();
+
+#ifdef DEBUG
+ printf("Using default paper\n");
+#endif
+ }
+#ifdef DEBUG
+ else
+ {
+ printf("Using system paper\n");
+ }
+#endif
+ }
+#ifdef DEBUG
+ else
+ {
+ printf("Using user paper\n");
+ }
+#endif
+
+#ifdef DEBUG
+ printf("Using paper size: %s\n", pprsize);
+#endif
+
+
+ /* Determine attributes of paper of the size chosen/determined: */
+
+ ppr = paperinfo(pprsize);
+
+ ppr_w = paperpswidth(ppr);
+ ppr_h = paperpsheight(ppr);
+
+#ifdef DEBUG
+ printf("Paper is %d x %d (%.2f\" x %.2f\")\n", ppr_w, ppr_h,
+ (float) ppr_w / 72.0, (float) ppr_h / 72.0);
+#endif
+
+ paperdone(); // FIXME: Should we do this at quit? -bjk 2007.06.25
+
+
+ /* Determine whether it's best to rotate the image: */
+
+ if ((ppr_w >= ppr_h && img_w >= img_h) ||
+ (ppr_w <= ppr_h && img_w <= img_h))
+ {
+ rotate = 0;
+ r_img_w = img_w;
+ r_img_h = img_h;
+ }
+ else
+ {
+ rotate = 1;
+ r_img_w = img_h;
+ r_img_h = img_w;
+ }
+
+#ifdef DEBUG
+ printf("Image is %d x %d\n", img_w, img_h);
+ printf("Rotated? %s\n", rotate ? "yes" : "no");
+ printf("Will print %d x %d pixels\n", r_img_w, r_img_h);
+#endif
+
+
+ /* Determine scale: */
+
+ scale = my_min(((float) ppr_w / (float) r_img_w),
+ ((float) ppr_h / (float) r_img_h)) * (72.0 / 100.0);
+
+ printed_img_w = r_img_w * scale;
+ printed_img_h = r_img_h * scale;
+
+#ifdef DEBUG
+ printf("Scaling image by %.2f (to %d x %d)\n", scale,
+ printed_img_w, printed_img_h);
+#endif
+
+
+ // FIXME - doesn't seem to center well -bjk 2007.06.25
+ tlate_x = (ppr_w - printed_img_w) / 2;
+ tlate_y = (ppr_h - printed_img_h) / 2;
+
+
+ /* Based off of output from "pnmtops", Tux Paint 0.9.15 thru
+ 0.9.17 CVS as of June 2007, and Adobe Systems Incorporated's
+ 'PostScript(r) Language Reference, 3rd Ed.' */
+
+ /* Begin PostScript output with some useful meta info in comments: */
+
+ fprintf(fi, "%%!PS-Adobe-2.0 EPSF-2.0\n"); // we need LanguageLevel2 for color
- fprintf(fi, "%%!PS-Adobe-3.0 EPSF-3.0\n"); // probably broken, but close enough maybe
fprintf(fi, "%%%%Title: (%s)\n", fname);
+
strftime(buf, sizeof buf - 1, "%a %b %e %H:%M:%S %Y", localtime(&t));
fprintf(fi, "%%%%CreationDate: (%s)\n", buf);
+
fprintf(fi, "%%%%Creator: (Tux Paint " VER_VERSION ", " VER_DATE ")\n");
- fprintf(fi, "%%%%LanguageLevel: 2\n");
-// fprintf(fi, "%%%%BoundingBox: 72 214 540 578\n"); // doubt we have the needed info
- fprintf(fi, "%%%%DocumentData: Binary\n");
+
+ fprintf(fi, "%%%%Pages: 1\n");
+
+ fprintf(fi, "%%%%BoundingBox: %d %d %d %d\n",
+ (int) tlate_x, (int) tlate_y,
+ (int) (tlate_x + r_img_w + 0.5),
+ (int) (tlate_y + r_img_h + 0.5));
+
fprintf(fi, "%%%%EndComments\n");
- fprintf(fi, "\n");
+
+
+ /* Define a 'readstring' routine and 'picstr' routines for RGB: */
+
+ fprintf(fi, "/readstring {\n");
+ fprintf(fi, " currentfile exch readhexstring pop\n");
+ fprintf(fi, "} bind def\n");
+
+ fprintf(fi, "/rpicstr %d string def\n", img_w);
+ fprintf(fi, "/gpicstr %d string def\n", img_w);
+ fprintf(fi, "/bpicstr %d string def\n", img_w);
+
+ fprintf(fi, "%%%%EndProlog\n");
+
+ fprintf(fi, "%%%%Page: 1 1\n");
+
+ fprintf(fi, "<< /PageSize [ %d %d ] /ImagingBBox null >> setpagedevice\n",
+ ppr_w, ppr_h);
+
fprintf(fi, "gsave\n");
- fprintf(fi, "\n");
- if (surf->w > surf->h)
- fprintf(fi, "90 rotate\n"); // landscape mode
+ /* 'translate' moves the user space origin to a new position with
+ respect to the current page, leaving the orientation of the axes and
+ the unit lengths unchanged. */
+ fprintf(fi, "%.2f %.2f translate\n", tlate_x, tlate_y);
- fprintf(fi, "%% First, grab the page size.\n");
- fprintf(fi, "gsave\n");
- fprintf(fi, " clippath\n");
- fprintf(fi, " pathbbox\n");
- fprintf(fi, "grestore\n");
- fprintf(fi, "/ury exch def\n");
- fprintf(fi, "/urx exch def\n");
- fprintf(fi, "/lly exch def\n");
- fprintf(fi, "/llx exch def\n");
- fprintf(fi, "\n");
- fprintf(fi, "llx lly translate\n");
- fprintf(fi, "\n");
- fprintf(fi, "/width %u def\n", surf->w);
- fprintf(fi, "/height %u def\n", surf->h);
- fprintf(fi, "width height scale\n");
- fprintf(fi, "\n");
- fprintf(fi, "urx llx sub width div\n");
- fprintf(fi, "ury lly sub height div\n");
- fprintf(fi, "%% now do a 'min' operation\n");
- fprintf(fi, "2 copy gt { exch } if pop\n");
- fprintf(fi, "\n");
- fprintf(fi, "dup scale\n");
- fprintf(fi, "/DeviceRGB setcolorspace\n");
- fprintf(fi, "<<\n");
- fprintf(fi, " /ImageType 1\n");
- fprintf(fi, " /Width width /Height height\n");
- fprintf(fi, " /BitsPerComponent 8\n");
- fprintf(fi, " /ImageMatrix [width 0 0 height neg 0 height]\n");
- fprintf(fi, " /Decode [0 1 0 1 0 1]\n");
- fprintf(fi, " /DataSource currentfile\n");
- fprintf(fi, ">>\n");
- fprintf(fi, "%%%%BeginData: %u Binary Bytes\n", surf->w * surf->h * 3u);
- fprintf(fi, "image\n");
+ /* 'scale' modiļ¬es the unit lengths independently along the current
+ x and y axes, leaving the origin location and the orientation of the
+ axes unchanged. */
+ fprintf(fi, "%.2f %.2f scale\n",
+ (float) printed_img_w * scale,
+ (float) printed_img_h * scale);
- /* Save the picture: */
- for (y = 0; y < surf->h; y++)
+ /* Rotate the image */
+ if (rotate)
+ fprintf(fi, "0.5 0.5 translate 90 rotate -0.5 -0.5 translate\n");
+
+ fprintf(fi, "%d %d 8\n", img_w, img_h);
+ fprintf(fi, "[ %d 0 0 %d 0 %d ]\n", img_w, -img_h, img_h);
+
+ fprintf(fi, "{ rpicstr readstring }\n");
+ fprintf(fi, "{ gpicstr readstring }\n");
+ fprintf(fi, "{ bpicstr readstring }\n");
+
+ fprintf(fi, "true 3\n");
+
+ fprintf(fi, "colorimage\n");
+
+ cur_line_len = 0;
+
+ for (y = 0; y < img_h; y++)
{
- for (x = 0; x < surf->w; x++)
+ for (plane = 0; plane < 3; plane++)
{
- Uint8 r, g, b;
- SDL_GetRGB(getpixel(surf, x, y), surf->format, &r, &g, &b);
- ps_row[x * 3 + 0] = r;
- ps_row[x * 3 + 1] = g;
- ps_row[x * 3 + 2] = b;
+ for (x = 0; x < img_w; x++)
+ {
+ SDL_GetRGB(getpixel(surf, x, y), surf->format, &r, &g, &b);
+ fprintf(fi, "%02x", (plane == 0 ? r : (plane == 1 ? g : b)));
+
+ cur_line_len++;
+ if (cur_line_len >= 30)
+ {
+ fprintf(fi, "\n");
+ cur_line_len = 0;
+ }
+ }
}
- fwrite(ps_row, surf->w, 3, fi);
}
- free(ps_row);
fprintf(fi, "\n");
- fprintf(fi, "%%%%EndData\n");
fprintf(fi, "grestore\n");
fprintf(fi, "showpage\n");
+ fprintf(fi, "%%%%Trailer\n");
fprintf(fi, "%%%%EOF\n");
fclose(fi);
@@ -99,5 +290,4 @@ int do_ps_save(FILE * fi,
}
#endif
-/////////////////////////////////////////////////////////////////
diff --git a/src/postscript_print.h b/src/postscript_print.h
index b096d7e7c..bfc0bd0cf 100644
--- a/src/postscript_print.h
+++ b/src/postscript_print.h
@@ -1,6 +1,33 @@
/*
postscript_print.h
+
+ For Tux Paint
+ PostScript(r) printing routine.
+ (for non-Windows, non-Mac OS X, non-BeOS platforms, e.g. Linux)
+ (moved from tuxpaint.c in 0.9.17)
+
+ Copyright (c) 2007 by Bill Kendrick and others
+ bill@newbreedsoftware.com
+ http://www.tuxpaint.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ (See COPYING.txt)
+
+ June 24, 2007 - June 25, 2007
+ $Id$
*/
#ifndef POSTSCRIPT_PRINT_H
@@ -12,6 +39,9 @@
/* Method for printing images: */
+/* FIXME: We should either settle on direct PostScript printing and remove
+ the other options, or move these settings to Makefile -bjk 2007.06.25 */
+
#define PRINTMETHOD_PS /* Direct to PostScript */
//#define PRINTMETHOD_PNM_PS /* Output PNM, assuming it gets printed */
//#define PRINTMETHOD_PNG_PNM_PS /* Output PNG, assuming it gets printed */
@@ -44,10 +74,15 @@
#endif
+#ifdef PRINTMETHOD_PS
+
int do_ps_save(FILE * fi,
- // const char *restrict const fname,
- const char *fname,
- SDL_Surface * surf);
+ // const char *restrict const fname,
+ const char *fname,
+ SDL_Surface * surf,
+ char * pprsize);
+
+#endif
#endif /* POSTSCRIPT_PRINT_H */
diff --git a/src/tuxpaint.c b/src/tuxpaint.c
index 9f4823c58..6d921b884 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 - June 24, 2007
+ June 14, 2002 - June 25, 2007
$Id$
*/
@@ -848,6 +848,10 @@ static FILE *demofi;
static const char *printcommand = PRINTCOMMAND;
static const char *altprintcommand = ALTPRINTCOMMAND;
+#if !defined(WIN32) && !defined(__APPLE__) && !defined(__BEOS__)
+char *papersize = NULL;
+#endif
+
enum
{
@@ -5546,6 +5550,9 @@ static void show_usage(FILE * f, char *prg)
#endif
" %s [--printdelay=SECONDS]\n"
" %s [--altprintmod | --altprintalways | --altprintnever]\n"
+#if !defined(WIN32) && !defined(__APPLE__) && !defined(__BEOS__)
+ " %s [--papersize=PAPERSIZE]\n"
+#endif
" %s [--lang LANGUAGE | --locale LOCALE | --lang help]\n"
" %s [--nosysconfig] [--nolockfile]\n"
" %s [--colorfile FILE]\n"
@@ -5558,7 +5565,11 @@ static void show_usage(FILE * f, char *prg)
#ifdef WIN32
blank,
#endif
- blank, blank, blank, blank, blank, blank);
+ blank, blank,
+#if !defined(WIN32) && !defined(__APPLE__) && !defined(__BEOS__)
+ blank,
+#endif
+ blank, blank, blank, blank);
free(blank);
}
@@ -6595,6 +6606,12 @@ static void setup(int argc, char *argv[])
{
alt_print_command_default = ALTPRINT_MOD;
}
+#if !defined(WIN32) && !defined(__APPLE__) && !defined(__BEOS__)
+ else if (strstr(argv[i], "--papersize=") == argv[i])
+ {
+ papersize = strdup(argv[i] + strlen("--papersize="));
+ }
+#endif
else if (strcmp(argv[i], "--uppercase") == 0
|| strcmp(argv[i], "-u") == 0)
{
@@ -11881,6 +11898,11 @@ static void cleanup(void)
free(lock_fname);
}
+#if !defined(WIN32) && !defined(__APPLE__) && !defined(__BEOS__)
+ if (papersize != NULL)
+ free(papersize);
+#endif
+
/* Close up! */
@@ -15174,7 +15196,7 @@ void do_print(void)
#elif defined(PRINTMETHOD_PNM_PS)
// nothing here
#elif defined(PRINTMETHOD_PS)
- if (do_ps_save(pi, pcmd, canvas))
+ if (do_ps_save(pi, pcmd, canvas, papersize))
do_prompt_snd(PROMPT_PRINT_TXT, PROMPT_PRINT_YES, "", SND_TUXOK);
#else
#error No print method defined!
@@ -15898,6 +15920,12 @@ static void parse_options(FILE * fi)
{
alt_print_command_default = ALTPRINT_NEVER;
}
+#if !defined(WIN32) && !defined(__APPLE__) && !defined(__BEOS__)
+ else if (strstr(str, "papersize=") == str)
+ {
+ papersize = strdup(str + strlen("papersize="));
+ }
+#endif
else if (strstr(str, "savedir=") == str)
{
savedir = strdup(str + 8);
diff --git a/src/tuxpaint.conf b/src/tuxpaint.conf
index f005af4f5..39e4fd117 100644
--- a/src/tuxpaint.conf
+++ b/src/tuxpaint.conf
@@ -4,8 +4,12 @@
# See tuxpaint(1) or run 'tuxpaint --help' for details on using Tux Paint
#
# Bill Kendrick
+# http://www.tuxpaint.org/
+#
# Default distribution version last modified:
-# January 21, 2007
+# June 25, 2007
+#
+# $Id$
# The variables described below are initially commented out.
@@ -103,6 +107,23 @@
# printcommand=lpr
+### Paper size
+### ----------
+### Note: The size listed should be one supported by libpaper
+### From papersize(5):
+### a3, a4, a5, b5, letter, legal, executive, note, 11x17,
+### a0, a1, a2, a6, a7, a8, a9, a10, b0, b1, b2, b3, b4, tabloid,
+### statement, note, halfletter, halfexecutive, folio, quarto, ledger,
+### archA, archB, archC, archD, archE, flsa, flse, csheet, dsheet, esheet
+### or 10x14.
+###
+### If not set, libpaper will check your $PAPER environment variable,
+### then /etc/papersize, then the default system paper size.
+#
+# papersize={PAPERSIZSE}
+# papersize=a4
+
+
### Use the simpler shape tool? (No rotating)
### -----------------------------------------
#