[gs-cvs] rev 8771 - trunk/gs/src

giles at ghostscript.com giles at ghostscript.com
Thu May 22 17:13:50 PDT 2008


Author: giles
Date: 2008-05-22 17:13:50 -0700 (Thu, 22 May 2008)
New Revision: 8771

Modified:
   trunk/gs/src/gdevcairo.c
Log:
Implement sync_output as cairo_flush. Patch from Behdad Esfahbod.


Modified: trunk/gs/src/gdevcairo.c
===================================================================
--- trunk/gs/src/gdevcairo.c	2008-05-22 18:06:22 UTC (rev 8770)
+++ trunk/gs/src/gdevcairo.c	2008-05-23 00:13:50 UTC (rev 8771)
@@ -63,6 +63,7 @@
 			   (depth > 1 ? 256 : 2), (depth > 8 ? 256 : 1))
 
 static dev_proc_open_device(devcairo_open_device);
+static dev_proc_sync_output(devcairo_sync_output);
 static dev_proc_output_page(devcairo_output_page);
 static dev_proc_close_device(devcairo_close_device);
 
@@ -73,7 +74,7 @@
 { \
 	devcairo_open_device, \
         NULL,                   /* get_initial_matrix */\
-        NULL,                   /* sync_output */\
+        devcairo_sync_output,\
         devcairo_output_page,\
         devcairo_close_device,\
         gx_default_rgb_map_rgb_color,\
@@ -378,6 +379,20 @@
     }
 }
 
+int
+devcairo_sync_output(gx_device * dev)
+{
+    gx_device_cairo *const devcairo = (gx_device_cairo*)dev;
+    int code = 0;
+
+    cairo_surface_flush (cairo_get_target (devcairo->cr));
+
+    code = devcairo_check_status (devcairo);
+    if (code < 0) return_error (code);
+
+    return 0;
+}
+
 /* Complete a page */
 static int
 devcairo_output_page(gx_device *dev, int num_copies, int flush)
@@ -389,10 +404,10 @@
     for (i = num_copies - 1; i > 0; i++)
 	cairo_copy_page (devcairo->cr);
 
-    cairo_show_page (devcairo->cr);
-
     if (flush)
-	cairo_surface_flush (cairo_get_target (devcairo->cr));
+	cairo_show_page (devcairo->cr);
+    else
+	cairo_copy_page (devcairo->cr);
 
     code = devcairo_check_status (devcairo);
     if (code < 0) return_error (code);



More information about the gs-cvs mailing list