[gimp] modules: port the proof display filter to convert_buffer()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] modules: port the proof display filter to convert_buffer()
- Date: Sat, 2 Nov 2013 13:54:30 +0000 (UTC)
commit 337c1fe4bf5f680e2299db3580de6e77bee4910e
Author: Michael Natterer <mitch gimp org>
Date: Sat Nov 2 14:53:48 2013 +0100
modules: port the proof display filter to convert_buffer()
modules/display-filter-proof.c | 66 +++++++++++----------------------------
1 files changed, 19 insertions(+), 47 deletions(-)
---
diff --git a/modules/display-filter-proof.c b/modules/display-filter-proof.c
index 92ec51b..ed764f1 100644
--- a/modules/display-filter-proof.c
+++ b/modules/display-filter-proof.c
@@ -82,8 +82,9 @@ static void cdisplay_proof_set_property (GObject *object,
GParamSpec *pspec);
-static void cdisplay_proof_convert_surface (GimpColorDisplay *display,
- cairo_surface_t *surface);
+static void cdisplay_proof_convert_buffer (GimpColorDisplay *display,
+ GeglBuffer *buffer,
+ GeglRectangle *area);
static GtkWidget * cdisplay_proof_configure (GimpColorDisplay *display);
static void cdisplay_proof_changed (GimpColorDisplay *display);
@@ -145,7 +146,7 @@ cdisplay_proof_class_init (CdisplayProofClass *klass)
display_class->help_id = "gimp-colordisplay-proof";
display_class->stock_id = GIMP_STOCK_DISPLAY_FILTER_PROOF;
- display_class->convert_surface = cdisplay_proof_convert_surface;
+ display_class->convert_buffer = cdisplay_proof_convert_buffer;
display_class->configure = cdisplay_proof_configure;
display_class->changed = cdisplay_proof_changed;
}
@@ -236,55 +237,26 @@ cdisplay_proof_set_property (GObject *object,
}
static void
-cdisplay_proof_convert_surface (GimpColorDisplay *display,
- cairo_surface_t *surface)
+cdisplay_proof_convert_buffer (GimpColorDisplay *display,
+ GeglBuffer *buffer,
+ GeglRectangle *area)
{
- CdisplayProof *proof = CDISPLAY_PROOF (display);
- gint width = cairo_image_surface_get_width (surface);
- gint height = cairo_image_surface_get_height (surface);
- gint stride = cairo_image_surface_get_stride (surface);
- guchar *buf = cairo_image_surface_get_data (surface);
- cairo_format_t fmt = cairo_image_surface_get_format (surface);
- guchar *rowbuf;
- gint x, y;
- guchar r, g, b, a;
-
- if (fmt != CAIRO_FORMAT_ARGB32)
- return;
+ CdisplayProof *proof = CDISPLAY_PROOF (display);
+ GeglBufferIterator *iter;
if (! proof->transform)
return;
- rowbuf = g_malloc (stride);
+ iter = gegl_buffer_iterator_new (buffer, area, 0,
+ babl_format ("R'G'B'A float"),
+ GEGL_BUFFER_READWRITE, GEGL_ABYSS_NONE);
- for (y = 0; y < height; y++, buf += stride)
+ while (gegl_buffer_iterator_next (iter))
{
- /* Switch buf from ARGB premul to ARGB non-premul, since lcms ignores the
- * alpha channel. The macro takes care of byte order.
- */
- for (x = 0; x < width; x++)
- {
- GIMP_CAIRO_ARGB32_GET_PIXEL (buf + 4*x, r, g, b, a);
- rowbuf[4*x+0] = a;
- rowbuf[4*x+1] = r;
- rowbuf[4*x+2] = g;
- rowbuf[4*x+3] = b;
- }
-
- cmsDoTransform (proof->transform, rowbuf, rowbuf, width);
+ gfloat *data = iter->data[0];
- /* And back to ARGB premul */
- for (x = 0; x < width; x++)
- {
- a = rowbuf[4*x+0];
- r = rowbuf[4*x+1];
- g = rowbuf[4*x+2];
- b = rowbuf[4*x+3];
- GIMP_CAIRO_ARGB32_SET_PIXEL (buf + 4*x, r, g, b, a);
- }
+ cmsDoTransform (proof->transform, data, data, iter->length);
}
-
- g_free (rowbuf);
}
static void
@@ -302,8 +274,8 @@ cdisplay_proof_combo_box_set_active (GimpColorProfileComboBox *combo,
cmsUInt32Number descSize;
gchar *descData;
- descSize = cmsGetProfileInfoASCII(profile, cmsInfoDescription,
- "en", "US", NULL, 0);
+ descSize = cmsGetProfileInfoASCII (profile, cmsInfoDescription,
+ "en", "US", NULL, 0);
if (descSize > 0)
{
descData = g_new (gchar, descSize + 1);
@@ -499,8 +471,8 @@ cdisplay_proof_changed (GimpColorDisplay *display)
if (proof->bpc)
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
- proof->transform = cmsCreateProofingTransform (rgbProfile, TYPE_ARGB_8,
- rgbProfile, TYPE_ARGB_8,
+ proof->transform = cmsCreateProofingTransform (rgbProfile, TYPE_RGBA_FLT,
+ rgbProfile, TYPE_RGBA_FLT,
proofProfile,
proof->intent,
proof->intent,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]