ported to GimpPreviewArea.

* plug-ins/common/despeckle.c: ported to GimpPreviewArea.
This commit is contained in:
David Odin
2004-07-31 10:38:05 +00:00
parent 5ab2ac02dd
commit f02be81071
2 changed files with 372 additions and 398 deletions

View File

@ -1,3 +1,7 @@
2004-07-31 DindinX <david@dindinx.org>
* plug-ins/common/despeckle.c: ported to GimpPreviewArea.
2004-07-31 Shlomi Fish <shlomif@iglu.org.il>
* plug-ins/gimpressionist/brush.c

View File

@ -631,8 +631,8 @@ despeckle_dialog (void)
preview_width = MIN (sel_width, PREVIEW_SIZE);
preview_height = MIN (sel_height, 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);
@ -798,7 +798,7 @@ preview_init (void)
g_free (preview_sort);
}
preview_src = (guchar *) g_new (guchar *, width * preview_height);
preview_src = g_new (guchar, width * preview_height);
preview_dst = g_new (guchar, width);
preview_sort = g_new (guchar, size * size);
}
@ -840,10 +840,8 @@ preview_update (void)
radius, /* Current radius */
hist0, /* Histogram count for 0 values */
hist255; /* Histogram count for 255 values */
guchar check, /* Checkerboard pattern */
rgb[PREVIEW_SIZE * PREVIEW_SIZE * 3],
/* Output image */
*rgb_ptr; /* Pixel pointer for output */
guchar rgba[PREVIEW_SIZE * PREVIEW_SIZE * 4], /* Output image */
*rgba_ptr; /* Pixel pointer for output */
/*
* Setup for filter...
@ -967,71 +965,44 @@ preview_update (void)
* Draw this row...
*/
rgb_ptr = rgb + y * preview_width * 3;
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 ++, rgb_ptr += 3)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = *dst_ptr;
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, rgb_ptr += 3)
if (dst_ptr[1] == 255)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = *dst_ptr;
else
x --, dst_ptr += 2, rgba_ptr += 4)
{
if ((y & GIMP_CHECK_SIZE) ^ (x & GIMP_CHECK_SIZE))
check = GIMP_CHECK_LIGHT * 255;
else
check = GIMP_CHECK_DARK * 255;
if (dst_ptr[1] == 0)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = check;
else
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] =
check + ((dst_ptr[0] - check) * dst_ptr[1]) / 255;
};
rgba_ptr[0] = rgba_ptr[1] = rgba_ptr[2] = dst_ptr[0];
rgba_ptr[3] = dst_ptr[1];
}
break;
case 3:
memcpy (rgb_ptr, preview_dst, preview_width * 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:
for (x = preview_width, dst_ptr = preview_dst;
x > 0;
x --, dst_ptr += 4, rgb_ptr += 3)
if (dst_ptr[3] == 255)
{
rgb_ptr[0] = dst_ptr[0];
rgb_ptr[1] = dst_ptr[1];
rgb_ptr[2] = dst_ptr[2];
}
else
{
if ((y & GIMP_CHECK_SIZE) ^ (x & GIMP_CHECK_SIZE))
check = GIMP_CHECK_LIGHT * 255;
else
check = GIMP_CHECK_DARK * 255;
if (dst_ptr[3] == 0)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = check;
else
{
rgb_ptr[0] =
check + ((dst_ptr[0] - check) * dst_ptr[3]) / 255;
rgb_ptr[1] =
check + ((dst_ptr[1] - check) * dst_ptr[3]) / 255;
rgb_ptr[2] =
check + ((dst_ptr[2] - check) * dst_ptr[3]) / 255;
};
};
memcpy (rgba_ptr, preview_dst, preview_width * 4);
break;
};
};
@ -1040,12 +1011,11 @@ preview_update (void)
* Update the screen...
*/
for (y = 0, rgb_ptr = rgb;
y < preview_height;
y ++, rgb_ptr += preview_width * 3)
gtk_preview_draw_row (GTK_PREVIEW (preview), rgb_ptr, 0, y, preview_width);
gtk_widget_queue_draw (preview);
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, 0, preview_width, preview_height,
GIMP_RGBA_IMAGE,
rgba,
preview_height * 4);
}
static void