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> 2004-08-02 Simon Budig <simon@gimp.org>
* app/widgets/gimpbrusheditor.c: Fixed brush spacing for brushes * 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->before);
gtk_widget_hide (Current.Bna->after); gtk_widget_hide (Current.Bna->after);
gtk_preview_size (GTK_PREVIEW (Current.Bna->before), gtk_widget_set_size_request (Current.Bna->before,
Current.reduced->width, Current.reduced->height); Current.reduced->width,
Current.reduced->height);
gtk_preview_size (GTK_PREVIEW (Current.Bna->after), gtk_widget_set_size_request (Current.Bna->after,
Current.reduced->width, Current.reduced->height); Current.reduced->width,
Current.reduced->height);
rcm_render_preview (Current.Bna->before, ORIGINAL); rcm_render_preview (Current.Bna->before, ORIGINAL);
rcm_render_preview (Current.Bna->after, CURRENT); rcm_render_preview (Current.Bna->after, CURRENT);

View File

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

View File

@ -41,14 +41,10 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.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"
#include "libgimp/gimpui.h"
#include "rcm.h" #include "rcm.h"
#include "rcm_misc.h" #include "rcm_misc.h"
@ -320,28 +316,17 @@ rcm_reduce_image (GimpDrawable *drawable,
/* render before/after preview */ /* 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 void
rcm_render_preview (GtkWidget *preview, rcm_render_preview (GtkWidget *preview,
gint version) gint version)
{ {
ReducedImage *reduced; ReducedImage *reduced;
gint RW, RH, bytes, i, j, k, unchanged, skip; gint RW, RH, bytes, i, j, unchanged, skip;
guchar *rgb_array, *a; guchar *rgb_array, *a;
gdouble H, S, V; gdouble H, S, V;
gdouble *hsv_array; gdouble *hsv_array;
guchar rgb[3]; guchar rgb[3];
gfloat degree, transp; gfloat degree;
/* init some variables */ /* init some variables */
@ -354,7 +339,7 @@ rcm_render_preview (GtkWidget *preview,
hsv_array = reduced->hsv; hsv_array = reduced->hsv;
rgb_array = reduced->rgb; rgb_array = reduced->rgb;
a = g_new (guchar, bytes * RW); a = g_new (guchar, 4 * RW * RH);
if (version == CURRENT) if (version == CURRENT)
{ {
@ -413,54 +398,43 @@ rcm_render_preview (GtkWidget *preview,
else else
degree = reduced->mask[i*RW+j] / 255.0; 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[(i*RW+j)*4+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[(i*RW+j)*4+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+2] = (1-degree) * rgb_array[i*RW*bytes + j*bytes + 2] + degree * rgb[2];
/* apply transparency */ /* apply transparency */
if (bytes == 4) if (bytes == 4)
{ a[(i*RW+j)*4+3] = rgb_array[i*RW*bytes+j*bytes+3];
for (k = 0; k < 3; k++) else
{ a[(i*RW+j)*4+3] = 255;
/* 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);
} }
} }
} }
gtk_preview_draw_row (GTK_PREVIEW (preview), a, 0, i, RW);
}
}
else /* ORIGINAL */ else /* ORIGINAL */
{ {
for (i = 0; i < RH; i++) for (i = 0; i < RH; i++)
{ {
for (j = 0; j < RW; j++) for (j = 0; j < RW; j++)
{ {
a[j*3+0] = rgb_array[i*RW*bytes + j*bytes + 0]; a[(i*RW+j)*4+0] = rgb_array[i*RW*bytes + j*bytes + 0];
a[j*3+1] = rgb_array[i*RW*bytes + j*bytes + 1]; a[(i*RW+j)*4+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+2] = rgb_array[i*RW*bytes + j*bytes + 2];
if (bytes == 4) if (bytes == 4)
{ a[(i*RW+j)*4+3] = rgb_array[i*RW*bytes+j*bytes+3];
for (k = 0; k < 3; k++) else
{ a[(i*RW+j)*4+3] = 255;
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);
} }
} }
} }
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
gtk_preview_draw_row (GTK_PREVIEW (preview), a, 0, i, RW); 0, 0, RW, RH,
} GIMP_RGBA_IMAGE,
} a,
RW * 4);
g_free (a); g_free (a);
gtk_widget_queue_draw (preview);
} }
/* render circle */ /* render circle */
void void
@ -474,7 +448,7 @@ rcm_render_circle (GtkWidget *preview,
if (preview == NULL) return; if (preview == NULL) return;
a = g_new (guchar, 3*sum); a = g_new (guchar, 3*sum*sum);
for (j = 0; j < sum; j++) 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)); s = sqrt ((SQR (i - sum / 2.0) + SQR (j - sum / 2.0)) / (float) SQR (sum / 2.0 - margin));
if (s > 1) if (s > 1)
{ {
a[i*3+0] = 255; a[(j*sum+i)*3+0] = 255;
a[i*3+1] = 255; a[(j*sum+i)*3+1] = 255;
a[i*3+2] = 255; a[(j*sum+i)*3+2] = 255;
} }
else else
{ {
h = arctg (sum / 2.0 - j, i - sum / 2.0) / (2 * G_PI); h = arctg (sum / 2.0 - j, i - sum / 2.0) / (2 * G_PI);
v = 1 - sqrt (s) / 4; 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); g_free (a);
gtk_widget_queue_draw (preview);
} }