plug-ins/rcm/rcm_callback.c plug-ins/rcm/rcm_dialog.c Ported to

* plug-ins/rcm/rcm_callback.c
* plug-ins/rcm/rcm_dialog.c
* plug-ins/rcm/rcm_misc.c: Ported to GimpPreviewArea.
This commit is contained in:
David Odin
2004-08-02 22:16:35 +00:00
parent 7f95f04342
commit 7f60b3eb9a
4 changed files with 53 additions and 76 deletions

View File

@ -1,3 +1,9 @@
2004-08-03 DindinX <david@dindinx.org>
* plug-ins/rcm/rcm_callback.c
* plug-ins/rcm/rcm_dialog.c
* plug-ins/rcm/rcm_misc.c: Ported to GimpPreviewArea.
2004-08-02 Simon Budig <simon@gimp.org>
* app/widgets/gimpbrusheditor.c: Fixed brush spacing for brushes

View File

@ -364,11 +364,13 @@ rcm_change_preview (void)
gtk_widget_hide (Current.Bna->before);
gtk_widget_hide (Current.Bna->after);
gtk_preview_size (GTK_PREVIEW (Current.Bna->before),
Current.reduced->width, Current.reduced->height);
gtk_widget_set_size_request (Current.Bna->before,
Current.reduced->width,
Current.reduced->height);
gtk_preview_size (GTK_PREVIEW (Current.Bna->after),
Current.reduced->width, Current.reduced->height);
gtk_widget_set_size_request (Current.Bna->after,
Current.reduced->width,
Current.reduced->height);
rcm_render_preview (Current.Bna->before, ORIGINAL);
rcm_render_preview (Current.Bna->after, CURRENT);

View File

@ -41,11 +41,6 @@
#include <stdio.h>
#include <stdlib.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
@ -90,9 +85,9 @@ rcm_create_one_preview (GtkWidget **preview,
gtk_frame_set_shadow_type (GTK_FRAME (*frame), GTK_SHADOW_IN);
gtk_widget_show (*frame);
*preview = gtk_preview_new (GTK_PREVIEW_COLOR);
*preview = gimp_preview_area_new ();
gtk_preview_size (GTK_PREVIEW (*preview), previewWidth, previewHeight);
gtk_widget_set_size_request (*preview, previewWidth, previewHeight);
gtk_container_add (GTK_CONTAINER (*frame), *preview);
gtk_widget_show (*preview);
}
@ -263,8 +258,8 @@ rcm_create_one_circle (gint height,
gtk_widget_show (frame);
/* create preview */
st->preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_size (GTK_PREVIEW (st->preview), height, height);
st->preview = gimp_preview_area_new ();
gtk_widget_set_size_request (st->preview, height, height);
gtk_container_add (GTK_CONTAINER (frame), st->preview);
gtk_widget_show (st->preview);
@ -287,8 +282,6 @@ rcm_create_one_circle (gint height,
G_CALLBACK (rcm_motion_notify_event),
st);
rcm_render_circle (st->preview, SUM, MARGIN);
/** Main: Circle: create table for buttons **/
button_table = gtk_table_new (3, 1, FALSE);
gtk_widget_show (button_table);
@ -462,8 +455,8 @@ rcm_create_gray (void)
gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
st->preview = preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_size (GTK_PREVIEW (preview), GRAY_SUM, GRAY_SUM);
st->preview = preview = gimp_preview_area_new ();
gtk_widget_set_size_request (preview, GRAY_SUM, GRAY_SUM);
gtk_container_add (GTK_CONTAINER (frame), preview);
gtk_widget_show (preview);
@ -598,9 +591,6 @@ rcm_create_gray (void)
G_CALLBACK (rcm_set_gray_sat),
st);
/* update circle (preview) */
rcm_render_circle (preview, GRAY_SUM, GRAY_MARGIN);
return top_vbox;
}
@ -723,6 +713,9 @@ rcm_dialog (void)
rcm_render_preview (Current.Bna->before, ORIGINAL);
rcm_render_preview (Current.Bna->after, CURRENT);
rcm_render_circle (Current.From->preview, SUM, MARGIN);
rcm_render_circle (Current.To->preview, SUM, MARGIN);
rcm_render_circle (Current.Gray->preview, GRAY_SUM, GRAY_MARGIN);
rcm_set_pixmaps (Current.From);
rcm_set_pixmaps (Current.To);

View File

