[gimp] file-ps: GEGL convert loading code
- From: Mukund Sivaraman <muks src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] file-ps: GEGL convert loading code
- Date: Mon, 13 May 2013 12:33:24 +0000 (UTC)
commit 75f1da04dec2ab23a054d469a2d0ee8c1beddf54
Author: Mukund Sivaraman <muks banu com>
Date: Mon May 13 18:01:35 2013 +0530
file-ps: GEGL convert loading code
Also do some cleanups. We may also be able to support 16-bit
and other rendered output, but now's not the time.
plug-ins/common/Makefile.am | 1 +
plug-ins/common/file-ps.c | 71 +++++++++++++++++++++++-----------------
plug-ins/common/plugin-defs.pl | 2 +-
3 files changed, 43 insertions(+), 31 deletions(-)
---
diff --git a/plug-ins/common/Makefile.am b/plug-ins/common/Makefile.am
index bf10449..5496d80 100644
--- a/plug-ins/common/Makefile.am
+++ b/plug-ins/common/Makefile.am
@@ -1382,6 +1382,7 @@ file_ps_LDADD = \
$(libgimpcolor) \
$(libgimpbase) \
$(GTK_LIBS) \
+ $(GEGL_LIBS) \
$(GS_LIBS) \
$(RT_LIBS) \
$(INTLLIBS) \
diff --git a/plug-ins/common/file-ps.c b/plug-ins/common/file-ps.c
index 9eef361..84fd739 100644
--- a/plug-ins/common/file-ps.c
+++ b/plug-ins/common/file-ps.c
@@ -201,9 +201,7 @@ static gint32 create_new_image (const gchar *filename,
guint width,
guint height,
GimpImageBaseType type,
- gint32 *layer_ID,
- GimpDrawable **drawable,
- GimpPixelRgn *pixel_rgn);
+ gint32 *layer_ID);
static void check_load_vals (void);
static void check_save_vals (void);
@@ -753,6 +751,7 @@ run (const gchar *name,
l_run_mode = run_mode = param[0].data.d_int32;
INIT_I18N ();
+ gegl_init (NULL, NULL);
*nreturn_vals = 1;
*return_vals = values;
@@ -1782,9 +1781,7 @@ create_new_image (const gchar *filename,
guint width,
guint height,
GimpImageBaseType type,
- gint32 *layer_ID,
- GimpDrawable **drawable,
- GimpPixelRgn *pixel_rgn)
+ gint32 *layer_ID)
{
gint32 image_ID;
GimpImageType gdtype;
@@ -1817,10 +1814,6 @@ create_new_image (const gchar *filename,
gimp_image_insert_layer (image_ID, *layer_ID, -1, 0);
- *drawable = gimp_drawable_get (*layer_ID);
- gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width,
- (*drawable)->height, TRUE, FALSE);
-
return image_ID;
}
@@ -1879,8 +1872,7 @@ load_ps (const gchar *filename,
int i, j, pnmtype, maxval, bpp, nread;
GimpImageBaseType imagetype;
gint32 layer_ID, image_ID;
- GimpPixelRgn pixel_rgn;
- GimpDrawable *drawable;
+ GeglBuffer *buffer = NULL;
int err = 0, e;
pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval);
@@ -1930,7 +1922,8 @@ load_ps (const gchar *filename,
image_ID = create_new_image (filename, pagenum,
image_width, image_height, imagetype,
- &layer_ID, &drawable, &pixel_rgn);
+ &layer_ID);
+ buffer = gimp_drawable_get_buffer (layer_ID);
tile_height = gimp_tile_height ();
data = g_malloc (tile_height * image_width * bpp);
@@ -1947,9 +1940,11 @@ load_ps (const gchar *filename,
for (i = 0; i < height; i++)
{
e = (fread (bitline, 1, nread, ifp) != nread);
- if (total_scan_lines >= image_height) continue;
+ if (total_scan_lines >= image_height)
+ continue;
err |= e;
- if (err) break;
+ if (err)
+ break;
j = width; /* Map 1 byte of bitimage to 8 bytes of indexed image */
temp = bitline;
@@ -1968,17 +1963,24 @@ load_ps (const gchar *filename,
scan_lines++;
total_scan_lines++;
- if ((i % 20) == 0)
- gimp_progress_update ((double)(i+1) / (double)image_height);
-
if ((scan_lines == tile_height) || ((i+1) == image_height))
{
- gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1,
- image_width, scan_lines);
+ gegl_buffer_set (buffer,
+ GEGL_RECTANGLE (0, i-scan_lines+1,
+ image_width, scan_lines),
+ 0,
+ NULL,
+ data,
+ GEGL_AUTO_ROWSTRIDE);
scan_lines = 0;
dest = data;
}
- if (err) break;
+
+ if ((i % 20) == 0)
+ gimp_progress_update ((double)(i+1) / (double)image_height);
+
+ if (err)
+ break;
}
}
else /* Read gray/rgb-image */
@@ -1986,26 +1988,35 @@ load_ps (const gchar *filename,
for (i = 0; i < height; i++)
{
e = (fread (byteline, bpp, width, ifp) != width);
- if (total_scan_lines >= image_height) continue;
+ if (total_scan_lines >= image_height)
+ continue;
err |= e;
- if (err) break;
+ if (err)
+ break;
memcpy (dest, byteline+skip_left*bpp, image_width*bpp);
dest += image_width*bpp;
scan_lines++;
total_scan_lines++;
- if ((i % 20) == 0)
- gimp_progress_update ((double)(i+1) / (double)image_height);
-
if ((scan_lines == tile_height) || ((i+1) == image_height))
{
- gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1,
- image_width, scan_lines);
+ gegl_buffer_set (buffer,
+ GEGL_RECTANGLE (0, i-scan_lines+1,
+ image_width, scan_lines),
+ 0,
+ NULL,
+ data,
+ GEGL_AUTO_ROWSTRIDE);
scan_lines = 0;
dest = data;
}
- if (err) break;
+
+ if ((i % 20) == 0)
+ gimp_progress_update ((double)(i+1) / (double)image_height);
+
+ if (err)
+ break;
}
}
gimp_progress_update (1.0);
@@ -2017,7 +2028,7 @@ load_ps (const gchar *filename,
if (err)
g_message ("EOF encountered on reading");
- gimp_drawable_flush (drawable);
+ g_object_unref (buffer);
return (err ? -1 : image_ID);
}
diff --git a/plug-ins/common/plugin-defs.pl b/plug-ins/common/plugin-defs.pl
index 8e022d7..360ecb3 100644
--- a/plug-ins/common/plugin-defs.pl
+++ b/plug-ins/common/plugin-defs.pl
@@ -66,7 +66,7 @@
'file-pnm' => { ui => 1, gegl => 1 },
'file-pdf-load' => { ui => 1, optional => 1, libs => 'POPPLER_LIBS', cflags => 'POPPLER_CFLAGS' },
'file-pdf-save' => { ui => 1, gegl => 1, optional => 1, libs => 'CAIRO_PDF_LIBS', cflags =>
'CAIRO_PDF_CFLAGS' },
- 'file-ps' => { ui => 1, optional => 1, libs => 'GS_LIBS' },
+ 'file-ps' => { ui => 1, gegl => 1 , optional => 1, libs => 'GS_LIBS' },
'file-psp' => { ui => 1, gegl => 1, optional => 1, libs => 'Z_LIBS' },
'file-raw' => { ui => 1 },
'file-sunras' => { ui => 1 },
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]