static void xps_page_cb (GXPSPage *page, gdouble width, gdouble height, gpointer data) { GError *error = NULL; TIFF *tif = data; cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width / 96.0 * dpi, height / 96.0 * dpi); cairo_t *cr = cairo_create (surface); cairo_set_source_rgb (cr, 1, 1, 1); cairo_paint (cr); cairo_scale (cr, dpi / 96.0, dpi / 96.0); if (!gxps_page_render (page, cr, &error)) { g_warning ("Unable to render page: %s", error->message); g_clear_error (&error); } write_surface_to_tiff (surface, tif); cairo_destroy (cr); cairo_surface_destroy (surface); }
static void page_changed_callback (GtkSpinButton *button, GXPSView *view) { GXPSPage *xps_page; gint page; gdouble width, height; cairo_t *cr; GError *error = NULL; page = gtk_spin_button_get_value_as_int (button); xps_page = gxps_document_get_page (view->doc, page, &error); if (error) { g_printerr ("Error getting page %d: %s\n", page, error->message); g_error_free (error); return; } gxps_page_get_size (xps_page, &width, &height); cairo_surface_destroy (view->surface); view->surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cr = cairo_create (view->surface); gxps_page_render (xps_page, cr, &error); if (error) { g_printerr ("Error rendering page: %d: %s\n", page, error->message); g_error_free (error); } cairo_destroy (cr); gtk_widget_set_size_request (view->darea, width, height); gtk_widget_queue_draw (view->darea); g_object_unref (xps_page); }