fix the build with poppler-0.7.2
This commit is contained in:
parent
d84b8a486a
commit
832acdce5b
@ -14,6 +14,7 @@ Group: Applications/Publishing
|
||||
URL: http://www.gnome.org/projects/evince/
|
||||
Source0: http://download.gnome.org/sources/%{name}/2.22/%{name}-%{version}.tar.bz2
|
||||
Patch0: evince-0.6.0-print-error.patch
|
||||
Patch1: poppler072.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
BuildRequires: gtk2-devel >= %{gtk2_version}
|
||||
|
316
poppler072.patch
Normal file
316
poppler072.patch
Normal file
@ -0,0 +1,316 @@
|
||||
diff -up evince-2.22.0/backend/pdf/ev-poppler.cc.poppler72 evince-2.22.0/backend/pdf/ev-poppler.cc
|
||||
--- evince-2.22.0/backend/pdf/ev-poppler.cc.poppler72 2008-03-14 10:43:57.000000000 -0400
|
||||
+++ evince-2.22.0/backend/pdf/ev-poppler.cc 2008-03-14 10:44:39.000000000 -0400
|
||||
@@ -53,6 +53,14 @@
|
||||
#define HAVE_CAIRO_PRINT
|
||||
#endif
|
||||
|
||||
+#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
|
||||
+#define POPPLER_HAS_GDK
|
||||
+#else
|
||||
+#ifdef POPPLER_WITH_GDK
|
||||
+#define POPPLER_HAS_GDK
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
typedef struct {
|
||||
PdfDocument *document;
|
||||
char *text;
|
||||
@@ -445,27 +453,12 @@ pdf_document_get_attachments (EvDocument
|
||||
}
|
||||
|
||||
static cairo_surface_t *
|
||||
-pdf_document_render (EvDocument *document,
|
||||
- EvRenderContext *rc)
|
||||
+pdf_page_render (PopplerPage *page,
|
||||
+ gint width,
|
||||
+ gint height,
|
||||
+ EvRenderContext *rc)
|
||||
{
|
||||
- PdfDocument *pdf_document;
|
||||
cairo_surface_t *surface;
|
||||
- double width_points, height_points;
|
||||
- gint width, height;
|
||||
-
|
||||
- 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);
|
||||
- }
|
||||
|
||||
#ifdef HAVE_POPPLER_PAGE_RENDER
|
||||
cairo_t *cr;
|
||||
@@ -492,7 +485,7 @@ pdf_document_render (EvDocument *do
|
||||
}
|
||||
cairo_scale (cr, rc->scale, rc->scale);
|
||||
cairo_rotate (cr, rc->rotation * G_PI / 180.0);
|
||||
- poppler_page_render (POPPLER_PAGE (rc->data), cr);
|
||||
+ poppler_page_render (page, cr);
|
||||
cairo_destroy (cr);
|
||||
#else /* HAVE_POPPLER_PAGE_RENDER */
|
||||
GdkPixbuf *pixbuf;
|
||||
@@ -501,7 +494,7 @@ pdf_document_render (EvDocument *do
|
||||
FALSE, 8,
|
||||
width, height);
|
||||
|
||||
- poppler_page_render_to_pixbuf (POPPLER_PAGE (rc->data),
|
||||
+ poppler_page_render_to_pixbuf (page,
|
||||
0, 0,
|
||||
width, height,
|
||||
rc->scale,
|
||||
@@ -511,7 +504,34 @@ pdf_document_render (EvDocument *do
|
||||
g_object_unref (pixbuf);
|
||||
#endif /* HAVE_POPPLER_PAGE_RENDER */
|
||||
|
||||
- return surface;
|
||||
+ return surface;
|
||||
+}
|
||||
+
|
||||
+static cairo_surface_t *
|
||||
+pdf_document_render (EvDocument *document,
|
||||
+ EvRenderContext *rc)
|
||||
+{
|
||||
+ PdfDocument *pdf_document;
|
||||
+ double width_points, height_points;
|
||||
+ gint width, height;
|
||||
+
|
||||
+ 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);
|
||||
+ }
|
||||
+
|
||||
+ return pdf_page_render (POPPLER_PAGE (rc->data),
|
||||
+ width, height, rc);
|
||||
}
|
||||
|
||||
/* EvDocumentSecurity */
|
||||
@@ -1178,7 +1198,7 @@ pdf_document_images_get_image_mapping (E
|
||||
ev_image_mapping = g_new (EvImageMapping, 1);
|
||||
#ifdef HAVE_POPPLER_PAGE_GET_IMAGE
|
||||
ev_image_mapping->image = ev_image_new (page, image_mapping->image_id);
|
||||
-#else
|
||||
+#elif POPPLER_HAS_CAIRO
|
||||
ev_image_mapping->image = ev_image_new_from_pixbuf (image_mapping->image);
|
||||
#endif
|
||||
ev_image_mapping->x1 = image_mapping->area.x1;
|
||||
@@ -1240,7 +1260,7 @@ make_thumbnail_for_page (PdfDocument
|
||||
|
||||
pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document),
|
||||
rc, &width, &height);
|
||||
-
|
||||
+#ifdef POPPLER_HAS_GDK
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
|
||||
width, height);
|
||||
gdk_pixbuf_fill (pixbuf, 0xffffffff);
|
||||
@@ -1250,6 +1270,16 @@ make_thumbnail_for_page (PdfDocument
|
||||
width, height,
|
||||
rc->scale, rc->rotation, pixbuf);
|
||||
ev_document_fc_mutex_unlock ();
|
||||
+#else
|
||||
+ cairo_surface_t *surface;
|
||||
+
|
||||
+ ev_document_fc_mutex_lock ();
|
||||
+ surface = pdf_page_render (poppler_page, width, height, rc);
|
||||
+ ev_document_fc_mutex_unlock ();
|
||||
+
|
||||
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
|
||||
+ cairo_surface_destroy (surface);
|
||||
+#endif /* POPPLER_HAS_GDK */
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
@@ -1261,7 +1291,7 @@ pdf_document_thumbnails_get_thumbnail (E
|
||||
{
|
||||
PdfDocument *pdf_document;
|
||||
PopplerPage *poppler_page;
|
||||
- GdkPixbuf *pixbuf;
|
||||
+ GdkPixbuf *pixbuf = NULL;
|
||||
GdkPixbuf *border_pixbuf;
|
||||
|
||||
pdf_document = PDF_DOCUMENT (document_thumbnails);
|
||||
@@ -1269,7 +1299,22 @@ pdf_document_thumbnails_get_thumbnail (E
|
||||
poppler_page = poppler_document_get_page (pdf_document->document, rc->page);
|
||||
g_return_val_if_fail (poppler_page != NULL, NULL);
|
||||
|
||||
+#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
|
||||
pixbuf = poppler_page_get_thumbnail (poppler_page);
|
||||
+#else
|
||||
+#ifdef POPPLER_HAS_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
|
||||
+#endif
|
||||
+
|
||||
if (pixbuf) {
|
||||
/* Rotate provided thumbnail if needed */
|
||||
GdkPixbuf *rotated_pixbuf;
|
||||
@@ -1855,6 +1900,23 @@ pdf_selection_render_selection (EvSelect
|
||||
|
||||
#ifdef HAVE_POPPLER_PAGE_RENDER
|
||||
cairo_t *cr;
|
||||
+
|
||||
+#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
|
||||
+ GdkColor **text_color, **base_color;
|
||||
+
|
||||
+ *text_color = text;
|
||||
+ *base_color = base;
|
||||
+#else
|
||||
+ PopplerColor text_color, base_color;
|
||||
+
|
||||
+ text_color.red = text->red;
|
||||
+ text_color.green = text->green;
|
||||
+ text_color.blue = text->blue;
|
||||
+
|
||||
+ base_color.red = base->red;
|
||||
+ base_color.green = base->green;
|
||||
+ base_color.blue = base->blue;
|
||||
+#endif
|
||||
|
||||
if (*surface == NULL) {
|
||||
*surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
|
||||
@@ -1873,8 +1935,8 @@ pdf_selection_render_selection (EvSelect
|
||||
(PopplerRectangle *)points,
|
||||
(PopplerRectangle *)old_points,
|
||||
(PopplerSelectionStyle)style,
|
||||
- text,
|
||||
- base);
|
||||
+ &text_color,
|
||||
+ &base_color);
|
||||
cairo_destroy (cr);
|
||||
#else /* HAVE_POPPLER_PAGE_RENDER */
|
||||
GdkPixbuf *pixbuf;
|
||||
@@ -1928,22 +1990,60 @@ pdf_selection_get_selected_text (EvSelec
|
||||
}
|
||||
|
||||
static GdkRegion *
|
||||
+create_gdk_region_from_poppler_region (GList *region)
|
||||
+{
|
||||
+ GList *l;
|
||||
+ GdkRegion *retval;
|
||||
+
|
||||
+ retval = gdk_region_new ();
|
||||
+
|
||||
+ for (l = region; l; l = g_list_next (l)) {
|
||||
+ PopplerRectangle *rectangle;
|
||||
+ GdkRectangle rect;
|
||||
+
|
||||
+ rectangle = (PopplerRectangle *)l->data;
|
||||
+
|
||||
+ rect.x = (gint) rectangle->x1;
|
||||
+ rect.y = (gint) rectangle->y1;
|
||||
+ rect.width = (gint) (rectangle->x2 - rectangle->x1);
|
||||
+ rect.height = (gint) (rectangle->y2 - rectangle->y1);
|
||||
+ gdk_region_union_with_rect (retval, &rect);
|
||||
+
|
||||
+ poppler_rectangle_free (rectangle);
|
||||
+ }
|
||||
+
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static GdkRegion *
|
||||
pdf_selection_get_selection_region (EvSelection *selection,
|
||||
EvRenderContext *rc,
|
||||
EvSelectionStyle style,
|
||||
EvRectangle *points)
|
||||
{
|
||||
PdfDocument *pdf_document;
|
||||
- GdkRegion *retval;
|
||||
+ GdkRegion *retval;
|
||||
|
||||
pdf_document = PDF_DOCUMENT (selection);
|
||||
|
||||
set_rc_data (pdf_document, rc);
|
||||
-
|
||||
- retval = poppler_page_get_selection_region ((PopplerPage *)rc->data,
|
||||
+
|
||||
+#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
|
||||
+ retval = poppler_page_get_selection_region (POPPLER_PAGE (rc->data),
|
||||
rc->scale,
|
||||
(PopplerSelectionStyle)style,
|
||||
(PopplerRectangle *) points);
|
||||
+#else
|
||||
+ GList *region;
|
||||
+
|
||||
+ region = poppler_page_get_selection_region (POPPLER_PAGE (rc->data),
|
||||
+ rc->scale,
|
||||
+ (PopplerSelectionStyle)style,
|
||||
+ (PopplerRectangle *) points);
|
||||
+ retval = create_gdk_region_from_poppler_region (region);
|
||||
+ g_list_free (region);
|
||||
+#endif
|
||||
+
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -1954,6 +2054,7 @@ pdf_selection_get_selection_map (EvSelec
|
||||
PdfDocument *pdf_document;
|
||||
PopplerPage *poppler_page;
|
||||
PopplerRectangle points;
|
||||
+ GList *region;
|
||||
GdkRegion *retval;
|
||||
|
||||
pdf_document = PDF_DOCUMENT (selection);
|
||||
@@ -1963,9 +2064,18 @@ pdf_selection_get_selection_map (EvSelec
|
||||
points.x1 = 0.0;
|
||||
points.y1 = 0.0;
|
||||
poppler_page_get_size (poppler_page, &(points.x2), &(points.y2));
|
||||
+
|
||||
+#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
|
||||
retval = poppler_page_get_selection_region (poppler_page, 1.0,
|
||||
POPPLER_SELECTION_GLYPH,
|
||||
&points);
|
||||
+#else
|
||||
+ region = poppler_page_get_selection_region (poppler_page, 1.0,
|
||||
+ POPPLER_SELECTION_GLYPH,
|
||||
+ &points);
|
||||
+ retval = create_gdk_region_from_poppler_region (region);
|
||||
+ g_list_free (region);
|
||||
+#endif
|
||||
g_object_unref (poppler_page);
|
||||
|
||||
return retval;
|
||||
diff -up evince-2.22.0/configure.ac.poppler72 evince-2.22.0/configure.ac
|
||||
--- evince-2.22.0/configure.ac.poppler72 2008-03-14 10:43:46.000000000 -0400
|
||||
+++ evince-2.22.0/configure.ac 2008-03-14 10:44:18.000000000 -0400
|
||||
@@ -218,6 +218,15 @@ if test "x$enable_pdf" = "xyes"; then
|
||||
AC_CHECK_FUNCS(poppler_page_get_image)
|
||||
LIBS=$evince_save_LIBS
|
||||
|
||||
+ POPPLER_MAJOR_VERSION=`$PKG_CONFIG --modversion poppler-glib | sed 's/0\.\([[0-9]]*\)\(\.\([[0-9]]*\)\)\?/\1/'`
|
||||
+ POPPLER_MINOR_VERSION=`$PKG_CONFIG --modversion poppler-glib | sed 's/0\.\([[0-9]]*\)\(\.\([[0-9]]*\)\)\?/\3/'`
|
||||
+ if test -z "$POPPLER_MINOR_VERSION"; then
|
||||
+ POPPLER_MINOR_VERSION=0
|
||||
+ fi
|
||||
+
|
||||
+ AC_DEFINE_UNQUOTED([POPPLER_MAJOR_VERSION], $POPPLER_MAJOR_VERSION, [Poppler major version number])
|
||||
+ AC_DEFINE_UNQUOTED([POPPLER_MINOR_VERSION], $POPPLER_MINOR_VERSION, [Poppler minor version number])
|
||||
+
|
||||
PKG_CHECK_MODULES(CAIRO_PDF, cairo-pdf, enable_cairo_pdf=yes, enable_cairo_pdf=no)
|
||||
if test x$enable_cairo_pdf == xyes; then
|
||||
AC_DEFINE([HAVE_CAIRO_PDF], [1], [defined if cairo-pdf is available])
|
Loading…
Reference in New Issue
Block a user