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:
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user