45
static void gimp_stroke_editor_class_init (GimpStrokeEditorClass *klass);
46
static GObject * gimp_stroke_editor_constructor (GType type,
46
static GObject * gimp_stroke_editor_constructor (GType type,
48
48
GObjectConstructParam *params);
49
static void gimp_stroke_editor_set_property (GObject *object,
53
static void gimp_stroke_editor_get_property (GObject *object,
57
static void gimp_stroke_editor_finalize (GObject *object);
58
static gboolean gimp_stroke_editor_paint_button (GtkWidget *widget,
59
GdkEventExpose *event,
61
static void gimp_stroke_editor_dash_preset (GtkWidget *widget,
66
static GtkVBoxClass *parent_class = NULL;
70
gimp_stroke_editor_get_type (void)
72
static GType view_type = 0;
76
static const GTypeInfo view_info =
78
sizeof (GimpStrokeEditorClass),
80
NULL, /* base_finalize */
81
(GClassInitFunc) gimp_stroke_editor_class_init,
82
NULL, /* class_finalize */
83
NULL, /* class_data */
84
sizeof (GimpStrokeEditor),
86
NULL /* instance_init */
89
view_type = g_type_register_static (GTK_TYPE_VBOX,
49
static void gimp_stroke_editor_set_property (GObject *object,
53
static void gimp_stroke_editor_get_property (GObject *object,
57
static void gimp_stroke_editor_finalize (GObject *object);
58
static gboolean gimp_stroke_editor_paint_button (GtkWidget *widget,
59
GdkEventExpose *event,
61
static void gimp_stroke_editor_dash_preset (GtkWidget *widget,
62
GimpStrokeOptions *options);
64
static void gimp_stroke_editor_combo_fill (GimpStrokeOptions *options,
68
G_DEFINE_TYPE (GimpStrokeEditor, gimp_stroke_editor, GTK_TYPE_VBOX)
70
#define parent_class gimp_stroke_editor_parent_class
98
74
gimp_stroke_editor_class_init (GimpStrokeEditorClass *klass)
100
76
GObjectClass *object_class = G_OBJECT_CLASS (klass);
102
parent_class = g_type_class_peek_parent (klass);
104
78
object_class->constructor = gimp_stroke_editor_constructor;
105
79
object_class->set_property = gimp_stroke_editor_set_property;
106
80
object_class->get_property = gimp_stroke_editor_get_property;
109
83
g_object_class_install_property (object_class, PROP_OPTIONS,
110
84
g_param_spec_object ("options", NULL, NULL,
111
85
GIMP_TYPE_STROKE_OPTIONS,
86
GIMP_PARAM_READWRITE |
113
87
G_PARAM_CONSTRUCT_ONLY));
114
89
g_object_class_install_property (object_class, PROP_RESOLUTION,
115
90
g_param_spec_double ("resolution", NULL, NULL,
116
91
GIMP_MIN_RESOLUTION,
117
92
GIMP_MAX_RESOLUTION,
94
GIMP_PARAM_READWRITE |
120
95
G_PARAM_CONSTRUCT_ONLY));
99
gimp_stroke_editor_init (GimpStrokeEditor *editor)
124
104
gimp_stroke_editor_set_property (GObject *object,
125
105
guint property_id,
126
106
const GValue *value,
190
177
g_assert (editor->options != NULL);
192
gtk_box_set_spacing (GTK_BOX (editor), 6);
179
gtk_box_set_spacing (GTK_BOX (editor), 12);
194
181
box = gtk_hbox_new (FALSE, 6);
195
182
gtk_box_pack_start (GTK_BOX (editor), box, FALSE, FALSE, 0);
196
183
gtk_widget_show (box);
198
label = gtk_label_new (_("Line Width:"));
185
label = gtk_label_new (_("Line width:"));
199
186
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
200
187
gtk_widget_show (label);
206
193
gtk_box_pack_start (GTK_BOX (box), size, FALSE, FALSE, 0);
207
194
gtk_widget_show (size);
196
box = gimp_prop_enum_radio_box_new (G_OBJECT (editor->options), "style",
198
gtk_box_pack_start (GTK_BOX (editor), box, FALSE, FALSE, 0);
199
gtk_widget_show (box);
209
201
expander = gtk_expander_new_with_mnemonic (_("_Line Style"));
210
202
gtk_box_pack_start (GTK_BOX (editor), expander, FALSE, FALSE, 0);
211
203
gtk_widget_show (expander);
215
207
gtk_widget_show (frame);
217
209
table = gtk_table_new (5, 3, FALSE);
218
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
219
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
220
gtk_table_set_row_spacing (GTK_TABLE (table), 2, 4);
221
gtk_table_set_row_spacing (GTK_TABLE (table), 4, 4);
210
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
211
gtk_table_set_row_spacings (GTK_TABLE (table), 3);
212
gtk_table_set_row_spacing (GTK_TABLE (table), 2, 6);
213
gtk_table_set_row_spacing (GTK_TABLE (table), 4, 6);
222
214
gtk_container_add (GTK_CONTAINER (frame), table);
223
215
gtk_widget_show (table);
285
box = gimp_enum_combo_box_new (GIMP_TYPE_DASH_PRESET);
277
store = g_object_new (GIMP_TYPE_ENUM_STORE,
278
"enum-type", GIMP_TYPE_DASH_PRESET,
279
"user-data-type", GIMP_TYPE_DASH_PATTERN,
282
for (value = store->enum_class->values; value->value_name; value++)
287
desc = gimp_enum_value_get_desc (store->enum_class, value);
289
gtk_list_store_append (GTK_LIST_STORE (store), &iter);
290
gtk_list_store_set (GTK_LIST_STORE (store), &iter,
291
GIMP_INT_STORE_VALUE, value->value,
292
GIMP_INT_STORE_LABEL, desc,
296
box = gimp_enum_combo_box_new_with_model (store);
297
g_object_unref (store);
286
299
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (box), GIMP_DASH_CUSTOM);
287
300
gimp_table_attach_aligned (GTK_TABLE (table), 0, row++,
288
_("Dash preset:"), 0.0, 0.5,
301
_("Dash _preset:"), 0.0, 0.5,
304
cell = g_object_new (GIMP_TYPE_CELL_RENDERER_DASHES,
307
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (box), cell, FALSE);
308
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (box), cell,
309
"pattern", GIMP_INT_STORE_USER_DATA);
311
gimp_stroke_editor_combo_fill (editor->options, GTK_COMBO_BOX (box));
291
313
g_signal_connect (box, "changed",
292
314
G_CALLBACK (gimp_stroke_editor_dash_preset),
293
315
editor->options);
294
g_signal_connect_object (editor->options, "dash_info_changed",
316
g_signal_connect_object (editor->options, "dash-info-changed",
295
317
G_CALLBACK (gimp_int_combo_box_set_active),
296
318
box, G_CONNECT_SWAPPED);
299
321
button = gimp_prop_check_button_new (G_OBJECT (editor->options), "antialias",
300
322
_("_Antialiasing"));
301
gtk_table_attach (GTK_TABLE (table), button, 0, 2, row, row + 1,
323
gtk_table_attach (GTK_TABLE (table), button, 0, 3, row, row + 1,
302
324
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
303
325
gtk_widget_show (button);
306
box = gimp_prop_enum_radio_box_new (G_OBJECT (editor->options), "style",
308
gtk_box_pack_start (GTK_BOX (editor), box, FALSE, FALSE, 0);
309
gtk_widget_show (box);
359
gimp_stroke_editor_dash_preset (GtkWidget *widget,
376
gimp_stroke_editor_dash_preset (GtkWidget *widget,
377
GimpStrokeOptions *options)
364
if (gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &value))
365
gimp_stroke_options_set_dash_preset (GIMP_STROKE_OPTIONS (data), value);
381
if (gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &value) &&
382
value != GIMP_DASH_CUSTOM)
384
gimp_stroke_options_set_dash_pattern (options, value, NULL);
389
gimp_stroke_editor_combo_update (GtkTreeModel *model,
391
GimpStrokeOptions *options)
395
if (gimp_int_store_lookup_by_value (model, GIMP_DASH_CUSTOM, &iter))
397
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
398
GIMP_INT_STORE_USER_DATA, options->dash_info,
404
gimp_stroke_editor_combo_fill (GimpStrokeOptions *options,
407
GtkTreeModel *model = gtk_combo_box_get_model (box);
411
for (iter_valid = gtk_tree_model_get_iter_first (model, &iter);
413
iter_valid = gtk_tree_model_iter_next (model, &iter))
417
gtk_tree_model_get (model, &iter,
418
GIMP_INT_STORE_VALUE, &value,
421
if (value == GIMP_DASH_CUSTOM)
423
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
424
GIMP_INT_STORE_USER_DATA, options->dash_info,
427
g_signal_connect_object (options, "notify::dash-info",
428
G_CALLBACK (gimp_stroke_editor_combo_update),
429
model, G_CONNECT_SWAPPED);
433
GArray *pattern = gimp_dash_pattern_new_from_preset (value);
435
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
436
GIMP_INT_STORE_USER_DATA, pattern,
438
gimp_dash_pattern_free (pattern);