some more work on the gimpcolorbutton and its usage

--Sven
This commit is contained in:
Sven Neumann 1999-11-16 23:19:04 +00:00
parent 44774c222f
commit 51269ffffa
12 changed files with 569 additions and 574 deletions

View File

@ -1,3 +1,19 @@
Wed Nov 17 00:14:11 MET 1999 Sven Neumann <sven@gimp.org>
* libgimp/gimpcolorbutton.c: hide the colorselection dialog when
the button is set insensitive
* plug-ins/common/Makefile.am
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plugin-defs.pl
* plug-ins/sinus/Makefile.am
* plug-ins/sinus/sinus.c
* plug-ins/sinus/sinus_logo.h
* plug-ins/gap/iter_ALT/mod/plug_in_sinus_iter_ALT.inc
* po-plug-ins/POTFILES.in: made supernova, papertile and sinus use
the gimpcolorbutton, internationalized the plug-ins while I was on it
1999-11-16 Michael Natterer <mitch@gimp.org>
* libgimp/gimpchainbutton.c: the chainbutton's parent_class is a

View File

@ -66,10 +66,10 @@ struct _GimpColorButton
GtkButton button;
gchar *title;
gint width;
gint height;
guchar *color;
gint bpp;
gint width;
gint height;
gdouble *dcolor;
GtkWidget *preview;
@ -81,15 +81,18 @@ struct _GimpColorButton
};
static void gimp_color_button_destroy (GtkObject *object);
static void gimp_color_button_clicked (GtkButton *button);
static void gimp_color_button_paint (GimpColorButton *gcb);
static void gimp_color_button_destroy (GtkObject *object);
static void gimp_color_button_clicked (GtkButton *button);
static void gimp_color_button_paint (GimpColorButton *gcb);
static void gimp_color_button_state_changed (GtkWidget *widget, GtkStateType previous_state);
static void gimp_color_button_dialog_ok (GtkWidget *widget, gpointer data);
static void gimp_color_button_dialog_cancel (GtkWidget *widget, gpointer data);
static void gimp_color_button_dialog_ok (GtkWidget *widget, gpointer data);
static void gimp_color_button_dialog_cancel (GtkWidget *widget, gpointer data);
static void gimp_color_button_use_fg (gpointer callback_data, guint callback_action, GtkWidget *widget);
static void gimp_color_button_use_bg (gpointer callback_data, guint callback_action, GtkWidget *widget);
static void gimp_color_button_use_fg (gpointer callback_data, guint callback_action,
GtkWidget *widget);
static void gimp_color_button_use_bg (gpointer callback_data, guint callback_action,
GtkWidget *widget);
static gint gimp_color_button_menu_popup (GtkWidget *widget, GdkEvent *event, gpointer data);
static gchar* gimp_color_button_menu_translate (const gchar *path, gpointer func_data);
@ -137,10 +140,12 @@ static void
gimp_color_button_class_init (GimpColorButtonClass *class)
{
GtkObjectClass *object_class;
GtkButtonClass *widget_class;
GtkButtonClass *button_class;
GtkWidgetClass *widget_class;
object_class = (GtkObjectClass*) class;
widget_class = (GtkButtonClass*) class;
button_class = (GtkButtonClass*) class;
widget_class = (GtkWidgetClass*) class;
parent_class = gtk_type_class (gtk_widget_get_type ());
@ -155,10 +160,12 @@ gimp_color_button_class_init (GimpColorButtonClass *class)
LAST_SIGNAL);
class->color_changed = NULL;
widget_class->clicked = gimp_color_button_clicked;
object_class->destroy = gimp_color_button_destroy;
object_class->destroy = gimp_color_button_destroy;
button_class->clicked = gimp_color_button_clicked;
widget_class->state_changed = gimp_color_button_state_changed;
}
static void
gimp_color_button_init (GimpColorButton *gcb)
{
@ -220,7 +227,7 @@ gimp_color_button_new (gchar *title,
gcb->height = height;
gcb->color = color;
gcb->bpp = bpp;
gcb->dcolor = g_new (gdouble, 4);
gcb->even = g_new (guchar, 3 * width);
gcb->odd = g_new (guchar, 3 * width);
@ -234,6 +241,7 @@ gimp_color_button_new (gchar *title,
gcb->preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_signal_connect (GTK_OBJECT (gcb->preview), "destroy",
gtk_widget_destroyed, &gcb->preview);
gtk_preview_size (GTK_PREVIEW (gcb->preview), width, height);
gtk_container_add (GTK_CONTAINER (gcb), gcb->preview);
gtk_widget_show (gcb->preview);
@ -299,6 +307,19 @@ gimp_color_button_update (GimpColorButton *gcb)
gcb->dcolor);
}
static void
gimp_color_button_state_changed (GtkWidget *widget,
GtkStateType previous_state)
{
g_return_if_fail (GIMP_IS_COLOR_BUTTON (widget));
if (!GTK_WIDGET_IS_SENSITIVE (widget) && GIMP_COLOR_BUTTON (widget)->dialog)
gtk_widget_hide (GIMP_COLOR_BUTTON (widget)->dialog);
if (GTK_WIDGET_CLASS (parent_class)->state_changed)
(* GTK_WIDGET_CLASS (parent_class)->state_changed) (widget, previous_state);
}
static gint
gimp_color_button_menu_popup (GtkWidget *widget,
GdkEvent *event,
@ -352,8 +373,10 @@ gimp_color_button_clicked (GtkButton *button)
gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (gcb->dialog)->cancel_button),
"clicked",
(GtkSignalFunc) gimp_color_button_dialog_cancel, gcb);
gtk_window_position (GTK_WINDOW (gcb->dialog), GTK_WIN_POS_MOUSE);
gtk_window_position (GTK_WINDOW (gcb->dialog), GTK_WIN_POS_MOUSE);
}
gtk_color_selection_set_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (gcb->dialog)->colorsel),
gcb->dcolor);
gtk_widget_show (gcb->dialog);
}
@ -433,7 +456,7 @@ gimp_color_button_dialog_ok (GtkWidget *widget,
gcb->color[i] = new_color[i];
}
gtk_widget_destroy (gcb->dialog);
gtk_widget_hide (gcb->dialog);
if (color_changed)
{
@ -452,7 +475,7 @@ gimp_color_button_dialog_cancel (GtkWidget *widget,
g_return_if_fail (GIMP_IS_COLOR_BUTTON (data));
gcb = GIMP_COLOR_BUTTON (data);
gtk_widget_destroy (gcb->dialog);
gtk_widget_hide (gcb->dialog);
}

View File

@ -66,10 +66,10 @@ struct _GimpColorButton
GtkButton button;
gchar *title;
gint width;
gint height;
guchar *color;
gint bpp;
gint width;
gint height;
gdouble *dcolor;
GtkWidget *preview;
@ -81,15 +81,18 @@ struct _GimpColorButton
};
static void gimp_color_button_destroy (GtkObject *object);
static void gimp_color_button_clicked (GtkButton *button);
static void gimp_color_button_paint (GimpColorButton *gcb);
static void gimp_color_button_destroy (GtkObject *object);
static void gimp_color_button_clicked (GtkButton *button);
static void gimp_color_button_paint (GimpColorButton *gcb);
static void gimp_color_button_state_changed (GtkWidget *widget, GtkStateType previous_state);
static void gimp_color_button_dialog_ok (GtkWidget *widget, gpointer data);
static void gimp_color_button_dialog_cancel (GtkWidget *widget, gpointer data);
static void gimp_color_button_dialog_ok (GtkWidget *widget, gpointer data);
static void gimp_color_button_dialog_cancel (GtkWidget *widget, gpointer data);
static void gimp_color_button_use_fg (gpointer callback_data, guint callback_action, GtkWidget *widget);
static void gimp_color_button_use_bg (gpointer callback_data, guint callback_action, GtkWidget *widget);
static void gimp_color_button_use_fg (gpointer callback_data, guint callback_action,
GtkWidget *widget);
static void gimp_color_button_use_bg (gpointer callback_data, guint callback_action,
GtkWidget *widget);
static gint gimp_color_button_menu_popup (GtkWidget *widget, GdkEvent *event, gpointer data);
static gchar* gimp_color_button_menu_translate (const gchar *path, gpointer func_data);
@ -137,10 +140,12 @@ static void
gimp_color_button_class_init (GimpColorButtonClass *class)
{
GtkObjectClass *object_class;
GtkButtonClass *widget_class;
GtkButtonClass *button_class;
GtkWidgetClass *widget_class;
object_class = (GtkObjectClass*) class;
widget_class = (GtkButtonClass*) class;
button_class = (GtkButtonClass*) class;
widget_class = (GtkWidgetClass*) class;
parent_class = gtk_type_class (gtk_widget_get_type ());
@ -155,10 +160,12 @@ gimp_color_button_class_init (GimpColorButtonClass *class)
LAST_SIGNAL);
class->color_changed = NULL;
widget_class->clicked = gimp_color_button_clicked;
object_class->destroy = gimp_color_button_destroy;
object_class->destroy = gimp_color_button_destroy;
button_class->clicked = gimp_color_button_clicked;
widget_class->state_changed = gimp_color_button_state_changed;
}
static void
gimp_color_button_init (GimpColorButton *gcb)
{
@ -220,7 +227,7 @@ gimp_color_button_new (gchar *title,
gcb->height = height;
gcb->color = color;
gcb->bpp = bpp;
gcb->dcolor = g_new (gdouble, 4);
gcb->even = g_new (guchar, 3 * width);
gcb->odd = g_new (guchar, 3 * width);
@ -234,6 +241,7 @@ gimp_color_button_new (gchar *title,
gcb->preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_signal_connect (GTK_OBJECT (gcb->preview), "destroy",
gtk_widget_destroyed, &gcb->preview);
gtk_preview_size (GTK_PREVIEW (gcb->preview), width, height);
gtk_container_add (GTK_CONTAINER (gcb), gcb->preview);
gtk_widget_show (gcb->preview);
@ -299,6 +307,19 @@ gimp_color_button_update (GimpColorButton *gcb)
gcb->dcolor);
}
static void
gimp_color_button_state_changed (GtkWidget *widget,
GtkStateType previous_state)
{
g_return_if_fail (GIMP_IS_COLOR_BUTTON (widget));
if (!GTK_WIDGET_IS_SENSITIVE (widget) && GIMP_COLOR_BUTTON (widget)->dialog)
gtk_widget_hide (GIMP_COLOR_BUTTON (widget)->dialog);
if (GTK_WIDGET_CLASS (parent_class)->state_changed)
(* GTK_WIDGET_CLASS (parent_class)->state_changed) (widget, previous_state);
}
static gint
gimp_color_button_menu_popup (GtkWidget *widget,
GdkEvent *event,
@ -352,8 +373,10 @@ gimp_color_button_clicked (GtkButton *button)
gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (gcb->dialog)->cancel_button),
"clicked",
(GtkSignalFunc) gimp_color_button_dialog_cancel, gcb);
gtk_window_position (GTK_WINDOW (gcb->dialog), GTK_WIN_POS_MOUSE);
gtk_window_position (GTK_WINDOW (gcb->dialog), GTK_WIN_POS_MOUSE);
}
gtk_color_selection_set_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (gcb->dialog)->colorsel),
gcb->dcolor);
gtk_widget_show (gcb->dialog);
}
@ -433,7 +456,7 @@ gimp_color_button_dialog_ok (GtkWidget *widget,
gcb->color[i] = new_color[i];
}
gtk_widget_destroy (gcb->dialog);
gtk_widget_hide (gcb->dialog);
if (color_changed)
{
@ -452,7 +475,7 @@ gimp_color_button_dialog_cancel (GtkWidget *widget,
g_return_if_fail (GIMP_IS_COLOR_BUTTON (data));
gcb = GIMP_COLOR_BUTTON (data);
gtk_widget_destroy (gcb->dialog);
gtk_widget_hide (gcb->dialog);
}

View File

@ -747,6 +747,7 @@ nova_SOURCES = \
nova.c
nova_LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)
@ -763,6 +764,7 @@ papertile_SOURCES = \
papertile.c
papertile_LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)