@ -41,14 +41,10 @@
#include <stdio.h>
#include <stdlib.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include "libgimp/gimp.h"
#include "libgimp/gimpui.h"
#include "rcm.h"
#include "rcm_misc.h"
@ -320,28 +316,17 @@ rcm_reduce_image (GimpDrawable *drawable,
/* render before/after preview */
static gint
rcm_fake_transparency (gint i,
gint j)
{
if ( ((i%20)-10)*((j%20)-10) > 0 )
return 102;
return 153;
}
void
rcm_render_preview (GtkWidget *preview,
gint version)
{
ReducedImage *reduced;
gint RW, RH, bytes, i, j, k, unchanged, skip;
gint RW, RH, bytes, i, j, unchanged, skip;
guchar *rgb_array, *a;
gdouble H, S, V;
gdouble *hsv_array;
guchar rgb[3];
gfloat degree, transp;
gfloat degree;
/* init some variables */
@ -354,7 +339,7 @@ rcm_render_preview (GtkWidget *preview,
hsv_array = reduced->hsv;
rgb_array = reduced->rgb;
a = g_new (guchar, bytes * RW);
a = g_new (guchar, 4 * RW * RH);
if (version == CURRENT)
{
@ -413,23 +398,16 @@ rcm_render_preview (GtkWidget *preview,
else
degree = reduced->mask[i*RW+j] / 255.0;
a[j*3+0] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 0] + degree * rgb[0];
a[j*3+1] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 1] + degree * rgb[1];
a[j*3+2] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 2] + degree * rgb[2];
a[(i*RW+j)*4+0] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 0] + degree * rgb[0];
a[(i*RW+j)*4+1] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 1] + degree * rgb[1];
a[(i*RW+j)*4+2] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 2] + degree * rgb[2];
/* apply transparency */
if (bytes == 4)
{
for (k = 0; k < 3; k++)
{
/* transp = reduced->mask[i*RW*bytes+j*bytes+3] / 255.0; */
transp = rgb_array[i*RW*bytes+j*bytes+3] / 255.0;
a[3*j+k] = transp * a[3*j+k] + (1-transp) * rcm_fake_transparency(i,j);
}
}
a[(i*RW+j)*4+3] = rgb_array[i*RW*bytes+j*bytes+3];
else
a[(i*RW+j)*4+3] = 255;
}
gtk_preview_draw_row (GTK_PREVIEW (preview), a, 0, i, RW);
}
}
else /* ORIGINAL */
@ -438,29 +416,25 @@ rcm_render_preview (GtkWidget *preview,
{
for (j = 0; j < RW; j++)
{
a[j*3+0] = rgb_array[i*RW*bytes + j*bytes + 0];
a[j*3+1] = rgb_array[i*RW*bytes + j*bytes + 1];
a[j*3+2] = rgb_array[i*RW*bytes + j*bytes + 2];
a[(i*RW+j)*4+0] = rgb_array[i*RW*bytes + j*bytes + 0];
a[(i*RW+j)*4+1] = rgb_array[i*RW*bytes + j*bytes + 1];
a[(i*RW+j)*4+2] = rgb_array[i*RW*bytes + j*bytes + 2];
if (bytes == 4)
{
for (k = 0; k < 3; k++)
{
transp = rgb_array[i*RW*bytes+j*bytes+3] / 255.0;
a[3*j+k] = transp * a[3*j+k] + (1-transp) * rcm_fake_transparency(i,j);
}
}
a[(i*RW+j)*4+3] = rgb_array[i*RW*bytes+j*bytes+3];
else
a[(i*RW+j)*4+3] = 255;
}
gtk_preview_draw_row (GTK_PREVIEW (preview), a, 0, i, RW);
}
}
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, 0, RW, RH,
GIMP_RGBA_IMAGE,
a,
RW * 4);
g_free (a);
gtk_widget_queue_draw (preview);
}
/* render circle */
void
@ -474,7 +448,7 @@ rcm_render_circle (GtkWidget *preview,
if (preview == NULL) return;
a = g_new (guchar, 3*sum);
a = g_new (guchar, 3*sum*sum);
for (j = 0; j < sum; j++)
{
@ -483,21 +457,23 @@ rcm_render_circle (GtkWidget *preview,
s = sqrt ((SQR (i - sum / 2.0) + SQR (j - sum / 2.0)) / (float) SQR (sum / 2.0 - margin));
if (s > 1)
{
a[i*3+0] = 255;
a[i*3+1] = 255;
a[i*3+2] = 255;
a[(j*sum+i)*3+0] = 255;
a[(j*sum+i)*3+1] = 255;
a[(j*sum+i)*3+2] = 255;
}
else
{
h = arctg (sum / 2.0 - j, i - sum / 2.0) / (2 * G_PI);
v = 1 - sqrt (s) / 4;
gimp_hsv_to_rgb4 (&a[i*3], h, s, v);
gimp_hsv_to_rgb4 (&a[(j*sum+i)*3], h, s, v);
}
}
gtk_preview_draw_row (GTK_PREVIEW (preview), a, 0, j, sum);
}
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, 0, sum, sum,
GIMP_RGB_IMAGE,
a,
sum * 3);
g_free (a);
gtk_widget_queue_draw (preview);
}