PdfPrintContext *print_ctx;
- GList *layers;
GHashTable *annots;
};
poppler_fonts_iter_free (pdf_document->fonts_iter);
}
- if (pdf_document->layers) {
- g_list_foreach (pdf_document->layers, (GFunc)g_object_unref, NULL);
- g_list_free (pdf_document->layers);
- }
-
G_OBJECT_CLASS (pdf_document_parent_class)->dispose (object);
}
gint height)
{
GdkPixbuf *pixbuf;
-
-#ifdef POPPLER_WITH_GDK
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
- width, height);
- gdk_pixbuf_fill (pixbuf, 0xffffffff);
-
- ev_document_fc_mutex_lock ();
- poppler_page_render_to_pixbuf (poppler_page, 0, 0,
- width, height,
- rc->scale, rc->rotation, pixbuf);
- ev_document_fc_mutex_unlock ();
-#else
cairo_surface_t *surface;
ev_document_fc_mutex_lock ();
pixbuf = ev_document_misc_pixbuf_from_surface (surface);
cairo_surface_destroy (surface);
-#endif /* POPPLER_WITH_GDK */
return pixbuf;
}
{
PdfDocument *pdf_document = PDF_DOCUMENT (document);
PopplerPage *poppler_page;
+ cairo_surface_t *surface;
GdkPixbuf *pixbuf = NULL;
GdkPixbuf *border_pixbuf;
double page_width, page_height;
height = temp;
}
-#ifdef POPPLER_WITH_GDK
- pixbuf = poppler_page_get_thumbnail_pixbuf (poppler_page);
-#else
- cairo_surface_t *surface;
-
surface = poppler_page_get_thumbnail (poppler_page);
if (surface) {
pixbuf = ev_document_misc_pixbuf_from_surface (surface);
cairo_surface_destroy (surface);
}
-#endif /* POPPLER_WITH_GDK */
if (pixbuf != NULL) {
int thumb_width = (rc->rotation == 90 || rc->rotation == 270) ?
PopplerPermissions permissions;
EvPage *page;
char *metadata;
+ gboolean linearized;
info = g_new0 (EvDocumentInfo, 1);
"producer", &(info->producer),
"creation-date", &(info->creation_date),
"mod-date", &(info->modified_date),
- "linearized", &(info->linearized),
+ "linearized", &linearized,
"metadata", &metadata,
NULL);
info->security = g_strdup (_("No"));
}
+ info->linearized = linearized ? g_strdup (_("Yes")) : g_strdup (_("No"));
+
return info;
}
case POPPLER_ACTION_MOVIE:
unimplemented_action = "POPPLER_ACTION_MOVIE";
break;
-#if POPPLER_CHECK_VERSION (0, 13, 2)
case POPPLER_ACTION_RENDITION:
unimplemented_action = "POPPLER_ACTION_RENDITION";
break;
- case POPPLER_ACTION_OCG_STATE:
- unimplemented_action = "POPPLER_ACTION_OCG_STATE";
+ case POPPLER_ACTION_OCG_STATE: {
+ GList *on_list = NULL;
+ GList *off_list = NULL;
+ GList *toggle_list = NULL;
+ GList *l, *m;
+
+ for (l = action->ocg_state.state_list; l; l = g_list_next (l)) {
+ PopplerActionLayer *action_layer = (PopplerActionLayer *)l->data;
+
+ for (m = action_layer->layers; m; m = g_list_next (m)) {
+ PopplerLayer *layer = (PopplerLayer *)m->data;
+ EvLayer *ev_layer;
+
+ ev_layer = ev_layer_new (poppler_layer_is_parent (layer),
+ poppler_layer_get_radio_button_group_id (layer));
+ g_object_set_data_full (G_OBJECT (ev_layer),
+ "poppler-layer",
+ g_object_ref (layer),
+ (GDestroyNotify)g_object_unref);
+
+ switch (action_layer->action) {
+ case POPPLER_ACTION_LAYER_ON:
+ on_list = g_list_prepend (on_list, ev_layer);
+ break;
+ case POPPLER_ACTION_LAYER_OFF:
+ off_list = g_list_prepend (off_list, ev_layer);
+ break;
+ case POPPLER_ACTION_LAYER_TOGGLE:
+ toggle_list = g_list_prepend (toggle_list, ev_layer);
+ break;
+ }
+ }
+ }
+
+ /* The action takes the ownership of the lists */
+ ev_action = ev_link_action_new_layers_state (g_list_reverse (on_list),
+ g_list_reverse (off_list),
+ g_list_reverse (toggle_list));
+
+
+ }
break;
-#endif
case POPPLER_ACTION_UNKNOWN:
unimplemented_action = "POPPLER_ACTION_UNKNOWN";
}
if (!action)
continue;
- switch (action->type) {
- case POPPLER_ACTION_GOTO_DEST: {
- /* For bookmarks, solve named destinations */
- if (action->goto_dest.dest->type == POPPLER_DEST_NAMED) {
- PopplerDest *dest;
- EvLinkDest *ev_dest = NULL;
- EvLinkAction *ev_action;
-
- dest = poppler_document_find_dest (pdf_document->document,
- action->goto_dest.dest->named_dest);
- if (!dest) {
- link = ev_link_from_action (pdf_document, action);
- break;
- }
-
- ev_dest = ev_link_dest_from_dest (pdf_document, dest);
- poppler_dest_free (dest);
-
- ev_action = ev_link_action_new_dest (ev_dest);
- link = ev_link_new (action->any.title, ev_action);
- } else {
- link = ev_link_from_action (pdf_document, action);
- }
- }
- break;
- default:
- link = ev_link_from_action (pdf_document, action);
- break;
- }
-
+ link = ev_link_from_action (pdf_document, action);
if (!link || strlen (ev_link_get_title (link)) <= 0) {
poppler_action_free (action);
if (link)
return ev_dest;
}
+static gint
+pdf_document_links_find_link_page (EvDocumentLinks *document_links,
+ const gchar *link_name)
+{
+ PdfDocument *pdf_document;
+ PopplerDest *dest;
+ gint retval = -1;
+
+ pdf_document = PDF_DOCUMENT (document_links);
+ dest = poppler_document_find_dest (pdf_document->document,
+ link_name);
+ if (dest) {
+ retval = dest->page_num - 1;
+ poppler_dest_free (dest);
+ }
+
+ return retval;
+}
+
static void
pdf_document_document_links_iface_init (EvDocumentLinksInterface *iface)
{
iface->get_links_model = pdf_document_links_get_links_model;
iface->get_links = pdf_document_links_get_links;
iface->find_link_dest = pdf_document_links_find_link_dest;
+ iface->find_link_page = pdf_document_links_find_link_page;
}
static EvMappingList *
EvSelectionStyle style,
EvRectangle *points)
{
- PopplerPage *poppler_page;
- char *retval;
-
- poppler_page = POPPLER_PAGE (page->backend_page);
-
-#ifdef HAVE_POPPLER_PAGE_GET_SELECTED_TEXT
- retval = poppler_page_get_selected_text (poppler_page,
- (PopplerSelectionStyle)style,
- (PopplerRectangle *)points);
-#else
- PopplerRectangle r;
- double height;
-
- poppler_page_get_size (poppler_page, NULL, &height);
- r.x1 = points->x1;
- r.y1 = height - points->y2;
- r.x2 = points->x2;
- r.y2 = height - points->y1;
-
- retval = poppler_page_get_text (poppler_page,
- (PopplerSelectionStyle)style,
- &r);
-#endif /* HAVE_POPPLER_PAGE_GET_SELECTED_TEXT */
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
- return retval;
+ return poppler_page_get_selected_text (POPPLER_PAGE (page->backend_page),
+ (PopplerSelectionStyle)style,
+ (PopplerRectangle *)points);
}
static cairo_region_t *
return retval;
}
-#ifdef HAVE_POPPLER_PAGE_GET_SELECTED_TEXT
-static gchar *
-pdf_document_text_get_text (EvDocumentText *selection,
- EvPage *page)
-{
- PopplerPage *poppler_page;
-
- g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
-
- poppler_page = POPPLER_PAGE (page->backend_page);
-
- return poppler_page_get_text (poppler_page);
-}
-#else
static gchar *
pdf_document_text_get_text (EvDocumentText *selection,
EvPage *page)
{
- PopplerPage *poppler_page;
- PopplerRectangle r;
-
g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
- poppler_page = POPPLER_PAGE (page->backend_page);
-
- r.x1 = 0;
- r.y1 = 0;
- poppler_page_get_size (poppler_page, &(r.x2), &(r.y2));
-
- return poppler_page_get_text (poppler_page,
- POPPLER_SELECTION_WORD,
- &r);
+ return poppler_page_get_text (POPPLER_PAGE (page->backend_page));
}
-#endif /* HAVE_POPPLER_PAGE_GET_SELECTED_TEXT */
-#ifdef HAVE_POPPLER_PAGE_GET_TEXT_LAYOUT
static gboolean
pdf_document_text_get_text_layout (EvDocumentText *selection,
EvPage *page,
EvRectangle **areas,
guint *n_areas)
{
- PopplerPage *poppler_page;
-
- g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
-
- poppler_page = POPPLER_PAGE (page->backend_page);
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), FALSE);
- return poppler_page_get_text_layout (poppler_page, (PopplerRectangle **)areas, n_areas);
+ return poppler_page_get_text_layout (POPPLER_PAGE (page->backend_page),
+ (PopplerRectangle **)areas, n_areas);
}
-#endif
static void
pdf_document_text_iface_init (EvDocumentTextInterface *iface)
{
iface->get_text_mapping = pdf_document_text_get_text_mapping;
iface->get_text = pdf_document_text_get_text;
-#ifdef HAVE_POPPLER_PAGE_GET_TEXT_LAYOUT
iface->get_text_layout = pdf_document_text_get_text_layout;
-#endif
}
/* Page Transitions */
static EvAnnotationTextIcon
get_annot_text_icon (PopplerAnnotText *poppler_annot)
{
-#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
gchar *icon = poppler_annot_text_get_icon (poppler_annot);
EvAnnotationTextIcon retval;
g_free (icon);
return retval;
-#else
- return EV_ANNOTATION_TEXT_ICON_UNKNOWN;
-#endif
}
static const gchar *
get_poppler_annot_text_icon (EvAnnotationTextIcon icon)
{
-#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
switch (icon) {
case EV_ANNOTATION_TEXT_ICON_NOTE:
return POPPLER_ANNOT_TEXT_ICON_NOTE;
default:
return POPPLER_ANNOT_TEXT_ICON_NOTE;
}
-#else
- return "Note";
-#endif
}
static EvAnnotation *
return PDF_DOCUMENT (document_annotations)->annots_modified;
}
-#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
static void
pdf_document_annotations_add_annotation (EvDocumentAnnotations *document_annotations,
EvAnnotation *annot,
pdf_document->annots_modified = TRUE;
}
-#endif /* HAVE_POPPLER_PAGE_ADD_ANNOT */
static void
pdf_document_annotations_save_annotation (EvDocumentAnnotations *document_annotations,
poppler_annot_set_contents (poppler_annot,
ev_annotation_get_contents (annot));
-#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
if (mask & EV_ANNOTATIONS_SAVE_COLOR) {
PopplerColor color;
GdkColor ev_color;
poppler_annot_text_set_icon (text, get_poppler_annot_text_icon (icon));
}
}
-#endif /* HAVE_POPPLER_PAGE_ADD_ANNOT */
+
PDF_DOCUMENT (document_annotations)->annots_modified = TRUE;
}
{
iface->get_annotations = pdf_document_annotations_get_annotations;
iface->document_is_modified = pdf_document_annotations_document_is_modified;
-#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
iface->add_annotation = pdf_document_annotations_add_annotation;
-#endif
iface->save_annotation = pdf_document_annotations_save_annotation;
}
markup = g_markup_escape_text (poppler_layer_get_title (layer), -1);
visible = poppler_layer_is_visible (layer);
rb_group = poppler_layer_get_radio_button_group_id (layer);
- pdf_document->layers = g_list_append (pdf_document->layers,
- g_object_ref (layer));
- ev_layer = ev_layer_new (g_list_length (pdf_document->layers) - 1,
- poppler_layer_is_parent (layer),
+ ev_layer = ev_layer_new (poppler_layer_is_parent (layer),
rb_group);
+ g_object_set_data_full (G_OBJECT (ev_layer),
+ "poppler-layer",
+ g_object_ref (layer),
+ (GDestroyNotify) g_object_unref);
} else {
gchar *title;
pdf_document_layers_show_layer (EvDocumentLayers *document,
EvLayer *layer)
{
- PdfDocument *pdf_document = PDF_DOCUMENT (document);
- guint layer_id = ev_layer_get_id (layer);
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ PopplerLayer *poppler_layer;
- poppler_layer_show (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+ poppler_layer = POPPLER_LAYER (g_object_get_data (G_OBJECT (layer), "poppler-layer"));
+ poppler_layer_show (poppler_layer);
}
static void
pdf_document_layers_hide_layer (EvDocumentLayers *document,
EvLayer *layer)
{
- PdfDocument *pdf_document = PDF_DOCUMENT (document);
- guint layer_id = ev_layer_get_id (layer);
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ PopplerLayer *poppler_layer;
- poppler_layer_hide (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+ poppler_layer = POPPLER_LAYER (g_object_get_data (G_OBJECT (layer), "poppler-layer"));
+ poppler_layer_hide (poppler_layer);
}
static gboolean
pdf_document_layers_layer_is_visible (EvDocumentLayers *document,
EvLayer *layer)
{
- PdfDocument *pdf_document = PDF_DOCUMENT (document);
- guint layer_id = ev_layer_get_id (layer);
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ PopplerLayer *poppler_layer;
- return poppler_layer_is_visible (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+ poppler_layer = POPPLER_LAYER (g_object_get_data (G_OBJECT (layer), "poppler-layer"));
+ return poppler_layer_is_visible (poppler_layer);
}
static void