[85342] trunk/dports/graphics/gimp2
devans at macports.org
devans at macports.org
Wed Oct 12 16:07:13 PDT 2011
Revision: 85342
http://trac.macports.org/changeset/85342
Author: devans at macports.org
Date: 2011-10-12 16:07:13 -0700 (Wed, 12 Oct 2011)
Log Message:
-----------
gimp2: backport code from 2.7.3 to deal with poppler 0.18, increment revision to rebuild.
Modified Paths:
--------------
trunk/dports/graphics/gimp2/Portfile
Added Paths:
-----------
trunk/dports/graphics/gimp2/files/patch-plugins-common-file-pdf.c.diff
Modified: trunk/dports/graphics/gimp2/Portfile
===================================================================
--- trunk/dports/graphics/gimp2/Portfile 2011-10-12 23:05:19 UTC (rev 85341)
+++ trunk/dports/graphics/gimp2/Portfile 2011-10-12 23:07:13 UTC (rev 85342)
@@ -7,7 +7,7 @@
conflicts gimp2-devel
# please remember to update the gimp metapackage to match
version 2.6.11
-revision 6
+revision 7
license {GPL-2+ LGPL}
categories graphics
maintainers devans
@@ -54,7 +54,8 @@
port:lcms
patchfiles patch-etc-gimprc.diff \
- patch-plug-ins-twain-tw_mac.c.diff
+ patch-plug-ins-twain-tw_mac.c.diff \
+ patch-plugins-common-file-pdf.c.diff
platform darwin 9 {
post-patch {
Added: trunk/dports/graphics/gimp2/files/patch-plugins-common-file-pdf.c.diff
===================================================================
--- trunk/dports/graphics/gimp2/files/patch-plugins-common-file-pdf.c.diff (rev 0)
+++ trunk/dports/graphics/gimp2/files/patch-plugins-common-file-pdf.c.diff 2011-10-12 23:07:13 UTC (rev 85342)
@@ -0,0 +1,143 @@
+--- plug-ins/common/file-pdf.c.orig 2011-10-03 13:21:54.000000000 -0700
++++ plug-ins/common/file-pdf.c 2011-10-03 13:45:16.000000000 -0700
+@@ -91,6 +91,14 @@
+ gdouble progress_start,
+ gdouble progress_scale);
+
++static void copy_cairo_surface_to_pixbuf (cairo_surface_t *surface,
++ GdkPixbuf *pixbuf);
++
++static GdkPixbuf * render_page_to_pixbuf (PopplerPage *page,
++ int width,
++ int height,
++ double scale);
++
+ /**
+ ** the following was formerly part of
+ ** gimpresolutionentry.h and gimpresolutionentry.c,
+@@ -317,6 +325,84 @@
+ }
+
+ 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 GdkPixbuf *
++render_page_to_pixbuf (PopplerPage *page,
++ int width,
++ int height,
++ double scale)
++{
++ GdkPixbuf *pixbuf;
++ cairo_surface_t *surface;
++ cairo_t *cr;
++
++ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
++ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
++ cr = cairo_create (surface);
++
++ cairo_save (cr);
++ cairo_translate (cr, 0.0, 0.0);
++
++ if (scale != 1.0)
++ cairo_scale (cr, scale, scale);
++
++ poppler_page_render (page, cr);
++ cairo_restore (cr);
++
++ cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
++ cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
++ cairo_paint (cr);
++
++ cairo_destroy (cr);
++ copy_cairo_surface_to_pixbuf (surface, pixbuf);
++ cairo_surface_destroy (surface);
++
++ return pixbuf;
++}
++
++static void
+ run (const gchar *name,
+ gint nparams,
+ const GimpParam *param,
+@@ -597,7 +683,7 @@
+ gdouble page_width;
+ gdouble page_height;
+
+- GdkPixbuf *buf;
++ GdkPixbuf *pixbuf;
+ gint width;
+ gint height;
+
+@@ -627,15 +713,13 @@
+ gimp_image_set_resolution (image_ID, resolution, resolution);
+ }
+
+- buf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
++ pixbuf = render_page_to_pixbuf (page, width, height, scale);
+
+- poppler_page_render_to_pixbuf (page, 0, 0, width, height, scale, 0, buf);
+-
+- layer_from_pixbuf (image_ID, page_label, i, buf,
++ layer_from_pixbuf (image_ID, page_label, i, pixbuf,
+ doc_progress, 1.0 / pages->n_pages);
+
+ g_free (page_label);
+- g_object_unref (buf);
++ g_object_unref (pixbuf);
+
+ doc_progress = (double) (i + 1) / pages->n_pages;
+ gimp_progress_update (doc_progress);
+@@ -712,11 +796,7 @@
+ width *= scale;
+ height *= scale;
+
+- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
+- width, height);
+-
+- poppler_page_render_to_pixbuf (page,
+- 0, 0, width, height, scale, 0, pixbuf);
++ pixbuf = render_page_to_pixbuf (page, width, height, scale);
+ }
+
+ g_object_unref (page);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20111012/80a60a23/attachment.html>
More information about the macports-changes
mailing list