rpms/evince/devel poppler072.patch, NONE, 1.1 evince.spec, 1.116, 1.117

Matthias Clasen (mclasen) fedora-extras-commits at redhat.com
Fri Mar 14 14:47:22 UTC 2008


Author: mclasen

Update of /cvs/extras/rpms/evince/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv2779

Modified Files:
	evince.spec 
Added Files:
	poppler072.patch 
Log Message:
fix the build with poppler-0.7.2


poppler072.patch:

--- NEW FILE poppler072.patch ---
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])


Index: evince.spec
===================================================================
RCS file: /cvs/extras/rpms/evince/devel/evince.spec,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -r1.116 -r1.117
--- evince.spec	13 Mar 2008 18:45:50 -0000	1.116
+++ evince.spec	14 Mar 2008 14:46:35 -0000	1.117
@@ -14,6 +14,7 @@
 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}




More information about the fedora-extras-commits mailing list