annotate src/print.c @ 9:d907d608745f

Sync to GQview 1.5.9 release. ######## DO NOT BASE ENHANCEMENTS OR TRANSLATION UPDATES ON CODE IN THIS CVS! This CVS is never up to date with current development and is provided solely for reference purposes, please use the latest official release package when making any changes or translation updates. ########
author gqview
date Sat, 26 Feb 2005 00:13:35 +0000
parents
children 17acca639a86
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2 * GQview
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3 * (C) 2004 John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
4 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 * Author: John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * This software comes with no warranty of any kind, use at your own risk!
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 #include "gqview.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 #include "print.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 #include "filelist.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17 #include "image.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include "image-load.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 #include "pixbuf_util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 #include "thumb.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 #include "utilops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22 #include "ui_bookmark.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23 #include "ui_menu.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 #include "ui_misc.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
25 #include "ui_utildlg.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 #include "ui_fileops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 #include "ui_spinner.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28 #include "ui_tabcomp.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 #include <locale.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32 #include <signal.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35 #define PRINT_LPR_COMMAND "lpr"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 #define PRINT_LPR_CUSTOM "lpr -P %s"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37 #define PRINT_LPR_QUERY "lpstat -p"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39 #define PRINT_DLG_WIDTH 600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 #define PRINT_DLG_HEIGHT 400
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42 #define PRINT_DLG_PREVIEW_WIDTH 270
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43 #define PRINT_DLG_PREVIEW_HEIGHT -1
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45 /* these are in point units */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46 #define PRINT_MIN_WIDTH 100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47 #define PRINT_MIN_HEIGHT 100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 #define PRINT_MAX_WIDTH 4000
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49 #define PRINT_MAX_HEIGHT 4000
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51 #define PRINT_MARGIN_DEFAULT 36
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 #define PRINT_PROOF_MIN_SIZE 8
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 #define PRINT_PROOF_MAX_SIZE 720
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55 #define PRINT_PROOF_DEFAULT_SIZE 144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56 #define PRINT_PROOF_MARGIN 5
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 /* default page size */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59 #define PAGE_LAYOUT_WIDTH 850
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
60 #define PAGE_LAYOUT_HEIGHT 1100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
62 /* preview uses 1 pixel = PRINT_PREVIEW_SCALE points */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
63 #define PRINT_PREVIEW_SCALE 4
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
64
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 /* default dpi to use for printing ps image data */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66 #define PRINT_PS_DPI_DEFAULT 300.0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
67 #define PRINT_PS_DPI_MIN 150.0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
68 /* method to use when scaling down image data */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 #define PRINT_PS_MAX_INTERP GDK_INTERP_BILINEAR
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
70
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
71 /* padding between objects */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 #define PRINT_TEXT_PADDING 3.0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74 /* locale for postscript portability */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 #define POSTSCRIPT_LOCALE "C"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 /* group and keys for saving prefs */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79 #define PRINT_PREF_GROUP "print_settings"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
81 #define PRINT_PREF_SAVE "save_settings"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83 #define PRINT_PREF_OUTPUT "output"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84 #define PRINT_PREF_FORMAT "format"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85 #define PRINT_PREF_DPI "dpi"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 #define PRINT_PREF_UNITS "units"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 #define PRINT_PREF_SIZE "size"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88 #define PRINT_PREF_ORIENTATION "orientation"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 #define PRINT_PREF_CUSTOM_WIDTH "custom_width"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 #define PRINT_PREF_CUSTOM_HEIGHT "custom_height"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 #define PRINT_PREF_MARGIN_LEFT "margin_left"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 #define PRINT_PREF_MARGIN_RIGHT "margin_right"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 #define PRINT_PREF_MARGIN_TOP "margin_top"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 #define PRINT_PREF_MARGIN_BOTTOM "margin_bottom"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 #define PRINT_PREF_PROOF_WIDTH "proof_width"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 #define PRINT_PREF_PROOF_HEIGHT "proof_height"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 #define PRINT_PREF_PRINTERC "custom_printer"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 PRINT_SOURCE_IMAGE = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 PRINT_SOURCE_SELECTION,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 PRINT_SOURCE_ALL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106 PRINT_SOURCE_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 } PrintSource;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 const gchar *print_source_text[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110 N_("Image"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 N_("Selection"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 N_("All"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 NULL
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 PRINT_LAYOUT_IMAGE = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118 PRINT_LAYOUT_PROOF,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 PRINT_LAYOUT_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 } PrintLayout;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
122 const gchar *print_layout_text[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123 N_("One image per page"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124 N_("Proof sheet"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125 NULL
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129 PRINT_OUTPUT_PS_LPR = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130 PRINT_OUTPUT_PS_CUSTOM,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131 PRINT_OUTPUT_PS_FILE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
132 PRINT_OUTPUT_RGB_FILE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133 PRINT_OUTPUT_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 } PrintOutput;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
136 const gchar *print_output_text[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
137 N_("Default printer"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
138 N_("Custom printer"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
139 N_("PostScript file"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 N_("Image file"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141 NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
142 NULL
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 PRINT_FILE_JPG_LOW = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147 PRINT_FILE_JPG_NORMAL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 PRINT_FILE_JPG_HIGH,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
149 PRINT_FILE_PNG,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 PRINT_FILE_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151 } PrintFileFormat;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 const gchar *print_file_format_text[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154 N_("jpeg, low quality"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155 N_("jpeg, normal quality"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 N_("jpeg, high quality"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157 "png",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 NULL
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 RENDER_FORMAT_PREVIEW,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 RENDER_FORMAT_RGB,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164 RENDER_FORMAT_PS
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165 } RenderFormat;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168 TEXT_INFO_FILENAME = 1 << 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 TEXT_INFO_FILEDATE = 1 << 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170 TEXT_INFO_FILESIZE = 1 << 2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 TEXT_INFO_DIMENSIONS = 1 << 3
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 } TextInfo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 typedef struct _PrintWindow PrintWindow;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175 struct _PrintWindow
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177 GenericDialog *dialog;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
178
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 gchar *source_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180 GList *source_selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181 GList *source_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
183 PrintSource source;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184 PrintLayout layout;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185 PrintOutput output;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 gchar *output_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 gchar *output_custom;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 PrintFileFormat output_format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
192 gdouble max_dpi;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
194 GtkWidget *notebook;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
195
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 GtkWidget *path_entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197 GtkWidget *custom_entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198 GtkWidget *path_format_menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
199 GtkWidget *max_dpi_menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
201 ImageWindow *layout_image;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202 gdouble layout_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 gdouble layout_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
204
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 gint layout_idle_id;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
206
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
207 gint image_scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
208
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
209 GtkWidget *image_scale_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211 gdouble proof_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212 gdouble proof_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 gint proof_columns;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
214 gint proof_rows;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
215 GList *proof_point;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216 gint proof_position;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
217 gint proof_page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
218
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
219 GtkWidget *proof_group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
220 GtkWidget *proof_width_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
221 GtkWidget *proof_height_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
222
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
223 GtkWidget *paper_menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
224 GtkWidget *paper_width_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225 GtkWidget *paper_height_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
226 GtkWidget *paper_units_menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
227 GtkWidget *paper_orientation_menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
228
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
229 GtkWidget *margin_left_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
230 GtkWidget *margin_right_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
231 GtkWidget *margin_top_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
232 GtkWidget *margin_bottom_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
233
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
234 gint paper_units;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
235 gint paper_size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
236 gdouble paper_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
237 gdouble paper_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
238 gint paper_orientation;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
240 gdouble margin_left;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
241 gdouble margin_right;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
242 gdouble margin_top;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
243 gdouble margin_bottom;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
244
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245 GtkWidget *button_back;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 GtkWidget *button_next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247 GtkWidget *page_label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 GtkWidget *print_button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
249
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
250 gdouble single_scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251 gdouble single_x;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
252 gdouble single_y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
253
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
254 GtkWidget *single_scale_spin;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
255
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
256 TextInfo text_fields;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
257 gint text_points;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
258 guint8 text_r;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
259 guint8 text_g;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
260 guint8 text_b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262 gint save_settings;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
263
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
264 /* job printing */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
265
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
266 GenericDialog *job_dialog;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
267 GtkWidget *job_progress;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
268 GtkWidget *job_progress_label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
269
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
270 RenderFormat job_format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
271 PrintOutput job_output;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
272
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273 FILE *job_file;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274 FILE *job_pipe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 gchar *job_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
276
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
277 GdkPixbuf *job_pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
278
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279 gint job_page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
280 ImageLoader *job_loader;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
281 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
282
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
283
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
284 static void print_job_throw_error(PrintWindow *pw, const gchar *message);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285 static gint print_job_start(PrintWindow *pw, RenderFormat format, PrintOutput output);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
286 static void print_job_close(PrintWindow *pw, gint error);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287 static void print_window_close(PrintWindow *pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
289
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
290 /* misc utils */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292 static gint clip_region(gdouble x1, gdouble y1, gdouble w1, gdouble h1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
293 gdouble x2, gdouble y2, gdouble w2, gdouble h2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294 gdouble *rx, gdouble *ry, gdouble *rw, gdouble *rh)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
295 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 if (x2 + w2 <= x1 || x2 >= x1 + w1 ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
297 y2 + h2 <= y1 || y2 >= y1 + h1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
299 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
302 *rx = MAX(x1, x2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303 *rw = MIN((x1 + w1), (x2 + w2)) - *rx;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305 *ry = MAX(y1, y2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
306 *rh = MIN((y1 + h1), (y2 + h2)) - *ry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
307
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
310
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311 static const gchar *print_output_name(PrintOutput output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 if (output < 0 || output >= PRINT_OUTPUT_COUNT) return "";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
315 return _(print_output_text[output]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
319 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
320 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
321 * data
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
322 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
323 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
324
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
326 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
327 PAPER_UNIT_POINTS = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
328 PAPER_UNIT_MM,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
329 PAPER_UNIT_CM,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 PAPER_UNIT_INCH,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331 PAPER_UNIT_PICAS,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
332 PAPER_UNIT_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
333 } PaperUnits;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335 typedef enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 PAPER_ORIENTATION_PORTRAIT = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
337 PAPER_ORIENTATION_LANDSCAPE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 PAPER_ORIENTATION_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 } PaperOrientation;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 typedef struct _PaperSize PaperSize;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 struct _PaperSize {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343 gchar *description;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 gint width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345 gint height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346 PaperOrientation orientation;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
349 const gchar *print_paper_units[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 N_("points"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
351 N_("millimeters"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
352 N_("centimeters"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 N_("inches"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354 N_("picas"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355 NULL
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358 const gchar *print_paper_orientation[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 N_("Portrait"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360 N_("Landscape"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361 NULL
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364 PaperSize print_paper_sizes[] = {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365 { N_("Custom"), 360, 720, PAPER_ORIENTATION_PORTRAIT },
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366 { N_("Letter"), 612, 792, PAPER_ORIENTATION_PORTRAIT }, /* in 8.5 x 11 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367 { N_("Legal"), 612, 1008, PAPER_ORIENTATION_PORTRAIT }, /* in 8.5 x 14 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368 { N_("Executive"), 522, 756, PAPER_ORIENTATION_PORTRAIT }, /* in 7.25x 10.5 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369 { "A0", 2384, 3370, PAPER_ORIENTATION_PORTRAIT }, /* mm 841 x 1189 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 { "A1", 1684, 2384, PAPER_ORIENTATION_PORTRAIT }, /* mm 594 x 841 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371 { "A2", 1191, 1684, PAPER_ORIENTATION_PORTRAIT }, /* mm 420 x 594 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372 { "A3", 842, 1191, PAPER_ORIENTATION_PORTRAIT }, /* mm 297 x 420 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 { "A4", 595, 842, PAPER_ORIENTATION_PORTRAIT }, /* mm 210 x 297 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374 { "A5", 420, 595, PAPER_ORIENTATION_PORTRAIT }, /* mm 148 x 210 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375 { "A6", 298, 420, PAPER_ORIENTATION_PORTRAIT }, /* mm 105 x 148 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 { "B3", 1001, 1417, PAPER_ORIENTATION_PORTRAIT }, /* mm 353 x 500 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377 { "B4", 709, 1001, PAPER_ORIENTATION_PORTRAIT }, /* mm 250 x 353 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 { "B5", 499, 709, PAPER_ORIENTATION_PORTRAIT }, /* mm 176 x 250 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 { "B6", 354, 499, PAPER_ORIENTATION_PORTRAIT }, /* mm 125 x 176 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380 { N_("Envelope #10"), 297, 684, PAPER_ORIENTATION_LANDSCAPE }, /* in 4.125 x 9.5 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381 { N_("Envelope #9"), 279, 639, PAPER_ORIENTATION_LANDSCAPE }, /* in 3.875 x 8.875 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 { N_("Envelope C4"), 649, 918, PAPER_ORIENTATION_LANDSCAPE }, /* mm 229 x 324 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 { N_("Envelope C5"), 459, 649, PAPER_ORIENTATION_LANDSCAPE }, /* mm 162 x 229 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384 { N_("Envelope C6"), 323, 459, PAPER_ORIENTATION_LANDSCAPE }, /* mm 114 x 162 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385 { N_("Photo 6x4"), 432, 288, PAPER_ORIENTATION_PORTRAIT }, /* in 6 x 4 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 { N_("Photo 8x10"), 576, 720, PAPER_ORIENTATION_PORTRAIT }, /* in 8 x 10 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387 { N_("Postcard"), 284, 419, PAPER_ORIENTATION_LANDSCAPE }, /* mm 100 x 148 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388 { N_("Tabloid"), 792, 1224, PAPER_ORIENTATION_PORTRAIT }, /* in 11 x 17 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 { NULL, 0, 0, 0 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393 static PaperSize *print_paper_size_nth(gint n)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395 PaperSize *ps = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396 gint i = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398 while (i <= n && print_paper_sizes[i].description)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
400 ps = &print_paper_sizes[i];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 i++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404 return ps;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
406
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407 static gint print_paper_size_lookup(gint n, gdouble *width, gdouble *height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
409 PaperSize *ps;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
410 gdouble w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
411
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412 ps = print_paper_size_nth(n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
413 if (!ps) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
414
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
415 if (ps->orientation == PAPER_ORIENTATION_PORTRAIT)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
416 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
417 w = ps->width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
418 h = ps->height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
419 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
420 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
421 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
422 h = ps->width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
423 w = ps->height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
424 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
425
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
426 if (width) *width = w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
427 if (height) *height = h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
428
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
429 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
430 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
431
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
432 static gdouble print_paper_size_convert_units(gdouble value, PaperUnits src, PaperUnits dst)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
433 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
434 gdouble ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
435
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
436 if (src == dst) return value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
437
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
438 switch (src)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
439 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
440 case PAPER_UNIT_MM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
441 ret = value / 25.4 * 72.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
442 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
443 case PAPER_UNIT_CM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
444 ret = value / 2.54 * 72.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
445 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
446 case PAPER_UNIT_INCH:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
447 ret = value * 72.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
448 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
449 case PAPER_UNIT_PICAS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
450 ret = value * 12.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
451 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
452 case PAPER_UNIT_POINTS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
453 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
454 ret = value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
455 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
456 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 switch (dst)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
459 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
460 case PAPER_UNIT_MM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
461 ret = ret / 72.0 * 25.4;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
462 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463 case PAPER_UNIT_CM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 ret = ret / 72.0 * 2.54;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466 case PAPER_UNIT_INCH:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467 ret = ret / 72.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469 case PAPER_UNIT_PICAS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
470 ret = ret / 12.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
471 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472 case PAPER_UNIT_POINTS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
473 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
475 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
476
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
477 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
478 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
479
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
480 static PaperUnits paper_unit_default(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
481 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
482 const char *result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
483 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
484 /* this is not used because it is not even slightly portable */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
485 #include <langinfo.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
486
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
487 result = nl_langinfo(_NL_MEASUREMENT_MEASUREMENT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
488 if (result[0] == '2') return PAPER_UNIT_INCH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
489 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
490
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 #ifdef LC_MEASUREMENT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 result = setlocale(LC_MEASUREMENT, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493 #else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494 result = setlocale(LC_ALL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
495 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496 if (result &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497 (strstr(result, "_US") || strstr(result, "_PR")) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
499 return PAPER_UNIT_INCH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502 return PAPER_UNIT_CM;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
503 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
505 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
506 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
507 * the layout window
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
509 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
511 static gint print_layout_page_count(PrintWindow *pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
513
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
514 static gint print_preview_unit(gdouble points)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
515 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516 return (int)(points / PRINT_PREVIEW_SCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
517 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
518
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
519 static void print_proof_size(PrintWindow *pw, gdouble *width, gdouble *height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
521 if (width) *width = pw->proof_width + PRINT_PROOF_MARGIN * 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
522 if (height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
524 gdouble h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
525
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
526 h = pw->proof_height + PRINT_PROOF_MARGIN * 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 if (pw->text_fields != 0) h += PRINT_TEXT_PADDING;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 if (pw->text_fields & TEXT_INFO_FILENAME) h+= (gdouble)pw->text_points * 1.25;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529 if (pw->text_fields & TEXT_INFO_DIMENSIONS) h+= (gdouble)pw->text_points * 1.25;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530 if (pw->text_fields & TEXT_INFO_FILEDATE) h+= (gdouble)pw->text_points * 1.25;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
531 if (pw->text_fields & TEXT_INFO_FILESIZE) h+= (gdouble)pw->text_points * 1.25;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
532 *height = h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
535
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536 static void print_window_layout_status(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
537 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538 gint total;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
540
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541 total = print_layout_page_count(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542 pw->proof_page = CLAMP(pw->proof_page, 0, total - 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
543
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
544 buf = g_strdup_printf(_("page %d of %d"), pw->proof_page + 1, (total > 0) ? total : 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545 gtk_label_set_text(GTK_LABEL(pw->page_label), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
548 gtk_widget_set_sensitive(pw->page_label, (total > 0));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
549
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550 gtk_widget_set_sensitive(pw->button_back, (pw->proof_page > 0));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551 gtk_widget_set_sensitive(pw->button_next, (pw->proof_page < total - 1));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
552
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
553 gtk_widget_set_sensitive(pw->print_button, total > 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
554 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
555
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
556 static void print_window_layout_render_stop(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 if (pw->layout_idle_id != -1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
559 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
560 g_source_remove(pw->layout_idle_id);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
561 pw->layout_idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
563 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565 static gboolean print_window_layout_render_idle(gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
567 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 print_job_close(pw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
570 print_job_start(pw, RENDER_FORMAT_PREVIEW, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
571
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
572 pw->layout_idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
573 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
574 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
575
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
576 static void print_window_layout_render(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
577 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
578 gdouble proof_w, proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
579
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580 print_proof_size(pw, &proof_w, &proof_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
581 pw->proof_columns = (pw->layout_width - pw->margin_left - pw->margin_right) / proof_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
582 pw->proof_rows = (pw->layout_height - pw->margin_top - pw->margin_bottom) / proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
583
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584 print_window_layout_status(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
585
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
586 if (pw->layout_idle_id == -1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588 pw->layout_idle_id = g_idle_add(print_window_layout_render_idle, pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
589 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
591
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 static void print_window_layout_size(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
593 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
594 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
595 gdouble width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
596 gdouble height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
597 gint sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
598
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
599 if (!pw->layout_image) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
601 if (pw->paper_orientation == PAPER_ORIENTATION_LANDSCAPE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
602 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
603 width = pw->paper_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
604 height = pw->paper_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
606 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
607 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
608 width = pw->paper_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
609 height = pw->paper_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
610 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
612 pw->layout_width = width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
613 pw->layout_height = height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
614
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
615 sw = print_preview_unit(width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
616 sh = print_preview_unit(height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 pixbuf = pw->layout_image->pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618 if (!pixbuf ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 gdk_pixbuf_get_width(pixbuf) != sw ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620 gdk_pixbuf_get_height(pixbuf) != sh)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, sw, sh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623 image_change_pixbuf(pw->layout_image, pixbuf, 0.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
624 g_object_unref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
625 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
626
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
627 print_window_layout_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
628 print_window_layout_status(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
629 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
630
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
631 static gint print_layout_page_count(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
632 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
633 gint images;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
634 gint images_per_page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
635 gint pages;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
636
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
637 if (pw->layout_width - pw->margin_left - pw->margin_right <= 0.0 ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
638 pw->layout_height - pw->margin_top - pw->margin_bottom <= 0.0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
639 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640 return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
642
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643 switch (pw->source)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
645 case PRINT_SOURCE_ALL:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
646 images = g_list_length(pw->source_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
647 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
648 case PRINT_SOURCE_SELECTION:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649 images = g_list_length(pw->source_selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
650 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
651 case PRINT_SOURCE_IMAGE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
653 images = (pw->source_path) ? 1 : 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
654 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
655 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
656
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
657 switch (pw->layout)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
658 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
659 case PRINT_LAYOUT_PROOF:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
660 images_per_page = pw->proof_columns * pw->proof_rows;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 case PRINT_LAYOUT_IMAGE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664 images_per_page = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
665 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
666 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
667
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
668 if (images < 1 || images_per_page < 1) return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
670 pages = images / images_per_page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
671 if (pages * images_per_page < images) pages++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
672
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673 return pages;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
674 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
675
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
676 static void print_layout_page_step(PrintWindow *pw, gint step)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
677 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
678 gint max;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679 gint page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681 max = print_layout_page_count(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682 page = pw->proof_page + step;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
684 if (page >= max) page = max - 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685 if (page < 0) page = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
686
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
687 if (page == pw->proof_page) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
688
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
689 pw->proof_page = page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
690 print_window_layout_size(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
691 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
692
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 static void print_layout_page_back_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
695 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
696
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
697 print_layout_page_step(pw, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
698 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
699
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
700 static void print_layout_page_next_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
701 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
702 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
703
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
704 print_layout_page_step(pw, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
706
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
707 static void print_layout_zoom_in_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
708 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
709 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
710 image_zoom_adjust(pw->layout_image, 0.25);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
711 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
712
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
713 static void print_layout_zoom_out_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
714 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
715 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
716 image_zoom_adjust(pw->layout_image, -0.25);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
717 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
718
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
719 static void print_layout_zoom_original_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
720 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
721 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
722 gdouble zoom;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
723
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
724 zoom = image_zoom_get(pw->layout_image);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
725 image_zoom_set(pw->layout_image, (zoom == 1.0) ? 0.0 : 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
726 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
727
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
728 static GtkWidget *print_window_layout_setup(PrintWindow *pw, GtkWidget *box)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
729 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
730 GtkWidget *vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
731 GtkWidget *hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
732 GtkWidget *group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
733 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
734
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
735 vbox = pref_box_new(box, TRUE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
736 group = pref_frame_new(vbox, TRUE, _("Preview"), GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
737
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
738 pw->layout_idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
739
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
740 pw->layout_image = image_new(FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
741 gtk_widget_set_size_request(pw->layout_image->widget, PRINT_DLG_PREVIEW_WIDTH, PRINT_DLG_PREVIEW_HEIGHT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
742
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
743 gtk_box_pack_start(GTK_BOX(group), pw->layout_image->widget, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
744 gtk_widget_show(pw->layout_image->widget);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
745
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
746 hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
747 pw->button_back = pref_button_new(hbox, GTK_STOCK_GO_BACK, NULL, TRUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
748 G_CALLBACK(print_layout_page_back_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
749 pw->button_next = pref_button_new(hbox, GTK_STOCK_GO_FORWARD, NULL, TRUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
750 G_CALLBACK(print_layout_page_next_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
751 pw->page_label = pref_label_new(hbox, "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
752
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
753 button = pref_button_new(NULL, GTK_STOCK_ZOOM_OUT, NULL, TRUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
754 G_CALLBACK(print_layout_zoom_out_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
755 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
756 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
757 button = pref_button_new(NULL, GTK_STOCK_ZOOM_IN, NULL, TRUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
758 G_CALLBACK(print_layout_zoom_in_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
759 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
760 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
761 button = pref_button_new(NULL, GTK_STOCK_ZOOM_100, NULL, TRUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
762 G_CALLBACK(print_layout_zoom_original_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
763 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
764 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
765
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
766 print_window_layout_size(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
767
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
768 return vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
769 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
770
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
771 static void print_window_spin_set(GtkSpinButton *spin, gpointer block_data,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
772 gdouble value, gdouble min, gdouble max,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
773 gdouble step, gdouble page, gint digits)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
774 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
775 if (block_data) g_signal_handlers_block_matched(G_OBJECT(spin), G_SIGNAL_MATCH_DATA,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
776 0, 0, NULL, NULL, block_data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
777 gtk_spin_button_set_digits(spin, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
778 gtk_spin_button_set_increments(spin, step, page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
779 gtk_spin_button_set_range(spin, min, max);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
780 gtk_spin_button_set_value(spin, value);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
781
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
782 if (block_data) g_signal_handlers_unblock_matched(G_OBJECT(spin), G_SIGNAL_MATCH_DATA,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
783 0, 0, NULL, NULL, block_data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
784 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
785
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
786 static void print_window_layout_sync_layout(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
787 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
788 gtk_widget_set_sensitive(pw->image_scale_spin, (pw->layout == PRINT_LAYOUT_IMAGE));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
789 gtk_widget_set_sensitive(pw->proof_group, (pw->layout == PRINT_LAYOUT_PROOF));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
790 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
791
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
792 static void print_window_layout_sync_paper(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
793 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
794 gdouble width, height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
795 gint digits;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
796 gdouble step;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
797 gdouble page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
798
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
799 gtk_widget_set_sensitive(pw->paper_width_spin, (pw->paper_size == 0));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
800 gtk_widget_set_sensitive(pw->paper_height_spin, (pw->paper_size == 0));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
801
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
802 width = print_paper_size_convert_units((gdouble)pw->paper_width, PAPER_UNIT_POINTS, pw->paper_units);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
803 height = print_paper_size_convert_units((gdouble)pw->paper_height, PAPER_UNIT_POINTS, pw->paper_units);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
804
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
805 switch (pw->paper_units)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
806 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
807 case PAPER_UNIT_MM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
808 digits = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
809 step = 1.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
810 page = 10.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
811 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
812 case PAPER_UNIT_CM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
813 digits = 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
814 step = 0.5;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
815 page = 1.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
816 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
817 case PAPER_UNIT_INCH:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
818 digits = 3;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
819 step = 0.25;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
820 page = 1.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
821 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
822 case PAPER_UNIT_PICAS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
823 digits = 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
824 step = 1.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
825 page = 6.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
826 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
827 case PAPER_UNIT_POINTS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
828 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
829 digits = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
830 step = 1.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
831 page = 10.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
832 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
833 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
834
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
835 print_window_spin_set(GTK_SPIN_BUTTON(pw->paper_width_spin), pw, width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
836 print_paper_size_convert_units(PRINT_MIN_WIDTH, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
837 print_paper_size_convert_units(PRINT_MAX_WIDTH, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
838 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
839
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
840 print_window_spin_set(GTK_SPIN_BUTTON(pw->paper_height_spin), pw, height,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
841 print_paper_size_convert_units(PRINT_MIN_HEIGHT, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
842 print_paper_size_convert_units(PRINT_MAX_HEIGHT, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
843 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
844
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
845 print_window_spin_set(GTK_SPIN_BUTTON(pw->margin_left_spin), pw,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
846 print_paper_size_convert_units(pw->margin_left, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
847 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
848 print_paper_size_convert_units(PRINT_MAX_WIDTH, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
849 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
850
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
851 print_window_spin_set(GTK_SPIN_BUTTON(pw->margin_right_spin), pw,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
852 print_paper_size_convert_units(pw->margin_right, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
853 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
854 print_paper_size_convert_units(PRINT_MAX_WIDTH, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
855 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
856
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
857 print_window_spin_set(GTK_SPIN_BUTTON(pw->margin_top_spin), pw,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
858 print_paper_size_convert_units(pw->margin_top, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
859 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
860 print_paper_size_convert_units(PRINT_MAX_HEIGHT, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
861 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
862
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
863 print_window_spin_set(GTK_SPIN_BUTTON(pw->margin_bottom_spin), pw,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
864 print_paper_size_convert_units(pw->margin_bottom, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
865 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
866 print_paper_size_convert_units(PRINT_MAX_HEIGHT, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
867 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
868
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
869 print_window_spin_set(GTK_SPIN_BUTTON(pw->proof_width_spin), pw,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
870 print_paper_size_convert_units(pw->proof_width, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
871 print_paper_size_convert_units(PRINT_PROOF_MIN_SIZE, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
872 print_paper_size_convert_units(PRINT_PROOF_MAX_SIZE, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
873 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
874
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
875 print_window_spin_set(GTK_SPIN_BUTTON(pw->proof_height_spin), pw,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
876 print_paper_size_convert_units(pw->proof_height, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
877 print_paper_size_convert_units(PRINT_PROOF_MIN_SIZE, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
878 print_paper_size_convert_units(PRINT_PROOF_MAX_SIZE, PAPER_UNIT_POINTS, pw->paper_units),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
879 step, page, digits);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
880 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
881
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
882 static void print_window_layout_set_size(PrintWindow *pw, gdouble width, gdouble height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
883 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
884 pw->paper_width = width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
885 pw->paper_height = height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
886
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
887 print_window_layout_sync_paper(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
888
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
889 print_window_layout_size(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
890 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
891
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
892 static void print_window_layout_set_orientation(PrintWindow *pw, PaperOrientation o)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
893 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
894 if (pw->paper_orientation == o) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
895
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
896 pw->paper_orientation = o;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
897
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
898 print_window_layout_size(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
899 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
900
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
901 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
902 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
903 * list printers
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
904 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
905 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
906
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
907 static GList *print_window_list_printers(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
908 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
909 FILE *p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
910 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
911 gchar buffer[2048];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
912
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
913 p = popen(PRINT_LPR_QUERY, "r");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
914 if (!p) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
915
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
916 while (fgets(buffer, sizeof(buffer), p) != NULL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
917 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
918 gchar *ptr;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
919 gchar *end;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
920
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
921 ptr = buffer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
922 if (strncmp(ptr, "printer ", 8) != 0) continue;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
923 if (strstr(ptr, "enabled") == NULL) continue;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
924 ptr += 8;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
925 end = ptr;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
926 while (*end != '\0' && *end != '\n' && *end != ' ' && *end != '\t') end++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
927 *end = '\0';
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
928 list = g_list_append(list, g_strdup(ptr));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
929 if (debug) printf("adding printer: %s\n", ptr);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
930 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
931
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
932 pclose(p);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
933
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
934 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
935 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
936
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
937 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
938 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
939 * print ps
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
940 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
941 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
942
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
943 typedef struct _PipeError PipeError;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
944 struct _PipeError {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
945 struct sigaction old_action;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
946 sig_atomic_t *error;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
947 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
948
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
949 static sig_atomic_t pipe_handler_error = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
950 static PipeError *pipe_handler_data = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
951
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
952 static void pipe_handler_sigpipe_cb(int fd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
953 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
954 pipe_handler_error = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
955 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
956
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
957 static PipeError *pipe_handler_new(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
958 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
959 struct sigaction new_action;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
960 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
961
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
962 if (pipe_handler_data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
963 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
964 printf("warning SIGPIPE handler already in use\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
965 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
966 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
967
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
968 pe = g_new0(PipeError, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
969
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
970 pipe_handler_error = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
971 pe->error = &pipe_handler_error;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
972
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
973 new_action.sa_handler = pipe_handler_sigpipe_cb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
974 sigemptyset (&new_action.sa_mask);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
975 new_action.sa_flags = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
976
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
977 /* setup our signal handler */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
978 sigaction (SIGPIPE, &new_action, &pe->old_action);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
979
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
980 pipe_handler_data = pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
981 return pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
982 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
983
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
984 static void pipe_handler_free(PipeError *pe)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
985 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
986 if (!pe) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
987 if (pe != pipe_handler_data) printf("warning SIGPIPE handler not closing same data\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
988
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
989 /* restore the original signal handler */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
990 sigaction (SIGPIPE, &pe->old_action, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
991
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
992 pipe_handler_data = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
993 g_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
994 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
995
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
996 static gint pipe_handler_check(PipeError *pe)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
997 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
998 if (!pe) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
999 return *pe->error;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1000 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1001
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1002 static FILE *print_job_ps_fd(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1003 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1004 if (pw->job_file) return pw->job_file;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1005 if (pw->job_pipe) return pw->job_pipe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1006 return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1007 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1008
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1009 static gint print_job_ps_init(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1010 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1011 FILE *f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1012 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1013 const gchar *cmd = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1014 const gchar *path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1015 gchar *lc_pointer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1016 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1017
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1018 if (pw->job_file != NULL || pw->job_pipe != NULL) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1019
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1020 switch (pw->job_output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1021 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1022 case PRINT_OUTPUT_PS_LPR:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1023 cmd = PRINT_LPR_COMMAND;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1024 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1025 case PRINT_OUTPUT_PS_CUSTOM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1026 cmd = pw->output_custom;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1027 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1028 case PRINT_OUTPUT_PS_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1029 path = pw->output_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1030 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1031 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1032 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1033 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1034 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1035
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1036 if (cmd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1037 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1038 pw->job_pipe = popen(cmd, "w");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1039
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1040 if (!pw->job_pipe)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1041 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1042 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1043
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1044 buf = g_strdup_printf(_("Unable to open pipe for writing.\n\"%s\""), cmd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1045 print_job_throw_error(pw, buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1046 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1047
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1048 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1049 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1050 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1051 else if (path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1052 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1053 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1054
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1055 if (isfile(path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1056 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1057 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1058
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1059 buf = g_strdup_printf(_("A file with name %s already exists."), path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1060 print_job_throw_error(pw, buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1061 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1062
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1063 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1064 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1065
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1066 pathl = path_from_utf8(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1067 pw->job_file = fopen(pathl, "w");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1068 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1069
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1070 if (!pw->job_file)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1071 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1072 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1073
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1074 buf = g_strdup_printf(_("Failure writing to file %s"), path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1075 print_job_throw_error(pw, buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1076 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1077
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1078 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1079 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1080
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1081 g_free(pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1082 pw->job_path = g_strdup(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1083 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1084
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1085 f = print_job_ps_fd(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1086 if (!f) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1087
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1088 lc_pointer = g_strdup(setlocale(LC_NUMERIC, NULL));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1089 setlocale(LC_NUMERIC, POSTSCRIPT_LOCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1090
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1091 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1092
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1093 /* comments, etc. */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1094 fprintf(f, "%%!PS-Adobe-3.0\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1095 fprintf(f, "%%%%Creator: GQview Version %s\n", VERSION);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1096 fprintf(f, "%%%%CreationDate: \n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1097 fprintf(f, "%%%%LanguageLevel 2\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1098 fprintf(f, "%%%%DocumentMedia: \n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1099 fprintf(f, "%%%%Orientation: %s\n",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1100 (pw->paper_orientation == PAPER_ORIENTATION_PORTRAIT) ? "Portrait" : "Landscape");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1101 fprintf(f, "%%%%BoundingBox: %f %f %f %f\n",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1102 0.0, 0.0, pw->paper_width, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1103 fprintf(f, "%%%%Pages: %d\n", print_layout_page_count(pw));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1104 fprintf(f, "%%%%PageOrder: Ascend\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1105 fprintf(f, "%%%%Title:\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1106
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1107 /* setup page size, coordinates (do we really need this?) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1108 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1109 fprintf(f, "<<\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1110 fprintf(f, "/PageSize [%f %f]\n", pw->layout_width, pw->layout_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1111 fprintf(f, "/ImagingBBox [%f %f %f %f]\n", /* l b r t */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1112 pw->margin_left, pw->margin_bottom,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1113 pw->layout_width - pw->margin_right, pw->layout_height - pw->margin_top);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1114 fprintf(f, "/Orientation %d\n",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1115 (pw->paper_orientation == PAPER_ORIENTATION_PORTRAIT) ? 0 : 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1116 fprintf(f, ">> setpagedevice\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1117 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1118
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1119 ret = !pipe_handler_check(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1120 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1121
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1122 if (lc_pointer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1123 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1124 setlocale(LC_NUMERIC, lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1125 g_free(lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1126 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1127
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1128 if (!ret) print_job_throw_error(pw, _("SIGPIPE error writing to printer."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1129
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1130 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1131 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1132
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1133 static gint print_job_ps_page_new(PrintWindow *pw, gint page)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1134 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1135 FILE *f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1136 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1137 gchar *lc_pointer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1138 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1139
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1140 f= print_job_ps_fd(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1141 if (!f) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1142
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1143 lc_pointer = g_strdup(setlocale(LC_NUMERIC, NULL));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1144 setlocale(LC_NUMERIC, POSTSCRIPT_LOCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1145
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1146 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1147
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1148 fprintf(f, "%%%% page %d\n", page + 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1149
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1150 if (pw->paper_orientation == PAPER_ORIENTATION_LANDSCAPE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1151 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1152 fprintf(f, "/pagelevel save def\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1153 fprintf(f, "%d 0 translate 90 rotate\n", (gint)pw->layout_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1154 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1155
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1156 ret = !pipe_handler_check(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1157 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1158
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1159 if (lc_pointer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1160 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1161 setlocale(LC_NUMERIC, lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1162 g_free(lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1163 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1164
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1165 if (!ret) print_job_throw_error(pw, _("SIGPIPE error writing to printer."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1166
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1167 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1168 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1169
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1170 static gint print_job_ps_page_done(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1171 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1172 FILE *f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1173 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1174 gchar *lc_pointer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1175 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1176
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1177 f = print_job_ps_fd(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1178 if (!f) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1179
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1180 lc_pointer = g_strdup(setlocale(LC_NUMERIC, NULL));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1181 setlocale(LC_NUMERIC, POSTSCRIPT_LOCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1182
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1183 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1184
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1185 if (pw->paper_orientation == PAPER_ORIENTATION_LANDSCAPE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1186 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1187 fprintf(f, "pagelevel restore\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1188 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1189
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1190 fprintf(f, "showpage\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1191
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1192 ret = !pipe_handler_check(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1193 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1194
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1195 if (lc_pointer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1196 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1197 setlocale(LC_NUMERIC, lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1198 g_free(lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1199 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1200
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1201 if (!ret) print_job_throw_error(pw, _("SIGPIPE error writing to printer."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1202
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1203 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1204 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1205
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1206 static void print_job_ps_page_image_pixel(FILE *f, guchar *pix)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1207 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1208 static gchar hex_digits[] = "0123456789abcdef";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1209 gchar text[8];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1210 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1211
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1212 for (i = 0; i < 3; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1213 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1214 text[i*2] = hex_digits[pix[i] >> 4];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1215 text[i*2+1] = hex_digits[pix[i] & 0xf];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1216 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1217 text[6] = '\0';
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1218
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1219 fprintf(f, text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1220 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1221 static gint print_job_ps_page_image(PrintWindow *pw, GdkPixbuf *pixbuf,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1222 gdouble x, gdouble y, gdouble w, gdouble h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1223 gdouble offx, gdouble offy)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1224 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1225 FILE *f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1226 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1227 gchar *lc_pointer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1228 gint sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1229 gint bps;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1230 gint rowstride;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1231 guchar *pix;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1232 gint i, j;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1233 gint c;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1234 guchar *p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1235 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1236
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1237 if (!pixbuf) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1238
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1239 f = print_job_ps_fd(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1240 if (!f) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1241
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1242 sw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1243 sh = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1244
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1245 if (pw->max_dpi >= PRINT_PS_DPI_MIN &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1246 sw / pw->max_dpi > w / 72.0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1247 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1248 pixbuf = gdk_pixbuf_scale_simple(pixbuf,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1249 (gint)(w / 72.0 * pw->max_dpi),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1250 (gint)(h / 72.0 * pw->max_dpi),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1251 PRINT_PS_MAX_INTERP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1252 sw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1253 sh = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1254 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1255 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1256 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1257 g_object_ref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1258 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1259
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1260 bps = (gdk_pixbuf_get_has_alpha(pixbuf)) ? 4 : 3;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1261 rowstride = gdk_pixbuf_get_rowstride(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1262 pix = gdk_pixbuf_get_pixels(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1263
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1264 lc_pointer = g_strdup(setlocale(LC_NUMERIC, NULL));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1265 setlocale(LC_NUMERIC, POSTSCRIPT_LOCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1267 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1268
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1269 fprintf(f, "gsave\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1270 fprintf(f, "[%f 0 0 %f %f %f] concat\n", w, h, x, pw->layout_height - h - y);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1271 fprintf(f, "/buf %d string def\n", sw * 3);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1272 fprintf(f, "%d %d %d\n", sw, sh, 8);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1273 fprintf(f, "[%d 0 0 -%d 0 %d]\n", sw, sh, sh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1274 fprintf(f, "{ currentfile buf readhexstring pop }\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1275 fprintf(f, "false %d colorimage\n", 3);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1276
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1277 c = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1278 for (j = 0; j < sh; j++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1279 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1280 p = pix + j * rowstride;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1281 for (i = 0; i < sw; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1282 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1283 print_job_ps_page_image_pixel(f, p);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1284 p+=bps;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1285 c++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1286 if (c > 11)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1287 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1288 fprintf(f, "\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1289 c = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1290 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1291 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1292 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1293 if (c > 0) fprintf(f, "\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1294 fprintf(f, "grestore\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1295
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1296 ret = !pipe_handler_check(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1297 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1298
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1299 if (lc_pointer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1300 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1301 setlocale(LC_NUMERIC, lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1302 g_free(lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1303 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1304
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1305 g_object_unref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1306
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1307 if (!ret) print_job_throw_error(pw, _("SIGPIPE error writing to printer."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1308
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1309 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1310 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1311
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1312 static const gchar *ps_text_to_hex_array(FILE *f, const gchar *text, gdouble x, gdouble y)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1313 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1314 static gchar hex_digits[] = "0123456789abcdef";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1315 const gchar *p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1316
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1317 if (!text) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1318
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1319 fprintf(f, "%f %f moveto\n", x, y);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1320 fprintf(f, "<");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1321
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1322 /* fixme: convert utf8 to ascii or proper locale string.. */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1323
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1324 p = text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1325 while (*p != '\0' && *p != '\n')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1326 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1327 gchar text[3];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1328
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1329 text[0] = hex_digits[*p >> 4];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1330 text[1] = hex_digits[*p & 0xf];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1331 text[2] = '\0';
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1332
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1333 fprintf(f, text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1335 p++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1336 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1337
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1338 fprintf(f, ">\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1339 fprintf(f, "dup stringwidth pop 2 div neg 0 rmoveto show\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1340
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1341 return p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1342 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1343
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1344 static void ps_text_parse(FILE *f, const gchar *text, gdouble x, gdouble y, gdouble point_size)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1345 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1346 const gchar *p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1347
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1348 if (!text) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1349
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1350 fprintf(f, "newpath\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1351
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1352 p = text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1353 while (p && *p != '\0')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1354 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1355 p = ps_text_to_hex_array(f, p, x, y);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1356 if (p && *p == '\n') p++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1357 y -= point_size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1358 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1359
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1360 fprintf(f, "closepath\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1361 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1362
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1363 static gint print_job_ps_page_text(PrintWindow *pw, const gchar *text, gdouble point_size,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1364 gdouble x, gdouble y, gdouble width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1365 guint8 r, guint8 g, guint8 b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1366 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1367 FILE *f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1368 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1369 gchar *lc_pointer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1370 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1371
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1372 if (!text) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1373
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1374 f = print_job_ps_fd(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1375 if (!f) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1376
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1377 lc_pointer = g_strdup(setlocale(LC_NUMERIC, NULL));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1378 setlocale(LC_NUMERIC, POSTSCRIPT_LOCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1379
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1380 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1381
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1382 fprintf(f, "/Sans findfont\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1383 fprintf(f, "%f scalefont\n", point_size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1384 fprintf(f, "setfont\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1385
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1386 fprintf(f, "%f %f %f setrgbcolor\n", (gdouble)r / 255.0, (gdouble)g / 255.0, (gdouble)b / 255.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1387 ps_text_parse(f, text, x, pw->layout_height - y - point_size, point_size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1388
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1389 ret = !pipe_handler_check(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1390 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1391
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1392 if (lc_pointer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1393 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1394 setlocale(LC_NUMERIC, lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1395 g_free(lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1396 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1397
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1398 if (!ret) print_job_throw_error(pw, _("SIGPIPE error writing to printer."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1399
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1400 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1401 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1402
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1403 static gint print_job_ps_end(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1404 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1405 FILE *f;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1406 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1407 gchar *lc_pointer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1408 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1409
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1410 f = print_job_ps_fd(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1411 if (!f) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1412
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1413 lc_pointer = g_strdup(setlocale(LC_NUMERIC, NULL));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1414 setlocale(LC_NUMERIC, POSTSCRIPT_LOCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1415
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1416 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1417
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1418 fprintf(f, "%%%%EOF\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1419
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1420 ret = !pipe_handler_check(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1421 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1422
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1423 if (lc_pointer)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1424 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1425 setlocale(LC_NUMERIC, lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1426 g_free(lc_pointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1427 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1428
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1429 if (!ret) print_job_throw_error(pw, _("SIGPIPE error writing to printer."));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1430
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1431 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1432 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1433
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1434 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1435 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1436 * print rgb
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1437 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1438 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1439
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1440 static gint print_job_rgb_page_new(PrintWindow *pw, gint page)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1441 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1442 gint total;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1443
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1444 if (pw->job_pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1445 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1446 pixbuf_set_rect_fill(pw->job_pixbuf, 0, 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1447 gdk_pixbuf_get_width(pw->job_pixbuf),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1448 gdk_pixbuf_get_height(pw->job_pixbuf),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1449 255, 255, 255, 255);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1450 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1451
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1452 g_free(pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1453 pw->job_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1454
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1455 total = print_layout_page_count(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1456
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1457 if (!pw->output_path ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1458 page < 0 || page >= total) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1459
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1460 if (total > 1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1461 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1462 const gchar *ext;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1463 gchar *base;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1464
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1465 ext = extension_from_path(pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1466
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1467 if (ext)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1468 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1469 base = g_strndup(pw->output_path, ext - pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1470 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1471 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1472 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1473 base = g_strdup(pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1474 ext = "";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1475 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1476 pw->job_path = g_strdup_printf("%s_%03d%s", base, page + 1, ext);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1477 g_free(base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1478 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1479 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1480 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1481 pw->job_path = g_strdup(pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1482 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1483
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1484 if (isfile(pw->job_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1485 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1486 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1487
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1488 buf = g_strdup_printf(_("A file with name %s already exists."), pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1489 print_job_throw_error(pw, buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1490 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1491
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1492 g_free(pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1493 pw->job_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1494 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1495
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1496 return (pw->job_path != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1497 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1498
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1499 static gint print_job_rgb_page_done(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1500 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1501 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1502 gint ret = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1503
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1504 if (!pw->job_pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1505
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1506 pathl = path_from_utf8(pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1507
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1508 if (pw->output_format == PRINT_FILE_PNG)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1509 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1510 ret = pixbuf_to_file_as_png(pw->job_pixbuf, pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1511 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1512 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1513 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1514 gint quality = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1515
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1516 switch (pw->output_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1517 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1518 case PRINT_FILE_JPG_LOW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1519 quality = 65;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1520 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1521 case PRINT_FILE_JPG_NORMAL:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1522 quality = 80;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1523 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1524 case PRINT_FILE_JPG_HIGH:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1525 quality = 95;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1526 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1527 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1528 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1529 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1530
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1531 if (quality > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1532 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1533 ret = pixbuf_to_file_as_jpg(pw->job_pixbuf, pathl, quality);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1534 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1535 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1536
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1537 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1538
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1539 if (!ret)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1540 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1541 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1542
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1543 buf = g_strdup_printf(_("Failure writing to file %s"), pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1544 print_job_throw_error(pw, buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1545 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1546 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1547
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1548 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1549 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1550
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1551 static gint print_job_rgb_page_image(PrintWindow *pw, GdkPixbuf *pixbuf,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1552 gdouble x, gdouble y, gdouble w, gdouble h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1553 gdouble offx, gdouble offy)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1554 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1555 gdouble sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1556 gdouble dw, dh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1557 gdouble rx, ry, rw, rh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1558
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1559 if (!pw->job_pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1560 if (!pixbuf) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1561
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1562 sw = (gdouble)gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1563 sh = (gdouble)gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1564
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1565 dw = (gdouble)gdk_pixbuf_get_width(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1566 dh = (gdouble)gdk_pixbuf_get_height(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1567
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1568 if (clip_region(x, y, w, h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1569 0.0, 0.0, dw, dh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1570 &rx, &ry, &rw, &rh))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1571 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1572 gdk_pixbuf_composite(pixbuf, pw->job_pixbuf, rx, ry, rw, rh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1573 x + offx, y + offy,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1574 w / sw, h / sh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1575 (w / sw < 0.01 || h / sh < 0.01) ? GDK_INTERP_NEAREST : GDK_INTERP_BILINEAR, 255);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1576 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1577
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1578 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1579 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1580
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1581 static gdouble convert_pango_dpi(gdouble points)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1582 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1583 static gdouble dpi = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1584
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1585 if (dpi == 0.0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1586 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1587 GtkSettings *settings;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1588 GObjectClass *klass;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1589
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1590 settings = gtk_settings_get_default();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1591 klass = G_OBJECT_CLASS(GTK_SETTINGS_GET_CLASS(settings));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1592 if (g_object_class_find_property(klass, "gtk-xft-dpi"))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1593 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1594 int int_dpi;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1595 g_object_get(settings, "gtk-xft-dpi", &int_dpi, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1596 dpi = (gdouble)int_dpi / PANGO_SCALE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1597 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1598
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1599 if (dpi < 25.0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1600 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1601 static gint warned = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1602 gdouble fallback_dpi = 96.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1603
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1604 if (!warned)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1605 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1606 if (dpi == 0.0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1607 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1608 printf("pango dpi unknown, assuming %.0f\n", fallback_dpi);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1609 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1610 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1611 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1612 printf("pango dpi reported as %.0f ignored, assuming %.0f\n", dpi, fallback_dpi);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1613 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1614 warned = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1615 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1616
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1617 dpi = fallback_dpi;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1618 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1619 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1620
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1621 if (dpi == 0) return points;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1622 return points * 72.0 / dpi;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1623 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1624
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1625 static gint print_job_rgb_page_text(PrintWindow *pw, const gchar *text, gdouble point_size,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1626 gdouble x, gdouble y, gdouble width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1627 guint8 r, guint8 g, guint8 b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1628 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1629 PangoLayout *layout;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1630 PangoFontDescription *desc;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1631 gint lw, lh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1632
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1633 if (!pw->job_pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1634
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1635 layout = gtk_widget_create_pango_layout(pw->dialog->dialog, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1636
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1637 desc = pango_font_description_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1638 pango_font_description_set_size(desc, convert_pango_dpi(point_size) * PANGO_SCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1639 pango_layout_set_font_description(layout, desc);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1640 pango_font_description_free(desc);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1641
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1642 pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1643 pango_layout_set_text(layout, text, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1644
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1645 pango_layout_get_pixel_size(layout, &lw, &lh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1646 x = x - (gdouble)lw / 2.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1647
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1648 pixbuf_draw_layout(pw->job_pixbuf, layout, pw->dialog->dialog, x, y, r, g, b, 255);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1649 g_object_unref(G_OBJECT(layout));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1650
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1651 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1652 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1653
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1654 static gint print_job_rgb_init(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1655 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1656 if (pw->job_pixbuf) g_object_unref(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1657 pw->job_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1658 (gint)pw->layout_width, (gint)pw->layout_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1659
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1660 return print_job_rgb_page_new(pw, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1661 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1662
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1663 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1664 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1665 * print preview
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1666 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1667 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1668
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1669 static gint print_job_preview_page_new(PrintWindow *pw, gint page)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1670 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1671 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1672 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1673 gint l, r, t, b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1674
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1675 pixbuf = pw->job_pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1676 if (!pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1677
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1678 w = print_preview_unit(pw->layout_width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1679 h = print_preview_unit(pw->layout_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1680 l = print_preview_unit(pw->margin_left);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1681 r = print_preview_unit(pw->margin_right);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1682 t = print_preview_unit(pw->margin_top);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1683 b = print_preview_unit(pw->margin_bottom);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1684
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1685 /* fill background */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1686 pixbuf_set_rect_fill(pixbuf, 0, 0, w, h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1687 255, 255, 255, 255);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1688
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1689 /* draw cm or inch grid */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1690 if (TRUE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1691 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1692 gdouble i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1693 gdouble grid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1694 PaperUnits units;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1695
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1696 units = (pw->paper_units == PAPER_UNIT_MM ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1697 pw->paper_units == PAPER_UNIT_CM) ? PAPER_UNIT_CM : PAPER_UNIT_INCH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1698
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1699 grid = print_paper_size_convert_units(1.0, units, PAPER_UNIT_POINTS);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1700 for (i = grid ; i < pw->layout_width; i += grid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1701 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1702 pixbuf_draw_rect_fill(pixbuf, print_preview_unit(i), 0, 1, h, 0, 0, 0, 16);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1703 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1704 for (i = grid; i < pw->layout_height; i += grid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1705 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1706 pixbuf_draw_rect_fill(pixbuf, 0, print_preview_unit(i), w, 1, 0, 0, 0, 16);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1707 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1708 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1709
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1710 /* proof sheet grid */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1711 if (pw->layout == PRINT_LAYOUT_PROOF)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1712 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1713 gdouble i, j;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1714 gdouble proof_w, proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1715 gint uw, uh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1716
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1717 print_proof_size(pw, &proof_w, &proof_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1718 uw = print_preview_unit(proof_w + PRINT_PREVIEW_SCALE - 0.1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1719 uh = print_preview_unit(proof_h + PRINT_PREVIEW_SCALE - 0.1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1720
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1721 for (i = 0; i < pw->proof_columns; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1722 for (j = 0; j < pw->proof_rows; j++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1723 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1724 gint x, y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1725
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1726 x = pw->margin_left + (pw->layout_width - pw->margin_left - pw->margin_right - (pw->proof_columns * proof_w)) / 2 + i * proof_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1727 y = pw->margin_top + j * proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1728
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1729 pixbuf_draw_rect(pixbuf, print_preview_unit(x), print_preview_unit(y), uw, uh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1730 255, 0, 0, 64, 1, 1, 1, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1731 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1732 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1733
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1734 /* non-printable region (margins) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1735 pixbuf_draw_rect(pixbuf, 0, 0, w, h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1736 0, 0, 0, 16,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1737 l, r, t, b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1738
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1739 /* margin lines */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1740 pixbuf_draw_rect(pixbuf, l, 0, w - l - r, h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1741 0, 0, 255, 128,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1742 1, 1, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1743 pixbuf_draw_rect(pixbuf, 0, t, w, h - t - b,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1744 0, 0, 255, 128,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1745 0, 0, 1, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1746
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1747 /* border */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1748 pixbuf_draw_rect(pixbuf, 0, 0, w, h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1749 0, 0, 0, 255,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1750 1, 1, 1, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1751
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1752 image_area_changed(pw->layout_image, 0, 0, w, h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1753
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1754 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1755 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1756
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1757 static gint print_job_preview_page_done(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1758 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1759 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1760 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1761
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1762 static gint print_job_preview_page_image(PrintWindow *pw, GdkPixbuf *pixbuf,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1763 gdouble x, gdouble y, gdouble w, gdouble h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1764 gdouble offx, gdouble offy)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1765 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1766 gdouble sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1767 gdouble dw, dh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1768 gdouble rx, ry, rw, rh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1769
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1770 if (!pw->job_pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1771 if (!pixbuf) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1772
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1773 sw = (gdouble)gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1774 sh = (gdouble)gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1775
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1776 dw = (gdouble)gdk_pixbuf_get_width(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1777 dh = (gdouble)gdk_pixbuf_get_height(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1778
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1779 x = print_preview_unit(x);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1780 y = print_preview_unit(y);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1781 w = print_preview_unit(w);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1782 h = print_preview_unit(h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1783 offx = print_preview_unit(offx);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1784 offy = print_preview_unit(offy);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1785
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1786 if (clip_region(x, y, w, h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1787 0.0, 0.0, dw, dh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1788 &rx, &ry, &rw, &rh))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1789 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1790 gdk_pixbuf_composite(pixbuf, pw->job_pixbuf, rx, ry, rw, rh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1791 x + offx, y + offy,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1792 w / sw, h / sh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1793 (w / sw < 0.01 || h / sh < 0.01) ? GDK_INTERP_NEAREST : GDK_INTERP_BILINEAR, 255);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1794
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1795 image_area_changed(pw->layout_image, rx, ry, rw, rh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1796 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1797
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1798 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1799 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1800
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1801 static gint print_job_preview_page_text(PrintWindow *pw, const gchar *text, gdouble point_size,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1802 gdouble x, gdouble y, gdouble width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1803 guint8 r, guint8 g, guint8 b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1804 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1805 PangoLayout *layout;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1806 PangoFontDescription *desc;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1807 gint lw, lh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1808 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1809
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1810 if (!pw->job_pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1811
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1812 layout = gtk_widget_create_pango_layout(pw->dialog->dialog, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1813
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1814 desc = pango_font_description_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1815 pango_font_description_set_size(desc, convert_pango_dpi(point_size) * PANGO_SCALE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1816 pango_layout_set_font_description(layout, desc);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1817 pango_font_description_free(desc);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1818
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1819 pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1820 pango_layout_set_text(layout, text, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1821
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1822 pango_layout_get_pixel_size(layout, &lw, &lh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1823 x = x - (gdouble)lw / 2.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1824
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1825 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, lw, lh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1826 pixbuf_set_rect_fill(pixbuf, 0, 0, lw, lh, 0, 0, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1827 pixbuf_draw_layout(pixbuf, layout, pw->dialog->dialog, 0, 0, r, g, b, 255);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1828 g_object_unref(G_OBJECT(layout));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1829
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1830 print_job_preview_page_image(pw, pixbuf, x, y, (gdouble)lw, (gdouble)lh, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1831 g_object_unref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1832
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1833 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1834 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1835
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1836 static gint print_job_preview_init(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1837 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1838 if (pw->job_pixbuf) g_object_unref(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1839 pw->job_pixbuf = pw->layout_image->pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1840 g_object_ref(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1841
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1842 return print_job_preview_page_new(pw, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1843 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1844
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1845
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1846 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1847 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1848 * wrappers
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1849 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1850 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1851
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1852 static gint print_job_page_new(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1853 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1854 switch (pw->job_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1855 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1856 case RENDER_FORMAT_RGB:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1857 return print_job_rgb_page_new(pw, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1858 case RENDER_FORMAT_PS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1859 return print_job_ps_page_new(pw, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1860 case RENDER_FORMAT_PREVIEW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1861 return print_job_preview_page_new(pw, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1862 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1863
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1864 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1865 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1866
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1867 static gint print_job_page_done(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1868 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1869 switch (pw->job_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1870 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1871 case RENDER_FORMAT_RGB:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1872 return print_job_rgb_page_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1873 case RENDER_FORMAT_PS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1874 return print_job_ps_page_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1875 case RENDER_FORMAT_PREVIEW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1876 return print_job_preview_page_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1877 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1878
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1879 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1880 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1881
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1882 static gint print_job_page_image(PrintWindow *pw, GdkPixbuf *pixbuf,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1883 gdouble x, gdouble y, gdouble w, gdouble h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1884 gdouble offx, gdouble offy)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1885 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1886 gint success = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1887
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1888 if (w <= 0.0 || h <= 0.0) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1889
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1890 switch (pw->job_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1891 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1892 case RENDER_FORMAT_RGB:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1893 success = print_job_rgb_page_image(pw, pixbuf, x, y, w, h, offx, offy);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1894 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1895 case RENDER_FORMAT_PS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1896 success = print_job_ps_page_image(pw, pixbuf, x, y, w, h, offx, offy);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1897 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1898 case RENDER_FORMAT_PREVIEW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1899 success = print_job_preview_page_image(pw, pixbuf, x, y, w, h, offx, offy);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1900 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1901 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1902
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1903 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1904 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1905
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1906 static gint print_job_page_text(PrintWindow *pw, const gchar *text, gdouble point_size,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1907 gdouble x, gdouble y, gdouble width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1908 guint8 r, guint8 g, guint8 b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1909 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1910 gint success = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1911
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1912 if (!text) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1913
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1914 switch (pw->job_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1915 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1916 case RENDER_FORMAT_RGB:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1917 success = print_job_rgb_page_text(pw, text, point_size, x, y, width, r, g, b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1918 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1919 case RENDER_FORMAT_PS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1920 success = print_job_ps_page_text(pw, text, point_size, x, y, width, r, g, b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1921 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1922 case RENDER_FORMAT_PREVIEW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1923 success = print_job_preview_page_text(pw, text, point_size, x, y, width, r, g, b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1924 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1925 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1926
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1927 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1928 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1929
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1930 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1931 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1932 * print ?
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1933 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1934 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1935
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1936 static gint print_job_render_image(PrintWindow *pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1937 static gint print_job_render_proof(PrintWindow *pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1938
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1939
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1940 static void print_job_status(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1941 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1942 gdouble value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1943 gint page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1944 gint total;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1945 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1946
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1947 if (!pw->job_progress) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1948
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1949 page = pw->job_page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1950 total = print_layout_page_count(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1951
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1952 if (pw->layout == PRINT_LAYOUT_PROOF && pw->proof_point)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1953 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1954 GList *start;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1955
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1956 start = g_list_first(pw->proof_point);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1957 value = (gdouble)g_list_position(start, pw->proof_point) / g_list_length(start);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1958 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1959 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1960 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1961 value = (total > 0) ? (gdouble)page / total : 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1962 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1963
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1964 buf = g_strdup_printf(_("Page %d"), page + 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1965 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pw->job_progress), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1966 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1967
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1968 if (pw->job_path && pw->job_progress_label)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1969 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1970 gtk_label_set_text(GTK_LABEL(pw->job_progress_label), pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1971 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1972
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1973 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pw->job_progress), value);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1974 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1975
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1976 static void print_job_throw_error(PrintWindow *pw, const gchar *message)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1977 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1978 GenericDialog *gd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1979 GtkWidget *parent = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1980 GtkWidget *group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1981 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1982 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1983
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1984 if (GTK_WIDGET_VISIBLE(pw->dialog->dialog)) parent = pw->dialog->dialog;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1985
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1986 gd = generic_dialog_new(_("Printing error"), "GQview", "print_warning",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1987 parent, TRUE, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1988 generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, NULL, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1989
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1990 buf = g_strdup_printf(_("An error occured printing to %s."), print_output_name(pw->output));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1991 generic_dialog_add_message(gd, GTK_STOCK_DIALOG_ERROR, _("Printing error"), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1992 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1993
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1994 group = pref_group_new(gd->vbox, FALSE, _("Details"), GTK_ORIENTATION_VERTICAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1995 label = pref_label_new(group, message);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1996 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1997
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1998 gtk_widget_show(gd->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1999 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2000
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2001 static void print_job_done(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2002 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2003 print_job_close(pw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2004 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2005
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2006 static gint print_job_text_image(PrintWindow *pw, const gchar *path,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2007 gdouble x, gdouble y, gdouble width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2008 gint sw, gint sh, gint proof)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2009 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2010 GString *string;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2011 gint space = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2012 gint newline = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2013 gint ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2014
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2015 if (pw->text_fields == 0) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2016
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2017 string = g_string_new("");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2018 path = pw->job_loader->path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2019
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2020 if (pw->text_fields & TEXT_INFO_FILENAME)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2021 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2022 g_string_append(string, filename_from_path(path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2023 newline = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2024 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2025 if (pw->text_fields & TEXT_INFO_DIMENSIONS)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2026 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2027 if (newline) g_string_append(string, "\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2028 g_string_append_printf(string, "%d x %d", (gint)sw, (gint)sh);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2029 newline = proof;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2030 space = !proof;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2031 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2032 if (pw->text_fields & TEXT_INFO_FILEDATE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2033 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2034 if (newline) g_string_append(string, "\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2035 if (space) g_string_append(string, " - ");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2036 g_string_append(string, text_from_time(filetime(pw->job_loader->path)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2037 newline = proof;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2038 space = !proof;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2039 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2040 if (pw->text_fields & TEXT_INFO_FILESIZE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2041 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2042 gchar *size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2043
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2044 if (newline) g_string_append(string, "\n");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2045 if (space) g_string_append(string, " - ");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2046 size = text_from_size_abrev(filesize(pw->job_loader->path));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2047 g_string_append(string, size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2048 g_free(size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2049 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2050
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2051 ret = print_job_page_text(pw, string->str, pw->text_points, x, y, width,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2052 pw->text_r, pw->text_g, pw->text_b);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2053
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2054 g_string_free(string, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2055
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2056 return ret;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2057 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2058
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2059 static void print_job_render_image_loader_done(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2060 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2061 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2062 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2063 gint success = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2064
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2065 pixbuf = image_loader_get_pixbuf(il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2066 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2067 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2068 gdouble sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2069 gdouble dw, dh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2070 gdouble x, y, w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2071 gdouble scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2072 gdouble offx, offy;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2073
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2074 sw = (gdouble)gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2075 sh = (gdouble)gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2076
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2077 dw = pw->layout_width - pw->margin_left - pw->margin_right;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2078 dh = pw->layout_height - pw->margin_top - pw->margin_bottom;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2079
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2080 if (dw / sw < dh / sh)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2081 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2082 w = dw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2083 h = dw / sw * sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2084 scale = w / sw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2085 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2086 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2087 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2088 h = dh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2089 w = dh / sh *sw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2090 scale = h / sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2091 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2092
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2093 if (pw->image_scale >= 5)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2094 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2095 w = w * (gdouble)pw->image_scale / 100.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2096 h = h * (gdouble)pw->image_scale / 100.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2097 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2098
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2099 x = pw->margin_left + (dw / 2) - (w / 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2100 y = pw->margin_top + (dh / 2) - (h / 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2101
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2102 offx = offy = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2103
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2104 if (x < 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2105 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2106 w += x;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2107 offx = x;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2108 x = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2109 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2110 if (x + w >= pw->layout_width) w = pw->layout_width - x;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2111
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2112 if (y < 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2113 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2114 h += y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2115 offy = y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2116 y = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2117 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2118 if (y + h >= pw->layout_height) h = pw->layout_height - y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2119
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2120 success = (success &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2121 print_job_page_image(pw, pixbuf, x, y, w, h, offx, offy));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2122
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2123 x = x + w / 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2124 y = y + h + PRINT_TEXT_PADDING;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2125
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2126 success = (success &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2127 print_job_text_image(pw, pw->job_loader->path, x, y, dw, sw, sh, FALSE));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2128 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2129
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2130 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2131 pw->job_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2132
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2133 if (pw->job_format == RENDER_FORMAT_PREVIEW)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2134 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2135 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2136 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2137 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2138
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2139 success = (success && print_job_page_done(pw));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2140 if (!success)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2141 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2142 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2143 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2144 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2145
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2146 pw->job_page++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2147 print_job_status(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2148
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2149 if (print_job_render_image(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2150 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2151 if (!print_job_page_new(pw)) print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2152 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2153 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2154 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2155 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2156 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2157 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2158
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2159 static gint print_job_render_image(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2160 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2161 gchar *path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2162
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2163 switch (pw->source)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2164 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2165 case PRINT_SOURCE_SELECTION:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2166 path = g_list_nth_data(pw->source_selection, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2167 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2168 case PRINT_SOURCE_ALL:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2169 path = g_list_nth_data(pw->source_list, pw->job_page);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2170 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2171 case PRINT_SOURCE_IMAGE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2172 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2173 if (pw->job_page == 0) path = pw->source_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2174 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2175 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2176
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2177 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2178 pw->job_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2179
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2180 if (!path) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2181
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2182 pw->job_loader = image_loader_new(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2183 if (!image_loader_start(pw->job_loader, print_job_render_image_loader_done, pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2184 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2185 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2186 pw->job_loader= NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2187 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2188
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2189 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2190 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2191
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2192 static void print_job_render_proof_loader_done(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2193 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2194 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2195 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2196 gdouble x, y;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2197 gdouble w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2198 gdouble proof_w, proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2199 gdouble icon_w, icon_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2200 gdouble scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2201 gint success = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2202
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2203 if (pw->proof_columns < 1 || pw->proof_rows < 1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2204 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2205 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2206 pw->job_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2207
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2208 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2209
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2210 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2211 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2212
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2213 pixbuf = image_loader_get_pixbuf(il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2214
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2215 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2216 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2217
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2218 if (pw->proof_width / w < pw->proof_height / h)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2219 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2220 icon_w = pw->proof_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2221 icon_h = pw->proof_width / w * h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2222 scale = icon_w / w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2223 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2224 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2225 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2226 icon_h = pw->proof_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2227 icon_w = pw->proof_height / h * w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2228 scale = icon_h / h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2229 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2230
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2231 y = pw->proof_position / pw->proof_columns;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2232 x = pw->proof_position - (y * pw->proof_columns);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2233
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2234 print_proof_size(pw, &proof_w, &proof_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2235
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2236 x *= proof_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2237 y *= proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2238 x += pw->margin_left + (pw->layout_width - pw->margin_left - pw->margin_right - (pw->proof_columns * proof_w)) / 2 + (proof_w - icon_w) / 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2239 y += pw->margin_top + PRINT_PROOF_MARGIN + (pw->proof_height - icon_h) / 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2240
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2241 success = (success &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2242 print_job_page_image(pw, pixbuf, x, y, icon_w, icon_h, 0, 0));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2243
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2244 x = x + icon_w / 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2245 y = y + icon_h + (pw->proof_height - icon_h) / 2 + PRINT_TEXT_PADDING;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2246
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2247 success = (success &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2248 print_job_text_image(pw, pw->job_loader->path, x, y, icon_w + PRINT_PROOF_MARGIN * 2, w, h, TRUE));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2249
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2250 if (!success)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2251 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2252 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2253 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2254 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2255
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2256 if (pw->proof_point) pw->proof_point = pw->proof_point->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2257
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2258 pw->proof_position++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2259 if (pw->proof_position >= pw->proof_columns * pw->proof_rows)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2260 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2261 if (pw->job_format == RENDER_FORMAT_PREVIEW)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2262 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2263 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2264 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2265 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2267 if (!print_job_page_done(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2268 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2269 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2270 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2271 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2272
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2273 pw->proof_position = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2274 pw->job_page++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2275 if (print_job_render_proof(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2276 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2277 if (!print_job_page_new(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2278 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2279 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2280 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2281 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2282 print_job_status(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2283 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2284 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2285 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2286 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2287 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2288 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2289 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2290 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2291 if (print_job_render_proof(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2292 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2293 print_job_status(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2294 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2295 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2296 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2297 if (print_job_page_done(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2298 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2299 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2300 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2301 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2302 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2303 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2304 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2305 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2306 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2307 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2308
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2309 static gint print_job_render_proof(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2310 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2311 gchar *path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2312
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2313 if (pw->proof_columns < 1 || pw->proof_rows < 1) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2314
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2315 if (!pw->proof_point && pw->proof_position == 0 && pw->source == PRINT_SOURCE_IMAGE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2316 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2317 path = pw->source_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2318 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2319 else if (pw->proof_point &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2320 pw->proof_position < pw->proof_columns * pw->proof_rows)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2321 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2322 path = pw->proof_point->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2323 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2324
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2325 if (!path) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2326
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2327 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2328 pw->job_loader = image_loader_new(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2329 if (!image_loader_start(pw->job_loader, print_job_render_proof_loader_done, pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2330 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2331 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2332 pw->job_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2333 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2335 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2336 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2337
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2338 static void print_job_render(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2339 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2340 gdouble proof_w, proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2341 gint finished;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2342
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2343 pw->proof_position = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2344
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2345 switch (pw->source)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2346 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2347 case PRINT_SOURCE_SELECTION:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2348 pw->proof_point = pw->source_selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2349 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2350 case PRINT_SOURCE_ALL:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2351 pw->proof_point = pw->source_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2352 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2353 case PRINT_SOURCE_IMAGE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2354 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2355 pw->proof_point = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2356 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2357 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2358
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2359 print_proof_size(pw, &proof_w, &proof_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2360 pw->proof_columns = (pw->layout_width - pw->margin_left - pw->margin_right) / proof_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2361 pw->proof_rows = (pw->layout_height - pw->margin_top - pw->margin_bottom) / proof_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2362
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2363 if (pw->job_format == RENDER_FORMAT_PREVIEW)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2364 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2365 gint total;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2366
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2367 total = print_layout_page_count(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2368 if (pw->job_page < 0 || pw->job_page >= total)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2369 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2370 print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2371 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2372 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2373
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2374 if (pw->proof_point && pw->job_page > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2375 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2376 pw->proof_point = g_list_nth(pw->proof_point, pw->job_page * pw->proof_columns * pw->proof_rows);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2377 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2378 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2379
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2380 if (!print_job_page_new(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2381 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2382 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2383 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2384 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2385
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2386 if (pw->layout == PRINT_LAYOUT_IMAGE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2387 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2388 finished = !print_job_render_image(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2389 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2390 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2391 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2392 finished = !print_job_render_proof(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2393 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2394
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2395 if (finished) print_job_done(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2396 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2397
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2398 static gint print_job_init(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2399 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2400 gint success = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2401
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2402 pw->job_page = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2403
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2404 switch (pw->job_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2405 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2406 case RENDER_FORMAT_RGB:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2407 success = print_job_rgb_init(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2408 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2409 case RENDER_FORMAT_PS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2410 success = print_job_ps_init(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2411 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2412 case RENDER_FORMAT_PREVIEW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2413 pw->job_page = pw->proof_page;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2414 success = print_job_preview_init(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2415 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2416 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2417
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2418 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2419 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2420
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2421 static gint print_job_finish(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2422 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2423 gint success = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2424
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2425 switch (pw->job_format)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2426 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2427 case RENDER_FORMAT_RGB:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2428 success = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2429 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2430 case RENDER_FORMAT_PS:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2431 print_job_ps_end(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2432 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2433 case RENDER_FORMAT_PREVIEW:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2434 success = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2435 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2436 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2437
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2438 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2439 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2440
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2441 static void print_job_close_file(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2442 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2443 if (pw->job_file)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2444 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2445 fclose(pw->job_file);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2446 pw->job_file = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2447 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2448
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2449 if (pw->job_pipe)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2450 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2451 PipeError *pe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2452
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2453 pe = pipe_handler_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2454 pclose(pw->job_pipe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2455 pipe_handler_free(pe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2456
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2457 pw->job_pipe = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2458 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2459 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2460
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2461 static gboolean print_job_close_finish_cb(gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2462 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2463 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2464
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2465 print_window_close(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2466 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2467 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2468
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2469 static void print_job_close(PrintWindow *pw, gint error)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2470 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2471 if (!error) print_job_finish(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2472
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2473 print_job_close_file(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2474 g_free(pw->job_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2475 pw->job_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2476
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2477 if (pw->job_dialog)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2478 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2479 generic_dialog_close(pw->job_dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2480 pw->job_dialog = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2481 pw->job_progress = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2482 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2483
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2484 image_loader_free(pw->job_loader);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2485 pw->job_loader = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2486
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2487 if (pw->job_pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2488 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2489 g_object_unref(pw->job_pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2490 pw->job_pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2491 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2492
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2493 if (pw->dialog && !GTK_WIDGET_VISIBLE(pw->dialog->dialog))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2494 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2495 g_idle_add_full(G_PRIORITY_HIGH_IDLE, print_job_close_finish_cb, pw, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2496 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2497 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2498
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2499 static void print_job_cancel_cb(GenericDialog *gd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2500 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2501 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2502
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2503 print_job_close(pw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2504 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2505
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2506 static void print_pref_store(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2507 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2508
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2509 pref_list_int_set(PRINT_PREF_GROUP, PRINT_PREF_SAVE, pw->save_settings);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2510
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2511 if (!pw->save_settings) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2512
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2513 /* only store values that are actually used in this print job, hence the if()s */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2514
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2515 pref_list_int_set(PRINT_PREF_GROUP, PRINT_PREF_OUTPUT, pw->output);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2516
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2517 if (pw->output == PRINT_OUTPUT_RGB_FILE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2518 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2519 pref_list_int_set(PRINT_PREF_GROUP, PRINT_PREF_FORMAT, pw->output_format);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2520 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2521
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2522 if (pw->job_format == RENDER_FORMAT_PS)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2523 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2524 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_DPI, pw->max_dpi);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2525 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2526
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2527 pref_list_int_set(PRINT_PREF_GROUP, PRINT_PREF_UNITS, pw->paper_units);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2528 pref_list_int_set(PRINT_PREF_GROUP, PRINT_PREF_SIZE, pw->paper_size);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2529 pref_list_int_set(PRINT_PREF_GROUP, PRINT_PREF_ORIENTATION, pw->paper_orientation);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2530
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2531 if (pw->paper_size == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2532 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2533 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_CUSTOM_WIDTH, pw->paper_width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2534 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_CUSTOM_HEIGHT, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2535 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2536
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2537 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_MARGIN_LEFT, pw->margin_left);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2538 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_MARGIN_RIGHT, pw->margin_right);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2539 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_MARGIN_TOP, pw->margin_top);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2540 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_MARGIN_BOTTOM, pw->margin_bottom);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2541
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2542 if (pw->layout == PRINT_LAYOUT_PROOF)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2543 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2544 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_PROOF_WIDTH, pw->proof_width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2545 pref_list_double_set(PRINT_PREF_GROUP, PRINT_PREF_PROOF_HEIGHT, pw->proof_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2546 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2547
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2548 if (pw->output == PRINT_OUTPUT_PS_CUSTOM)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2549 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2550 pref_list_string_set(PRINT_PREF_GROUP, PRINT_PREF_PRINTERC, pw->output_custom);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2551 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2552
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2553 if (pw->output == PRINT_OUTPUT_RGB_FILE ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2554 pw->output == PRINT_OUTPUT_PS_FILE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2555 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2556 tab_completion_append_to_history(pw->path_entry, pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2557 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2558 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2559
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2560 static gint print_job_start(PrintWindow *pw, RenderFormat format, PrintOutput output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2561 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2562 GtkWidget *hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2563 GtkWidget *spinner;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2564 gchar *msg;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2565
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2566 if (pw->job_dialog) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2567
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2568 pw->job_format = format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2569 pw->job_output = output;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2570
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2571 if (!print_job_init(pw))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2572 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2573 print_job_close(pw, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2574 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2575 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2576
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2577 if (format == RENDER_FORMAT_PREVIEW)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2578 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2579 print_job_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2580 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2581 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2582
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2583 print_pref_store(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2584
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2585 gtk_widget_hide(pw->dialog->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2586
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2587 pw->job_dialog = file_util_gen_dlg(_("Print - GQview"), "gqview", "print_job_dialog",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2588 (GtkWidget *)gtk_window_get_transient_for(GTK_WINDOW(pw->dialog->dialog)), FALSE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2589 print_job_cancel_cb, pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2590
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2591 msg = g_strdup_printf(_("Printing %d pages to %s."), print_layout_page_count(pw), print_output_name(pw->output));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2592 generic_dialog_add_message(pw->job_dialog, NULL, msg, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2593 g_free(msg);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2594
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2595 if (pw->job_output == PRINT_OUTPUT_PS_FILE ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2596 pw->job_output == PRINT_OUTPUT_RGB_FILE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2597 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2598 hbox = pref_box_new(pw->job_dialog->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2599 pref_label_new(hbox, _("Filename:"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2601 pw->job_progress_label = pref_label_new(hbox, "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2602 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2603 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2604 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2605 pw->job_progress_label = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2606 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2607
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2608 pref_spacer(pw->job_dialog->vbox, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2609
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2610 hbox = pref_box_new(pw->job_dialog->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2611
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2612 pw->job_progress = gtk_progress_bar_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2613 gtk_box_pack_start(GTK_BOX(hbox), pw->job_progress, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2614 gtk_widget_show(pw->job_progress);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2615
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2616 spinner = spinner_new(NULL, SPINNER_SPEED);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2617 gtk_box_pack_start(GTK_BOX(hbox), spinner, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2618 gtk_widget_show(spinner);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2619
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2620 gtk_widget_show(pw->job_dialog->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2621
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2622 print_job_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2623 print_job_status(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2624
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2625 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2626 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2627
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2628 static void print_window_print_start(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2629 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2630 RenderFormat format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2631
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2632 switch(pw->output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2633 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2634 case PRINT_OUTPUT_RGB_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2635 format = RENDER_FORMAT_RGB;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2636 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2637 case PRINT_OUTPUT_PS_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2638 case PRINT_OUTPUT_PS_CUSTOM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2639 case PRINT_OUTPUT_PS_LPR:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2640 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2641 format = RENDER_FORMAT_PS;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2642 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2643 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2644
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2645 print_job_start(pw, format, pw->output);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2646 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2647
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2648
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2649 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2650 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2651 * combo box util
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2652 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2653 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2654
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2655 static GtkWidget *print_combo_menu(const gchar *text[], gint count, gint preferred,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2656 GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2657 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2658 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2659 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2660
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2661 combo = gtk_combo_box_new_text();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2662
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2663 for (i = 0 ; i < count; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2664 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2665 gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _(text[i]));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2666 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2667
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2668 if (preferred >= 0 && preferred < count)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2669 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2670 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), preferred);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2671 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2672
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2673 if (func) g_signal_connect(G_OBJECT(combo), "changed", func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2674
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2675 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2676 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2677
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2678
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2679 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2680 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2681 * paper selection
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2682 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2683 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2684
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2685 static GtkWidget *print_paper_menu(GtkWidget *table, gint column, gint row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2686 gint preferred, GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2687 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2688 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2689 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2690
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2691 pref_table_label(table, column, row, (_("Format:")), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2692
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2693 combo = gtk_combo_box_new_text();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2694
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2695 i = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2696 while (print_paper_sizes[i].description)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2697 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2698 gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _(print_paper_sizes[i].description));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2699 i++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2700 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2701
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2702 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), preferred);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2703 if (func) g_signal_connect(G_OBJECT(combo), "changed", func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2704
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2705 gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2706 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2707 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2708
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2709 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2710 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2711
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2712 static void print_paper_select_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2713 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2714 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2715 PaperSize *ps;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2716 gint n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2717
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2718 n = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2719 ps = print_paper_size_nth(n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2720
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2721 if (!ps) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2722
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2723 pw->paper_size = n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2724
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2725 if (pw->paper_size == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2726 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2727 print_window_layout_sync_paper(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2728 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2729 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2730
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2731 if (ps->orientation == PAPER_ORIENTATION_PORTRAIT)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2732 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2733 print_window_layout_set_size(pw, ps->width, ps->height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2734 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2735 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2736 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2737 print_window_layout_set_size(pw, ps->height, ps->width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2738 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2739 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2740
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2741 static void print_paper_size_cb(GtkWidget *spin, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2742 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2743 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2744 gdouble value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2745
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2746 value = print_paper_size_convert_units(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin)),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2747 pw->paper_units, PAPER_UNIT_POINTS);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2748
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2749 if (spin == pw->paper_width_spin)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2750 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2751 pw->paper_width = value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2752 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2753 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2754 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2755 pw->paper_height = value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2756 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2757
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2758 print_window_layout_set_size(pw, pw->paper_width, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2759 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2760
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2761 static GtkWidget *print_paper_units_menu(GtkWidget *table, gint column, gint row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2762 PaperUnits units, GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2763 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2764 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2765
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2766 pref_table_label(table, column, row, (_("Units:")), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2767
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2768 combo = print_combo_menu(print_paper_units, PAPER_UNIT_COUNT, units, func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2769
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2770 gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2771 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2772 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2773
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2774 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2775 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2776
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2777 static void print_paper_units_set(PrintWindow *pw, PaperUnits units)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2778 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2779 PaperUnits old_units;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2780
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2781 if (units < 0 || units >= PAPER_UNIT_COUNT) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2782
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2783 old_units = pw->paper_units;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2784 pw->paper_units = units;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2785 print_window_layout_sync_paper(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2786
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2787 if ((units == PAPER_UNIT_MM || units == PAPER_UNIT_CM) !=
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2788 (old_units == PAPER_UNIT_MM || old_units == PAPER_UNIT_CM))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2789 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2790 print_window_layout_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2791 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2792 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2793
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2794 static void print_paper_units_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2795 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2796 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2797 PaperUnits units;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2798
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2799 units = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2800
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2801 print_paper_units_set(pw, units);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2802 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2803
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2804 static GtkWidget *print_paper_orientation_menu(GtkWidget *table, gint column, gint row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2805 PaperOrientation preferred,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2806 GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2807 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2808 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2809
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2810 pref_table_label(table, column, row, (_("Orientation:")), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2811
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2812 combo = print_combo_menu(print_paper_orientation, PAPER_ORIENTATION_COUNT, preferred, func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2813
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2814 gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2815 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2816 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2817
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2818 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2819 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2820
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2821 static void print_paper_orientation_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2822 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2823 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2824 PaperOrientation o;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2825
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2826 o = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2827
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2828 print_window_layout_set_orientation(pw, o);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2829 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2830
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2831 static void print_paper_margin_cb(GtkWidget *spin, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2832 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2833 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2834 gdouble value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2835
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2836 value = print_paper_size_convert_units(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin)),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2837 pw->paper_units, PAPER_UNIT_POINTS);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2838
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2839 if (spin == pw->margin_left_spin)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2840 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2841 pw->margin_left = CLAMP(value, 0.0, pw->paper_width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2842 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2843 else if (spin == pw->margin_right_spin)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2844 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2845 pw->margin_right = CLAMP(value, 0.0, pw->paper_width);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2846 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2847 else if (spin == pw->margin_top_spin)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2848 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2849 pw->margin_top = CLAMP(value, 0.0, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2850 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2851 else if (spin == pw->margin_bottom_spin)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2852 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2853 pw->margin_bottom = CLAMP(value, 0.0, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2854 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2855
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2856 print_window_layout_set_size(pw, pw->paper_width, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2857 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2858
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2859 static GtkWidget *print_misc_menu(GtkWidget *parent_box, gint preferred,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2860 const gchar *title, const gchar *key,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2861 gint count, const gchar **text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2862 GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2863 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2864 GtkWidget *box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2865 GtkWidget *button = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2866 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2867
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2868 box = pref_group_new(parent_box, FALSE, title, GTK_ORIENTATION_VERTICAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2869
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2870 for (i = 0; i < count; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2871 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2872 button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), _(text[i]));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2873 if (i == preferred)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2874 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2875 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2876 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2877 g_object_set_data(G_OBJECT(button), key, GINT_TO_POINTER(i));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2878 if (func) g_signal_connect(G_OBJECT(button), "clicked", func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2879 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2880 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2881 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2882
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2883 return box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2884 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2885
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2886 static void print_source_select_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2887 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2888 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2889
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2890 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2891
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2892 pw->source = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "print_source"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2893 print_window_layout_size(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2894 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2895
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2896 static void print_layout_select_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2897 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2898 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2899
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2900 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2901
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2902 pw->layout = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "print_layout"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2903
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2904 print_window_layout_sync_layout(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2905 print_window_layout_size(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2906 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2907
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2908 static void print_image_scale_cb(GtkWidget *spin, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2909 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2910 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2911
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2912 pw->image_scale = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2913
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2914 print_window_layout_set_size(pw, pw->paper_width, pw->paper_height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2915 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2916
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2917 static void print_proof_size_cb(GtkWidget *spin, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2918 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2919 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2920 gdouble value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2921
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2922 value = print_paper_size_convert_units(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin)),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2923 pw->paper_units, PAPER_UNIT_POINTS);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2924
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2925 if (spin == pw->proof_width_spin)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2926 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2927 pw->proof_width = value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2928 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2929 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2930 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2931 pw->proof_height = value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2932 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2933
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2934 print_window_layout_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2935 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2936
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2937 static GtkWidget *print_output_menu(GtkWidget *table, gint column, gint row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2938 PrintOutput preferred, GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2939 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2940 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2941
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2942 pref_table_label(table, column, row, (_("Destination:")), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2943
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2944 combo = print_combo_menu(print_output_text, PRINT_OUTPUT_COUNT, preferred, func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2945
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2946 gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2947 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2948 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2949
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2950 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2951 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2952
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2953 static void print_custom_entry_set(PrintWindow *pw, GtkWidget *combo)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2954 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2955 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2956 const gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2957 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2958 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2959
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2960 store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2961 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2962
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2963 list = print_window_list_printers();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2964 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2965 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2966 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2967 gchar *name;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2968 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2969
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2970 name = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2971 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2972
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2973 buf = g_strdup_printf(PRINT_LPR_CUSTOM, name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2974 gtk_combo_box_append_text(GTK_COMBO_BOX(combo), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2975 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2976 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2977 path_list_free(list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2978
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2979 if (pref_list_string_get(PRINT_PREF_GROUP, PRINT_PREF_PRINTERC, &text))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2980 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2981 gtk_entry_set_text(GTK_ENTRY(pw->custom_entry), text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2982 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2983 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2984 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2985 text = gtk_entry_get_text(GTK_ENTRY(pw->custom_entry));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2986 if (!text || strlen(text) == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2987 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2988 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2989
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2990 buf = g_strdup_printf(PRINT_LPR_CUSTOM, _("<printer name>"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2991 gtk_entry_set_text(GTK_ENTRY(pw->custom_entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2992 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2993 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2994 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2995 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2996
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2997 static void print_output_set(PrintWindow *pw, PrintOutput output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2998 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2999 gint use_file = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3000 gint use_custom = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3001 gint use_format = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3002
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3003 pw->output = output;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3004
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3005 switch (pw->output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3006 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3007 case PRINT_OUTPUT_RGB_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3008 use_file = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3009 use_format = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3010 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3011 case PRINT_OUTPUT_PS_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3012 use_file = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3013 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3014 case PRINT_OUTPUT_PS_CUSTOM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3015 use_custom = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3016 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3017 case PRINT_OUTPUT_PS_LPR:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3018 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3019 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3020 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3021
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3022 gtk_widget_set_sensitive(gtk_widget_get_parent(pw->path_entry), use_file);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3023 gtk_widget_set_sensitive(gtk_widget_get_parent(pw->custom_entry), use_custom);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3024 gtk_widget_set_sensitive(pw->path_format_menu, use_format);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3025 gtk_widget_set_sensitive(pw->max_dpi_menu, !use_format);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3026 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3027
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3028 static void print_output_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3029 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3030 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3031 PrintOutput output;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3032
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3033 output = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3034
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3035 print_output_set(pw, output);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3036 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3037
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3038 static GtkWidget *print_output_format_menu(GtkWidget * table, gint column, gint row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3039 PrintFileFormat preferred, GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3040 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3041 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3042
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3043 combo = print_combo_menu(print_file_format_text, PRINT_FILE_COUNT, preferred, func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3044
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3045 gtk_table_attach(GTK_TABLE(table), combo, column, column + 1, row, row + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3046 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3047 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3048
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3049 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3050 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3051
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3052 static void print_output_format_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3053 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3054 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3055
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3056 pw->output_format = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3057 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3058
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3059 static GtkWidget *print_output_dpi_menu(GtkWidget * table, gint column, gint row,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3060 gdouble dpi, GCallback func, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3061 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3062 static gint dpilist[] = { 150, 300, 600, 1200, 0, -1};
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3063 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3064 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3065 GtkCellRenderer *renderer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3066 gint current = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3067 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3068
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3069 store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3070
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3071 i = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3072 while (dpilist[i] != -1)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3073 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3074 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3075 gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3076
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3077 if (dpilist[i] == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3078 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3079 text = g_strdup(_("Unlimited"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3080 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3081 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3082 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3083 text = g_strdup_printf("%d", dpilist[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3084 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3085
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3086 gtk_list_store_append(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3087 gtk_list_store_set(store, &iter, 0, text, 1, dpilist[i], -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3088 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3089
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3090 if (dpi == (gdouble)dpilist[i]) current = i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3091
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3092 i++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3093 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3094
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3095 combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3096 g_object_unref(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3097
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3098 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), current);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3099 if (func) g_signal_connect(G_OBJECT(combo), "changed", func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3101 renderer = gtk_cell_renderer_text_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3102 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3103 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "text", 0, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3104
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3105 gtk_table_attach(GTK_TABLE(table), combo, column, column + 1, row, row + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3106 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3107 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3108
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3109 return combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3110 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3111
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3112 static void print_output_dpi_cb(GtkWidget *combo, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3113 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3114 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3115 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3116 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3117 gint n = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3118
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3119 store = gtk_combo_box_get_model(GTK_COMBO_BOX(combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3120 if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3121 gtk_tree_model_get(store, &iter, 1, &n, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3122
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3123 pw->max_dpi = (gdouble)n;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3124 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3125
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3126 static void print_text_field_set(PrintWindow *pw, TextInfo field, gint active)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3127 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3128 if (active)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3129 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3130 pw->text_fields |= field;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3131 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3132 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3133 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3134 pw->text_fields &= ~field;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3135 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3136
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3137 print_window_layout_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3138 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3139
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3140 static void print_text_cb_name(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3141 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3142 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3143 gint active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3145 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3146 print_text_field_set(pw, TEXT_INFO_FILENAME, active);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3147 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3148
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3149 static void print_text_cb_date(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3150 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3151 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3152 gint active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3153
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3154 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3155 print_text_field_set(pw, TEXT_INFO_FILEDATE, active);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3156 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3157
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3158 static void print_text_cb_size(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3159 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3160 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3161 gint active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3162
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3163 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3164 print_text_field_set(pw, TEXT_INFO_FILESIZE, active);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3165 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3166
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3167 static void print_text_cb_dims(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3168 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3169 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3170 gint active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3171
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3172 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3173 print_text_field_set(pw, TEXT_INFO_DIMENSIONS, active);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3174 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3175
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3176 static void print_text_cb_points(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3177 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3178 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3179
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3180 pw->text_points = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3181 print_window_layout_render(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3182 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3183
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3184 static void print_text_menu(GtkWidget *box, PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3185 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3186 GtkWidget *group;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3187
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3188 group = pref_group_new(box, FALSE, _("Show"), GTK_ORIENTATION_VERTICAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3189
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3190 pref_checkbox_new(group, _("Name"), (pw->text_fields & TEXT_INFO_FILENAME),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3191 G_CALLBACK(print_text_cb_name), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3192 pref_checkbox_new(group, _("Date"), (pw->text_fields & TEXT_INFO_FILEDATE),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3193 G_CALLBACK(print_text_cb_date), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3194 pref_checkbox_new(group, _("Size"), (pw->text_fields & TEXT_INFO_FILESIZE),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3195 G_CALLBACK(print_text_cb_size), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3196 pref_checkbox_new(group, _("Dimensions"), (pw->text_fields & TEXT_INFO_DIMENSIONS),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3197 G_CALLBACK(print_text_cb_dims), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3198
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3199 group = pref_group_new(box, FALSE, _("Font"), GTK_ORIENTATION_VERTICAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3200
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3201 pref_spin_new(group, _("Size:"), _("points"),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3202 8.0, 100.0, 1.0, 0, pw->text_points,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3203 G_CALLBACK(print_text_cb_points), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3204
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3205 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3206 button = color_selection_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3207 gtk_box_pack_start(GTK_BOX(group), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3208 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3209 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3210 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3211
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3212 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3213 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3214 * print window
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3215 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3216 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3217
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3218 static void print_window_close(PrintWindow *pw)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3219 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3220 print_window_layout_render_stop(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3221
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3222 generic_dialog_close(pw->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3223 pw->dialog = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3224
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3225 print_job_close(pw, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3226
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3227 g_free(pw->source_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3228 path_list_free(pw->source_selection);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3229 path_list_free(pw->source_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3230
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3231 g_free(pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3232 g_free(pw->output_custom);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3233
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3234 g_free(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3235 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3236
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3237 static void print_window_print_cb(GenericDialog *gd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3238 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3239 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3240
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3241 switch (pw->output)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3242 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3243 case PRINT_OUTPUT_RGB_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3244 case PRINT_OUTPUT_PS_FILE:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3245 g_free(pw->output_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3246 pw->output_path = g_strdup(gtk_entry_get_text(GTK_ENTRY(pw->path_entry)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3247 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3248 case PRINT_OUTPUT_PS_CUSTOM:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3249 g_free(pw->output_custom);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3250 pw->output_custom = g_strdup(gtk_entry_get_text(GTK_ENTRY(pw->custom_entry)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3251 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3252 case PRINT_OUTPUT_PS_LPR:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3253 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3254 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3255 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3256
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3257 print_window_print_start(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3258 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3259
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3260 static void print_window_cancel_cb(GenericDialog *gd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3261 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3262 PrintWindow *pw = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3263
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3264 print_window_close(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3265 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3267 static gint print_pref_int(const gchar *key, gint fallback)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3268 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3269 gint value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3270
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3271 if (pref_list_int_get(PRINT_PREF_GROUP, key, &value)) return value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3272 return fallback;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3273 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3274
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3275 static gdouble print_pref_double(const gchar *key, gdouble fallback)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3276 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3277 gdouble value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3278
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3279 if (pref_list_double_get(PRINT_PREF_GROUP, key, &value)) return value;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3280 return fallback;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3281 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3282
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3283 void print_window_new(const gchar *path, GList *selection, GList *list, GtkWidget *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3284 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3285 PrintWindow *pw;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3286 GdkGeometry geometry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3287 GtkWidget *main_box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3288 GtkWidget *vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3289 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3290 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3291 GtkWidget *box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3292 GtkWidget *table;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3293
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3294 pw = g_new0(PrintWindow, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3295
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3296 pw->source_path = g_strdup(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3297 pw->source_selection = selection;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3298 pw->source_list = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3299
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3300 pw->source = PRINT_SOURCE_SELECTION;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3301 pw->layout = PRINT_LAYOUT_IMAGE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3302
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3303 pw->output = print_pref_int(PRINT_PREF_OUTPUT, PRINT_OUTPUT_PS_LPR);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3304 pw->output_format = print_pref_int(PRINT_PREF_FORMAT, PRINT_FILE_JPG_NORMAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3305
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3306 pw->max_dpi = print_pref_double(PRINT_PREF_DPI, PRINT_PS_DPI_DEFAULT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3307
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3308 pw->paper_units = print_pref_int(PRINT_PREF_UNITS, paper_unit_default());
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3309 pw->paper_size = print_pref_int(PRINT_PREF_SIZE, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3310 if (pw->paper_size == 0 ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3311 !print_paper_size_lookup(pw->paper_size, &pw->paper_width, &pw->paper_height))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3312 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3313 pw->paper_width = print_pref_double(PRINT_PREF_CUSTOM_WIDTH, 360.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3314 pw->paper_height = print_pref_double(PRINT_PREF_CUSTOM_HEIGHT, 720.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3315 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3316 pw->paper_orientation = print_pref_int(PRINT_PREF_ORIENTATION, PAPER_ORIENTATION_PORTRAIT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3317
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3318 pw->margin_left = print_pref_double(PRINT_PREF_MARGIN_LEFT, PRINT_MARGIN_DEFAULT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3319 pw->margin_right = print_pref_double(PRINT_PREF_MARGIN_RIGHT, PRINT_MARGIN_DEFAULT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3320 pw->margin_top = print_pref_double(PRINT_PREF_MARGIN_TOP, PRINT_MARGIN_DEFAULT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3321 pw->margin_bottom = print_pref_double(PRINT_PREF_MARGIN_BOTTOM, PRINT_MARGIN_DEFAULT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3322
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3323 pw->proof_width = print_pref_double(PRINT_PREF_PROOF_WIDTH, PRINT_PROOF_DEFAULT_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3324 pw->proof_height = print_pref_double(PRINT_PREF_PROOF_HEIGHT, PRINT_PROOF_DEFAULT_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3325
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3326 pw->text_fields = TEXT_INFO_FILENAME;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3327 pw->text_points = 10;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3328 pw->text_r = pw->text_g = pw->text_b = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3329
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3330 pw->save_settings = print_pref_int(PRINT_PREF_SAVE, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3331
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3332 pw->dialog = file_util_gen_dlg(_("Print - GQview"), "gqview", "print_dialog",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3333 parent, FALSE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3334 print_window_cancel_cb, pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3335
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3336 geometry.min_width = 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3337 geometry.min_height = 32;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3338 geometry.base_width = PRINT_DLG_WIDTH;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3339 geometry.base_height = PRINT_DLG_HEIGHT;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3340 gtk_window_set_geometry_hints(GTK_WINDOW(pw->dialog->dialog), NULL, &geometry,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3341 GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3342
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3343 pw->print_button = generic_dialog_add_button(pw->dialog, GTK_STOCK_PRINT, NULL, print_window_print_cb, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3344
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3345 main_box = pref_box_new(pw->dialog->vbox, TRUE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3346
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3347 pw->notebook = gtk_notebook_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3348 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(pw->notebook), GTK_POS_TOP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3349 gtk_box_pack_start(GTK_BOX(main_box), pw->notebook, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3350
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3351 /* layout tab */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3352
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3353 vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3354 gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3355 gtk_widget_show(vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3356 label = gtk_label_new(_("Layout"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3357 gtk_notebook_append_page(GTK_NOTEBOOK(pw->notebook), vbox, label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3358
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3359 print_misc_menu(vbox, pw->source, _("Source"), "print_source",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3360 PRINT_SOURCE_COUNT, print_source_text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3361 G_CALLBACK(print_source_select_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3362
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3363 box = print_misc_menu(vbox, pw->layout, _("Layout"), "print_layout",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3364 PRINT_LAYOUT_COUNT, print_layout_text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3365 G_CALLBACK(print_layout_select_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3366
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3367 pref_spacer(box, PREF_PAD_GROUP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3368
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3369 table = pref_table_new(box, 2, 2, FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3370
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3371 pw->image_scale_spin = pref_table_spin(table, 0, 0, _("Image size:"), "%",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3372 5.0, 100.0, 1.0, 0, 100.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3373 G_CALLBACK(print_image_scale_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3374
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3375 label = pref_table_label(table, 0, 1, _("Proof size:"), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3376 pw->proof_group = pref_table_box(table, 1, 1, GTK_ORIENTATION_HORIZONTAL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3377 pref_link_sensitivity(label, pw->proof_group);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3378
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3379 pw->proof_width_spin = pref_spin_new(pw->proof_group, NULL, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3380 0.0, 50.0, 0.1, 3, 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3381 G_CALLBACK(print_proof_size_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3382 pw->proof_height_spin = pref_spin_new(pw->proof_group, "x", NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3383 0.0, 50.0, 0.1, 3, 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3384 G_CALLBACK(print_proof_size_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3385
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3386 /* text tab */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3387
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3388 vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3389 gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3390 gtk_widget_show(vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3391 label = gtk_label_new(_("Text"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3392 gtk_notebook_append_page(GTK_NOTEBOOK(pw->notebook), vbox, label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3393
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3394 print_text_menu(vbox, pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3395
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3396 /* paper tab */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3397
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3398 vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3399 gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3400 gtk_widget_show(vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3401 label = gtk_label_new(_("Paper"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3402 gtk_notebook_append_page(GTK_NOTEBOOK(pw->notebook), vbox, label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3403
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3404 table = pref_table_new(vbox, 2, 4, FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3405
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3406 print_paper_menu(table, 0, 0, pw->paper_size, G_CALLBACK(print_paper_select_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3407
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3408 label = pref_table_label(table, 0, 1, (_("Size:")), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3409 box = pref_table_box(table, 1, 1, GTK_ORIENTATION_HORIZONTAL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3410 pw->paper_width_spin = pref_spin_new(box, NULL, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3411 1.0, 10000.0, 1.0, 2, 66,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3412 G_CALLBACK(print_paper_size_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3413 pw->paper_height_spin = pref_spin_new(box, "x", NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3414 1.0, 10000.0, 1.0, 2, 66,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3415 G_CALLBACK(print_paper_size_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3416 pref_link_sensitivity(label, pw->paper_width_spin);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3417
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3418 pw->paper_units_menu = print_paper_units_menu(table, 0, 2, pw->paper_units,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3419 G_CALLBACK(print_paper_units_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3420
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3421 print_paper_orientation_menu(table, 0, 3, pw->paper_orientation,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3422 G_CALLBACK(print_paper_orientation_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3423
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3424 box = pref_group_new(vbox, FALSE, _("Margins"), GTK_ORIENTATION_VERTICAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3425 table = pref_table_new(box, 4, 2, FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3426 pw->margin_left_spin = pref_table_spin(table, 0, 0, _("Left:"), NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3427 0.0, 50.0, 0.1, 3, 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3428 G_CALLBACK(print_paper_margin_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3429 pw->margin_right_spin = pref_table_spin(table, 2, 0, _("Right:"), NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3430 0.0, 50.0, 0.1, 3, 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3431 G_CALLBACK(print_paper_margin_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3432 pw->margin_top_spin = pref_table_spin(table, 0, 1, _("Top:"), NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3433 0.0, 50.0, 0.1, 3, 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3434 G_CALLBACK(print_paper_margin_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3435 pw->margin_bottom_spin = pref_table_spin(table, 2, 1, _("Bottom:"), NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3436 0.0, 50.0, 0.1, 3, 0.0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3437 G_CALLBACK(print_paper_margin_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3438
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3439 /* printer tab */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3440
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3441 vbox = gtk_vbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3442 gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3443 gtk_widget_show(vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3444 label = gtk_label_new(_("Printer"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3445 gtk_notebook_append_page(GTK_NOTEBOOK(pw->notebook), vbox, label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3446
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3447 table = pref_table_new(vbox, 2, 5, FALSE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3448 print_output_menu(table, 0, 0, pw->output, G_CALLBACK(print_output_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3449
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3450 label = pref_table_label(table, 0, 1, _("Custom printer:"), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3451 combo = history_combo_new(&pw->custom_entry, NULL, "print_custom", -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3452 print_custom_entry_set(pw, combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3453 gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 1, 2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3454 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3455 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3456
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3457 pref_link_sensitivity(label, combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3458
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3459 label = pref_table_label(table, 0, 2, _("File:"), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3460 combo = tab_completion_new_with_history(&pw->path_entry, NULL, "print_path", -1, NULL, pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3461 tab_completion_add_select_button(pw->path_entry, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3462 gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 2, 3,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3463 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3464 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3465
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3466 pref_link_sensitivity(label, combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3467
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3468 label = pref_table_label(table, 0, 3, _("File format:"), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3469 pw->path_format_menu = print_output_format_menu(table, 1, 3, pw->output_format,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3470 G_CALLBACK(print_output_format_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3471 pref_link_sensitivity(label, pw->path_format_menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3472
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3473 label = pref_table_label(table, 0, 4, _("DPI:"), 1.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3474 pw->max_dpi_menu = print_output_dpi_menu(table, 1, 4, pw->max_dpi,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3475 G_CALLBACK(print_output_dpi_cb), pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3476 pref_link_sensitivity(label, pw->max_dpi_menu);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3477
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3478 print_output_set(pw, pw->output);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3479
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3480 vbox = print_window_layout_setup(pw, main_box);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3481 pref_checkbox_new_int(vbox, _("Remember print settings"), pw->save_settings, &pw->save_settings);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3482
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3483 print_window_layout_sync_layout(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3484 print_window_layout_sync_paper(pw);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3485
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3486 gtk_widget_show(pw->notebook);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3487 gtk_widget_show(pw->dialog->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3488 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3489