[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