diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2008-05-28 01:43:34 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2008-05-28 01:43:34 +0000 |
commit | 10f642b99ffb069137fbde0d1f340f086f0552df (patch) | |
tree | 9e5c52e0b9d24b463546e77afb0fc853159a844c /modules | |
parent | 81320ba90bea4a80a4f747b5de8a7470940a921f (diff) | |
download | gtk+-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.c | 19 |
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); |