summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2008-05-28 01:43:34 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-05-28 01:43:34 +0000
commit10f642b99ffb069137fbde0d1f340f086f0552df (patch)
tree9e5c52e0b9d24b463546e77afb0fc853159a844c /modules
parent81320ba90bea4a80a4f747b5de8a7470940a921f (diff)
downloadgtk+-10f642b99ffb069137fbde0d1f340f086f0552df.tar.gz
Bug 509788 – GTK+ should use CUPS to set Postscript level of PS output
* modules/printbackends/cups/gtkprintbackendcups.c (cups_printer_create_cairo_surface): Fall back to PostScript level 2 if the printer does not support level 3. Patch by Marek Kašík. svn path=/trunk/; revision=20203
Diffstat (limited to 'modules')
-rw-r--r--modules/printbackends/cups/gtkprintbackendcups.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c
index e45decfd5e..0a0c4e97b0 100644
--- a/modules/printbackends/cups/gtkprintbackendcups.c
+++ b/modules/printbackends/cups/gtkprintbackendcups.c
@@ -307,11 +307,30 @@ cups_printer_create_cairo_surface (GtkPrinter *printer,
GIOChannel *cache_io)
{
cairo_surface_t *surface;
+ ppd_file_t *ppd_file = NULL;
+ ppd_attr_t *ppd_attr = NULL;
+ int level = 2;
/* TODO: check if it is a ps or pdf printer */
surface = cairo_ps_surface_create_for_stream (_cairo_write_to_cups, cache_io, width, height);
+ ppd_file = gtk_printer_cups_get_ppd (GTK_PRINTER_CUPS (printer));
+
+ if (ppd_file != NULL)
+ {
+ ppd_attr = ppdFindAttr (ppd_file, "LanguageLevel", NULL);
+
+ if (ppd_attr != NULL)
+ level = atoi (ppd_attr->value);
+ }
+
+ if (level == 2)
+ cairo_ps_surface_restrict_to_level (surface, CAIRO_PS_LEVEL_2);
+
+ if (level == 3)
+ cairo_ps_surface_restrict_to_level (surface, CAIRO_PS_LEVEL_3);
+
/* TODO: DPI from settings object? */
cairo_surface_set_fallback_resolution (surface, 300, 300);