Applied patch from Jeroen Lamain to Lighting plug-in (working on #52896) and lots of changes to replace deprecated GtkList widget by GtkTreeView in GIMPressionist code.

This commit is contained in:
Maurits Rijk 2002-12-17 20:18:16 +00:00
parent d7e228514b
commit f24a67ab8f
22 changed files with 764 additions and 755 deletions

View file

@ -1,3 +1,25 @@
2002-12-17 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/gimpressionist/Presets/*: changed all \010 in strings by
\012 so that the g_strcompress/g_strescape pair now works correctly.
* plug-ins/gimpressionist/sizemap.c
* plug-ins/gimpressionist/orientmap.c: reordered Apply/Cancel/Ok
buttons in dialogs.
* plug-ins/gimpressionist/presets.c
* plug-ins/gimpressionist/paper.c
* plug-ins/gimpressionist/brush.c
* plug-ins/gimpressionist/gimpressionist.[ch]: replace deprecated
GtkList by GtkTreeView widgets.
2002-12-17 Maurits Rijk <lpeek.mrijk@consunet.nl
* plug-ins/Lighting/lighting_ui.[ch]
* plug-ins/Lighting/lighting_preview.c: applied patch from Jeroen
Lamain. Dragging of lightsource is more smoothly now plus you can
now also drag directional lights.
2002-12-17 Nathan Summers <rock@gimp.org>
* libgimp/gimpbrushmenu.c

View file

@ -20,7 +20,8 @@
#define LIGHT_SYMBOL_SIZE 8
gint lightx, lighty;
gint handle_xpos = 0, handle_ypos = 0;
BackBuffer backbuf = { 0, 0, 0, 0, NULL };
/* g_free()'ed on exit */
@ -35,14 +36,14 @@ guint left_button_pressed = FALSE;
GtkWidget * spin_pos_x = NULL;
GtkWidget * spin_pos_y = NULL;
GtkWidget * spin_pos_z = NULL;
GtkWidget * spin_dir_x = NULL;
GtkWidget * spin_dir_y = NULL;
GtkWidget * spin_dir_z = NULL;
static guint preview_update_timer = 0;
/* Protos */
/* ====== */
static void
interactive_preview_callback (GtkWidget *widget);
static void
interactive_preview_timer_callback ( void );
@ -80,6 +81,7 @@ compute_preview (gint startx, gint starty, gint w, gint h)
ypostab = NULL;
}
}
if (!ypostab)
{
ypostab = g_new (gdouble, h);
@ -87,11 +89,9 @@ compute_preview (gint startx, gint starty, gint w, gint h)
}
for (xcnt = 0; xcnt < w; xcnt++)
xpostab[xcnt] =
(gdouble) width *((gdouble) xcnt / (gdouble) w);
xpostab[xcnt] = (gdouble) width *((gdouble) xcnt / (gdouble) w);
for (ycnt = 0; ycnt < h; ycnt++)
ypostab[ycnt] =
(gdouble) height *((gdouble) ycnt / (gdouble) h);
ypostab[ycnt] = (gdouble) height *((gdouble) ycnt / (gdouble) h);
init_compute ();
precompute_init (width, height);
@ -222,11 +222,9 @@ compute_preview_rectangle (gint * xp, gint * yp, gint * wid, gint * heig)
{
h = (PREVIEW_HEIGHT - 50.0);
w = (gdouble) width *(h / (gdouble) height);
x = (PREVIEW_WIDTH - w) / 2.0;
y = (PREVIEW_HEIGHT - h) / 2.0;
}
*xp = RINT (x);
*yp = RINT (y);
*wid = RINT (w);
@ -239,34 +237,18 @@ compute_preview_rectangle (gint * xp, gint * yp, gint * wid, gint * heig)
/*************************************************/
gboolean
check_marker_hit (gint xpos, gint ypos)
check_handle_hit (gint xpos, gint ypos)
{
gdouble dxpos, dypos;
gint lightx, lighty;
gdouble dx, dy, r;
gint startx, starty, pw, ph;
GimpVector3 viewpoint;
gint dx,dy,r;
/* swap z to reverse light position */
viewpoint = mapvals.viewpoint;
viewpoint.z = -viewpoint.z;
compute_preview_rectangle (&startx, &starty, &pw, &ph);
gimp_vector_3d_to_2d (startx, starty, pw, ph, &dxpos, &dypos,
&viewpoint, &mapvals.lightsource.position);
lightx = (gint) (dxpos + 0.5);
lighty = (gint) (dypos + 0.5);
dx = lightx - xpos;
dy = lighty - ypos;
dx = handle_xpos - xpos;
dy = handle_ypos - ypos;
if (mapvals.lightsource.type == POINT_LIGHT)
if (mapvals.lightsource.type == POINT_LIGHT ||
mapvals.lightsource.type == DIRECTIONAL_LIGHT)
{
r = sqrt (dx * dx + dy * dy) + 0.5;
if ((gint) r > 7)
{
return (FALSE);
@ -275,9 +257,7 @@ check_marker_hit (gint xpos, gint ypos)
{
return (TRUE);
}
}
return FALSE;
}
@ -287,10 +267,9 @@ check_marker_hit (gint xpos, gint ypos)
static void
draw_lights ()
draw_handles ()
{
gdouble dxpos, dypos;
gint xpos, ypos;
gint startx, starty, pw, ph;
GimpVector3 viewpoint;
GimpVector3 light_position;
@ -299,28 +278,35 @@ draw_lights ()
gfloat delta_x = 0.0,
delta_y = 0.0;
/* calculate handle position */
compute_preview_rectangle (&startx, &starty, &pw, &ph);
switch (mapvals.lightsource.type)
{
case POINT_LIGHT:
case SPOT_LIGHT:
case NO_LIGHT:
/* swap z to reverse light position */
viewpoint = mapvals.viewpoint;
viewpoint.z = -viewpoint.z;
compute_preview_rectangle (&startx, &starty, &pw, &ph);
if (mapvals.lightsource.type == DIRECTIONAL_LIGHT)
{
light_position.x = light_position.y = 0.5;
light_position.z = 0.0;
} else
{
light_position = mapvals.lightsource.position;
}
gimp_vector_3d_to_2d (startx, starty, pw, ph, &dxpos, &dypos,
&viewpoint, &light_position);
xpos = (gint) (dxpos + 0.5);
ypos = (gint) (dypos + 0.5);
compute_preview_rectangle (&startx, &starty, &pw, &ph);
handle_xpos = (gint) (dxpos + 0.5);
handle_ypos = (gint) (dypos + 0.5);
break;
case DIRECTIONAL_LIGHT:
light_position.x = light_position.y = 0.5;
light_position.z = 0;
viewpoint.z = -viewpoint.z;
gimp_vector_3d_to_2d (startx, starty, pw, ph, &dxpos, &dypos,
&viewpoint, &light_position);
length = PREVIEW_HEIGHT / 4;
delta_x = mapvals.lightsource.direction.x * length;
delta_y = mapvals.lightsource.direction.y * length;
handle_xpos = dxpos + delta_x;
handle_ypos = dypos + delta_y;
break;
}
gdk_gc_set_function (gc, GDK_COPY);
@ -339,30 +325,33 @@ draw_lights ()
backbuf.image = NULL;
}
/* calculate symbol size */
/* calculate backbuffer */
switch (mapvals.lightsource.type)
{
case POINT_LIGHT:
backbuf.x = xpos - LIGHT_SYMBOL_SIZE / 2;
backbuf.y = ypos - LIGHT_SYMBOL_SIZE / 2;
backbuf.x = handle_xpos - LIGHT_SYMBOL_SIZE / 2;
backbuf.y = handle_ypos - LIGHT_SYMBOL_SIZE / 2;
backbuf.w = LIGHT_SYMBOL_SIZE;
backbuf.h = LIGHT_SYMBOL_SIZE;
break;
case DIRECTIONAL_LIGHT:
length = sqrt( (mapvals.lightsource.direction.x * mapvals.lightsource.direction.x) +
(mapvals.lightsource.direction.y * mapvals.lightsource.direction.y));
length = (1.0 / length) * (PREVIEW_HEIGHT/4.0);
delta_x = mapvals.lightsource.direction.x * length;
delta_y = mapvals.lightsource.direction.y * length;
backbuf.x = xpos - fabs(delta_x);
backbuf.y = ypos - fabs(delta_y);
backbuf.w = fabs(delta_x * 2.0);
backbuf.h = fabs(delta_y * 2.0);
if (delta_x <= 0)
backbuf.x = handle_xpos;
else
backbuf.x = startx + pw/2;
if (delta_y <= 0)
backbuf.y = handle_ypos;
else
backbuf.y = starty + ph/2;
backbuf.x -= LIGHT_SYMBOL_SIZE/2;
backbuf.y -= LIGHT_SYMBOL_SIZE/2;
backbuf.w = fabs(delta_x) + LIGHT_SYMBOL_SIZE;
backbuf.h = fabs(delta_y) + LIGHT_SYMBOL_SIZE;
break;
case SPOT_LIGHT:
case NO_LIGHT:
backbuf.x = xpos - LIGHT_SYMBOL_SIZE / 2;
backbuf.y = ypos - LIGHT_SYMBOL_SIZE / 2;
backbuf.x = handle_xpos - LIGHT_SYMBOL_SIZE / 2;
backbuf.y = handle_ypos - LIGHT_SYMBOL_SIZE / 2;
backbuf.w = LIGHT_SYMBOL_SIZE;
backbuf.h = LIGHT_SYMBOL_SIZE;
break;
@ -374,17 +363,14 @@ draw_lights ()
(backbuf.x <= PREVIEW_WIDTH) &&
(backbuf.y >= 0) && (backbuf.y <= PREVIEW_HEIGHT))
{
/* clip coordinates to preview widget sizes */
if ((backbuf.x + backbuf.w) > PREVIEW_WIDTH)
backbuf.w = (PREVIEW_WIDTH - backbuf.x);
if ((backbuf.y + backbuf.h) > PREVIEW_HEIGHT)
backbuf.h = (PREVIEW_HEIGHT - backbuf.y);
backbuf.image =
gdk_drawable_get_image (previewarea->window,
backbuf.image = gdk_drawable_get_image (previewarea->window,
backbuf.x, backbuf.y,
backbuf.w, backbuf.h);
}
@ -399,23 +385,22 @@ draw_lights ()
case POINT_LIGHT:
case SPOT_LIGHT:
gdk_draw_arc ( previewarea->window, gc, TRUE,
xpos - LIGHT_SYMBOL_SIZE / 2,
ypos - LIGHT_SYMBOL_SIZE / 2,
handle_xpos - LIGHT_SYMBOL_SIZE / 2,
handle_ypos - LIGHT_SYMBOL_SIZE / 2,
LIGHT_SYMBOL_SIZE,
LIGHT_SYMBOL_SIZE, 0, 360 * 64);
break;
case DIRECTIONAL_LIGHT:
gdk_draw_arc ( previewarea->window, gc, TRUE,
xpos - LIGHT_SYMBOL_SIZE / 2,
ypos - LIGHT_SYMBOL_SIZE / 2,
handle_xpos - LIGHT_SYMBOL_SIZE / 2,
handle_ypos - LIGHT_SYMBOL_SIZE / 2,
LIGHT_SYMBOL_SIZE,
LIGHT_SYMBOL_SIZE, 0, 360 * 64);
gdk_draw_line( previewarea->window, gc,
xpos, ypos, xpos+delta_x, ypos+delta_y);
handle_xpos, handle_ypos, startx+pw/2 , starty + ph/2);
break;
case NO_LIGHT:
break;
}
}
}
@ -436,11 +421,25 @@ update_light (gint xpos, gint ypos)
vp = mapvals.viewpoint;
vp.z = -vp.z;
switch (mapvals.lightsource.type)
{
case NO_LIGHT:
case POINT_LIGHT:
case SPOT_LIGHT:
gimp_vector_2d_to_3d (startx,
starty,
pw,
ph,
xpos, ypos, &vp, &mapvals.lightsource.position);
break;
case DIRECTIONAL_LIGHT:
gimp_vector_2d_to_3d (startx,
starty,
pw,
ph,
xpos, ypos, &vp, &mapvals.lightsource.direction);
break;
}
}
@ -455,7 +454,6 @@ draw_preview_image (gint recompute)
gck_gc_set_foreground (visinfo, gc, 255, 255, 255);
gck_gc_set_background (visinfo, gc, 0, 0, 0);
gdk_gc_set_function (gc, GDK_COPY);
compute_preview_rectangle (&startx, &starty, &pw, &ph);
@ -470,7 +468,6 @@ draw_preview_image (gint recompute)
gdk_flush ();
compute_preview (startx, starty, pw, ph);
newcursor = gdk_cursor_new (GDK_HAND2);
gdk_window_set_cursor (previewarea->window, newcursor);
gdk_cursor_unref (newcursor);
@ -482,8 +479,6 @@ draw_preview_image (gint recompute)
g_object_unref (backbuf.image);
backbuf.image = NULL;
}
}
gdk_draw_image (previewarea->window, gc, image,
@ -492,9 +487,8 @@ draw_preview_image (gint recompute)
/* draw symbols if enabled in UI */
if (mapvals.interactive_preview)
{
draw_lights ();
draw_handles ();
}
}
/******************************/
@ -505,14 +499,12 @@ gint
preview_events (GtkWidget *area,
GdkEvent *event)
{
switch (event->type)
{
case GDK_EXPOSE:
/* Is this the first exposure? */
/* =========================== */
if (!gc)
{
gc = gdk_gc_new (area->window);
@ -526,21 +518,21 @@ preview_events (GtkWidget *area,
case GDK_LEAVE_NOTIFY:
break;
case GDK_BUTTON_PRESS:
light_hit = check_marker_hit (event->button.x, event->button.y);
light_hit = check_handle_hit (event->button.x, event->button.y);
left_button_pressed = TRUE;
break;
case GDK_BUTTON_RELEASE:
left_button_pressed = FALSE;
break;
case GDK_MOTION_NOTIFY:
if (left_button_pressed == TRUE && light_hit == TRUE) {
if (left_button_pressed == TRUE &&
light_hit == TRUE &&
mapvals.interactive_preview == TRUE )
{
draw_handles();
interactive_preview_callback(NULL);
update_light (event->motion.x, event->motion.y);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pos_x), mapvals.lightsource.position.x);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pos_y), mapvals.lightsource.position.y);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pos_z), mapvals.lightsource.position.z);
}
break;
default:
break;
@ -549,10 +541,9 @@ preview_events (GtkWidget *area,
return FALSE;
}
static void
void
interactive_preview_callback (GtkWidget *widget)
{
if ( preview_update_timer != 0)
{
gtk_timeout_remove ( preview_update_timer );
@ -561,23 +552,16 @@ interactive_preview_callback (GtkWidget *widget)
preview_update_timer = gtk_timeout_add(100, (GtkFunction) interactive_preview_timer_callback, NULL);
}
static void
void
interactive_preview_timer_callback ( void )
{
gtk_timeout_remove ( preview_update_timer );
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pos_x), mapvals.lightsource.position.x);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pos_y), mapvals.lightsource.position.y);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_pos_z), mapvals.lightsource.position.z);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_dir_x), mapvals.lightsource.direction.x);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_dir_y), mapvals.lightsource.direction.y);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_dir_z), mapvals.lightsource.direction.z);
if (mapvals.interactive_preview)
{
draw_preview_image (TRUE);
} else {
draw_preview_image(FALSE);
}
}
void update_preview_image(void)
{
interactive_preview_callback(NULL);
}

