[xournal] hackish fix for poppler-0.17 api change
Nathanael Noblet
gnat at fedoraproject.org
Tue Jul 19 15:57:56 UTC 2011
commit 04c2a2b16a23c19da9ccfd8e96ab1ade53d716f0
Author: Nathanael D. Noblet <nathanael at gnat.ca>
Date: Tue Jul 19 09:57:36 2011 -0600
hackish fix for poppler-0.17 api change
xournal-poppler-api.patch | 156 +++++++++++++++++++++++++++++++++++++++++++++
xournal.spec | 7 ++-
2 files changed, 162 insertions(+), 1 deletions(-)
---
diff --git a/xournal-poppler-api.patch b/xournal-poppler-api.patch
new file mode 100644
index 0000000..607ad1b
--- /dev/null
+++ b/xournal-poppler-api.patch
@@ -0,0 +1,156 @@
+--- src/xo-file.c.org 2009-09-28 17:36:05.000000000 -0600
++++ src/xo-file.c 2011-07-19 09:56:00.264352741 -0600
+@@ -975,6 +975,140 @@
+ g_free(req);
+ }
+
++/*
++ * Copied from http://cgit.freedesktop.org/poppler/poppler/tree/glib/poppler-page.cc?h=poppler-0.16#n617
++ * as a temporary workaround to poppler removing depreciated functions while we wait for
++ * upstream to rewrite against cairo
++ */
++static void
++copy_cairo_surface_to_pixbuf (cairo_surface_t *surface, GdkPixbuf *pixbuf)
++{
++ int cairo_width, cairo_height, cairo_rowstride;
++ unsigned char *pixbuf_data, *dst, *cairo_data;
++ int pixbuf_rowstride, pixbuf_n_channels;
++ unsigned int *src;
++ int x, y;
++
++ cairo_width = cairo_image_surface_get_width (surface);
++ cairo_height = cairo_image_surface_get_height (surface);
++ cairo_rowstride = cairo_image_surface_get_stride (surface);
++ cairo_data = cairo_image_surface_get_data (surface);
++
++ pixbuf_data = gdk_pixbuf_get_pixels (pixbuf);
++ pixbuf_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
++ pixbuf_n_channels = gdk_pixbuf_get_n_channels (pixbuf);
++
++ if (cairo_width > gdk_pixbuf_get_width (pixbuf))
++ cairo_width = gdk_pixbuf_get_width (pixbuf);
++ if (cairo_height > gdk_pixbuf_get_height (pixbuf))
++ cairo_height = gdk_pixbuf_get_height (pixbuf);
++ for (y = 0; y < cairo_height; y++)
++ {
++ src = (unsigned int *) (cairo_data + y * cairo_rowstride);
++ dst = pixbuf_data + y * pixbuf_rowstride;
++ for (x = 0; x < cairo_width; x++)
++ {
++ dst[0] = (*src >> 16) & 0xff;
++ dst[1] = (*src >> 8) & 0xff;
++ dst[2] = (*src >> 0) & 0xff;
++ if (pixbuf_n_channels == 4)
++ dst[3] = (*src >> 24) & 0xff;
++ dst += pixbuf_n_channels;
++ src++;
++ }
++ }
++}
++
++static void
++_poppler_page_render_to_pixbuf (PopplerPage *page,
++ int src_x, int src_y,
++ int src_width, int src_height,
++ double scale,
++ int rotation,
++ gboolean printing,
++ GdkPixbuf *pixbuf)
++{
++ cairo_t *cr;
++ cairo_surface_t *surface;
++
++ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
++ src_width, src_height);
++ cr = cairo_create (surface);
++ cairo_save (cr);
++ switch (rotation) {
++ case 90:
++ cairo_translate (cr, src_x + src_width, -src_y);
++ break;
++ case 180:
++ cairo_translate (cr, src_x + src_width, src_y + src_height);
++ break;
++ case 270:
++ cairo_translate (cr, -src_x, src_y + src_height);
++ break;
++ default:
++ cairo_translate (cr, -src_x, -src_y);
++ }
++
++ if (scale != 1.0)
++ cairo_scale (cr, scale, scale);
++
++ if (rotation != 0)
++ cairo_rotate (cr, rotation * G_PI / 180.0);
++
++ if (printing)
++ poppler_page_render_for_printing (page, cr);
++ else
++ poppler_page_render (page, cr);
++ cairo_restore (cr);
++
++ cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
++ cairo_set_source_rgb (cr, 1., 1., 1.);
++ cairo_paint (cr);
++
++ cairo_destroy (cr);
++
++ copy_cairo_surface_to_pixbuf (surface, pixbuf);
++ cairo_surface_destroy (surface);
++}
++
++/**
++ * poppler_page_render_to_pixbuf:
++ * @page: the page to render from
++ * @src_x: x coordinate of upper left corner
++ * @src_y: y coordinate of upper left corner
++ * @src_width: width of rectangle to render
++ * @src_height: height of rectangle to render
++ * @scale: scale specified as pixels per point
++ * @rotation: rotate the document by the specified degree
++ * @pixbuf: pixbuf to render into
++ *
++ * First scale the document to match the specified pixels per point,
++ * then render the rectangle given by the upper left corner at
++ * (src_x, src_y) and src_width and src_height.
++ * This function is for rendering a page that will be displayed.
++ * If you want to render a page that will be printed use
++ * poppler_page_render_to_pixbuf_for_printing() instead
++ *
++ * Deprecated: 0.16
++ **/
++void
++poppler_page_render_to_pixbuf (PopplerPage *page,
++ int src_x, int src_y,
++ int src_width, int src_height,
++ double scale,
++ int rotation,
++ GdkPixbuf *pixbuf)
++{
++ g_return_if_fail (POPPLER_IS_PAGE (page));
++ g_return_if_fail (scale > 0.0);
++ g_return_if_fail (pixbuf != NULL);
++
++ _poppler_page_render_to_pixbuf (page, src_x, src_y,
++ src_width, src_height,
++ scale, rotation,
++ FALSE,
++ pixbuf);
++}
+ /* process a bg PDF request from the queue, and recurse */
+
+ gboolean bgpdf_scheduler_callback(gpointer data)
+--- src/xo-file.h.org 2009-09-27 16:45:53.000000000 -0600
++++ src/xo-file.h 2011-07-19 09:54:00.557465100 -0600
+@@ -36,3 +36,10 @@
+ void init_config_default(void);
+ void load_config_from_file(void);
+ void save_config_to_file(void);
++
++void poppler_page_render_to_pixbuf (PopplerPage *page,
++ int src_x, int src_y,
++ int src_width, int src_height,
++ double scale,
++ int rotation,
++ GdkPixbuf *pixbuf);
diff --git a/xournal.spec b/xournal.spec
index 7c17a5e..48bffe3 100644
--- a/xournal.spec
+++ b/xournal.spec
@@ -1,6 +1,6 @@
Name: xournal
Version: 0.4.5
-Release: 12%{?dist}
+Release: 13%{?dist}
Summary: Notetaking, sketching, PDF annotation and general journal
Group: Applications/Editors
@@ -9,6 +9,7 @@ URL: http://xournal.sourceforge.net/
Source0: http://downloads.sourceforge.net/xournal/%{name}-%{version}.tar.gz
Patch0: xournal-configure.in.patch
Patch1: xournal-0.4.5-xoprint-len.patch
+Patch2: xournal-poppler-api.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: gtk2-devel >= 2.10.0
@@ -39,6 +40,7 @@ resolution) and overall functionality.
%setup -q
%patch0 -p1
%patch1 -p1
+%patch2 -p0
%build
NOCONFIGURE=1 ./autogen.sh
@@ -110,6 +112,9 @@ update-desktop-database %{_datadir}/applications > /dev/null 2>&1 || :
%changelog
+* Tue Jul 19 2011 Nathanael Noblet <nathanael at gnat.ca> 0.4.5-13
+- Add patch for depreciated poppler_page_render_to_pixbuf function removed in 0.17
+
* Sun Mar 13 2011 Marek Kasik <mkasik at redhat.com> - 0.4.5-12
- Rebuild (poppler-0.16.3)
More information about the scm-commits
mailing list