Index: ev-poppler.cc =================================================================== RCS file: /cvs/gnome/evince/pdf/ev-poppler.cc,v retrieving revision 1.72 diff -u -u -r1.72 ev-poppler.cc --- ev-poppler.cc 19 Aug 2006 18:34:13 -0000 1.72 +++ ev-poppler.cc 1 Dec 2006 17:01:26 -0000 @@ -397,8 +397,60 @@ return g_list_reverse (retval); } +static cairo_surface_t * +pdf_document_render_surface (EvDocument *document, + EvRenderContext *rc) +{ + PdfDocument *pdf_document; + cairo_surface_t *surface; + double width_points, height_points; + gint width, height; + cairo_t *cr; + + pdf_document = PDF_DOCUMENT (document); + + set_rc_data (pdf_document, rc); + + poppler_page_get_size (POPPLER_PAGE (rc->data), &width_points, &height_points); + + if (rc->rotation == 90 || rc->rotation == 270) { + width = (int) ((height_points * rc->scale) + 0.5); + height = (int) ((width_points * rc->scale) + 0.5); + } else { + width = (int) ((width_points * rc->scale) + 0.5); + height = (int) ((height_points * rc->scale) + 0.5); + } + + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, + width, height); + cr = cairo_create (surface); + cairo_scale (cr, rc->scale, rc->scale); + cairo_rotate (cr, rc->rotation); + poppler_page_render (POPPLER_PAGE (rc->data), cr); + cairo_destroy (cr); + + g_print ("DBG: rendered page: %d\n", rc->page); + + return surface; +} + + static GdkPixbuf * -pdf_document_render_pixbuf (EvDocument *document, +pdf_document_render_pixbuf (EvDocument *document, EvRenderContext *rc) { PdfDocument *pdf_document; @@ -634,6 +686,8 @@ iface->get_page_label = pdf_document_get_page_label; iface->has_attachments = pdf_document_has_attachments; iface->get_attachments = pdf_document_get_attachments; + iface->render_surface = pdf_document_render_surface; iface->render_pixbuf = pdf_document_render_pixbuf; iface->get_text = pdf_document_get_text; iface->can_get_text = pdf_document_can_get_text;