View file

@ -37,11 +37,16 @@ extern guint left_button_pressed;
extern GtkWidget * spin_pos_x;
extern GtkWidget * spin_pos_y;
extern GtkWidget * spin_pos_z;
extern GtkWidget * spin_dir_x;
extern GtkWidget * spin_dir_y;
extern GtkWidget * spin_dir_z;
/* Externally visible functions */
void draw_preview_image (gint recompute);
void update_preview_image(void);
void interactive_preview_callback (GtkWidget *widget);
gint preview_events (GtkWidget *area,
GdkEvent *event);
@ -51,6 +56,4 @@ gint check_marker_hit (gint xpos,
void update_light (gint xpos,
gint ypos);
void preview_callback (GtkWidget *widget);
#endif /* __LIGHTING_PREVIEW_H__ */

View file

@ -87,9 +87,6 @@ static void toggleenvironment_update (GtkWidget *widget,
static void lightmenu_callback (GtkWidget *widget,
gpointer data);
static void interactive_preview_timer_callback( void );
static void apply_callback (GtkWidget *widget);
static gint bumpmap_constrain (gint32 image_id,
@ -225,7 +222,7 @@ lightmenu_callback (GtkWidget *widget,
gtk_widget_hide (dirlightwid);
}
update_preview_image();
interactive_preview_callback(NULL);
}
@ -497,7 +494,6 @@ create_light_page (void)
GtkWidget *table;
GtkWidget *optionmenu;
GtkWidget *colorbutton;
GtkWidget *spinbutton;
GtkObject *adj;
page = gtk_vbox_new (FALSE, 4);
@ -543,7 +539,7 @@ create_light_page (void)
G_CALLBACK (gimp_color_button_get_color),
&mapvals.lightsource.color);
g_signal_connect(G_OBJECT(colorbutton), "color_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
_("Lig_ht Color:"), 1.0, 0.5,
@ -577,7 +573,7 @@ create_light_page (void)
&mapvals.lightsource.position.x);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data ( spin_pos_x,
@ -593,7 +589,7 @@ create_light_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.position.y);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
@ -610,7 +606,7 @@ create_light_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.position.z);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data ( spin_pos_z,
@ -630,50 +626,50 @@ create_light_page (void)
gtk_container_add (GTK_CONTAINER (dirlightwid), table);
gtk_widget_show (table);
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.x,
spin_dir_x = gimp_spin_button_new (&adj, mapvals.lightsource.direction.x,
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
_("X:"), 1.0, 0.5,
spinbutton, 1, TRUE);
spin_dir_x, 1, TRUE);
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.direction.x);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data (spinbutton,
gimp_help_set_help_data (spin_dir_x,
_("Light source X direction in XYZ space"), NULL);
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.y,
spin_dir_y = gimp_spin_button_new (&adj, mapvals.lightsource.direction.y,
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
_("Y:"), 1.0, 0.5,
spinbutton, 1, TRUE);
spin_dir_y, 1, TRUE);
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.direction.y);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data (spinbutton,
gimp_help_set_help_data (spin_dir_y,
_("Light source Y direction in XYZ space"), NULL);
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.z,
spin_dir_z = gimp_spin_button_new (&adj, mapvals.lightsource.direction.z,
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
_("Z:"), 1.0, 0.5,
spinbutton, 1, TRUE);
spin_dir_z, 1, TRUE);
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.direction.z);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data (spinbutton,
gimp_help_set_help_data (spin_dir_z,
_("Light source Z direction in XYZ space"), NULL);
gtk_widget_show (page);
@ -729,7 +725,7 @@ create_material_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.ambient_int);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
@ -759,7 +755,7 @@ create_material_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.diffuse_int);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
@ -802,6 +798,11 @@ create_material_page (void)
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.diffuse_ref);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
@ -828,6 +829,11 @@ create_material_page (void)
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.specular_ref);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
@ -854,6 +860,10 @@ create_material_page (void)
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.highlight);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK(interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
@ -924,17 +934,14 @@ create_bump_page (void)
_("Bumpm_ap Image:"), 1.0, 0.5,
optionmenu, 1, TRUE);
optionmenu =
gimp_option_menu_new2 (FALSE,
optionmenu = gimp_option_menu_new2 (FALSE,
G_CALLBACK (mapmenu2_callback),
&mapvals.bumpmaptype,
(gpointer) mapvals.bumpmaptype,
_("Linear"), (gpointer) LINEAR_MAP, NULL,
_("Logarithmic"), (gpointer) LOGARITHMIC_MAP, NULL,
_("Sinusoidal"), (gpointer) SINUSOIDAL_MAP, NULL,
_("Spherical"), (gpointer) SPHERICAL_MAP, NULL,
NULL);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
_("Cu_rve:"), 1.0, 0.5,
@ -1196,7 +1203,7 @@ main_dialog (GimpDrawable *drawable)
G_CALLBACK (gimp_toggle_button_update),
&mapvals.interactive_preview);
g_signal_connect(G_OBJECT(toggle), "toggled",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
@ -1217,7 +1224,6 @@ main_dialog (GimpDrawable *drawable)
create_main_notebook (main_hbox);
gtk_widget_show (appwin);
{
GdkCursor *newcursor;

View file

@ -1,5 +1,5 @@
Preset
desc=Simulates the Apply Canvas\010plugin, by just adding a\010paper relief to the image.
desc=Simulates the Apply Canvas\012plugin, by just adding a\012paper relief to the image.
orientnum=1
orientfirst=0.000000
orientlast=0.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Huge spheres! Tileable,\010might be suitable as a\010background somewhere.
desc=Huge spheres! Tileable,\012might be suitable as a\012background somewhere.
orientnum=1
orientfirst=0.000000
orientlast=60.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Turns the image into a layer\010of small pebbles.
desc=Turns the image into a layer\012of small pebbles.
orientnum=1
orientfirst=47.790001
orientlast=0.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Sends a horde of maggots\010to gnaw at your image.
desc=Sends a horde of maggots\012to gnaw at your image.
orientnum=30
orientfirst=0.000000
orientlast=360.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Quite close to the original\010Cryptiq-plugins effect.
desc=Quite close to the original\012Cryptiq-plugins effect.
orientnum=1
orientfirst=0.000000
orientlast=0.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Very rough moss-like\010texture. Works quite well\010for tileable backgrounds\010and other textures.
desc=Very rough moss-like\012texture. Works quite well\012for tileable backgrounds\012and other textures.
orientnum=21
orientfirst=31.860001
orientlast=180.220001

View file

@ -1,5 +1,5 @@
Preset
desc=Rough paint-on-rock\010sort of texture. Good for\010tileable backgrounds.
desc=Rough paint-on-rock\012sort of texture. Good for\012tileable backgrounds.
orientnum=30
orientfirst=0.000000
orientlast=360.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Plain oil-painting. Good for\010big pictures, as much of\010the details are lost.
desc=Plain oil-painting. Good for\012big pictures, as much of\012the details are lost.
orientnum=30
orientfirst=70.089996
orientlast=360.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Looks like a mixture between\010a spiderweb and a smashed\010window.
desc=Looks like a mixture between\012a spiderweb and a smashed\012window.
orientnum=17
orientfirst=15.930000
orientlast=360.000000

View file

@ -1,5 +1,5 @@
Preset
desc=The image looks like it is made\010up of small pieces of straw\010or chips of wood. Tilable.
desc=The image looks like it is made\012up of small pieces of straw\012or chips of wood. Tileable.
orientnum=30
orientfirst=41.419998
orientlast=360.000000

View file

@ -1,5 +1,5 @@
Preset
desc=Makes the image look like\010some sort of woven quilt\010or rug, or something in that\010direction.
desc=Makes the image look like\012some sort of woven quilt\012or rug, or something in that\012direction.
orientnum=4
orientfirst=9.560000
orientlast=360.000000

View file

@ -33,6 +33,7 @@ static GtkWidget *brushprev = NULL;
GtkObject *brushreliefadjust = NULL;
GtkObject *brushaspectadjust = NULL;
GtkObject *brushgammaadjust = NULL;
static GtkListStore *brushstore;
GtkWidget *brushdrawablemenu = NULL;
static GtkWidget *brushemptyitem;
@ -50,7 +51,7 @@ static gboolean colorfile(char *fn)
return fn && strstr(fn, ".ppm");
}
void brushdmenuselect(gint32 id, gpointer data)
static void brushdmenuselect(gint32 id, gpointer data)
{
GimpPixelRgn src_rgn;
guchar *src_row;
@ -65,8 +66,8 @@ void brushdmenuselect(gint32 id, gpointer data)
if(brushfile == 2) return; /* Not finished GUI-building yet */
if(brushfile) {
unselectall(brushlist);
if (brushfile) {
/* unselectall(brushlist); */
if(GTK_IS_WIDGET(presetsavebutton))
gtk_widget_set_sensitive(GTK_WIDGET(presetsavebutton), FALSE);
}
@ -157,17 +158,15 @@ void dummybrushdmenuselect(GtkWidget *w, gpointer data)
updatebrushprev(NULL);
}
void destroy_window (GtkWidget *widget, GtkWidget **window)
static void destroy_window (GtkWidget *widget, GtkWidget **window)
{
*window = NULL;
}
void brushlistrefresh(void)
static void brushlistrefresh(void)
{
GtkWidget *list = brushlist;
int n = g_list_length(GTK_LIST(list)->children);
gtk_list_clear_items(GTK_LIST(list), 0, n);
readdirintolist("Brushes", list, NULL);
gtk_list_store_clear (brushstore);
readdirintolist("Brushes", brushlist, NULL);
}
void savebrush_ok(GtkWidget *w, GtkFileSelection *fs, gpointer data)
@ -199,14 +198,11 @@ void savebrush(GtkWidget *wg, gpointer data)
gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), path);
g_signal_connect (G_OBJECT(window), "destroy",
G_CALLBACK (destroy_window),
g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK (destroy_window),
&window);
g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(window)->ok_button),
"clicked",
G_CALLBACK (savebrush_ok),
window);
"clicked", G_CALLBACK (savebrush_ok), window);
g_signal_connect_swapped (G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button),
"clicked",
@ -217,7 +213,7 @@ void savebrush(GtkWidget *wg, gpointer data)
return;
}
gint validdrawable(gint32 imageid, gint32 drawableid, gpointer data)
static gboolean validdrawable(gint32 imageid, gint32 drawableid, gpointer data)
{
if(drawableid == -1) return TRUE;
return (gimp_drawable_is_rgb(drawableid) || gimp_drawable_is_gray(drawableid));
@ -300,13 +296,11 @@ void updatebrushprev(char *fn)
static gboolean brushdontupdate = FALSE;
void selectbrush(GtkWidget *wg, GtkWidget *p)
static void selectbrush(GtkTreeSelection *selection, gpointer data)
{
GList *h;
GtkWidget *tmpw;
char *l;
static char *oldl = NULL;
static char fname[200];
GtkTreeIter iter;
GtkTreeModel *model;
char fname[200];
if (brushdontupdate) return;
@ -315,50 +309,47 @@ void selectbrush(GtkWidget *wg, GtkWidget *p)
return;
}
/* Argh! Doesn't work! WHY!? :-( */
/*
gtk_menu_set_active(GTK_MENU(brushdrawablemenu),0);
gtk_menu_item_select(GTK_MENU_ITEM(brushemptyitem));
gtk_widget_draw_default(brushdrawablemenu);
gtk_widget_bite_me(brushdrawablemenu);
*/
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
gchar *brush;
if(!p) return;
h = GTK_LIST(p)->selection;
if(!h) return;
tmpw = h->data;
if(!tmpw) return;
l = (gchar *) gtk_label_get_text(GTK_LABEL(GTK_BIN(tmpw)->child));
gtk_tree_model_get (model, &iter, 0, &brush, -1);
if (oldl && strcmp(oldl, l)) {
brushdontupdate = TRUE;
gtk_adjustment_set_value(GTK_ADJUSTMENT(brushgammaadjust), 1.0);
gtk_adjustment_set_value(GTK_ADJUSTMENT(brushaspectadjust), 0.0);
brushdontupdate = FALSE;
}
oldl = l;
sprintf(fname, "Brushes/%s", l);
sprintf(fname, "Brushes/%s", brush);
strcpy(pcvals.selectedbrush, fname);
updatebrushprev(fname);
g_free (brush);
}
}
static void selectbrushfile(GtkWidget *wg, GtkWidget *p)
static void selectbrushfile(GtkTreeSelection *selection, gpointer data)
{
brushfile = 1;
if(GTK_IS_WIDGET(presetsavebutton))
gtk_widget_set_sensitive(GTK_WIDGET(presetsavebutton), TRUE);
selectbrush(wg,p);
gtk_widget_set_sensitive (presetsavebutton, TRUE);
selectbrush (selection, NULL);
}
static void brushaspectadjust_cb(GtkWidget *w, gpointer data)
{
gimp_double_adjustment_update (GTK_ADJUSTMENT(w), data);
updatebrushprev (pcvals.selectedbrush);
}
void create_brushpage(GtkNotebook *notebook)
{
GtkWidget *box1, *box2, *box3, *thispage;
GtkWidget *scrolled_win, *list;
GtkWidget *view;
GtkWidget *tmpw, *table;
GtkWidget *dmenu;
GtkWidget *label;
GtkTreeSelection *selection;
label = gtk_label_new_with_mnemonic (_("_Brush"));
@ -370,22 +361,10 @@ void create_brushpage(GtkNotebook *notebook)
gtk_box_pack_start(GTK_BOX(thispage), box1, TRUE,TRUE,0);
gtk_widget_show (box1);
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (box1), scrolled_win, FALSE, FALSE, 0);
gtk_widget_show (scrolled_win);
gtk_widget_set_size_request(scrolled_win, 150,-1);
brushlist = list = gtk_list_new ();
gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win),
list);
gtk_widget_show (list);
readdirintolist("Brushes", list, pcvals.selectedbrush);
view = createonecolumnlist (box1, selectbrushfile);
brushlist = view;
brushstore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
box2 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(box1), box2,FALSE,FALSE,0);
@ -405,16 +384,17 @@ void create_brushpage(GtkNotebook *notebook)
gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
gtk_widget_show (tmpw);
brushgammaadjust = gtk_adjustment_new(pcvals.brushgamma, 0.5, 3.0, 0.1, 0.1, 1.0);
brushgammaadjust = gtk_adjustment_new(pcvals.brushgamma, 0.5, 3.0, 0.1,
0.1, 1.0);
tmpw = gtk_hscale_new(GTK_ADJUSTMENT(brushgammaadjust));
gtk_widget_set_size_request (GTK_WIDGET(tmpw), 100, 30);
gtk_scale_set_draw_value (GTK_SCALE (tmpw), FALSE);
gtk_scale_set_digits(GTK_SCALE (tmpw), 2);
gtk_box_pack_start (GTK_BOX (box2), tmpw, FALSE, FALSE, 0);
gtk_widget_show (tmpw);
g_signal_connect(G_OBJECT(brushgammaadjust), "value_changed",
G_CALLBACK(selectbrush),
list);
g_signal_connect_swapped (G_OBJECT(brushgammaadjust), "value_changed",
G_CALLBACK(updatebrushprev), pcvals.selectedbrush);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Changes the gamma (brightness) of the selected brush"), NULL);
box1 = gtk_hbox_new (FALSE, 0);
@ -469,8 +449,7 @@ void create_brushpage(GtkNotebook *notebook)
_("Specifies the aspect ratio of the brush"),
NULL);
g_signal_connect (brushaspectadjust, "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&pcvals.brushaspect);
G_CALLBACK (brushaspectadjust_cb), &pcvals.brushaspect);
brushreliefadjust =
gimp_scale_entry_new (GTK_TABLE(table), 0, 1,
@ -484,12 +463,8 @@ void create_brushpage(GtkNotebook *notebook)
G_CALLBACK (gimp_double_adjustment_update),
&pcvals.brushrelief);
g_signal_connect (G_OBJECT(list), "selection_changed",
G_CALLBACK(selectbrushfile),
list);
if(!GTK_LIST(list)->selection)
gtk_list_select_item(GTK_LIST(list), 0);
selectbrush(NULL, list);
selectbrush(selection, NULL);
readdirintolist("Brushes", view, pcvals.selectedbrush);
gtk_notebook_append_page_menu (notebook, thispage, label, NULL);
}

