use even more GimpPreviewArea's facilities.

* plug-ins/common/despeckle.c: use even more GimpPreviewArea's
  facilities.

* plug-ins/common/destripe.c: ported to GimpPreviewArea.
This commit is contained in:
David Odin 2004-07-31 12:51:01 +00:00
parent c93287fea3
commit 19134bce88
3 changed files with 37 additions and 107 deletions

View File

@ -1,3 +1,10 @@
2004-07-31 DindinX <david@dindinx.org>
* plug-ins/common/despeckle.c: use even more GimpPreviewArea's
facilities.
* plug-ins/common/destripe.c: ported to GimpPreviewArea.
2004-07-31 Shlomi Fish <shlomif@iglu.org.il>
* plug-ins/gflare/gflare.c: ported to GimpPreviewArea.

View File

@ -27,11 +27,6 @@
#include <stdlib.h>
#include <string.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
@ -840,9 +835,10 @@ preview_update (void)
radius, /* Current radius */
hist0, /* Histogram count for 0 values */
hist255; /* Histogram count for 255 values */
guchar rgba[PREVIEW_SIZE * PREVIEW_SIZE * 4], /* Output image */
*rgba_ptr; /* Pixel pointer for output */
guchar *rgba, /* Output image */
*rgba_ptr; /* Pixel pointer for output */
rgba = g_new (guchar, PREVIEW_SIZE * PREVIEW_SIZE * img_bpp);
/*
* Setup for filter...
*/
@ -965,46 +961,7 @@ preview_update (void)
* Draw this row...
*/
rgba_ptr = rgba + y * preview_width * 4;
switch (img_bpp)
{
case 1:
for (x = preview_width, dst_ptr = preview_dst;
x > 0;
x --, dst_ptr ++, rgba_ptr += 4)
{
rgba_ptr[0] = rgba_ptr[1] = rgba_ptr[2] = *dst_ptr;
rgba_ptr[3] = 255;
}
break;
case 2:
for (x = preview_width, dst_ptr = preview_dst;
x > 0;
x --, dst_ptr += 2, rgba_ptr += 4)
{
rgba_ptr[0] = rgba_ptr[1] = rgba_ptr[2] = dst_ptr[0];
rgba_ptr[3] = dst_ptr[1];
}
break;
case 3:
for (x = preview_width, dst_ptr = preview_dst;
x > 0;
x --, dst_ptr += 3, rgba_ptr += 4)
{
rgba_ptr[0] = dst_ptr[0];
rgba_ptr[1] = dst_ptr[1];
rgba_ptr[2] = dst_ptr[2];
rgba_ptr[3] = 255;
}
break;
case 4:
memcpy (rgba_ptr, preview_dst, preview_width * 4);
break;
};
memcpy (rgba + y * width, preview_dst, width);
};
/*
@ -1013,9 +970,10 @@ preview_update (void)
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, 0, preview_width, preview_height,
GIMP_RGBA_IMAGE,
gimp_drawable_type (drawable->drawable_id),
rgba,
preview_height * 4);
width);
g_free (rgba);
}
static void

View File

@ -27,11 +27,6 @@
#include <stdlib.h>
#include <string.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
@ -271,46 +266,6 @@ run (const gchar *name,
gimp_drawable_detach (drawable);
}
static inline void
preview_draw_row (gint x,
gint y,
gint w,
guchar *row)
{
guchar *rgb = g_new (guchar, w * 3);
guchar *rgb_ptr;
gint i;
switch (img_bpp)
{
case 1:
case 2:
for (i = 0, rgb_ptr = rgb; i < w; i++, row += img_bpp, rgb_ptr += 3)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = *row;
gtk_preview_draw_row (GTK_PREVIEW (preview), rgb, x, y, w);
break;
case 3:
gtk_preview_draw_row (GTK_PREVIEW (preview), row, x, y, w);
break;
case 4:
for (i = 0, rgb_ptr = rgb; i < w; i++, row += 4, rgb_ptr += 3)
{
rgb_ptr[0] = row[0];
rgb_ptr[1] = row[1];
rgb_ptr[2] = row[2];
}
gtk_preview_draw_row (GTK_PREVIEW (preview), rgb, x, y, w);
break;
}
g_free (rgb);
}
static void
destripe_rect (gint sel_x1,
gint sel_y1,
@ -318,15 +273,16 @@ destripe_rect (gint sel_x1,
gint sel_y2,
gboolean do_preview)
{
GimpPixelRgn src_rgn; /* source image region */
GimpPixelRgn dst_rgn; /* destination image region */
guchar *src_rows; /* image data */
double progress, progress_inc;
int sel_width = sel_x2 - sel_x1;
int sel_height = sel_y2 - sel_y1;
long *hist, *corr; /* "histogram" data */
int tile_width = gimp_tile_width ();
int i, x, y, ox, cols;
GimpPixelRgn src_rgn; /* source image region */
GimpPixelRgn dst_rgn; /* destination image region */
guchar *src_rows; /* image data */
guchar *dest_rgba = NULL;
double progress, progress_inc;
int sel_width = sel_x2 - sel_x1;
int sel_height = sel_y2 - sel_y1;
long *hist, *corr; /* "histogram" data */
int tile_width = gimp_tile_width ();
int i, x, y, ox, cols;
/* initialize */
@ -343,6 +299,9 @@ destripe_rect (gint sel_x1,
progress = 0;
progress_inc = 0.5 * tile_width / sel_width;
} else
{
dest_rgba = g_new(guchar, img_bpp * preview_width * preview_height);
}
/*
@ -486,7 +445,8 @@ destripe_rect (gint sel_x1,
}
if (do_preview)
preview_draw_row (ox - sel_x1, y, cols, rows - cols * img_bpp);
memcpy (dest_rgba + img_bpp * (y * preview_width+ox-sel_x1),
rows - cols * img_bpp, cols * img_bpp);
}
if (!do_preview)
@ -505,7 +465,12 @@ destripe_rect (gint sel_x1,
if (do_preview)
{
gtk_widget_queue_draw (preview);
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, 0, preview_width, preview_height,
gimp_drawable_type (drawable->drawable_id),
dest_rgba,
img_bpp * preview_width);
g_free (dest_rgba);
}
else
{
@ -576,8 +541,8 @@ destripe_dialog (void)
preview_width = MIN (sel_x2 - sel_x1, PREVIEW_SIZE);
preview_height = MIN (sel_y2 - sel_y1, PREVIEW_SIZE);
preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_size (GTK_PREVIEW (preview), preview_width, preview_height);
preview = gimp_preview_area_new ();
gtk_widget_set_size_request (preview, preview_width, preview_height);
gtk_container_add (GTK_CONTAINER (frame), preview);
gtk_widget_show (preview);