gint size,
gint *width,
gint *height);
+static int pdf_document_get_n_pages (EvDocument *document);
+
static EvLink * ev_link_from_action (PopplerAction *action);
+static void pdf_document_search_free (PdfDocumentSearch *search);
G_DEFINE_TYPE_WITH_CODE (PdfDocument, pdf_document, G_TYPE_OBJECT,
pdf_selection_iface_init);
});
+static void
+pdf_document_search_free (PdfDocumentSearch *search)
+{
+ PdfDocument *pdf_document = search->document;
+ int n_pages;
+ int i;
+
+ if (search->idle != 0)
+ g_source_remove (search->idle);
+
+ n_pages = pdf_document_get_n_pages (EV_DOCUMENT (pdf_document));
+ for (i = 0; i < n_pages; i++) {
+ g_list_foreach (search->pages[i], (GFunc) g_free, NULL);
+ g_list_free (search->pages[i]);
+ }
+
+ g_free (search->text);
+}
+
static void
pdf_document_dispose (GObject *object)
{
0, 0,
width, height,
rc->scale,
- pixbuf,
- 0, 0);
+ pixbuf);
g_object_unref (poppler_page);
gboolean border)
{
PopplerPage *poppler_page;
- GdkPixbuf *pixbuf;
+ GdkPixbuf *pixbuf, *sub_pixbuf;
int width, height;
- int x_offset, y_offset;
double scale;
gdouble unscaled_width, unscaled_height;
if (border) {
pixbuf = ev_document_misc_get_thumbnail_frame (width, height, NULL);
- x_offset = 1;
- y_offset = 1;
+
+ sub_pixbuf = gdk_pixbuf_new_subpixbuf (pixbuf,
+ 1, 1,
+ width - 1, height - 1);
} else {
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
width, height);
gdk_pixbuf_fill (pixbuf, 0xffffffff);
- x_offset = 0;
- y_offset = 0;
+ sub_pixbuf = gdk_pixbuf_new_subpixbuf (pixbuf,
+ 0, 0,
+ width, height);
}
poppler_page_render_to_pixbuf (poppler_page, 0, 0,
width, height,
- scale, pixbuf,
- x_offset, y_offset);
+ scale, sub_pixbuf);
+
+ g_object_unref (G_OBJECT (sub_pixbuf));
g_object_unref (poppler_page);
return pixbuf;
return search;
}
-static void
-pdf_document_search_free (PdfDocumentSearch *search)
-{
- PdfDocument *pdf_document = search->document;
- int n_pages;
- int i;
-
- if (search->idle != 0)
- g_source_remove (search->idle);
-
- n_pages = pdf_document_get_n_pages (EV_DOCUMENT (pdf_document));
- for (i = 0; i < n_pages; i++) {
- g_list_foreach (search->pages[i], (GFunc) g_free, NULL);
- g_list_free (search->pages[i]);
- }
-
- g_free (search->text);
-}
-
static void
pdf_document_find_begin (EvDocumentFind *document,
int page,
return retval;
}
+GdkRegion *
+pdf_selection_get_selection_map (EvSelection *selection,
+ EvRenderContext *rc)
+{
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ PopplerRectangle points;
+ GdkRegion *retval;
+
+ pdf_document = PDF_DOCUMENT (selection);
+ poppler_page = poppler_document_get_page (pdf_document->document,
+ rc->page);
+ set_page_orientation (pdf_document, poppler_page);
+
+ points.x1 = 0.0;
+ points.y1 = 0.0;
+ poppler_page_get_size (poppler_page, &(points.x2), &(points.y2));
+ retval = poppler_page_get_selection_region (poppler_page, 1.0, &points);
+ g_object_unref (poppler_page);
+
+ return retval;
+}
+
static void
pdf_selection_iface_init (EvSelectionIface *iface)
{
iface->render_selection = pdf_selection_render_selection;
iface->get_selection_region = pdf_selection_get_selection_region;
+ iface->get_selection_map = pdf_selection_get_selection_map;
}
PdfDocument *