simplify poppler-0.17 patch to avoid adding to libgimp (#698157)

This commit is contained in:
Nils Philippsen 2011-05-06 12:15:18 +02:00
parent f2fbfafa88
commit 23f8a9411d
4 changed files with 56 additions and 653 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ gimp-2.6.10-1-autoreconf.patch.bz2
/gimp-2.6.11.tar.bz2
/gimp-2.6.11-1-autoreconf.patch.bz2
/gimp-2.6.11-10-autoreconf.patch.bz2
/gimp-2.6.11-11-autoreconf.patch.bz2

View File

@ -1,18 +1,27 @@
From a915dce96f6d7d75ae09ec5355a404f00fc0460e Mon Sep 17 00:00:00 2001
From 69f69eed816b89be9a01a48a1f0643d1fd496118 Mon Sep 17 00:00:00 2001
From: Nils Philippsen <nils@redhat.com>
Date: Tue, 3 May 2011 15:58:39 +0200
Date: Fri, 6 May 2011 11:58:44 +0200
Subject: [PATCH] patch: poppler-0.17
Squashed commit of the following:
commit ad0adb0862960739f5dd2d699d2c75aee5e204d9
commit 529d940222dfc352d41fbf72de29134421aa4002
Author: Nils Philippsen <nils@redhat.com>
Date: Fri May 6 11:50:30 2011 +0200
use code based on pixbufs instead of cairo surfaces
this is done to avoid adding to libgimp, thanks to Mukund Sivaraman for
hints how to do this
commit f8671d8767d4cdab830dc06310e96c63a88ec0fd
Author: Mukund Sivaraman <muks@banu.com>
Date: Thu Apr 21 13:57:13 2011 +0530
file-pdf-load: Update attribution, removing bogus copyright
(cherry picked from commit e999122e0b20b6ccd6bde3ce039bb64068fc0019)
commit b320fff7564fe254454df78c4af00e7da70fc790
commit 89a78f2590d298dac2f42e6d9a3016fc5d672c70
Author: Nils Philippsen <nils@redhat.com>
Date: Thu Apr 21 13:52:18 2011 +0200
@ -23,7 +32,7 @@ Date: Thu Apr 21 13:52:18 2011 +0200
* uses GTK+ 3 API to convert surfaces to pixbufs where available
(backported from commit 7bdadd80ba479d6ff904e276d805e16f6b940ee2)
commit 83428bcdc84a08a8b59e9a88cad2288f6a1edf45
commit 4e92302c4a14a961f112587a0ad86696c88da2f8
Author: Nils Philippsen <nils@redhat.com>
Date: Thu Apr 21 13:38:08 2011 +0200
@ -34,517 +43,12 @@ Date: Thu Apr 21 13:38:08 2011 +0200
Conflicts:
plug-ins/common/file-pdf.c
commit e51f6274e69c88f2ac269da7ae9cf6ff6ac6e1b3
Author: Nils Philippsen <nils@redhat.com>
Date: Tue May 3 15:52:00 2011 +0200
libgimp: add gimp_layer_new_from_surface()
and to enable that, make libgimp depend on Cairo.
backported from:
commit 374dd50c43cca559a4888224f8fd6322fb26115d
Author: Michael Natterer <mitch@gimp.org>
Date: Wed Apr 20 23:58:00 2011 +0200
libgimp: add gimp_layer_new_from_surface()
and to enable that, make libgimp depend on Cairo.
---
configure.in | 2 +
gimp.pc.in | 2 +-
libgimp/Makefile.am | 2 +-
libgimp/gimp.h | 1 +
libgimp/gimplayer.c | 211 ++++++++++++++++++++++
libgimp/gimplayer.h | 8 +
plug-ins/common/Makefile.am | 40 ++--
plug-ins/common/file-pdf.c | 368 ++++++++++++++++++++++++++++++++-------
plug-ins/common/mkgen.pl | 2 +-
plug-ins/file-faxg3/Makefile.am | 2 +
plug-ins/help/Makefile.am | 2 +
11 files changed, 558 insertions(+), 82 deletions(-)
plug-ins/common/file-pdf.c | 323 ++++++++++++++++++++++++++++++++++++++------
1 files changed, 283 insertions(+), 40 deletions(-)
diff --git a/configure.in b/configure.in
index 41400f9..4338a13 100644
--- a/configure.in
+++ b/configure.in
@@ -113,8 +113,10 @@ AC_SUBST(GIMP_FULL_NAME)
# These are used in the .pc files
GLIB_REQUIRED_VERSION=glib_required_version
GTK_REQUIRED_VERSION=gtk_required_version
+CAIRO_REQUIRED_VERSION=cairo_required_version
AC_SUBST(GLIB_REQUIRED_VERSION)
AC_SUBST(GTK_REQUIRED_VERSION)
+AC_SUBST(CAIRO_REQUIRED_VERSION)
# The symbol GIMP_UNSTABLE is defined above for substitution in
# Makefiles and conditionally defined here as a preprocessor symbol
diff --git a/gimp.pc.in b/gimp.pc.in
index 9d0058a..e61b438 100644
--- a/gimp.pc.in
+++ b/gimp.pc.in
@@ -12,6 +12,6 @@ gimplocaledir=@gimplocaledir@
Name: GIMP
Description: GIMP Library
Version: @GIMP_REAL_VERSION@
-Requires: glib-2.0 >= @GLIB_REQUIRED_VERSION@
+Requires: glib-2.0 >= @GLIB_REQUIRED_VERSION@ cairo >= @CAIRO_REQUIRED_VERSION@
Libs: -L${libdir} -lgimp-@GIMP_API_VERSION@ -lgimpmath-@GIMP_API_VERSION@ -lgimpconfig-@GIMP_API_VERSION@ -lgimpcolor-@GIMP_API_VERSION@ -lgimpbase-@GIMP_API_VERSION@ @RT_LIBS@
Cflags: -I${includedir}/gimp-@GIMP_API_VERSION@
diff --git a/libgimp/Makefile.am b/libgimp/Makefile.am
index f61568d..6912b64 100644
--- a/libgimp/Makefile.am
+++ b/libgimp/Makefile.am
@@ -363,7 +363,7 @@ libgimpui_2_0_la_LDFLAGS = \
$(libgimpui_export_symbols)
libgimpui_2_0_la_LIBADD = $(libgimp) $(libgimpwidgets) $(libgimpcolor) \
- $(libgimpbase) $(libgimpmodule) $(GTK_LIBS) $(RT_LIBS)
+ $(libgimpbase) $(libgimpmodule) $(CAIRO_LIBS) $(GTK_LIBS) $(RT_LIBS)
libgimpui_2_0_la_DEPENDENCIES = $(gimpui_def) $(libgimp) $(libgimpwidgets) $(libgimpbase)
diff --git a/libgimp/gimp.h b/libgimp/gimp.h
index 156530f..096dc2d 100644
--- a/libgimp/gimp.h
+++ b/libgimp/gimp.h
@@ -22,6 +22,7 @@
#ifndef __GIMP_H__
#define __GIMP_H__
+#include <cairo.h>
#include <glib-object.h>
#include <libgimpbase/gimpbase.h>
diff --git a/libgimp/gimplayer.c b/libgimp/gimplayer.c
index 719542a..5bee7c6 100644
--- a/libgimp/gimplayer.c
+++ b/libgimp/gimplayer.c
@@ -84,6 +84,217 @@ gimp_layer_copy (gint32 layer_ID)
}
/**
+ * GIMP_CAIRO_RGB24_GET_PIXEL:
+ * @s: pointer to the source buffer
+ * @r: red component
+ * @g: green component
+ * @b: blue component
+ *
+ * Gets a single pixel from a Cairo image surface in %CAIRO_FORMAT_RGB24.
+ *
+ * Since: GIMP 2.8
+ **/
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GIMP_CAIRO_RGB24_GET_PIXEL(s, r, g, b) \
+ G_STMT_START { (b) = s[0]; (g) = s[1]; (r) = s[2]; } G_STMT_END
+#else
+#define GIMP_CAIRO_RGB24_GET_PIXEL(s, r, g, b) \
+ G_STMT_START { (r) = s[1]; (g) = s[2]; (b) = s[3]; } G_STMT_END
+#endif
+
+/**
+ * GIMP_CAIRO_ARGB32_GET_PIXEL:
+ * @s: pointer to the source buffer
+ * @r: red component, not pre-multiplied
+ * @g: green component, not pre-multiplied
+ * @b: blue component, not pre-multiplied
+ * @a: alpha component
+ *
+ * Gets a single pixel from a Cairo image surface in %CAIRO_FORMAT_ARGB32.
+ *
+ * Since: GIMP 2.8
+ **/
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GIMP_CAIRO_ARGB32_GET_PIXEL(s, r, g, b, a) \
+ G_STMT_START { \
+ const guint tb = (s)[0]; \
+ const guint tg = (s)[1]; \
+ const guint tr = (s)[2]; \
+ const guint ta = (s)[3]; \
+ (r) = (tr << 8) / (ta + 1); \
+ (g) = (tg << 8) / (ta + 1); \
+ (b) = (tb << 8) / (ta + 1); \
+ (a) = ta; \
+ } G_STMT_END
+#else
+#define GIMP_CAIRO_ARGB32_GET_PIXEL(s, r, g, b, a) \
+ G_STMT_START { \
+ const guint ta = (s)[0]; \
+ const guint tr = (s)[1]; \
+ const guint tg = (s)[2]; \
+ const guint tb = (s)[3]; \
+ (r) = (tr << 8) / (ta + 1); \
+ (g) = (tg << 8) / (ta + 1); \
+ (b) = (tb << 8) / (ta + 1); \
+ (a) = ta; \
+ } G_STMT_END
+#endif
+
+/**
+ * gimp_layer_new_from_surface:
+ * @image_ID: The RGB image to which to add the layer.
+ * @name: The layer name.
+ * @cairo_surface_t: A Cairo image surface.
+ * @opacity: The layer opacity.
+ * @mode: The layer combination mode.
+ * @progress_start: start of progress
+ * @progress_end: end of progress
+ *
+ * Create a new layer from a #cairo_surface_t.
+ *
+ * This procedure creates a new layer from the given
+ * #cairo_surface_t. The image has to be an RGB image and just like
+ * with gimp_layer_new() you will still need to add the layer to it.
+ *
+ * If you pass @progress_end > @progress_start to this function,
+ * gimp_progress_update() will be called for. You have to call
+ * gimp_progress_init() beforehand then.
+ *
+ * Returns: The newly created layer.
+ *
+ * Since: GIMP 2.8
+ */
+gint32
+gimp_layer_new_from_surface (gint32 image_ID,
+ const gchar *name,
+ cairo_surface_t *surface,
+ gdouble opacity,
+ GimpLayerModeEffects mode,
+ gdouble progress_start,
+ gdouble progress_end)
+{
+ GimpDrawable *drawable;
+ GimpPixelRgn rgn;
+ const guchar *pixels;
+ gpointer pr;
+ gint32 layer;
+ cairo_format_t format;
+ gint width;
+ gint height;
+ gint rowstride;
+ gdouble range = progress_end - progress_start;
+ guint count = 0;
+ guint done = 0;
+
+ g_return_val_if_fail (surface != NULL, -1);
+ g_return_val_if_fail (cairo_surface_get_type (surface) ==
+ CAIRO_SURFACE_TYPE_IMAGE, -1);
+
+ if (gimp_image_base_type (image_ID) != GIMP_RGB)
+ {
+ g_warning ("gimp_layer_new_from_surface() needs an RGB image");
+ return -1;
+ }
+
+ width = cairo_image_surface_get_width (surface);
+ height = cairo_image_surface_get_height (surface);
+ format = cairo_image_surface_get_format (surface);
+
+ if (format != CAIRO_FORMAT_ARGB32 &&
+ format != CAIRO_FORMAT_RGB24)
+ {
+ g_warning ("gimp_layer_new_from_surface() assumes that surface is RGB");
+ return -1;
+ }
+
+ layer = gimp_layer_new (image_ID, name, width, height,
+ format == CAIRO_FORMAT_RGB24 ?
+ GIMP_RGB_IMAGE : GIMP_RGBA_IMAGE,
+ opacity, mode);
+
+ if (layer == -1)
+ return -1;
+
+ drawable = gimp_drawable_get (layer);
+
+ gimp_pixel_rgn_init (&rgn, drawable, 0, 0, width, height, TRUE, FALSE);
+
+ rowstride = cairo_image_surface_get_stride (surface);
+ pixels = cairo_image_surface_get_data (surface);
+
+ for (pr = gimp_pixel_rgns_register (1, &rgn);
+ pr != NULL;
+ pr = gimp_pixel_rgns_process (pr))
+ {
+ const guchar *src = pixels + rgn.y * rowstride + rgn.x * 4;
+ guchar *dest = rgn.data;
+ gint y;
+
+ switch (format)
+ {
+ case CAIRO_FORMAT_RGB24:
+ for (y = 0; y < rgn.h; y++)
+ {
+ const guchar *s = src;
+ guchar *d = dest;
+ gint w = rgn.w;
+
+ while (w--)
+ {
+ GIMP_CAIRO_RGB24_GET_PIXEL (s, d[0], d[1], d[2]);
+
+ s += 4;
+ d += 3;
+ }
+
+ src += rowstride;
+ dest += rgn.rowstride;
+ }
+ break;
+
+ case CAIRO_FORMAT_ARGB32:
+ for (y = 0; y < rgn.h; y++)
+ {
+ const guchar *s = src;
+ guchar *d = dest;
+ gint w = rgn.w;
+
+ while (w--)
+ {
+ GIMP_CAIRO_ARGB32_GET_PIXEL (s, d[0], d[1], d[2], d[3]);
+
+ s += 4;
+ d += 4;
+ }
+
+ src += rowstride;
+ dest += rgn.rowstride;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (range > 0.0)
+ {
+ done += rgn.h * rgn.w;
+
+ if (count++ % 32 == 0)
+ gimp_progress_update (progress_start +
+ (gdouble) done / (width * height) * range);
+ }
+ }
+
+ if (range > 0.0)
+ gimp_progress_update (progress_end);
+
+ gimp_drawable_detach (drawable);
+
+ return layer;
+}
+
+/**
* gimp_layer_get_preserve_trans:
* @layer_ID: The layer.
*
diff --git a/libgimp/gimplayer.h b/libgimp/gimplayer.h
index cbef025..32d9525 100644
--- a/libgimp/gimplayer.h
+++ b/libgimp/gimplayer.h
@@ -35,6 +35,14 @@ gint32 gimp_layer_new (gint32 image_ID,
gdouble opacity,
GimpLayerModeEffects mode);
gint32 gimp_layer_copy (gint32 layer_ID);
+gint32 gimp_layer_new_from_surface (gint32 image_ID,
+ const gchar *name,
+ cairo_surface_t *surface,
+ gdouble opacity,
+ GimpLayerModeEffects mode,
+ gdouble progress_start,
+ gdouble progress_end);
+
#ifndef GIMP_DISABLE_DEPRECATED
gboolean gimp_layer_get_preserve_trans (gint32 layer_ID);
diff --git a/plug-ins/common/Makefile.am b/plug-ins/common/Makefile.am
index d58ecee..612a3e0 100644
--- a/plug-ins/common/Makefile.am
+++ b/plug-ins/common/Makefile.am
@@ -250,7 +250,7 @@ animation_optimize_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -279,7 +279,7 @@ antialias_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -324,7 +324,7 @@ blur_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -595,7 +595,7 @@ contrast_normalize_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -624,7 +624,7 @@ contrast_stretch_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -637,7 +637,7 @@ contrast_stretch_hsv_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -666,7 +666,7 @@ crop_auto_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -679,7 +679,7 @@ crop_zealous_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -868,7 +868,7 @@ edge_laplace_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -978,7 +978,7 @@ file_compressor_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -1007,7 +1007,7 @@ file_desktop_link_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -1052,7 +1052,7 @@ file_gif_load_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -1097,7 +1097,7 @@ file_glob_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -1543,7 +1543,7 @@ gradient_map_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -1572,7 +1572,7 @@ guillotine_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -2052,7 +2052,7 @@ rotate_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -2100,7 +2100,7 @@ semi_flatten_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -2289,7 +2289,7 @@ tile_seamless_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -2350,7 +2350,7 @@ value_invert_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -2443,7 +2443,7 @@ web_browser_LDADD = \
$(libgimpconfig) \
$(libgimpcolor) \
$(libgimpbase) \
- $(GLIB_LIBS) \
+ $(GLIB_LIBS) $(CAIRO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
diff --git a/plug-ins/common/file-pdf.c b/plug-ins/common/file-pdf.c
index a43b459..ae87a8b 100644
index a43b459..43c2b7d 100644
--- a/plug-ins/common/file-pdf.c
+++ b/plug-ins/common/file-pdf.c
@@ -4,6 +4,9 @@
@ -570,18 +74,17 @@ index a43b459..ae87a8b 100644
gint page,
gint preferred_size);
-static gint32 layer_from_pixbuf (gint32 image,
static gint32 layer_from_pixbuf (gint32 image,
- const gchar *layer_name,
- gint position,
- GdkPixbuf *buf,
- gdouble progress_start,
- gdouble progress_scale);
+static gint32 layer_from_surface (gint32 image,
+ const gchar *layer_name,
+ gint position,
+ cairo_surface_t *surface,
+ gdouble progress_start,
+ gdouble progress_scale);
+ const gchar *layer_name,
+ gint position,
+ GdkPixbuf *pixbuf,
+ gdouble progress_start,
+ gdouble progress_scale);
/**
** the following was formerly part of
@ -594,46 +97,28 @@ index a43b459..ae87a8b 100644
- gdouble scale;
- gint32 image = -1;
- GdkPixbuf *pixbuf = NULL;
+ gdouble width = 0;
+ gdouble height = 0;
+ gdouble scale;
+ gint32 image = -1;
+ gint num_pages = 0;
+ cairo_surface_t *surface = NULL;
+ gdouble width = 0;
+ gdouble height = 0;
+ gdouble scale;
+ gint32 image = -1;
+ gint num_pages = 0;
+ GdkPixbuf *pixbuf = NULL;
/* Possibly retrieve last settings */
gimp_get_data (LOAD_PROC, &loadvals);
@@ -455,20 +463,23 @@ run (const gchar *name,
@@ -455,7 +463,10 @@ run (const gchar *name,
g_object_unref (page);
}
- pixbuf = get_thumbnail (doc, 0, param[1].data.d_int32);
+ num_pages = poppler_document_get_n_pages (doc);
+
+ surface = get_thumb_surface (doc, 0, param[1].data.d_int32);
+ pixbuf = get_thumb_pixbuf (doc, 0, param[1].data.d_int32);
+
g_object_unref (doc);
}
- if (pixbuf)
+ if (surface)
{
- image = gimp_image_new (gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf),
+ image = gimp_image_new (cairo_image_surface_get_width (surface),
+ cairo_image_surface_get_height (surface),
GIMP_RGB);
gimp_image_undo_disable (image);
- layer_from_pixbuf (image, "thumbnail", 0, pixbuf, 0.0, 1.0);
- g_object_unref (pixbuf);
+ layer_from_surface (image, "thumbnail", 0, surface, 0.0, 1.0);
+ cairo_surface_destroy (surface);
gimp_image_undo_enable (image);
gimp_image_clean_all (image);
@@ -548,24 +559,260 @@ open_document (const gchar *filename,
@@ -548,6 +559,187 @@ open_document (const gchar *filename,
return doc;
}
@ -819,30 +304,9 @@ index a43b459..ae87a8b 100644
+#endif
+
static gint32
-layer_from_pixbuf (gint32 image,
- const gchar *layer_name,
- gint position,
- GdkPixbuf *pixbuf,
- gdouble progress_start,
- gdouble progress_scale)
+layer_from_surface (gint32 image,
+ const gchar *layer_name,
+ gint position,
+ cairo_surface_t *surface,
+ gdouble progress_start,
+ gdouble progress_scale)
{
- gint32 layer = gimp_layer_new_from_pixbuf (image, layer_name, pixbuf,
- 100.0, GIMP_NORMAL_MODE,
- progress_start,
- progress_start + progress_scale);
+ gint32 layer = gimp_layer_new_from_surface (image, layer_name, surface,
+ 100.0, GIMP_NORMAL_MODE,
+ progress_start,
+ progress_start + progress_scale);
gimp_image_add_layer (image, layer, position);
layer_from_pixbuf (gint32 image,
const gchar *layer_name,
@@ -566,6 +758,54 @@ layer_from_pixbuf (gint32 image,
return layer;
}
@ -876,11 +340,6 @@ index a43b459..ae87a8b 100644
+ return surface;
+}
+
+#if 0
+
+/* This is currently unused, but we'll have it here in case the military
+ wants it. */
+
+static GdkPixbuf *
+render_page_to_pixbuf (PopplerPage *page,
+ int width,
@ -898,46 +357,39 @@ index a43b459..ae87a8b 100644
+
+ return pixbuf;
+}
+
+#endif
+
static gint32
load_image (PopplerDocument *doc,
const gchar *filename,
@@ -597,9 +844,9 @@ load_image (PopplerDocument *doc,
@@ -597,7 +837,7 @@ load_image (PopplerDocument *doc,
gdouble page_width;
gdouble page_height;
- GdkPixbuf *buf;
- gint width;
- gint height;
+ cairo_surface_t *surface;
+ gint width;
+ gint height;
+ GdkPixbuf *pixbuf;
gint width;
gint height;
page = poppler_document_get_page (doc, pages->pages[i]);
@@ -627,15 +874,13 @@ load_image (PopplerDocument *doc,
@@ -627,15 +867,13 @@ load_image (PopplerDocument *doc,
gimp_image_set_resolution (image_ID, resolution, resolution);
}
- buf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+ surface = render_page_to_surface (page, width, height, scale);
- poppler_page_render_to_pixbuf (page, 0, 0, width, height, scale, 0, buf);
-
- poppler_page_render_to_pixbuf (page, 0, 0, width, height, scale, 0, buf);
+ pixbuf = render_page_to_pixbuf (page, width, height, scale);
- layer_from_pixbuf (image_ID, page_label, i, buf,
- doc_progress, 1.0 / pages->n_pages);
+ layer_from_surface (image_ID, page_label, i, surface,
+ doc_progress, 1.0 / pages->n_pages);
+ layer_from_pixbuf (image_ID, page_label, i, pixbuf,
doc_progress, 1.0 / pages->n_pages);
g_free (page_label);
- g_object_unref (buf);
+ cairo_surface_destroy (surface);
+ g_object_unref(pixbuf);
doc_progress = (double) (i + 1) / pages->n_pages;
gimp_progress_update (doc_progress);
@@ -676,30 +921,22 @@ load_image (PopplerDocument *doc,
@@ -676,30 +914,22 @@ load_image (PopplerDocument *doc,
return image_ID;
}
@ -975,7 +427,7 @@ index a43b459..ae87a8b 100644
{
gdouble width;
gdouble height;
@@ -712,15 +949,28 @@ get_thumbnail (PopplerDocument *doc,
@@ -712,15 +942,28 @@ get_thumbnail (PopplerDocument *doc,
width *= scale;
height *= scale;
@ -1009,7 +461,7 @@ index a43b459..ae87a8b 100644
return pixbuf;
}
@@ -769,8 +1019,8 @@ thumbnail_thread (gpointer data)
@@ -769,8 +1012,8 @@ thumbnail_thread (gpointer data)
idle_data->page_no = i;
/* FIXME get preferred size from somewhere? */
@ -1020,59 +472,6 @@ index a43b459..ae87a8b 100644
g_idle_add (idle_set_thumbnail, idle_data);
diff --git a/plug-ins/common/mkgen.pl b/plug-ins/common/mkgen.pl
index b0cd786..25ea7a7 100755
--- a/plug-ins/common/mkgen.pl
+++ b/plug-ins/common/mkgen.pl
@@ -131,7 +131,7 @@ foreach (sort keys %plugins) {
if (exists $plugins{$_}->{ui}) {
$glib = "\$(GTK_LIBS)"
} else {
- $glib = "\$(GLIB_LIBS)"
+ $glib = "\$(GLIB_LIBS) \$(CAIRO_LIBS)"
}
my $optlib = "";
diff --git a/plug-ins/file-faxg3/Makefile.am b/plug-ins/file-faxg3/Makefile.am
index ac61d86..694127f 100644
--- a/plug-ins/file-faxg3/Makefile.am
+++ b/plug-ins/file-faxg3/Makefile.am
@@ -25,6 +25,7 @@ file_faxg3_SOURCES = \
INCLUDES = \
-I$(top_srcdir) \
+ $(CAIRO_CFLAGS) \
$(GLIB_CFLAGS) \
-I$(includedir)
@@ -34,6 +35,7 @@ LDADD = \
$(libgimpcolor) \
$(libgimpbase) \
$(libgimpmath) \
+ $(CAIRO_LIBS) \
$(GLIB_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
diff --git a/plug-ins/help/Makefile.am b/plug-ins/help/Makefile.am
index c5f49ae..b72d368 100644
--- a/plug-ins/help/Makefile.am
+++ b/plug-ins/help/Makefile.am
@@ -39,6 +39,7 @@ help_SOURCES = help.c
INCLUDES = \
-I$(top_srcdir) \
+ $(CAIRO_CFLAGS) \
$(GIO_CFLAGS) \
-I$(includedir)
@@ -49,6 +50,7 @@ LDADD = \
$(libgimpcolor) \
$(libgimpbase) \
$(libgimpmath) \
+ $(CAIRO_LIBS) \
$(GIO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
--
1.7.5

View File

@ -38,7 +38,7 @@ Summary: GNU Image Manipulation Program
Name: gimp
Epoch: 2
Version: 2.6.11
Release: 10%{?dist}
Release: 11%{?dist}
%define binver 2.6
%define gimp_lang_ver 20
%define interfacever 2.0
@ -148,7 +148,7 @@ Patch6: gimp-2.6.11-pyslice.patch
# backport: work with poppler-0.17
Patch7: gimp-2.6.11-poppler-0.17.patch
# files changed by autoreconf after applying the above
Patch10: gimp-2.6.11-10-autoreconf.patch.bz2
Patch10: gimp-2.6.11-11-autoreconf.patch.bz2
%description
GIMP (GNU Image Manipulation Program) is a powerful image composition and
@ -505,6 +505,9 @@ fi
%{_libdir}/gimp/%{interfacever}/plug-ins/help-browser
%changelog
* Fri May 06 2011 Nils Philippsen <nils@redhat.com> - 2:2.6.11-11
- simplify poppler-0.17 patch to avoid adding to libgimp (#698157)
* Wed May 04 2011 Nils Philippsen <nils@redhat.com> - 2:2.6.11-10
- don't use poppler/gdk_pixbuf API removed in poppler >= 0.17 (#698157)
- remove obsolete configure options

View File

@ -1,2 +1,2 @@
bb2939fe13e54fc7255cef5d097bb5dd gimp-2.6.11.tar.bz2
29d5e70301d7b626c79fa74248ac6e5e gimp-2.6.11-10-autoreconf.patch.bz2
6693f03eddebb898720dccd758fbf30c gimp-2.6.11-11-autoreconf.patch.bz2