View File

@ -61,6 +61,8 @@
#include <time.h>
#include "gtk/gtk.h"
#include "libgimp/gimp.h"
#include "libgimp/gimpui.h"
#include "libgimp/stdplugins-intl.h"
#ifdef RCSID
static char rcsid[] = "$Id$";
@ -100,7 +102,7 @@ static void dummy_printf( char *fmt, ... ) {}
typedef struct {
gint xcenter, ycenter;
gint color[3];
guchar color[3];
gint radius;
gint nspoke;
gint randomhue;
@ -113,31 +115,31 @@ typedef struct {
typedef struct {
GtkObject *adjustment;
GtkWidget *entry;
gint constraint;
gint constraint;
} NovaEntryScaleData;
typedef struct
{
GDrawable *drawable;
gint dwidth, dheight;
gint bpp;
gint dwidth, dheight;
gint bpp;
GtkWidget *xentry, *yentry;
GtkWidget *preview;
gint pwidth, pheight;
gint cursor;
gint curx, cury; /* x,y of cursor in preview */
gint oldx, oldy;
gint in_call;
gint pwidth, pheight;
gint cursor;
gint curx, cury; /* x,y of cursor in preview */
gint oldx, oldy;
gint in_call;
} NovaCenter;
/* Declare a local function.
*/
static void query (void);
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals);
static gint nova_dialog ( GDrawable *drawable );
@ -199,7 +201,7 @@ GPlugInInfo PLUG_IN_INFO =
static NovaValues pvals =
{
128, 128, /* xcenter, ycenter */
{ 90, 100, 256 }, /* color */
{ 90, 100, 255 }, /* color */
20, /* radius */
100, /* nspoke */
0 /* random hue */
@ -214,7 +216,7 @@ static NovaInterface pint =
MAIN ()
static void
query()
query ()
{
static GParamDef args[]=
{
@ -251,10 +253,10 @@ query()
}
static void
run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
@ -321,7 +323,7 @@ run (gchar *name,
/* Make sure that the drawable is gray or RGB color */
if (gimp_drawable_is_rgb (drawable->id) || gimp_drawable_is_gray (drawable->id))
{
gimp_progress_init ("Rendering...");
gimp_progress_init (_("Rendering SuperNova..."));
gimp_tile_cache_ntiles (TILE_CACHE_SIZE);
nova (drawable);
@ -353,11 +355,14 @@ run (gchar *name,
/*******************/
static gint
nova_dialog ( GDrawable *drawable )
nova_dialog (GDrawable *drawable)
{
GtkWidget *dlg;
GtkWidget *hbbox;
GtkWidget *frame;
GtkWidget *table;
GtkWidget *label;
GtkWidget *align;
GtkWidget *button;
GtkWidget *center_frame;
guchar *color_cube;
@ -387,62 +392,76 @@ nova_dialog ( GDrawable *drawable )
#endif
dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dlg), "SuperNova");
gtk_window_set_title (GTK_WINDOW (dlg), _("SuperNova"));
gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
(GtkSignalFunc) nova_close_callback,
NULL);
/* Action area */
button = gtk_button_new_with_label ("OK");
/* Action area */
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dlg)->action_area), 2);
gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dlg)->action_area), FALSE);
hbbox = gtk_hbutton_box_new ();
gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 4);
gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), hbbox, FALSE, FALSE, 0);
gtk_widget_show (hbbox);
button = gtk_button_new_with_label (_("OK"));
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) nova_ok_callback,
dlg);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0);
(GtkSignalFunc) nova_ok_callback,
dlg);
gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0);
gtk_widget_grab_default (button);
gtk_widget_show (button);
button = gtk_button_new_with_label ("Cancel");
button = gtk_button_new_with_label (_("Cancel"));
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) gtk_widget_destroy,
GTK_OBJECT (dlg));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0);
(GtkSignalFunc) gtk_widget_destroy,
GTK_OBJECT (dlg));
gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
/* parameter settings */
frame = gtk_frame_new ("Parameter Settings");
frame = gtk_frame_new (_("Parameter Settings"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_container_border_width (GTK_CONTAINER (frame), 10);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0);
table = gtk_table_new (7, 2, FALSE);
table = gtk_table_new (5, 2, FALSE);
gtk_container_border_width (GTK_CONTAINER (table), 10);
gtk_container_add (GTK_CONTAINER (frame), table);
gtk_table_set_row_spacings (GTK_TABLE (table), 3);
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
center_frame = nova_center_create ( drawable );
gtk_table_attach( GTK_TABLE(table), center_frame, 0, 2, 0, 1,
gtk_table_attach (GTK_TABLE (table), center_frame, 0, 2, 0, 1,
0, 0, 0, 0 );
nova_int_entryscale_new( GTK_TABLE (table), 0, 1,
"R value:", &pvals.color[0],
0, 255, TRUE );
label = gtk_label_new (_("Color:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach_defaults (GTK_TABLE(table), label, 0, 1, 1, 2);
gtk_widget_show (label);
align = gtk_alignment_new (0.0, 0.5, 0.0, 0.0);
button = gimp_color_button_new (_("SuperNova Color Picker"),
SCALE_WIDTH - 8, 16,
pvals.color, 3);
gtk_container_add (GTK_CONTAINER (align), button);
gtk_table_attach_defaults (GTK_TABLE(table), align, 1, 2, 1, 2);
gtk_widget_show (align);
gtk_widget_show (button);
nova_int_entryscale_new( GTK_TABLE (table), 0, 2,
"G value:", &pvals.color[1],
0, 255, TRUE );
nova_int_entryscale_new( GTK_TABLE (table), 0, 3,
"B value:", &pvals.color[2],
0, 255, TRUE );
nova_int_entryscale_new( GTK_TABLE (table), 0, 4,
"Radius:", &pvals.radius,
_("Radius:"), &pvals.radius,
1, 100, FALSE );
nova_int_entryscale_new( GTK_TABLE (table), 0, 5,
"Spokes:", &pvals.nspoke,
nova_int_entryscale_new( GTK_TABLE (table), 0, 3,
_("Spokes:"), &pvals.nspoke,
1, 1024, TRUE );
nova_int_entryscale_new( GTK_TABLE (table), 0, 6,
"Random hue:", &pvals.randomhue,
nova_int_entryscale_new( GTK_TABLE (table), 0, 4,
_("Random Hue:"), &pvals.randomhue,
0, 360, TRUE );
gtk_widget_show (frame);
@ -459,14 +478,14 @@ nova_dialog ( GDrawable *drawable )
static void
nova_close_callback (GtkWidget *widget,
gpointer data)
gpointer data)
{
gtk_main_quit ();
}
static void
nova_ok_callback (GtkWidget *widget,
gpointer data)
gpointer data)
{
pint.run = TRUE;
gtk_widget_destroy (GTK_WIDGET (data));
@ -488,7 +507,7 @@ nova_ok_callback (GtkWidget *widget,
*/
static GtkWidget *
nova_center_create ( GDrawable *drawable )
nova_center_create (GDrawable *drawable)
{
NovaCenter *center;
GtkWidget *frame;
@ -513,7 +532,7 @@ nova_center_create ( GDrawable *drawable )
center->oldy = 0;
center->in_call = TRUE; /* to avoid side effects while initialization */
frame = gtk_frame_new ( "Center of SuperNova" );
frame = gtk_frame_new (_("Center of SuperNova"));
gtk_signal_connect( GTK_OBJECT( frame ), "destroy",
(GtkSignalFunc) nova_center_destroy,
center );
@ -526,7 +545,7 @@ nova_center_create ( GDrawable *drawable )
gtk_table_set_row_spacings (GTK_TABLE (table), 3);
gtk_table_set_col_spacings (GTK_TABLE (table), 5);
label = gtk_label_new ( "X: " );
label = gtk_label_new (_("X: "));
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5 );
gtk_table_attach( GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -540,7 +559,7 @@ nova_center_create ( GDrawable *drawable )
gtk_table_attach( GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
gtk_widget_show(entry);
label = gtk_label_new ( "Y: " );
label = gtk_label_new (_("Y: "));
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5 );
gtk_table_attach( GTK_TABLE(table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0 );
gtk_widget_show(label);
@ -606,8 +625,8 @@ nova_center_create ( GDrawable *drawable )
}
static void
nova_center_destroy ( GtkWidget *widget,
gpointer data )
nova_center_destroy (GtkWidget *widget,
gpointer data)
{
NovaCenter *center = data;
g_free( center );
@ -620,7 +639,7 @@ static void render_preview ( GtkWidget *preview, GPixelRgn *srcrgn );
* Draw the contents into the internal buffer of the preview widget
*/
static void
nova_center_preview_init ( NovaCenter *center )
nova_center_preview_init (NovaCenter *center)
{
GtkWidget *preview;
GPixelRgn src_rgn;
@ -651,7 +670,8 @@ nova_center_preview_init ( NovaCenter *center )
#endif
static void
render_preview ( GtkWidget *preview, GPixelRgn *srcrgn )
render_preview (GtkWidget *preview,
GPixelRgn *srcrgn)
{
guchar *src_row, *dest_row, *src, *dest;
gint row, col;
@ -745,7 +765,8 @@ render_preview ( GtkWidget *preview, GPixelRgn *srcrgn )
*/
static void
nova_center_draw ( NovaCenter *center, gint update )
nova_center_draw (NovaCenter *center,
gint update)
{
if( update & PREVIEW )
{
@ -787,8 +808,8 @@ nova_center_draw ( NovaCenter *center, gint update )
*/
static void
nova_center_entry_update ( GtkWidget *widget,
gpointer data )
nova_center_entry_update (GtkWidget *widget,
gpointer data)
{
NovaCenter *center;
gint *val, new_val;
@ -816,7 +837,7 @@ nova_center_entry_update ( GtkWidget *widget,
*/
static void
nova_center_cursor_update ( NovaCenter *center )
nova_center_cursor_update (NovaCenter *center)
{
center->curx = pvals.xcenter * center->pwidth / center->dwidth;
center->cury = pvals.ycenter * center->pheight / center->dheight;
@ -832,8 +853,8 @@ nova_center_cursor_update ( NovaCenter *center )
* Handle the expose event on the preview
*/
static gint
nova_center_preview_expose( GtkWidget *widget,
GdkEvent *event )
nova_center_preview_expose (GtkWidget *widget,
GdkEvent *event)
{
NovaCenter *center;
@ -848,8 +869,8 @@ nova_center_preview_expose( GtkWidget *widget,
*/
static gint
nova_center_preview_events ( GtkWidget *widget,
GdkEvent *event )
nova_center_preview_events (GtkWidget *widget,
GdkEvent *event)
{
NovaCenter *center;
GdkEventButton *bevent;
@ -915,9 +936,14 @@ nova_center_preview_events ( GtkWidget *widget,
/***********************************************************************/
static void
nova_int_entryscale_new ( GtkTable *table, gint x, gint y,
gchar *caption, gint *intvar,
gint min, gint max, gint constraint)
nova_int_entryscale_new (GtkTable *table,
gint x,
gint y,
gchar *caption,
gint *intvar,
gint min,
gint max,
gint constraint)
{
GtkWidget *hbox;
GtkWidget *label;
@ -981,7 +1007,7 @@ nova_int_entryscale_new ( GtkTable *table, gint x, gint y,
*/
static void
nova_paired_entry_destroy_callback (GtkWidget *widget,
gpointer data)
gpointer data)
{
NovaEntryScaleData *userdata;
userdata = data;
@ -993,7 +1019,7 @@ nova_paired_entry_destroy_callback (GtkWidget *widget,
static void
nova_paired_int_scale_update (GtkAdjustment *adjustment,
gpointer data)
gpointer data)
{
NovaEntryScaleData *userdata;
GtkEntry *entry;

View File

@ -21,11 +21,10 @@
*============================================================================*/
#include <stdlib.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <libgimp/gimp.h>
#include <math.h>
#include "libgimp/gimp.h"
#include "libgimp/gimpui.h"
#include "libgimp/stdplugins-intl.h"
/*============================================================================*/
/* DEFINES */
@ -35,7 +34,6 @@
#define PLUGIN_TITLE "Paper Tile"
#define PLUGIN_PATH "<Image>/Filters/Map/Paper Tile"
#define round(x) (floor((x)+0.5))
/*============================================================================*/
/* TYPES */
@ -69,7 +67,7 @@ struct _PluginParams
gboolean centering;
gboolean wrap_around;
BackgroundType background_type;
gdouble background_color[4];
guchar background_color[4];
};
/*============================================================================*/
@ -107,7 +105,7 @@ static struct {
TRUE, /* centering */
FALSE, /* wrap_around */
BACKGROUND_TYPE_INVERTED, /* background_type */
{ 0.0, 0.0, 1.0, 1.0 } /* background_color[4] */
{ 0, 0, 255, 255 } /* background_color[4] */
},
0, /* image */
@ -151,7 +149,7 @@ params_load_from_gimp ( void )
if( p.params.background_type == BACKGROUND_TYPE_TRANSPARENT ){
p.params.background_type = BACKGROUND_TYPE_INVERTED;
}
p.params.background_color[3] = 1.0;
p.params.background_color[3] = 255;
}
}
@ -167,213 +165,11 @@ static struct {
GtkAdjustment * division_x_adj;
GtkAdjustment * division_y_adj;
GtkAdjustment * move_max_rate_adj;
struct {
GtkWidget * widget;
GtkWidget * preview;
GtkWidget * dialog;
guint width;
guint height;
guchar * row_buffer[2];
} color_button;
GtkWidget * color_button;
} w;
/*============================================================================*/
/* COLOR BUTTON WIDGET */
/*============================================================================*/
static void
color_button_destroyed ( GtkWidget *widget )
{
g_free( w.color_button.row_buffer[0] );
g_free( w.color_button.row_buffer[1] );
}
/*----------------------------------------------------------------------------*/
static inline void
color_button_update ( void )
{
gint x;
gdouble v, R, G, B, A;
for( x = 0; x < w.color_button.width; x++ ){
A = p.params.background_color[3];
R = p.params.background_color[0] * A * 255.0;
G = p.params.background_color[1] * A * 255.0;
B = p.params.background_color[2] * A * 255.0;
v = ( ( ( x / 4 ) & 0x1 ) ? 0.6 : 0.4 ) * ( 1.0 - A ) * 255.0;
w.color_button.row_buffer[0][x*3 ] = (guchar)( R + v );
w.color_button.row_buffer[0][x*3+1] = (guchar)( G + v );
w.color_button.row_buffer[0][x*3+2] = (guchar)( B + v );
v = ( ( ( x / 4 ) & 0x1 ) ? 0.4 : 0.6 ) * ( 1.0 - A ) * 255.0;
w.color_button.row_buffer[1][x*3 ] = (guchar)( R + v );
w.color_button.row_buffer[1][x*3+1] = (guchar)( G + v );
w.color_button.row_buffer[1][x*3+2] = (guchar)( B + v );
}
for( x= 0; x < w.color_button.height; x++ ){
gtk_preview_draw_row( GTK_PREVIEW(w.color_button.preview),
w.color_button.row_buffer[(x/4)&0x1],
0, x, w.color_button.width );
}
if( GTK_WIDGET_REALIZED(w.color_button.preview) ){
gtk_preview_put
( GTK_PREVIEW(w.color_button.preview),
w.color_button.preview->window,
w.color_button.preview->style->black_gc,
( w.color_button.preview->allocation.width -
GTK_PREVIEW(w.color_button.preview)->buffer_width ) / 2,
( w.color_button.preview->allocation.height -
GTK_PREVIEW(w.color_button.preview)->buffer_height ) / 2,
0, 0,
GTK_PREVIEW(w.color_button.preview)->buffer_width,
GTK_PREVIEW(w.color_button.preview)->buffer_height );
}
}
/*----------------------------------------------------------------------------*/
static void
color_button_dialog_destroyed ( GtkWidget *widget )
{
w.color_button.dialog = NULL;
}
/*----------------------------------------------------------------------------*/
static void
color_button_dialog_changed ( GtkColorSelection *sel )
{
gtk_color_selection_get_color( sel, p.params.background_color );
color_button_update();
}
/*----------------------------------------------------------------------------*/
static gboolean
color_button_dialog_deleted ( GtkWidget *widget )
{
GtkColorSelectionDialog *dialog =
GTK_COLOR_SELECTION_DIALOG(w.color_button.dialog);
GtkColorSelection *sel = GTK_COLOR_SELECTION(dialog->colorsel);
gint i;
for( i = 0; i < 8; i++ ) sel->values[i] = sel->old_values[i];
color_button_dialog_changed( sel );
return FALSE;
}
/*----------------------------------------------------------------------------*/
static void
color_button_dialog_ok_clicked ( GtkWidget *widget )
{
GtkColorSelectionDialog *dialog =
GTK_COLOR_SELECTION_DIALOG(w.color_button.dialog);
GtkColorSelection *sel = GTK_COLOR_SELECTION(dialog->colorsel);
color_button_dialog_changed( sel );
gtk_widget_destroy( w.color_button.dialog );
}
/*----------------------------------------------------------------------------*/
static void
color_button_dialog_cancel_clicked ( GtkWidget *widget )
{
GtkColorSelectionDialog *dialog =
GTK_COLOR_SELECTION_DIALOG(w.color_button.dialog);
GtkColorSelection *sel = GTK_COLOR_SELECTION(dialog->colorsel);
gint i;
for( i = 0; i < 8; i++ ) sel->values[i] = sel->old_values[i];
color_button_dialog_changed( sel );
gtk_widget_destroy( w.color_button.dialog );
}
/*----------------------------------------------------------------------------*/
static void
color_button_dialog_open ( void )
{
if( w.color_button.dialog == NULL ){
GtkColorSelectionDialog * dialog;
GtkColorSelection * sel;
gint i;
w.color_button.dialog =
gtk_color_selection_dialog_new( "Background Color" );
dialog = GTK_COLOR_SELECTION_DIALOG(w.color_button.dialog);
sel = GTK_COLOR_SELECTION(dialog->colorsel);
gtk_color_selection_set_opacity( sel, p.drawable_has_alpha );
gtk_widget_destroy( dialog->help_button );
gtk_signal_connect( GTK_OBJECT(sel), "color_changed",
GTK_SIGNAL_FUNC(color_button_dialog_changed),
NULL );
gtk_signal_connect( GTK_OBJECT(dialog->ok_button), "clicked",
GTK_SIGNAL_FUNC(color_button_dialog_ok_clicked),
NULL );
gtk_signal_connect( GTK_OBJECT(dialog->cancel_button), "clicked",
GTK_SIGNAL_FUNC(color_button_dialog_cancel_clicked),
NULL );
gtk_signal_connect( GTK_OBJECT(dialog), "delete_event",
GTK_SIGNAL_FUNC(color_button_dialog_deleted),
NULL );
gtk_signal_connect( GTK_OBJECT(dialog), "destroy",
GTK_SIGNAL_FUNC(color_button_dialog_destroyed),
NULL );
gtk_color_selection_set_color( sel, p.params.background_color );
for( i = 0; i < 8; i++ ) sel->old_values[i] = sel->values[i];
gtk_color_selection_set_color( sel, p.params.background_color );
gtk_widget_show_all( w.color_button.dialog );
} else {
gtk_widget_show_all( w.color_button.dialog );
gdk_window_raise( w.color_button.dialog->window );
}
}
/*----------------------------------------------------------------------------*/
static inline void
color_button_create ( void )
{
static const guint WIDTH = 120;
static const guint HEIGHT = 20;
w.color_button.width = WIDTH;
w.color_button.height = HEIGHT;
w.color_button.row_buffer[0] = g_new( guchar, 3 * WIDTH );
w.color_button.row_buffer[1] = g_new( guchar, 3 * WIDTH );
w.color_button.preview = gtk_preview_new( GTK_PREVIEW_COLOR );
w.color_button.widget = gtk_button_new();
w.color_button.dialog = NULL;
gtk_preview_size( GTK_PREVIEW(w.color_button.preview), WIDTH, HEIGHT );
gtk_widget_set_usize( w.color_button.preview, WIDTH, HEIGHT );
gtk_widget_set_usize( w.color_button.widget, WIDTH + 1, HEIGHT + 1 );
gtk_signal_connect( GTK_OBJECT(w.color_button.widget), "destroy",
GTK_SIGNAL_FUNC(color_button_destroyed), NULL );
gtk_signal_connect( GTK_OBJECT(w.color_button.widget), "clicked",
GTK_SIGNAL_FUNC(color_button_dialog_open), NULL );
gtk_container_set_border_width( GTK_CONTAINER(w.color_button.widget), 0 );
gtk_container_add( GTK_CONTAINER(w.color_button.widget),
w.color_button.preview );
color_button_update();
}
/*============================================================================*/
/* ADJUSTMENTS */
@ -536,17 +332,15 @@ wrap_around_toggled ( GtkToggleButton *button )
static void
background_type_toggled ( GtkToggleButton *button, BackgroundType *type )
{
if( gtk_toggle_button_get_active( button ) ){
if( *type != p.params.background_type ){
p.params.background_type = *type;
gtk_widget_set_sensitive( w.color_button.widget,
*type == BACKGROUND_TYPE_COLOR );
if( *type != BACKGROUND_TYPE_COLOR && w.color_button.dialog ){
gtk_widget_destroy( w.color_button.dialog );
w.color_button.dialog = NULL;
}
if ( gtk_toggle_button_get_active( button ) )
{
if( *type != p.params.background_type )
{
p.params.background_type = *type;
gtk_widget_set_sensitive (w.color_button,
*type == BACKGROUND_TYPE_COLOR);
}
}
}
}
/*----------------------------------------------------------------------------*/
@ -565,13 +359,13 @@ dialog_create ( void )
GtkWidget *box;
GtkWidget *label;
/* SPECIRL WIDGETS */
adjustments_create();
color_button_create();
/* SPECIAL WIDGETS */
adjustments_create();
/* DIALOG WINDOW */
w.dialog = gtk_window_new( GTK_WINDOW_DIALOG );
gtk_window_set_title( GTK_WINDOW(w.dialog), PLUGIN_TITLE );
gtk_window_set_title( GTK_WINDOW(w.dialog), _("Paper Tile") );
gtk_window_set_policy( GTK_WINDOW(w.dialog), FALSE, FALSE, FALSE );
gtk_window_set_position( GTK_WINDOW(w.dialog), GTK_WIN_POS_MOUSE );
gtk_container_set_border_width( GTK_CONTAINER(w.dialog), 5 );
@ -596,26 +390,26 @@ dialog_create ( void )
gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
gtk_box_pack_start( GTK_BOX(main_hbox), vbox, TRUE, TRUE, 0 );
frame = gtk_frame_new( "Division" );
frame = gtk_frame_new (_("Division"));
gtk_container_set_border_width( GTK_CONTAINER(frame), 5 );
gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 );
table = gtk_table_new( 3, 2, FALSE );
gtk_container_set_border_width( GTK_CONTAINER(table), 5 );
gtk_container_add( GTK_CONTAINER(frame), table );
label = gtk_label_new( "X:" );
label = gtk_label_new( _("X:") );
gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 0, 1 );
button = gtk_spin_button_new( w.division_x_adj, 1.5, 0 );
gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 0, 1 );
label = gtk_label_new( "Y:" );
label = gtk_label_new( _("Y:") );
gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 1, 2 );
button = gtk_spin_button_new( w.division_y_adj, 1.5, 0 );
gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 1, 2 );
label = gtk_label_new( "Size:" );
label = gtk_label_new( _("Size:") );
gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 2, 3 );
button = gtk_spin_button_new( w.tile_size_adj, 1.5, 0 );
gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 2, 3 );
frame = gtk_frame_new( "Fractional Pixels" );
frame = gtk_frame_new( _("Fractional Pixels") );
gtk_container_set_border_width( GTK_CONTAINER(frame), 5 );
gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 );
box = gtk_vbox_new( FALSE, 0 );
@ -630,12 +424,12 @@ dialog_create ( void )
FRACTIONAL_TYPE_FORCE
};
static const gchar *name[] = {
"Background",
"Ignore",
"Force"
N_("Background"),
N_("Ignore"),
N_("Force")
};
for( i = 0; i < 3; i++ ){
button = gtk_radio_button_new_with_label( group, name[i] );
button = gtk_radio_button_new_with_label( group, gettext (name[i]) );
gtk_signal_connect( GTK_OBJECT(button), "toggled",
GTK_SIGNAL_FUNC(fractional_type_toggled), &type[i] );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button),
@ -644,7 +438,7 @@ dialog_create ( void )
group = gtk_radio_button_group( GTK_RADIO_BUTTON(button) );
}
}
button = gtk_check_button_new_with_label( "Centering" );
button = gtk_check_button_new_with_label( _("Centering") );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button),
p.params.centering );
gtk_signal_connect( GTK_OBJECT(button), "toggled",
@ -656,24 +450,24 @@ dialog_create ( void )
gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
gtk_box_pack_start( GTK_BOX(main_hbox), vbox, TRUE, TRUE, 0 );
frame = gtk_frame_new( "Movement" );
frame = gtk_frame_new( _("Movement") );
gtk_container_set_border_width( GTK_CONTAINER(frame), 5 );
gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 );
table = gtk_table_new( 2, 2, FALSE );
gtk_container_set_border_width( GTK_CONTAINER(table), 5 );
gtk_container_add( GTK_CONTAINER(frame), table );
label = gtk_label_new( "Max(%):" );
label = gtk_label_new( _("Max(%):") );
gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 0, 1 );
button = gtk_spin_button_new( w.move_max_rate_adj, 1.5, 0 );
gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 0, 1 );
button = gtk_check_button_new_with_label( "Wrap Around" );
button = gtk_check_button_new_with_label( _("Wrap Around") );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button),
p.params.wrap_around );
gtk_signal_connect( GTK_OBJECT(button), "toggled",
GTK_SIGNAL_FUNC(wrap_around_toggled), NULL );
gtk_table_attach_defaults( GTK_TABLE(table), button, 0, 2, 1, 2 );
frame = gtk_frame_new( "Background Type" );
frame = gtk_frame_new( _("Background Type") );
gtk_container_set_border_width( GTK_CONTAINER(frame), 5 );
gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 );
box = gtk_vbox_new( FALSE, 0 );
@ -691,20 +485,25 @@ dialog_create ( void )
BACKGROUND_TYPE_COLOR
};
static const gchar *name[] = {
"Transparent",
"Inverted Image",
"Image",
"Foreground Color",
"Background Color",
"Custom Color"
N_("Transparent"),
N_("Inverted Image"),
N_("Image"),
N_("Foreground Color"),
N_("Background Color"),
N_("Custom Color")
};
for( i = p.drawable_has_alpha ? 0 : 1; i < 6; i++ ){
if( type[i] != BACKGROUND_TYPE_COLOR ){
button = gtk_radio_button_new_with_label( group, name[i] );
button = gtk_radio_button_new_with_label( group, gettext (name[i]) );
} else {
button = gtk_radio_button_new( group );
gtk_container_set_border_width( GTK_CONTAINER(button), 0 );
gtk_container_add( GTK_CONTAINER(button), w.color_button.widget );
button = gtk_radio_button_new (group );
gtk_container_set_border_width (GTK_CONTAINER (button), 0);
w.color_button = gimp_color_button_new (_("Background Color"), 100, 16,
p.params.background_color,
p.drawable_has_alpha ? 4 : 3);
gtk_widget_set_sensitive (w.color_button,
p.params.background_type == BACKGROUND_TYPE_COLOR);
gtk_container_add (GTK_CONTAINER (button), w.color_button);
}
gtk_signal_connect( GTK_OBJECT(button), "toggled",
GTK_SIGNAL_FUNC(background_type_toggled), &type[i] );
@ -716,12 +515,15 @@ dialog_create ( void )
}
/* ACTION AREA */
button = gtk_button_new_with_label( "OK" );
button = gtk_button_new_with_label( _("Ok") );
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect( GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(dialog_ok_clicked), NULL );
gtk_container_add( GTK_CONTAINER(action_box), button );
gtk_widget_grab_default (button);
button = gtk_button_new_with_label( "CANCEL" );
button = gtk_button_new_with_label( _("Cancel") );
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect( GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(dialog_cancel_clicked), NULL );
gtk_container_add( GTK_CONTAINER(action_box), button );
@ -1039,10 +841,10 @@ filter ( void )
}
break;
case BACKGROUND_TYPE_COLOR:
pixel[0] = p.params.background_color[0] * 255.0;
pixel[1] = p.params.background_color[1] * 255.0;
pixel[2] = p.params.background_color[2] * 255.0;
pixel[3] = p.params.background_color[3] * 255.0;
pixel[0] = p.params.background_color[0];
pixel[1] = p.params.background_color[1];
pixel[2] = p.params.background_color[2];
pixel[3] = p.params.background_color[3];
for( y = clear_y0; y < clear_y1; y++ ){
for( x = clear_x0; x < clear_x1; x++ ){
dindex = p.drawable->bpp * ( p.drawable->width * y + x );
@ -1105,32 +907,6 @@ filter ( void )
g_free( row_buffer );
}
/*============================================================================*/
/* UNDO */
/*============================================================================*/
static inline void
undo_group_start ( void )
{
GParam *params;
gint numof_params;
params = gimp_run_procedure( "gimp_undo_push_group_start",
&numof_params, PARAM_IMAGE, p.image, PARAM_END );
gimp_destroy_params( params, numof_params );
}
/*----------------------------------------------------------------------------*/
static inline void
undo_group_end ( void )
{
GParam *params;
gint numof_params;
params = gimp_run_procedure( "gimp_undo_push_group_end",
&numof_params, PARAM_IMAGE, p.image, PARAM_END );
gimp_destroy_params( params, numof_params );
}
/*============================================================================*/
/* PLUGIN INTERFACES */
@ -1236,11 +1012,11 @@ plugin_run ( gchar * name,
if( status == STATUS_SUCCESS && p.run ){
if( p.run_mode == RUN_INTERACTIVE ){
params_save_to_gimp();
undo_group_start();
gimp_undo_push_group_start (p.image);
}
filter();
if( p.run_mode == RUN_INTERACTIVE ){
undo_group_end();
gimp_undo_push_group_end (p.image);
gimp_displays_flush();
}
}

View File

@ -69,9 +69,9 @@
'nlfilt' => { libdep => 'gtk', libsupp => 'megawidget' },
'noisify' => { libdep => 'gtk' },
'normalize' => { libdep => 'glib' },
'nova' => { libdep => 'gtk' },
'nova' => { libdep => 'gtk', ui => 1 },
'oilify' => { libdep => 'gtk' },
'papertile' => { libdep => 'gtk' },
'papertile' => { libdep => 'gtk', ui => 1 },
'pat' => { libdep => 'gtk', ui => 1 },
'pcx' => { libdep => 'gtk', ui => 1 },
'pix' => { libdep => 'gtk', ui => 1 },

View File

@ -4,22 +4,22 @@
*/
gint p_plug_in_sinus_iter_ALT(GRunModeType run_mode, gint32 total_steps, gdouble current_step, gint32 len_struct)
{
typedef gdouble colRGBA[4];
typedef struct t_plug_in_sinus_Vals
{
gdouble xscale;
gdouble yscale;
gdouble complex;
gdouble scalex;
gdouble scaley;
gdouble cmplx;
gdouble blend_power;
gint seed;
gint tiling;
gint perturb;
gint perturbation;
gint colorization;
gint colors;
colRGBA alpha1;
colRGBA alpha2;
} t_plug_in_sinus_Vals;
t_color col1;
guchar col1_alpha;
t_color col2;
guchar col2_alpha;
} t_plug_in_sinus_Vals;
t_plug_in_sinus_Vals buf, *buf_from, *buf_to;
@ -37,24 +37,19 @@ gint p_plug_in_sinus_iter_ALT(GRunModeType run_mode, gint32 total_steps, gdouble
buf_to = (t_plug_in_sinus_Vals *)&g_plugin_data_to[0];
memcpy(&buf, buf_from, sizeof(buf));
p_delta_gdouble(&buf.xscale, buf_from->xscale, buf_to->xscale, total_steps, current_step);
p_delta_gdouble(&buf.yscale, buf_from->yscale, buf_to->yscale, total_steps, current_step);
p_delta_gdouble(&buf.complex, buf_from->complex, buf_to->complex, total_steps, current_step);
p_delta_gdouble(&buf.scalex, buf_from->scalex, buf_to->scalex, total_steps, current_step);
p_delta_gdouble(&buf.scaley, buf_from->scaley, buf_to->scaley, total_steps, current_step);
p_delta_gdouble(&buf.cmplx, buf_from->cmplx, buf_to->cmplx, total_steps, current_step);
p_delta_gdouble(&buf.blend_power, buf_from->blend_power, buf_to->blend_power, total_steps, current_step);
p_delta_gint(&buf.seed, buf_from->seed, buf_to->seed, total_steps, current_step);
p_delta_gint(&buf.tiling, buf_from->tiling, buf_to->tiling, total_steps, current_step);
p_delta_gint(&buf.perturb, buf_from->perturb, buf_to->perturb, total_steps, current_step);
p_delta_gint(&buf.perturbation, buf_from->perturbation, buf_to->perturbation, total_steps, current_step);
p_delta_gint(&buf.colorization, buf_from->colorization, buf_to->colorization, total_steps, current_step);
p_delta_gint(&buf.colors, buf_from->colors, buf_to->colors, total_steps, current_step);
p_delta_gdouble(&buf.alpha1[0], buf_from->alpha1[0], buf_to->alpha1[0], total_steps, current_step);
p_delta_gdouble(&buf.alpha1[1], buf_from->alpha1[1], buf_to->alpha1[1], total_steps, current_step);
p_delta_gdouble(&buf.alpha1[2], buf_from->alpha1[2], buf_to->alpha1[2], total_steps, current_step);
p_delta_gdouble(&buf.alpha2[0], buf_from->alpha2[0], buf_to->alpha2[0], total_steps, current_step);
p_delta_gdouble(&buf.alpha2[1], buf_from->alpha2[1], buf_to->alpha2[1], total_steps, current_step);
p_delta_gdouble(&buf.alpha2[2], buf_from->alpha2[2], buf_to->alpha2[2], total_steps, current_step);
p_delta_gdouble(&buf.blend_power, buf_from->blend_power, buf_to->blend_power, total_steps, current_step);
p_delta_color(&buf.col1, &buf_from->col1, &buf_to->col1, total_steps, current_step);
p_delta_char(&buf.col1_alpha, buf_from->col1_alpha, buf_to->col1_alpha, total_steps, current_step);
p_delta_color(&buf.col2, &buf_from->col2, &buf_to->col2, total_steps, current_step);
p_delta_char(&buf.col2_alpha, buf_from->col2_alpha, buf_to->col2_alpha, total_steps, current_step);
gimp_set_data("plug_in_sinus", &buf, sizeof(buf));

View File

@ -15,6 +15,7 @@ INCLUDES = \
LDADD = \
$(top_builddir)/plug-ins/megawidget/libmegawidget.a \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)

View File

@ -41,6 +41,8 @@
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include "libgimp/gimpui.h"
#include "libgimp/stdplugins-intl.h"
#include <plug-ins/megawidget/megawidget.h>
#ifdef USE_LOGO
@ -53,7 +55,6 @@
#define ROUND_TO_INT(val) ((int) ((val) + 0.5))
typedef gdouble colRGBA[4];
/*
* This structure is used for persistent data.
@ -71,18 +72,22 @@ typedef gdouble colRGBA[4];
#define PERTURBED 1L
typedef struct {
gdouble scalex, scaley;
gdouble scalex;
gdouble scaley;
gdouble cmplx;
gdouble blend_power;
gint seed;
gint tiling;
glong perturbation;
glong colorization;
glong colors;
colRGBA col1,col2;
gint seed;
gint tiling;
glong perturbation;
glong colorization;
glong colors;
guchar col1[4];
guchar col2[4];
} SinusVals;
static SinusVals svals={15.0, 15.0, 1.0, 0.0, 42, TRUE, PERTURBED, LINEAR, USE_COLORS, {1,1,0,1}, {0,0,1,1}};
static SinusVals svals =
{ 15.0, 15.0, 1.0, 0.0, 42, TRUE, PERTURBED, LINEAR,
USE_COLORS, { 255, 255, 0, 255 }, { 0, 0, 255, 255 } };
typedef struct {
gint height, width;
@ -93,7 +98,7 @@ typedef struct {
} params;
static gint drawable_is_grayscale= FALSE;
static gint drawable_is_grayscale = FALSE;
static struct mwPreview *thePreview;
static GDrawable *drawable;
@ -116,9 +121,9 @@ void sinus_do_preview(GtkWidget *w);
void DrawPreviewImage(gint DoCompute);
inline void compute_block_4(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p);
inline void compute_block_3(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p) ;
inline void compute_block_2(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p) ;
inline void compute_block_1(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p) ;
inline void compute_block_3(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p);
inline void compute_block_2(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p);
inline void compute_block_1(guchar *dest_row, guint rowstride,gint x0,gint y0,gint h,gint w, params *p);
GPlugInInfo PLUG_IN_INFO =
{
@ -136,25 +141,23 @@ static void query ()
{
static GParamDef args[] =
{
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
{ PARAM_IMAGE, "image", "Input image (unused)" },
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
{ PARAM_IMAGE, "image", "Input image (unused)" },
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
{ PARAM_FLOAT, "xscale", "Scale value for x axis" },
{ PARAM_FLOAT, "yscale", "Scale value dor y axis" },
{ PARAM_FLOAT, "complex", "Complexity factor" },
{ PARAM_INT32, "seed", "Seed value for random number generator" },
{ PARAM_INT32, "tiling", "If set, the pattern generated will tile" },
{ PARAM_INT32, "perturb", "If set, the pattern is a little more distorted..." },
{ PARAM_INT32, "colors", "where to take the colors (0= B&W, 1= fg/bg, 2= col1/col2)"},
/* { PARAM_COLOR, "col1", "fist color (sometimes unused)" },
{ PARAM_COLOR, "col2", "second color (sometimes unused)" },*/
{ PARAM_FLOAT, "alpha1", "alpha for the first color (used if the drawable has an alpha chanel)" },
{ PARAM_FLOAT, "alpha2", "alpha for the second color (used if the drawable has an alpha chanel)" },
{ PARAM_INT32, "blend", "0= linear, 1= bilinear, 2= sinusoidal" },
{ PARAM_FLOAT, "blend_power", "Power used to strech the blend" }
{ PARAM_FLOAT, "xscale", "Scale value for x axis" },
{ PARAM_FLOAT, "yscale", "Scale value dor y axis" },
{ PARAM_FLOAT, "complex", "Complexity factor" },
{ PARAM_INT32, "seed", "Seed value for random number generator" },
{ PARAM_INT32, "tiling", "If set, the pattern generated will tile" },
{ PARAM_INT32, "perturb", "If set, the pattern is a little more distorted..." },
{ PARAM_INT32, "colors", "where to take the colors (0= B&W, 1= fg/bg, 2= col1/col2)"},
{ PARAM_COLOR, "col1", "fist color (sometimes unused)" },
{ PARAM_COLOR, "col2", "second color (sometimes unused)" },
{ PARAM_FLOAT, "alpha1", "alpha for the first color (used if the drawable has an alpha chanel)" },
{ PARAM_FLOAT, "alpha2", "alpha for the second color (used if the drawable has an alpha chanel)" },
{ PARAM_INT32, "blend", "0= linear, 1= bilinear, 2= sinusoidal" },
{ PARAM_FLOAT, "blend_power", "Power used to strech the blend" }
};
static GParamDef *return_vals = NULL;
@ -174,11 +177,12 @@ static void query ()
args, return_vals);
}
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
static void
run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
GRunModeType run_mode;
@ -213,27 +217,27 @@ static void run (gchar *name,
case RUN_NONINTERACTIVE:
/* Make sure all the arguments are there! */
if (nparams != 14)
if (nparams != 16)
status = STATUS_CALLING_ERROR;
if (status == STATUS_SUCCESS)
{
svals.seed = param[6].data.d_int32;
svals.scalex = param[3].data.d_float;
svals.scaley = param[4].data.d_float;
svals.cmplx = param[5].data.d_float;
svals.blend_power = param[15].data.d_float;
svals.tiling = param[7].data.d_int32;
svals.scalex = param[3].data.d_float;
svals.scaley = param[4].data.d_float;
svals.cmplx = param[5].data.d_float;
svals.seed = param[6].data.d_int32;
svals.tiling = param[7].data.d_int32;
svals.perturbation = param[8].data.d_int32;
svals.colors = param[9].data.d_int32;
svals.col1[0] = param[10].data.d_color.red;
svals.col1[1] = param[10].data.d_color.green;
svals.col1[2] = param[10].data.d_color.blue;
svals.col2[0] = param[11].data.d_color.red;
svals.col2[1] = param[11].data.d_color.green;
svals.col2[2] = param[11].data.d_color.blue;
svals.col1[3] = param[12].data.d_float * 255.0;
svals.col2[3] = param[13].data.d_float * 255.0;
svals.colorization = param[14].data.d_int32;
svals.colors = param[9].data.d_int32;
svals.col1[3] = param[12].data.d_float;
svals.col2[3] = param[13].data.d_float;
svals.col1[0] = param[10].data.d_color.red/255.999;
svals.col1[1] = param[10].data.d_color.green/255.999;
svals.col1[2] = param[10].data.d_color.blue/255.999;
svals.col2[0] = param[11].data.d_color.red/255.999;
svals.col2[1] = param[11].data.d_color.green/255.999;
svals.col2[2] = param[11].data.d_color.blue/255.999;
svals.blend_power = param[15].data.d_float;
}
break;
@ -252,7 +256,7 @@ static void run (gchar *name,
/* Make sure that the drawable is gray or RGB */
if (( status == STATUS_SUCCESS) && (gimp_drawable_is_rgb (drawable->id) || gimp_drawable_is_gray (drawable->id)))
{
gimp_progress_init("Calculating picture...");
gimp_progress_init ("Calculating picture...");
gimp_tile_cache_ntiles( 1 );
sinus ();
@ -277,7 +281,8 @@ static void run (gchar *name,
* Main procedure
*/
void prepare_coef( params *p)
void
prepare_coef (params *p)
{
typedef struct { guchar r,g,b,a;} type_color;
type_color col1,col2;
@ -328,8 +333,8 @@ void prepare_coef( params *p)
p->c32= ROUND_TO_INT(p->c32/(2*G_PI))*2*G_PI;
}
col2.a=255.999*svals.col2[3];
col1.a=255.999*svals.col1[3];
col2.a=svals.col2[3];
col1.a=svals.col1[3];
if (drawable_is_grayscale) {
col1.r=col1.g=col1.b=255;
@ -337,12 +342,12 @@ void prepare_coef( params *p)
} else {
switch (svals.colors) {
case USE_COLORS:
col1.r=255.999*svals.col1[0];
col1.g=255.999*svals.col1[1];
col1.b=255.999*svals.col1[2];
col2.r=255.999*svals.col2[0];
col2.g=255.999*svals.col2[1];
col2.b=255.999*svals.col2[2];
col1.r=svals.col1[0];
col1.g=svals.col1[1];
col1.b=svals.col1[2];
col2.r=svals.col2[0];
col2.g=svals.col2[1];
col2.b=svals.col2[2];
break;
case B_W:
col1.r=col1.g=col1.b=255;
@ -366,72 +371,82 @@ void prepare_coef( params *p)
}
static void
sinus()
sinus ()
{
params p;
gint bytes;
GPixelRgn dest_rgn;
int ix1, iy1, ix2, iy2; /* Selected image size. */
gpointer pr;
gint progress, max_progress;
prepare_coef(&p);
gimp_drawable_mask_bounds(drawable->id, &ix1, &iy1, &ix2, &iy2);
p.width = drawable->width;
p.height = drawable->height;
bytes = drawable->bpp;
gimp_pixel_rgn_init(&dest_rgn, drawable, ix1, iy1, ix2-ix1, iy2-iy1, TRUE,TRUE);
progress = 0;
max_progress = (ix2-ix1)*(iy2-iy1);
for (pr= gimp_pixel_rgns_register(1, &dest_rgn); pr != NULL; pr = gimp_pixel_rgns_process(pr)) {
switch (bytes) {
case 4:
compute_block_4(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
case 3:
compute_block_3(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
case 2:
compute_block_2(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
case 1:
compute_block_1(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
}
progress+= dest_rgn.w * dest_rgn.h;
gimp_progress_update((double) progress/ (double) max_progress);
}
gimp_drawable_flush(drawable);
gimp_drawable_merge_shadow(drawable->id, TRUE);
gimp_drawable_update ( drawable->id, ix1, iy1, (ix2-ix1), (iy2-iy1));
params p;
gint bytes;
GPixelRgn dest_rgn;
int ix1, iy1, ix2, iy2; /* Selected image size. */
gpointer pr;
gint progress, max_progress;
prepare_coef(&p);
gimp_drawable_mask_bounds(drawable->id, &ix1, &iy1, &ix2, &iy2);
p.width = drawable->width;
p.height = drawable->height;
bytes = drawable->bpp;
gimp_pixel_rgn_init(&dest_rgn, drawable, ix1, iy1, ix2-ix1, iy2-iy1, TRUE,TRUE);
progress = 0;
max_progress = (ix2-ix1)*(iy2-iy1);
for (pr= gimp_pixel_rgns_register(1, &dest_rgn); pr != NULL; pr = gimp_pixel_rgns_process(pr)) {
switch (bytes) {
case 4:
compute_block_4(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
case 3:
compute_block_3(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
case 2:
compute_block_2(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
case 1:
compute_block_1(dest_rgn.data, dest_rgn.rowstride, dest_rgn.x, dest_rgn.y, dest_rgn.w, dest_rgn.h, &p);
break;
}
progress+= dest_rgn.w * dest_rgn.h;
gimp_progress_update((double) progress/ (double) max_progress);
}
gimp_drawable_flush(drawable);
gimp_drawable_merge_shadow(drawable->id, TRUE);
gimp_drawable_update ( drawable->id, ix1, iy1, (ix2-ix1), (iy2-iy1));
}
double linear (double v)
double
linear (double v)
{
register double a=v-(int)v;
return (a<0?1.0+a:a);
register double a=v-(int)v;
return (a<0?1.0+a:a);
}
double bilinear(double v)
double
bilinear (double v)
{
register double a=v-(int)v;
a=(a<0?1.0+a:a);
return (a>0.5?2-2*a:2*a);
register double a=v-(int)v;
a=(a<0?1.0+a:a);
return (a>0.5?2-2*a:2*a);
}
double cosinus(double v)
double
cosinus (double v)
{
return 0.5-0.5*sin((v+0.25)*G_PI*2);
return 0.5-0.5*sin((v+0.25)*G_PI*2);
}
inline void compute_block_4(guchar *dest_row, guint rowstride,gint x0,gint y0,gint w,gint h, params *p)
inline void
compute_block_4 (guchar *dest_row,
guint rowstride,
gint x0,
gint y0,
gint w,
gint h,
params *p)
{
gint i,j;
double x,y, grey;
@ -456,7 +471,14 @@ inline void compute_block_4(guchar *dest_row, guint rowstride,gint x0,gint y0,gi
}
}
inline void compute_block_3(guchar *dest_row, guint rowstride,gint x0,gint y0,gint w,gint h, params *p)
inline void
compute_block_3 (guchar *dest_row,
guint rowstride,
gint x0,
gint y0,
gint w,
gint h,
params *p)
{
gint i,j;
double x,y, grey;
@ -478,7 +500,15 @@ inline void compute_block_3(guchar *dest_row, guint rowstride,gint x0,gint y0,gi
dest_row += rowstride;
}
}
inline void compute_block_2(guchar *dest_row, guint rowstride,gint x0,gint y0,gint w,gint h, params *p)
inline void
compute_block_2 (guchar *dest_row,
guint rowstride,
gint x0,
gint y0,
gint w,
gint h,
params *p)
{
gint i,j;
double x,y, grey;
@ -500,7 +530,15 @@ inline void compute_block_2(guchar *dest_row, guint rowstride,gint x0,gint y0,gi
dest_row += rowstride;
}
}
inline void compute_block_1(guchar *dest_row, guint rowstride,gint x0,gint y0,gint w,gint h, params *p)
inline void
compute_block_1 (guchar *dest_row,
guint rowstride,
gint x0,
gint y0,
gint w,
gint h,
params *p)
{
gint i,j;
double x,y, grey;
@ -527,17 +565,54 @@ inline void compute_block_1(guchar *dest_row, guint rowstride,gint x0,gint y0,gi
/* -------------------------- UI ------------------------------- */
/* -------------------------------------------------------------- */
static void
alpha_scale_cb (GtkAdjustment *adj,
gpointer data)
{
guchar *val;
GtkWidget *color_button;
val = (guchar*)data;
*val = (guchar)(adj->value * 255.0);
color_button = gtk_object_get_user_data (GTK_OBJECT (adj));
if (GIMP_IS_COLOR_BUTTON (color_button))
gimp_color_button_update (GIMP_COLOR_BUTTON (color_button));
}
static void
alpha_scale_update (GtkWidget *color_button,
gpointer data)
{
guchar *val;
GtkWidget *adj;
val = (guchar*)data;
adj = gtk_object_get_user_data (GTK_OBJECT (color_button));
gtk_signal_handler_block_by_data (GTK_OBJECT (adj), data);
gtk_adjustment_set_value (GTK_ADJUSTMENT (adj), (gfloat)(*val) / 255.0);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (adj), data);
}
/*****************************************/
/* The note book */
/*****************************************/
int sinus_dialog(void)
int
sinus_dialog (void)
{
GtkWidget *dlg;
GtkWidget *preview;
gint runp;
GtkWidget *main_hbox, *notebook;
GtkWidget *page,*frame, *label, *vbox, *hbox, *table;
struct mwColorSel *push_col1, *push_col2;
GtkWidget *push_col1 = NULL;
GtkWidget *push_col2 = NULL;
GtkWidget *scale;
GtkObject *adj;
#ifdef USE_LOGO
GtkWidget *logo;
gint x,y;
@ -574,7 +649,7 @@ int sinus_dialog(void)
/* Create Main window with a vbox */
/* ============================== */
dlg = mw_app_new("plug_in_sinus", "Sinus", &runp);
dlg = mw_app_new("plug_in_sinus", _("Sinus"), &runp);
main_hbox = gtk_hbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(main_hbox), 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), main_hbox, TRUE, TRUE, 0);
@ -616,33 +691,33 @@ int sinus_dialog(void)
page = gtk_vbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(page), 5);
frame= gtk_frame_new("Drawing settings");
frame= gtk_frame_new (_("Drawing settings"));
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(page), frame, TRUE, TRUE, 0);
gtk_widget_show(frame);
table = gtk_table_new(4, 2, FALSE);
gtk_container_border_width(GTK_CONTAINER (table), 5);
gtk_container_add(GTK_CONTAINER(frame), table);
mw_fscale_entry_new(table, "X scale: ", 0.0001, 100.0, 0.001, 5, 0,
mw_fscale_entry_new(table, _("X Scale: "), 0.0001, 100.0, 0.001, 5, 0,
0, 1, 1, 2, &(svals.scalex));
mw_fscale_entry_new(table, "Y scale: ", 0.0001, 100.0, 0.001, 5, 0,
mw_fscale_entry_new(table, _("Y Scale: "), 0.0001, 100.0, 0.001, 5, 0,
0, 1, 2, 3, &(svals.scaley));
mw_fscale_entry_new(table, "Complexity: ", 0, 15.0, 0.01, 5, 0,
mw_fscale_entry_new(table, _("Complexity: "), 0, 15.0, 0.01, 5, 0,
0, 1, 3, 4, &(svals.cmplx));
gtk_widget_show(table);
frame= gtk_frame_new("Calculation settings");
frame= gtk_frame_new (_("Calculation settings"));
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(page), frame, TRUE, TRUE, 0);
gtk_widget_show(frame);
vbox= gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
mw_ientry_new(vbox, NULL, "Random seed:", &svals.seed);
mw_toggle_button_new(vbox, NULL, "Force tiling?", &svals.tiling);
mw_ientry_new(vbox, NULL, _("Random seed:"), &svals.seed);
mw_toggle_button_new(vbox, NULL, _("Force tiling?"), &svals.tiling);
mw_value_radio_group_new(vbox, NULL , coefs_radio, &svals.perturbation);
label = gtk_label_new("Settings");
label = gtk_label_new (_("Settings"));
gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
gtk_widget_show(page);
@ -653,48 +728,103 @@ int sinus_dialog(void)
page = gtk_vbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(page), 5);
frame = gtk_frame_new("Colors");
frame = gtk_frame_new (_("Colors"));
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(page), frame, TRUE, TRUE, 0);
gtk_widget_show(frame);
if (drawable_is_grayscale) {
/*if in grey scale, the colors are necessarily black and white */
label = gtk_label_new("The colors are white and black.");
gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
gtk_container_add(GTK_CONTAINER(frame), label);
gtk_widget_show(label);
if (drawable_is_grayscale)
{
/*if in grey scale, the colors are necessarily black and white */
label = gtk_label_new(_("The colors are white and black."));
gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
gtk_container_add(GTK_CONTAINER(frame), label);
gtk_widget_show(label);
}
else
{
vbox= gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
mw_value_radio_group_new(vbox, NULL, colors_radio, &svals.colors);
hbox= gtk_hbox_new(TRUE, 20);
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0);
push_col1 = gimp_color_button_new (_("First Color"), 32, 32, svals.col1, 4);
gtk_box_pack_start (GTK_BOX (hbox), push_col1, FALSE, FALSE, 0);
gtk_widget_show (push_col1);
} else {
vbox= gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_widget_show(vbox);
mw_value_radio_group_new(vbox, NULL, colors_radio, &svals.colors);
hbox= gtk_hbox_new(TRUE, 20);
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0);
push_col2 = gimp_color_button_new (_("Second Color"), 32, 32, svals.col2, 4);
gtk_box_pack_start (GTK_BOX (hbox), push_col2, FALSE, FALSE, 0);
gtk_widget_show (push_col2);
push_col1 = mw_color_select_button_create(hbox, "Fisrt Color", svals.col1, FALSE);
push_col2 = mw_color_select_button_create(hbox, "Second Color", svals.col2, FALSE);
gtk_widget_show(hbox);
gtk_widget_show (hbox);
}
}
frame = gtk_frame_new("Alpha Channels");
frame = gtk_frame_new (_("Alpha Channels"));
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(page), frame, TRUE, TRUE, 0);
gtk_widget_show(frame);
table = gtk_table_new(3, 2, FALSE);
table = gtk_table_new (3, 2, FALSE);
gtk_container_border_width(GTK_CONTAINER (table), 5);
gtk_container_add(GTK_CONTAINER(frame), table);
mw_fscale_entry_new(table, "first color ", 0, 1.0, 0.01, 5, 0,
0, 1, 1, 2, &(svals.col1[3]));
mw_fscale_entry_new(table, "last color ", 0, 1.0, 0.01, 5, 0,
0, 1, 2, 3, &(svals.col2[3]));
label = gtk_label_new (_("First Color: "));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 1.0);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
adj = gtk_adjustment_new ((gfloat)(svals.col1[3]) / 255.0, 0.0, 1.0, 0.01, 0.1, 0.0);
gtk_object_set_user_data (GTK_OBJECT (adj), push_col1);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
(GtkSignalFunc) alpha_scale_cb,
&svals.col1[3]);
if (push_col1)
{
gtk_object_set_user_data (GTK_OBJECT (push_col1), adj);
gtk_signal_connect (GTK_OBJECT (push_col1), "color_changed",
(GtkSignalFunc) alpha_scale_update, &svals.col1[3]);
}
scale = gtk_hscale_new (GTK_ADJUSTMENT (adj));
gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2,
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (scale);
label = gtk_label_new (_("Second Color: "));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 1.0);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
adj = gtk_adjustment_new ((gfloat)(svals.col2[3]) / 255.0, 0.0, 1.0, 0.01, 0.1, 0.0);
gtk_object_set_user_data (GTK_OBJECT (adj), push_col2);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
(GtkSignalFunc) alpha_scale_cb,
&svals.col2[3]);
if (push_col2)
{
gtk_signal_connect (GTK_OBJECT (push_col2), "color_changed",
(GtkSignalFunc) alpha_scale_update, &svals.col2[3]);
gtk_object_set_user_data (GTK_OBJECT (push_col2), adj);
}
scale = gtk_hscale_new (GTK_ADJUSTMENT (adj));
gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 2, 3,
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (scale);
/* mw_iscale_entry_new (table, _("First color "), 0, 255, 1, 5, 0, */
/* 0, 1, 1, 2, &(svals.col1[3])); */
/* mw_iscale_entry_new (table, _("Second color "), 0, 255, 1, 5, 0, */
/* 0, 1, 2, 3, &(svals.col2[3])); */
gtk_widget_show(table);
label = gtk_label_new("Colors");
label = gtk_label_new (_("Colors"));
gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
gtk_widget_show(page);
@ -702,12 +832,12 @@ int sinus_dialog(void)
/* blend settings dialog: */
/* ====================== */
label = gtk_label_new("Blend");
label = gtk_label_new (_("Blend"));
gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
page = gtk_vbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(page), 5);
frame = gtk_frame_new("Blend settings");
frame = gtk_frame_new(_("Blend settings"));
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(page), frame, TRUE, TRUE, 0);
gtk_widget_show(frame);
@ -716,13 +846,13 @@ int sinus_dialog(void)
gtk_container_add(GTK_CONTAINER(frame), vbox);
gtk_container_border_width(GTK_CONTAINER(vbox), 5);
gtk_widget_show(vbox);
mw_value_radio_group_new(vbox, "Gradient", coloriz_radio, &svals.colorization);
mw_value_radio_group_new(vbox, _("Gradient"), coloriz_radio, &svals.colorization);
table = gtk_table_new(2, 2, FALSE);
gtk_container_border_width(GTK_CONTAINER (table), 5);
gtk_container_add(GTK_CONTAINER(vbox), table);
mw_fscale_entry_new(table, "Exponent ", -7.5, 7.5, 0.01, 5.0, 0.0,
mw_fscale_entry_new(table, _("Exponent "), -7.5, 7.5, 0.01, 5.0, 0.0,
0, 1, 0, 1, &svals.blend_power);
gtk_widget_show(table);

View File

@ -1,7 +1,7 @@
/* GIMP header image file format (INDEXED): \tmp\logo.h */
static unsigned int width = 100;
static unsigned int height = 100;
/* static unsigned int width = 100; */
/* static unsigned int height = 100; */
/* Call this macro repeatedly. After each use, the pixel data can be extracted */

View File

@ -36,7 +36,9 @@ plug-ins/common/grid.c
plug-ins/common/film.c
plug-ins/common/mail.c
plug-ins/common/normalize.c
plug-ins/common/nova.c
plug-ins/common/oilify.c
plug-ins/common/papertile.c
plug-ins/common/png.c
plug-ins/common/ps.c
plug-ins/common/rotate.c
@ -125,4 +127,5 @@ plug-ins/script-fu/script-fu-scripts.c
plug-ins/script-fu/script-fu-server.c
plug-ins/script-fu/script-fu.c
plug-ins/sel2path/sel2path.c
plug-ins/sinus/sinus.c
plug-ins/struc/struc.c