57
55
#include "gfig-line.h"
58
56
#include "gfig-poly.h"
59
57
#include "gfig-preview.h"
58
#include "gfig-rectangle.h"
60
59
#include "gfig-spiral.h"
61
60
#include "gfig-star.h"
62
61
#include "gfig-stock.h"
64
#define BRUSH_PREVIEW_SZ 32
65
#define SEL_BUTTON_WIDTH 100
66
#define SEL_BUTTON_HEIGHT 20
68
#define PREVIEW_MASK (GDK_EXPOSURE_MASK | \
69
GDK_POINTER_MOTION_MASK | \
70
GDK_BUTTON_PRESS_MASK | \
71
GDK_BUTTON_RELEASE_MASK | \
72
GDK_BUTTON_MOTION_MASK | \
73
GDK_KEY_PRESS_MASK | \
76
#define GRID_TYPE_MENU 1
77
#define GRID_RENDER_MENU 2
79
#define GRID_HIGHTLIGHT 1
80
#define GRID_RESTORE 2
82
#define PAINT_LAYERS_MENU 1
83
#define PAINT_BGS_MENU 2
84
#define PAINT_TYPE_MENU 3
86
#define SELECT_TYPE_MENU 1
87
#define SELECT_ARCTYPE_MENU 2
88
#define SELECT_TYPE_MENU_FILL 3
89
#define SELECT_TYPE_MENU_WHEN 4
91
#define OBJ_SELECT_GT 1
92
#define OBJ_SELECT_LT 2
93
#define OBJ_SELECT_EQ 4
63
#define SEL_BUTTON_WIDTH 100
64
#define SEL_BUTTON_HEIGHT 20
66
#define GRID_TYPE_MENU 1
67
#define GRID_RENDER_MENU 2
69
#define PAINT_BGS_MENU 2
70
#define PAINT_TYPE_MENU 3
72
#define OBJ_SELECT_GT 1
73
#define OBJ_SELECT_LT 2
74
#define OBJ_SELECT_EQ 4
77
gint undo_level; /* Last slot filled in -1 = no undo */
78
GList *undo_table[MAX_UNDO];
95
80
/* Values when first invoked */
96
81
SelectItVals selvals =
255
newlayer = gimp_layer_new (gfig_context->image_id, "GFig", img_width, img_height,
256
GIMP_RGBA_IMAGE, 100., GIMP_NORMAL_MODE);
247
newlayer = gimp_layer_new (gfig_context->image_id, "GFig",
248
img_width, img_height,
249
GIMP_RGBA_IMAGE, 100.0, GIMP_NORMAL_MODE);
257
250
gimp_drawable_fill (newlayer, GIMP_TRANSPARENT_FILL);
258
251
gimp_image_add_layer (gfig_context->image_id, newlayer, -1);
259
252
gfig_context->drawable_id = newlayer;
265
258
gfig_stock_init ();
267
gfig_path = gimp_gimprc_query ("gfig-path");
271
gchar *gimprc = gimp_personal_rc_file ("gimprc");
276
g_strconcat ("${gimp_dir}", G_DIR_SEPARATOR_S, "gfig",
277
G_SEARCHPATH_SEPARATOR_S,
278
"${gimp_data_dir}", G_DIR_SEPARATOR_S, "gfig",
280
esc_path = g_strescape (full_path, NULL);
260
path = gimp_gimprc_query ("gfig-path");
264
gfig_path = g_filename_from_utf8 (path, -1, NULL, NULL, NULL);
269
gchar *gimprc = gimp_personal_rc_file ("gimprc");
270
gchar *full_path = gimp_config_build_data_path ("gfig");
271
gchar *esc_path = g_strescape (full_path, NULL);
281
272
g_free (full_path);
283
274
g_message (_("No %s in gimprc:\n"
294
285
/* Start building the dialog up */
295
top_level_dlg = gimp_dialog_new (_("Gfig"), "gfig",
286
top_level_dlg = gimp_dialog_new (_("Gfig"), PLUG_IN_BINARY,
297
gimp_standard_help_func, HELP_ID,
288
gimp_standard_help_func, PLUG_IN_PROC,
299
290
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
300
291
GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
295
gtk_dialog_set_alternative_button_order (GTK_DIALOG (top_level_dlg),
304
300
g_signal_connect (top_level_dlg, "response",
305
301
G_CALLBACK (gfig_response),
393
389
/* brush selector in Stroke frame */
394
390
gfig_context->brush_select
395
= gimp_brush_select_widget_new ("Brush",
391
= gimp_brush_select_button_new ("Brush",
396
392
gfig_context->default_style.brush_name,
398
gfig_brush_changed_callback,
394
g_signal_connect (gfig_context->brush_select, "brush-set",
395
G_CALLBACK (gfig_brush_changed_callback), NULL);
400
396
gtk_box_pack_start (GTK_BOX (vbox), gfig_context->brush_select,
401
397
FALSE, FALSE, 0);
402
398
gtk_widget_show (gfig_context->brush_select);
417
413
/* fill style combo box in Style frame */
418
414
gfig_context->fillstyle_combo = combo
419
= gimp_int_combo_box_new (_("No fill"), FILL_NONE,
420
_("Color fill"), FILL_COLOR,
421
_("Pattern fill"), FILL_PATTERN,
422
_("Gradient fill"), FILL_GRADIENT,
415
= gimp_int_combo_box_new (_("No fill"), FILL_NONE,
416
_("Color fill"), FILL_COLOR,
417
_("Pattern fill"), FILL_PATTERN,
418
_("Shape gradient"), FILL_GRADIENT,
419
_("Vertical gradient"), FILL_VERTICAL,
420
_("Horizontal gradient"), FILL_HORIZONTAL,
424
422
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), 0);
425
423
g_signal_connect (combo, "changed",
426
G_CALLBACK (select_combo_callback),
427
GINT_TO_POINTER (SELECT_TYPE_MENU_FILL));
424
G_CALLBACK (select_filltype_callback),
428
426
gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0);
429
427
gtk_widget_show (combo);
458
456
/* A page for the pattern selector */
459
457
gfig_context->pattern_select
460
= gimp_pattern_select_widget_new ("Pattern", gfig_context->default_style.pattern,
461
gfig_pattern_changed_callback,
458
= gimp_pattern_select_button_new ("Pattern", gfig_context->default_style.pattern);
459
g_signal_connect (gfig_context->pattern_select, "pattern-set",
460
G_CALLBACK (gfig_pattern_changed_callback), NULL);
463
461
gtk_widget_show (gfig_context->pattern_select);
464
462
gtk_notebook_append_page (GTK_NOTEBOOK (fill_type_notebook),
465
463
gfig_context->pattern_select, NULL);
467
465
/* A page for the gradient selector */
468
466
gfig_context->gradient_select
469
= gimp_gradient_select_widget_new ("Gradient", gfig_context->default_style.gradient,
470
gfig_gradient_changed_callback,
467
= gimp_gradient_select_button_new ("Gradient", gfig_context->default_style.gradient);
468
g_signal_connect (gfig_context->gradient_select, "gradient-set",
469
G_CALLBACK (gfig_gradient_changed_callback), NULL);
472
470
gtk_widget_show (gfig_context->gradient_select);
473
471
gtk_notebook_append_page (GTK_NOTEBOOK (fill_type_notebook),
474
472
gfig_context->gradient_select, NULL);
492
490
gtk_widget_show (toggle);
494
492
/* "snap to grid" checkbutton at bottom of style frame */
495
toggle = gtk_check_button_new_with_label (_("Snap to grid"));
493
toggle = gtk_check_button_new_with_label (Q_("checkbutton|Snap to grid"));
496
494
gtk_box_pack_end (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
497
495
g_signal_connect (toggle, "toggled",
498
496
G_CALLBACK (gimp_toggle_button_update),
904
915
{ "line", GFIG_STOCK_LINE,
905
916
NULL, "L", N_("Create line"), LINE },
918
{ "rectangle", GFIG_STOCK_RECTANGLE,
919
NULL, "R", N_("Create rectangle"), RECTANGLE },
907
921
{ "circle", GFIG_STOCK_CIRCLE,
908
922
NULL, "C", N_("Create circle"), CIRCLE },
1163
select_combo_callback (GtkWidget *widget,
1179
select_filltype_callback (GtkWidget *widget)
1166
gint mtype = GPOINTER_TO_INT (data);
1169
1183
gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &value);
1170
gtk_notebook_set_current_page (GTK_NOTEBOOK (fill_type_notebook), value);
1174
case SELECT_TYPE_MENU:
1175
selopt.type = (SelectionType) value;
1178
case SELECT_ARCTYPE_MENU:
1179
selopt.as_pie = (ArcType) value;
1182
case SELECT_TYPE_MENU_FILL:
1183
gfig_context_get_current_style ()->fill_type = (FillType) value;
1187
g_return_if_reached ();
1184
gtk_notebook_set_current_page (GTK_NOTEBOOK (fill_type_notebook),
1185
MIN (value, FILL_GRADIENT));
1187
gfig_context_get_current_style ()->fill_type = (FillType) value;
1191
1189
gfig_paint_callback ();
1321
1319
gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP);
1322
1320
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
1324
g_signal_connect (scale_data, "value_changed",
1322
g_signal_connect (scale_data, "value-changed",
1325
1323
G_CALLBACK (gimp_double_adjustment_update),
1326
1324
&selopt.feather_radius);
1327
g_signal_connect (scale_data, "value_changed",
1325
g_signal_connect (scale_data, "value-changed",
1328
1326
G_CALLBACK (gfig_paint_callback),
1330
1328
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
1388
1388
MIN_GRID, MAX_GRID, 1, 10, 0,
1391
g_signal_connect (size_data, "value_changed",
1391
g_signal_connect (size_data, "value-changed",
1392
1392
G_CALLBACK (gimp_int_adjustment_update),
1393
1393
&selvals.opts.gridspacing);
1394
g_signal_connect (size_data, "value_changed",
1395
G_CALLBACK (draw_grid_clear),
1398
gfig_opt_widget.gridspacing = GTK_ADJUSTMENT (size_data);
1399
g_object_add_weak_pointer (G_OBJECT (gfig_opt_widget.gridspacing),
1400
(gpointer) &gfig_opt_widget.gridspacing);
1394
g_signal_connect (size_data, "value-changed",
1395
G_CALLBACK (draw_grid_clear),
1398
gfig_opt_widget.gridspacing = GTK_ADJUSTMENT (size_data);
1399
g_object_add_weak_pointer (G_OBJECT (gfig_opt_widget.gridspacing),
1400
(gpointer) &gfig_opt_widget.gridspacing);
1402
sectors_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
1403
_("Polar grid sectors desired:"), 1, 5,
1404
selvals.opts.grid_sectors_desired,
1408
g_signal_connect (sectors_data, "value-changed",
1409
G_CALLBACK (gimp_int_adjustment_update),
1410
&selvals.opts.grid_sectors_desired);
1411
g_signal_connect (sectors_data, "value-changed",
1412
G_CALLBACK (draw_grid_clear),
1415
gfig_opt_widget.grid_sectors_desired = GTK_ADJUSTMENT (sectors_data);
1416
g_object_add_weak_pointer (G_OBJECT (gfig_opt_widget.grid_sectors_desired),
1417
(gpointer) &gfig_opt_widget.grid_sectors_desired);
1420
gfig_opt_widget.gridspacing = GTK_ADJUSTMENT (size_data);
1421
g_object_add_weak_pointer (G_OBJECT (gfig_opt_widget.gridspacing),
1422
(gpointer) &gfig_opt_widget.gridspacing);
1424
radius_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 4,
1425
_("Polar grid radius interval:"), 1, 5,
1426
selvals.opts.grid_radius_interval,
1430
g_signal_connect (radius_data, "value-changed",
1431
G_CALLBACK (gimp_double_adjustment_update),
1432
&selvals.opts.grid_radius_interval);
1433
g_signal_connect (radius_data, "value-changed",
1434
G_CALLBACK (draw_grid_clear),
1437
gfig_opt_widget.grid_radius_interval = GTK_ADJUSTMENT (radius_data);
1438
g_object_add_weak_pointer (G_OBJECT (gfig_opt_widget.grid_radius_interval),
1439
(gpointer) &gfig_opt_widget.grid_radius_interval);
1402
1441
combo = gimp_int_combo_box_new (_("Rectangle"), RECT_GRID,
1403
1442
_("Polar"), POLAR_GRID,
1479
1526
gtk_adjustment_set_value (gfig_opt_widget.gridspacing,
1480
1527
gfig_context->current_obj->opts.gridspacing);
1529
if (selvals.opts.grid_sectors_desired != gfig_context->current_obj->opts.grid_sectors_desired)
1531
if (gfig_opt_widget.grid_sectors_desired)
1532
gtk_adjustment_set_value (gfig_opt_widget.grid_sectors_desired,
1533
gfig_context->current_obj->opts.grid_sectors_desired);
1535
if (selvals.opts.grid_radius_interval != gfig_context->current_obj->opts.grid_radius_interval)
1537
if (gfig_opt_widget.grid_radius_interval)
1538
gtk_adjustment_set_value (gfig_opt_widget.grid_radius_interval,
1539
gfig_context->current_obj->opts.grid_radius_interval);
1482
1541
if (selvals.opts.gridtype != gfig_context->current_obj->opts.gridtype)
1484
1543
if (gfig_opt_widget.gridtypemenu)