View file

@ -193,8 +193,6 @@ static void dialog_ok_callback(GtkWidget *widget, gpointer data)
storevals();
pcvals.run = 1;
gtk_widget_destroy(dlg);
if (omwindow)
gtk_widget_destroy(GTK_WIDGET(omwindow));
}
static void dialog_cancel_callback(GtkWidget *widget, gpointer data)
@ -203,58 +201,56 @@ static void dialog_cancel_callback(GtkWidget *widget, gpointer data)
gtk_widget_destroy(dlg);
}
void unselectall(GtkWidget *list)
void reselect(GtkWidget *view, char *fname)
{
GList *h;
GtkWidget *tmpw;
for(;;) {
h = GTK_LIST(list)->selection;
if(!h) break;
tmpw = h->data;
if(!tmpw) break;
gtk_list_unselect_child(GTK_LIST(list), tmpw);
}
}
void reselect(GtkWidget *list, char *fname)
{
GList *h;
GtkWidget *tmpw;
char *tmps, *tmpfile;
GtkTreeModel *model;
GtkTreeSelection *selection;
GtkTreeIter iter;
char *tmpfile;
tmpfile = strrchr(fname, '/');
if(tmpfile)
if (tmpfile)
fname = ++tmpfile;
unselectall(list);
model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
h = GTK_LIST(list)->children;
while(h) {
tmpw = h->data;
gtk_label_get(GTK_LABEL(GTK_BIN(tmpw)->child), &tmps);
if(!strcmp(tmps, fname)) {
gtk_list_select_child(GTK_LIST(list), tmpw);
if (gtk_tree_model_get_iter_first (model, &iter)) {
do {
gchar *name;
gtk_tree_model_get (model, &iter, 0, &name, -1);
if (!strcmp(name, fname)) {
gtk_tree_selection_select_iter (selection, &iter);
g_free (name);
break;
}
h = g_list_next(h);
g_free (name);
} while (gtk_tree_model_iter_next (model, &iter));
}
}
void readdirintolist_real(char *subdir, GtkWidget *list, char *selected)
static void readdirintolist_real(char *subdir, GtkWidget *view,
char *selected)
{
gchar *fpath;
const gchar *de;
GtkWidget *selectedw = NULL, *tmpw;
GDir *dir;
GList *flist = NULL;
GtkTreeIter iter;
GtkListStore *store;
GtkTreeSelection *selection;
if(selected) {
if(!selected[0])
store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
if (selected) {
if (!selected[0])
selected = NULL;
else {
char *nsel;
nsel = strrchr(selected, '/');
if(nsel) selected = ++nsel;
if (nsel) selected = ++nsel;
}
}
@ -278,40 +274,93 @@ void readdirintolist_real(char *subdir, GtkWidget *list, char *selected)
if (!file_exists)
continue;
flist = g_list_insert_sorted(flist, g_strdup(de), (GCompareFunc)g_ascii_strcasecmp);
flist = g_list_insert_sorted(flist, g_strdup(de),
(GCompareFunc)g_ascii_strcasecmp);
}
g_dir_close(dir);
while(flist) {
tmpw = gtk_list_item_new_with_label(flist->data);
if(selected)
if(!strcmp(flist->data, selected))
selectedw = tmpw;
gtk_container_add(GTK_CONTAINER(list), tmpw);
gtk_widget_show(tmpw);
g_free(flist->data);
flist = g_list_remove(flist,flist->data);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
while (flist)
{
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, flist->data, -1);
if (selected)
{
if (!strcmp(flist->data, selected))
{
gtk_tree_selection_select_iter (selection, &iter);
}
}
g_free (flist->data);
flist = g_list_remove (flist, flist->data);
}
if (!selected)
{
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
gtk_tree_selection_select_iter (selection, &iter);
}
if(selectedw)
gtk_list_select_child(GTK_LIST(list), selectedw);
else
gtk_list_select_item(GTK_LIST(list), 0);
}
void readdirintolist(char *subdir, GtkWidget *list, char *selected)
void readdirintolist(char *subdir, GtkWidget *view, char *selected)
{
char *tmpdir;
GList *thispath = parsepath();
while(thispath)
while (thispath)
{
tmpdir = g_build_filename ((gchar *) thispath->data, subdir, NULL);
readdirintolist_real (tmpdir, list, selected);
readdirintolist_real (tmpdir, view, selected);
g_free (tmpdir);
thispath = thispath->next;
}
}
GtkWidget *createonecolumnlist(GtkWidget *parent,
void (*changed_cb)
(GtkTreeSelection *selection, gpointer data))
{
GtkListStore *store;
GtkTreeSelection *selection;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkWidget *swin, *view;
swin = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(swin),
GTK_SHADOW_IN);
gtk_box_pack_start (GTK_BOX (parent), swin, FALSE, FALSE, 0);
gtk_widget_show (swin);
gtk_widget_set_size_request(swin, 150,-1);
store = gtk_list_store_new (1, G_TYPE_STRING);
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
g_object_unref (G_OBJECT (store));
gtk_widget_show (view);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Preset", renderer,
"text", 0,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
gtk_container_add (GTK_CONTAINER (swin), view);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (changed_cb),
NULL);
return view;
}
static void showabout(void)
{
static GtkWidget *window = NULL;
@ -376,7 +425,7 @@ static void showabout(void)
tmphbox = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(tmpvbox), tmphbox, TRUE, TRUE, 0);
tmpw = gtk_label_new("\xa9 1999 Vidar Madsen\n"
tmpw = gtk_label_new("(C) 1999 Vidar Madsen\n"
"vidar@prosalg.no\n"
"http://www.prosalg.no/~vidar/gimpressionist/\n"
PLUG_IN_VERSION
@ -447,7 +496,6 @@ static int create_dialog(void)
notebook = gtk_notebook_new ();
gtk_box_pack_start (GTK_BOX (box1), notebook, TRUE, TRUE, 5);
/* gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook)); */
gtk_widget_show(notebook);
create_presetpage(GTK_NOTEBOOK (notebook));

View file

@ -97,7 +97,6 @@ extern char *path;
extern struct ppm infile;
extern struct ppm inalpha;
extern GtkWidget *window;
extern GtkWidget *omwindow;
extern int brushfile;
extern struct ppm brushppm;
@ -174,13 +173,17 @@ gchar *findfile(const gchar *);
void unselectall(GtkWidget *list);
void reselect(GtkWidget *list, char *fname);
void readdirintolist(char *subdir, GtkWidget *list, char *selected);
void readdirintolist(char *subdir, GtkWidget *view, char *selected);
void orientchange(GtkWidget *wg, void *d, int num);
void sizechange(GtkWidget *wg, void *d, int num);
void placechange(int num);
void colorchange(int num);
void generalbgchange(GtkWidget *wg, void *d, int num);
GtkWidget *createonecolumnlist(GtkWidget *parent,
void (*changed_cb)
(GtkTreeSelection *selection, gpointer data));
void reloadbrush(char *fn, struct ppm *p);
void create_orientmap_dialog(void);

View file

@ -19,7 +19,7 @@
#define NUMVECTYPES 4
GtkWidget *omwindow = NULL;
static GtkWidget *omwindow;
static GtkWidget *vectorprev;
static GtkWidget *ompreviewprev;
@ -437,12 +437,12 @@ void create_orientmap_dialog(void)
GTK_WIN_POS_MOUSE,
FALSE, TRUE, FALSE,
GTK_STOCK_CANCEL, gtk_widget_hide,
NULL, 1, NULL, FALSE, FALSE,
GTK_STOCK_APPLY, omapplyclick,
NULL, NULL, NULL, FALSE, FALSE,
GTK_STOCK_CANCEL, gtk_widget_hide,
NULL, 1, NULL, FALSE, FALSE,
GTK_STOCK_OK, omokclick,
NULL, 1, NULL, TRUE, FALSE,

View file

@ -28,65 +28,63 @@ GtkObject *paperreliefadjust = NULL;
GtkObject *paperscaleadjust = NULL;
GtkWidget *paperinvert = NULL;
GtkWidget *paperoverlay = NULL;
static GtkListStore *paperstore;
void updatepaperprev(char *fn)
static void updatepaperprev(char *fn)
{
int i, j;
char buf[100];
if(!fn) {
memset(buf, 0, 100);
for(i = 0; i < 100; i++) {
gtk_preview_draw_row (GTK_PREVIEW (paperprev), buf, 0, i, 100);
}
} else {
double sc;
ppm_t p = {0,0,NULL};
loadppm(fn, &p);
sc = p.width > p.height ? p.width : p.height;
sc = 100.0 / sc;
resize(&p, p.width*sc,p.height*sc);
for(i = 0; i < 100; i++) {
for (i = 0; i < 100; i++) {
int k = i * p.width * 3;
memset(buf,0,100);
memset(buf, 0, 100);
if(i < p.height) {
for(j = 0; j < p.width; j++)
buf[j] = p.col[k + j * 3];
if(GTK_TOGGLE_BUTTON(paperinvert)->active)
for(j = 0; j < p.width; j++)
if (GTK_TOGGLE_BUTTON(paperinvert)->active)
for (j = 0; j < p.width; j++)
buf[j] = 255 - buf[j];
}
gtk_preview_draw_row (GTK_PREVIEW (paperprev), buf, 0, i, 100);
}
killppm(&p);
}
gtk_widget_draw (paperprev, NULL);
}
static void selectpaper(GtkWidget *wg, GtkWidget *p)
static void selectpaper(GtkTreeSelection *selection, gpointer data)
{
GList *h = GTK_LIST(p)->selection;
GtkWidget *tmpw;
char *l;
static char fname[200];
GtkTreeIter iter;
GtkTreeModel *model;
char fname[200];
if(!h) return;
tmpw = h->data;
if(!tmpw) return;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
gchar *paper;
gtk_label_get(GTK_LABEL(GTK_BIN(tmpw)->child), &l);
gtk_tree_model_get (model, &iter, 0, &paper, -1);
sprintf(fname, "Paper/%s", l);
sprintf(fname, "Paper/%s", paper);
strcpy(pcvals.selectedpaper, fname);
updatepaperprev(fname);
g_free (paper);
}
}
void create_paperpage(GtkNotebook *notebook)
{
GtkWidget *box1, *thispage, *box2;
GtkWidget *label, *tmpw, *table;
GtkWidget *scrolled_win, *list;
GtkWidget *view;
GtkTreeSelection *selection;
GtkTreeIter iter;
label = gtk_label_new_with_mnemonic (_("P_aper"));
@ -98,23 +96,9 @@ void create_paperpage(GtkNotebook *notebook)
gtk_box_pack_start(GTK_BOX(thispage), box1, TRUE, TRUE, 0);
gtk_widget_show (box1);
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (box1), scrolled_win, FALSE, FALSE, 0);
gtk_widget_show (scrolled_win);
gtk_widget_set_size_request(scrolled_win, 150,-1);
paperlist = list = gtk_list_new ();
gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_win),
list);
gtk_widget_show (list);
readdirintolist("Paper", list, pcvals.selectedpaper);
paperlist = view = createonecolumnlist (box1, selectpaper);
paperstore = GTK_LIST_STORE(gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
box2 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
@ -134,7 +118,9 @@ void create_paperpage(GtkNotebook *notebook)
gtk_box_pack_start (GTK_BOX (box2), tmpw, FALSE, FALSE, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmpw), FALSE);
gtk_widget_show (tmpw);
g_signal_connect (G_OBJECT(tmpw), "clicked", G_CALLBACK(selectpaper), list);
g_signal_connect_swapped (G_OBJECT(tmpw), "clicked",
G_CALLBACK(selectpaper), selection);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw,
_("Inverts the Papers texture"), NULL);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmpw), pcvals.paperinvert);
@ -181,11 +167,11 @@ void create_paperpage(GtkNotebook *notebook)
G_CALLBACK (gimp_double_adjustment_update),
&pcvals.paperrelief);
g_signal_connect (G_OBJECT(list), "selection_changed",
G_CALLBACK(selectpaper), list);
if (!GTK_LIST(list)->selection)
gtk_list_select_item(GTK_LIST(list), 0);
selectpaper(NULL,list);
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(paperstore), &iter))
gtk_tree_selection_select_iter (selection, &iter);
selectpaper(selection, NULL);
readdirintolist("Paper", view, pcvals.selectedpaper);
gtk_notebook_append_page_menu (notebook, thispage, label, NULL);
}

