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> 2004-07-31 Shlomi Fish <shlomif@iglu.org.il>
* plug-ins/gflare/gflare.c: ported to GimpPreviewArea. * plug-ins/gflare/gflare.c: ported to GimpPreviewArea.

View File

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

View File

@ -27,11 +27,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <libgimp/gimp.h> #include <libgimp/gimp.h>
@ -271,46 +266,6 @@ run (const gchar *name,
gimp_drawable_detach (drawable); 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 static void
destripe_rect (gint sel_x1, destripe_rect (gint sel_x1,
gint sel_y1, gint sel_y1,
@ -318,15 +273,16 @@ destripe_rect (gint sel_x1,
gint sel_y2, gint sel_y2,
gboolean do_preview) gboolean do_preview)
{ {
GimpPixelRgn src_rgn; /* source image region */ GimpPixelRgn src_rgn; /* source image region */
GimpPixelRgn dst_rgn; /* destination image region */ GimpPixelRgn dst_rgn; /* destination image region */
guchar *src_rows; /* image data */ guchar *src_rows; /* image data */
double progress, progress_inc; guchar *dest_rgba = NULL;
int sel_width = sel_x2 - sel_x1; double progress, progress_inc;
int sel_height = sel_y2 - sel_y1; int sel_width = sel_x2 - sel_x1;
long *hist, *corr; /* "histogram" data */ int sel_height = sel_y2 - sel_y1;
int tile_width = gimp_tile_width (); long *hist, *corr; /* "histogram" data */
int i, x, y, ox, cols; int tile_width = gimp_tile_width ();
int i, x, y, ox, cols;
/* initialize */ /* initialize */
@ -343,6 +299,9 @@ destripe_rect (gint sel_x1,
progress = 0; progress = 0;
progress_inc = 0.5 * tile_width / sel_width; 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) 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) if (!do_preview)
@ -505,7 +465,12 @@ destripe_rect (gint sel_x1,
if (do_preview) 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 else
{ {
@ -576,8 +541,8 @@ destripe_dialog (void)
preview_width = MIN (sel_x2 - sel_x1, PREVIEW_SIZE); preview_width = MIN (sel_x2 - sel_x1, PREVIEW_SIZE);
preview_height = MIN (sel_y2 - sel_y1, PREVIEW_SIZE); preview_height = MIN (sel_y2 - sel_y1, PREVIEW_SIZE);
preview = gtk_preview_new (GTK_PREVIEW_COLOR); preview = gimp_preview_area_new ();
gtk_preview_size (GTK_PREVIEW (preview), preview_width, preview_height); gtk_widget_set_size_request (preview, preview_width, preview_height);
gtk_container_add (GTK_CONTAINER (frame), preview); gtk_container_add (GTK_CONTAINER (frame), preview);
gtk_widget_show (preview); gtk_widget_show (preview);