]> www.fi.muni.cz Git - evince.git/blobdiff - backend/pdf/ev-poppler.cc
help: added Vietnamese manual
[evince.git] / backend / pdf / ev-poppler.cc
index 2d838ea2ff1abe94fc4b252d86c8fdc7fdd20866..6ba82a6dbbb61e40c2e471f5474f386b31d3094a 100644 (file)
@@ -487,14 +487,17 @@ pdf_page_render (PopplerPage     *page,
 
 #ifdef HAVE_POPPLER_PAGE_RENDER
        cairo_t *cr;
 
 #ifdef HAVE_POPPLER_PAGE_RENDER
        cairo_t *cr;
-       
-       surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
+       cairo_pattern_t *pattern;
+
+       surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
                                              width, height);
                                              width, height);
-       memset (cairo_image_surface_get_data (surface), 0xff,
-               cairo_image_surface_get_height (surface) *
-               cairo_image_surface_get_stride (surface));
-       
        cr = cairo_create (surface);
        cr = cairo_create (surface);
+
+       cairo_save (cr);
+       cairo_set_source_rgba (cr, 1., 1., 1., 0);
+       cairo_paint (cr);
+       cairo_restore (cr);
+
        switch (rc->rotation) {
                case 90:
                        cairo_translate (cr, width, 0);
        switch (rc->rotation) {
                case 90:
                        cairo_translate (cr, width, 0);
@@ -511,6 +514,13 @@ pdf_page_render (PopplerPage     *page,
        cairo_scale (cr, rc->scale, rc->scale);
        cairo_rotate (cr, rc->rotation * G_PI / 180.0);
        poppler_page_render (page, cr);
        cairo_scale (cr, rc->scale, rc->scale);
        cairo_rotate (cr, rc->rotation * G_PI / 180.0);
        poppler_page_render (page, cr);
+
+       pattern = cairo_pattern_create_rgb (1., 1., 1.);
+       cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
+       cairo_set_source (cr, pattern);
+       cairo_paint (cr);
+
+       cairo_pattern_destroy (pattern);
        cairo_destroy (cr);
 #else /* HAVE_POPPLER_PAGE_RENDER */
        GdkPixbuf *pixbuf;
        cairo_destroy (cr);
 #else /* HAVE_POPPLER_PAGE_RENDER */
        GdkPixbuf *pixbuf;
@@ -2530,13 +2540,13 @@ ev_annot_from_poppler_annot (PopplerAnnot *poppler_annot,
                        PopplerAnnotMarkup *markup;
                        gchar *label;
                        gdouble opacity;
                        PopplerAnnotMarkup *markup;
                        gchar *label;
                        gdouble opacity;
-                       gboolean is_open;
                        PopplerRectangle poppler_rect;
 
                        markup = POPPLER_ANNOT_MARKUP (poppler_annot);
 
                        if (poppler_annot_markup_get_popup_rectangle (markup, &poppler_rect)) {
                                EvRectangle ev_rect;
                        PopplerRectangle poppler_rect;
 
                        markup = POPPLER_ANNOT_MARKUP (poppler_annot);
 
                        if (poppler_annot_markup_get_popup_rectangle (markup, &poppler_rect)) {
                                EvRectangle ev_rect;
+                               gboolean is_open;
                                gdouble height;
 
                                poppler_page_get_size (POPPLER_PAGE (page->backend_page),
                                gdouble height;
 
                                poppler_page_get_size (POPPLER_PAGE (page->backend_page),
@@ -2546,17 +2556,28 @@ ev_annot_from_poppler_annot (PopplerAnnot *poppler_annot,
                                ev_rect.y1 = height - poppler_rect.y2;
                                ev_rect.y2 = height - poppler_rect.y1;
 
                                ev_rect.y1 = height - poppler_rect.y2;
                                ev_rect.y2 = height - poppler_rect.y1;
 
-                               g_object_set (ev_annot, "rectangle", &ev_rect, NULL);
+                               is_open = poppler_annot_markup_get_popup_is_open (markup);
+
+                               g_object_set (ev_annot,
+                                             "rectangle", &ev_rect,
+                                             "is_open", is_open,
+                                             "has_popup", TRUE,
+                                             NULL);
+                       } else {
+                               /* FIXME: Use poppler_annot_markup_has_popup() when
+                                * new poppler is released.
+                                */
+                               g_object_set (ev_annot,
+                                             "has_popup", FALSE,
+                                             NULL);
                        }
 
                        label = poppler_annot_markup_get_label (markup);
                        opacity = poppler_annot_markup_get_opacity (markup);
                        }
 
                        label = poppler_annot_markup_get_label (markup);
                        opacity = poppler_annot_markup_get_opacity (markup);
-                       is_open = poppler_annot_markup_get_popup_is_open (markup);
 
                        g_object_set (ev_annot,
                                      "label", label,
                                      "opacity", opacity,
 
                        g_object_set (ev_annot,
                                      "label", label,
                                      "opacity", opacity,
-                                     "is_open", is_open,
                                      NULL);
 
                        g_free (label);
                                      NULL);
 
                        g_free (label);