View file

@ -8,11 +8,6 @@
#include <unistd.h>
#endif
#ifdef __GNUC__
#warning GTK_DISABLE_DEPRECATED
#endif
#undef GTK_DISABLE_DEPRECATED
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
@ -23,27 +18,28 @@
GtkWidget *presetnameentry = NULL;
GtkWidget *presetsavebutton = NULL;
GtkWidget *presetlist = NULL;
static GtkWidget *presetlist = NULL;
GtkWidget *presetdesctext = NULL;
GtkWidget *presetdesclabel = NULL;
static GtkListStore *store;
static char presetdesc[4096] = "";
static char *factory_defaults = "<Factory defaults>";
static void addfactorydefaults(GtkListStore *store)
{
GtkTreeIter iter;
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, factory_defaults, -1);
}
static void presetsrefresh(void)
{
GtkWidget *list = presetlist;
GtkWidget *tmpw;
int n = g_list_length(GTK_LIST(list)->children);
gtk_list_clear_items(GTK_LIST(list), 0, n);
tmpw = gtk_list_item_new_with_label(factory_defaults);
gtk_container_add(GTK_CONTAINER(list), tmpw);
gtk_widget_show(tmpw);
readdirintolist("Presets", list, NULL);
gtk_list_store_clear (store);
addfactorydefaults (store);
readdirintolist ("Presets", presetlist, NULL);
}
#define PRESETMAGIC "Preset"
@ -119,7 +115,6 @@ static void setorientvector(char *str)
static void setsizevector(char *str)
{
/* num,x,y,siz,str,type */
char *tmps = str;
int n;
@ -281,46 +276,50 @@ static int loadpreset(char *fn)
return 0;
}
static void applypreset(void)
static void applypreset(GtkWidget *w, GtkTreeSelection *selection)
{
GList *h = GTK_LIST(presetlist)->selection;
GtkWidget *tmpw = h->data;
char *l;
static char fname[200];
GtkTreeIter iter;
GtkTreeModel *model;
gtk_label_get(GTK_LABEL(GTK_BIN(tmpw)->child), &l);
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
char fname[200];
gchar *preset;
/* Restore defaults, in case of old/short Preset file */
pcvals = defaultpcvals;
presetdesc[0] = '\0';
gtk_tree_model_get (model, &iter, 0, &preset, -1);
if(!strcmp(l, factory_defaults)) {
restorevals();
return;
}
sprintf(fname, "Presets/%s", l);
if (strcmp(preset, factory_defaults))
{
sprintf(fname, "Presets/%s", preset);
strcpy(fname, findfile(fname));
loadpreset(fname);
}
restorevals();
g_free (preset);
}
}
static void deletepreset(void)
static void deletepreset(GtkWidget *w, GtkTreeSelection *selection)
{
GList *h = GTK_LIST(presetlist)->selection;
GtkWidget *tmpw = h->data;
char *l;
static char fname[200];
GtkTreeIter iter;
GtkTreeModel *model;
gtk_label_get(GTK_LABEL(GTK_BIN(tmpw)->child), &l);
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
char fname[200];
gchar *preset;
sprintf(fname, "Presets/%s", l);
gtk_tree_model_get (model, &iter, 0, &preset, -1);
sprintf(fname, "Presets/%s", preset);
strcpy(fname, findfile(fname));
unlink(fname);
presetsrefresh();
g_free (preset);
}
}
static void savepreset(void);
@ -331,7 +330,7 @@ static void presetdesccallback(GtkTextBuffer *buffer, gpointer data)
GtkTextIter start, end;
gtk_text_buffer_get_bounds (buffer, &start, &end);
str = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
str = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
dest = g_strescape (str, NULL);
strcpy (presetdesc, dest);
g_free (dest);
@ -379,6 +378,8 @@ static void create_savepreset(void)
gtk_widget_show (label);
swin = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(swin),
GTK_SHADOW_IN);
gtk_container_add (GTK_CONTAINER(box), swin);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(swin),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
@ -529,8 +530,7 @@ static void readdesc(char *fn)
sprintf(fname, "Presets/%s", fn);
tmp = findfile(fname);
if(!tmp) {
if(presetdesclabel)
if (!tmp) {
gtk_label_set_text(GTK_LABEL(presetdesclabel), "");
return;
}
@ -552,37 +552,35 @@ static void readdesc(char *fn)
fclose(f);
}
gtk_label_set_text(GTK_LABEL(presetdesclabel), "");
return;
}
static void selectpreset(GtkWidget *wg, GtkWidget *p)
static void selectpreset(GtkTreeSelection *selection, gpointer data)
{
GList *h = GTK_LIST(p)->selection;
GtkWidget *tmpw;
char *l;
GtkTreeIter iter;
GtkTreeModel *model;
if(!h) return;
tmpw = h->data;
if(!tmpw) return;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
gchar *preset;
gtk_label_get(GTK_LABEL(GTK_BIN(tmpw)->child), &l);
if(strcmp(l, factory_defaults))
gtk_entry_set_text(GTK_ENTRY(presetnameentry), l);
readdesc(l);
gtk_tree_model_get (model, &iter, 0, &preset, -1);
if(strcmp(preset, factory_defaults))
gtk_entry_set_text (GTK_ENTRY(presetnameentry), preset);
readdesc (preset);
g_free (preset);
}
}
void create_presetpage(GtkNotebook *notebook)
{
GtkWidget *box1, *box2, *hbox, *vbox, *thispage;
GtkWidget *scrolled_win, *list;
GtkWidget *view;
GtkWidget *tmpw;
GtkWidget *label;
GtkTreeSelection *selection;
label = gtk_label_new_with_mnemonic (_("_Presets"));
presetlist = list = gtk_list_new ();
thispage = gtk_vbox_new(FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (thispage), 5);
gtk_widget_show(thispage);
@ -596,8 +594,8 @@ void create_presetpage(GtkNotebook *notebook)
gtk_widget_set_size_request(tmpw, 150, -1);
gtk_widget_show(tmpw);
presetsavebutton = tmpw = gtk_button_new_with_label( _("Save current"));
gtk_box_pack_start(GTK_BOX(box1), tmpw,FALSE,FALSE,5);
presetsavebutton = tmpw = gtk_button_new_with_label( _("Save current..."));
gtk_box_pack_start(GTK_BOX(box1), tmpw, FALSE, FALSE, 5);
gtk_widget_show (tmpw);
g_signal_connect (G_OBJECT(tmpw), "clicked", G_CALLBACK(create_savepreset),
NULL);
@ -609,28 +607,10 @@ void create_presetpage(GtkNotebook *notebook)
gtk_box_pack_start(GTK_BOX(thispage), box1, TRUE, TRUE, 0);
gtk_widget_show (box1);
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (box1), scrolled_win, FALSE, FALSE, 0);
gtk_widget_show (scrolled_win);
gtk_widget_set_size_request(scrolled_win, 150, -1);
gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win),
list);
gtk_widget_show (list);
gtk_signal_connect (GTK_OBJECT(list), "selection_changed",
GTK_SIGNAL_FUNC(selectpreset), list);
tmpw = gtk_list_item_new_with_label(factory_defaults);
gtk_container_add(GTK_CONTAINER(list), tmpw);
gtk_widget_show(tmpw);
readdirintolist("Presets", list, NULL);
presetlist = view = createonecolumnlist (box1, selectpreset);
store = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
addfactorydefaults (store);
vbox = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(box1), vbox, FALSE, FALSE, 0);
@ -647,14 +627,16 @@ void create_presetpage(GtkNotebook *notebook)
tmpw = gtk_button_new_from_stock (GTK_STOCK_APPLY);
gtk_box_pack_start(GTK_BOX(box2), tmpw, FALSE, FALSE, 0);
gtk_widget_show (tmpw);
g_signal_connect (G_OBJECT(tmpw), "clicked", G_CALLBACK(applypreset), NULL);
g_signal_connect (G_OBJECT(tmpw), "clicked", G_CALLBACK(applypreset),
selection);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw,
_("Reads the selected Preset into memory"), NULL);
tmpw = gtk_button_new_from_stock (GTK_STOCK_DELETE);
gtk_box_pack_start(GTK_BOX(box2), tmpw, FALSE, FALSE,0);
gtk_widget_show (tmpw);
g_signal_connect (G_OBJECT(tmpw), "clicked", G_CALLBACK(deletepreset), NULL);
g_signal_connect (G_OBJECT(tmpw), "clicked", G_CALLBACK(deletepreset),
selection);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw,
_("Deletes the selected Preset"), NULL);
@ -671,7 +653,6 @@ void create_presetpage(GtkNotebook *notebook)
gtk_widget_show (hbox);
presetdesclabel = tmpw = gtk_label_new( _("(Desc)"));
/* gtk_box_pack_start(GTK_BOX(box2), tmpw, FALSE, FALSE,0); */
gtk_box_pack_start(GTK_BOX(hbox), tmpw, FALSE, FALSE, 0);
gtk_widget_show(tmpw);
@ -682,5 +663,7 @@ for inclusion into the next release!\n"));
gtk_box_pack_start(GTK_BOX(thispage), tmpw, FALSE, FALSE, 0);
gtk_widget_show(tmpw);
readdirintolist("Presets", view, NULL);
gtk_notebook_append_page_menu (notebook, thispage, label, NULL);
}

View file

@ -20,8 +20,7 @@
#define MAPFILE "data.out"
GtkWidget *smwindow = NULL;
static GtkWidget *smwindow;
static GtkWidget *smvectorprev;
static GtkWidget *smpreviewprev;
static GtkWidget *prev_button;
@ -376,12 +375,12 @@ void create_sizemap_dialog(void)
GTK_WIN_POS_MOUSE,
FALSE, TRUE, FALSE,
GTK_STOCK_CANCEL, gtk_widget_hide,
NULL, 1, NULL, FALSE, FALSE,
GTK_STOCK_APPLY, smapplyclick,
NULL, NULL, NULL, FALSE, FALSE,
GTK_STOCK_CANCEL, gtk_widget_hide,
NULL, 1, NULL, FALSE, FALSE,
GTK_STOCK_OK, smokclick,
NULL, 1, NULL, TRUE, FALSE,