Transformed one GtkPreview to a GimpPreviewArea and the other to a simple

* plug-ins/common/CML_explorer.c: Transformed one GtkPreview to a
  GimpPreviewArea and the other to a simple GtkDrawingArea, since this
  makes the code simpler.
This commit is contained in:
David Odin
2004-07-30 18:45:34 +00:00
parent 74448f4b3a
commit 37807e024a
2 changed files with 621 additions and 612 deletions

View File

@ -1,3 +1,9 @@
2004-07-30 DindinX <david@dindinx.org>
* plug-ins/common/CML_explorer.c: Transformed one GtkPreview to a
GimpPreviewArea and the other to a simple GtkDrawingArea, since this
makes the code simpler.
2004-07-30 Shlomi Fish <shlomif@iglu.org.il>
* libgimpwidgets/gimppreviewarea.c (gimp_preview_area_draw):

View File

@ -76,11 +76,6 @@
#include <stdlib.h>
#include <string.h>
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
@ -771,7 +766,6 @@ CML_main_function (gboolean preview_p)
/* rendering */
for (dy = 0; dy < height_by_pixel; dy += VALS.scale)
{
gint i = 0;
gint r, g, b, h, s, v;
gint offset_x, offset_y, dest_offset;
@ -859,10 +853,12 @@ CML_main_function (gboolean preview_p)
}
if (preview_p)
for (i = 0; i < keep_height; i++)
gtk_preview_draw_row (GTK_PREVIEW (preview),
dest_buffer + dest_bpl * i, 0, dy + i,
width_by_pixel);
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, dy,
width_by_pixel, keep_height,
GIMP_RGB_IMAGE,
dest_buffer,
dest_bpl);
else
gimp_pixel_rgn_set_rect (&dest_rgn, dest_buffer, x1, y1 + dy,
width_by_pixel, keep_height);
@ -1215,8 +1211,8 @@ CML_explorer_dialog (void)
gtk_container_add (GTK_CONTAINER (abox), frame);
gtk_widget_show (frame);
preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_size (GTK_PREVIEW (preview),
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);
@ -1760,6 +1756,57 @@ preview_update (void)
CML_main_function (TRUE);
}
static gboolean
function_graph_expose (GtkWidget *widget,
GdkEventExpose *ev,
gpointer *data)
{
gint x, y, last_y;
gint rgbi[3];
guchar *buffer;
gint channel_id = GPOINTER_TO_INT (data[0]);
CML_PARAM *param = data[1];
buffer = g_new (guchar, 256*256*3);
for (x = 0; x < 256; x++)
{
/* hue */
rgbi[0] = rgbi[1] = rgbi[2] = 127;
if ((0 <= channel_id) && (channel_id <= 2))
rgbi[channel_id] = CANNONIZE ((*param), ((gdouble) x / (gdouble) 255));
gimp_hsv_to_rgb_int (rgbi, rgbi+1, rgbi+2);
for (y = 0; y < 256; y++)
{
buffer[(y*256+x)*3+0] = rgbi[0];
buffer[(y*256+x)*3+1] = rgbi[1];
buffer[(y*256+x)*3+2] = rgbi[2];
}
}
gdk_draw_rgb_image (widget->window, widget->style->black_gc,
0, 0, 256, 256,
GDK_RGB_DITHER_NORMAL,
buffer,
3 * 256);
g_free (buffer);
gdk_draw_line (widget->window, widget->style->white_gc, 0,255, 255, 0);
y = 255 * CLAMP (logistic_function (param, 0, param->power),
0, 1.0);
for (x = 0; x < 256; x++)
{
last_y = y;
/* curve */
y = 255 * CLAMP (logistic_function (param, x/(gdouble)255, param->power),
0, 1.0);
gdk_draw_line (widget->window, widget->style->black_gc,
x, 255-last_y, x, 255-y);
}
return TRUE;
}
static void
function_graph_new (GtkWidget *widget,
gpointer *data)
@ -1767,8 +1814,6 @@ function_graph_new (GtkWidget *widget,
GtkWidget *dlg;
GtkWidget *frame;
GtkWidget *preview;
gint channel_id = GPOINTER_TO_INT (data[0]);
CML_PARAM *param = data[1];
dlg = gimp_dialog_new (_("Graph of the current settings"), "cml_explorer",
gtk_widget_get_toplevel (widget), 0,
@ -1784,54 +1829,12 @@ function_graph_new (GtkWidget *widget,
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
preview = gtk_drawing_area_new ();
gtk_widget_set_size_request (preview, 256, 256);
gtk_container_add (GTK_CONTAINER (frame), preview);
gtk_widget_show (preview);
{
gint x, y, last_y, yy;
guchar rgbc[3];
gint rgbi[3];
guchar black[] = { 0, 0, 0 };
guchar white[] = { 255, 255, 255 };
for (x = 0; x < 256; x++)
{
#define FAST_AND_FULLCOLOR 1
#ifdef FAST_AND_FULLCOLOR
/* hue */
rgbi[0] = rgbi[1] = rgbi[2] = 127;
if ((0 <= channel_id) && (channel_id <= 2))
rgbi[channel_id] = CANNONIZE ((*param), ((gdouble) x / (gdouble) 255));
gimp_hsv_to_rgb_int (rgbi, rgbi+1, rgbi+2);
for (y = 0; y < 3; y++)
rgbc[y] = rgbi[y];
#endif
for (y = 0; y < 256; y++)
gtk_preview_draw_row (GTK_PREVIEW (preview),
#ifdef FAST_AND_FULLCOLOR
rgbc,
#else
white,
#endif
x, y, 1);
}
y = 255 * CLAMP (logistic_function (param, x / (gdouble) 255, param->power),
0, 1.0);
for (x = 0; x < 256; x++)
{
last_y = y;
/* curve */
gtk_preview_draw_row (GTK_PREVIEW (preview), white, x, 255 - x, 1);
y = 255 * CLAMP (logistic_function (param, x/(gdouble)255, param->power),
0, 1.0);
for (yy = MIN (y, last_y); yy <= MAX (y, last_y); yy++)
gtk_preview_draw_row (GTK_PREVIEW (preview), black, x, 255 - yy, 1);
}
}
g_signal_connect (preview, "expose_event",
G_CALLBACK (function_graph_expose), data);
gtk_widget_show (dlg);