]> Pileus Git - ~andy/gtk/commitdiff
Bug 509788 – GTK+ should use CUPS to set Postscript level of PS output
authorMatthias Clasen <matthiasc@src.gnome.org>
Wed, 28 May 2008 01:43:34 +0000 (01:43 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 28 May 2008 01:43:34 +0000 (01:43 +0000)
        * 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

ChangeLog
modules/printbackends/cups/gtkprintbackendcups.c

index 3033953608ccdb000f6291cc4e1823922d3fa81e..28fe251a699508ee346af6c48d5256f7a3497915 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,14 @@
 2008-05-27  Matthias Clasen  <mclasen@redhat.com>
 
-       Bug 404571 – Scroll arrow backgrounds should be painted with different
+       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.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+       Bug 404571 - Scroll arrow backgrounds should be painted with different
        detail
 
        * gtk/gtkmenu.c (gtk_menu_paint): Use "menu_scroll_arrow_up/down" 
index e45decfd5e68eb06b68724e602931e2e1256adc4..0a0c4e97b0723cc417b00714306049854d12ad1e 100644 (file)
@@ -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);