1
/**************************************************************/
2
/* Dialog creation and updaters, callbacks and event-handlers */
3
/**************************************************************/
7
#include <libgimp/gimp.h>
8
#include <libgimp/gimpui.h>
11
#include "mapobject_ui.h"
12
#include "mapobject_image.h"
13
#include "mapobject_apply.h"
14
#include "mapobject_preview.h"
15
#include "mapobject_main.h"
16
#include "mapobject_stock.h"
18
#include "libgimp/stdplugins-intl.h"
22
GtkWidget *previewarea = NULL;
24
static GtkWidget *appwin = NULL;
25
static GtkNotebook *options_note_book = NULL;
27
static GtkWidget *pointlightwid;
28
static GtkWidget *dirlightwid;
30
static GtkObject *xadj, *yadj, *zadj;
32
static GtkWidget *box_page = NULL;
33
static GtkWidget *cylinder_page = NULL;
35
static guint left_button_pressed = FALSE;
36
static guint light_hit = FALSE;
39
static void create_main_notebook (GtkWidget *container);
41
static gint preview_events (GtkWidget *area,
44
static void update_light_pos_entries (void);
46
static void double_adjustment_update (GtkAdjustment *adjustment,
49
static void toggle_update (GtkWidget *widget,
52
static void togglegrid_update (GtkWidget *widget,
55
static void lightmenu_callback (GtkWidget *widget,
58
static void preview_callback (GtkWidget *widget,
61
static gint box_constrain (gint32 image_id,
64
static gint cylinder_constrain (gint32 image_id,
68
static GtkWidget * create_options_page (void);
69
static GtkWidget * create_light_page (void);
70
static GtkWidget * create_material_page (void);
71
static GtkWidget * create_orientation_page (void);
72
static GtkWidget * create_box_page (void);
73
static GtkWidget * create_cylinder_page (void);
76
/******************************************************/
77
/* Update angle & position (redraw grid if necessary) */
78
/******************************************************/
81
double_adjustment_update (GtkAdjustment *adjustment,
84
gimp_double_adjustment_update (adjustment, data);
87
draw_preview_wireframe ();
91
update_light_pos_entries (void)
93
g_signal_handlers_block_by_func (xadj,
94
gimp_double_adjustment_update,
95
&mapvals.lightsource.position.x);
96
gtk_adjustment_set_value (GTK_ADJUSTMENT (xadj),
97
mapvals.lightsource.position.x);
98
g_signal_handlers_unblock_by_func (xadj,
99
gimp_double_adjustment_update,
100
&mapvals.lightsource.position.x);
102
g_signal_handlers_block_by_func (yadj,
103
gimp_double_adjustment_update,
104
&mapvals.lightsource.position.y);
105
gtk_adjustment_set_value (GTK_ADJUSTMENT (yadj),
106
mapvals.lightsource.position.x);
107
g_signal_handlers_unblock_by_func (yadj,
108
gimp_double_adjustment_update,
109
&mapvals.lightsource.position.y);
111
g_signal_handlers_block_by_func (zadj,
112
gimp_double_adjustment_update,
113
&mapvals.lightsource.position.z);
114
gtk_adjustment_set_value (GTK_ADJUSTMENT (zadj),
115
mapvals.lightsource.position.z);
116
g_signal_handlers_unblock_by_func (zadj,
117
gimp_double_adjustment_update,
118
&mapvals.lightsource.position.z);
121
/**********************/
122
/* Std. toggle update */
123
/**********************/
126
toggle_update (GtkWidget *widget,
129
gimp_toggle_button_update (widget, data);
131
draw_preview_image (TRUE);
135
/***************************/
136
/* Show grid toggle update */
137
/***************************/
140
togglegrid_update (GtkWidget *widget,
143
gimp_toggle_button_update (widget, data);
145
if (mapvals.showgrid && linetab[0].x1 == -1)
147
draw_preview_wireframe ();
149
else if (!mapvals.showgrid && linetab[0].x1 != -1)
156
gdk_gc_set_rgb_bg_color (gc, &color);
159
color.green = 0xFFFF;
161
gdk_gc_set_rgb_fg_color (gc, &color);
163
gdk_gc_set_function (gc, GDK_INVERT);
170
/*****************************************/
171
/* Main window light type menu callback. */
172
/*****************************************/
175
lightmenu_callback (GtkWidget *widget,
178
gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), (gint *) data);
180
if (mapvals.lightsource.type == POINT_LIGHT)
182
gtk_widget_hide (dirlightwid);
183
gtk_widget_show (pointlightwid);
185
else if (mapvals.lightsource.type == DIRECTIONAL_LIGHT)
187
gtk_widget_hide (pointlightwid);
188
gtk_widget_show (dirlightwid);
192
gtk_widget_hide (pointlightwid);
193
gtk_widget_hide (dirlightwid);
197
/***************************************/
198
/* Main window map type menu callback. */
199
/***************************************/
202
mapmenu_callback (GtkWidget *widget,
205
gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), (gint *) data);
207
draw_preview_image (TRUE);
209
if (mapvals.showgrid && linetab[0].x1 == -1)
211
draw_preview_wireframe ();
213
else if (!mapvals.showgrid && linetab[0].x1 != -1)
220
gdk_gc_set_rgb_bg_color (gc, &color);
223
color.green = 0xFFFF;
225
gdk_gc_set_rgb_fg_color (gc, &color);
227
gdk_gc_set_function (gc, GDK_INVERT);
233
if (mapvals.maptype == MAP_BOX)
235
if (cylinder_page != NULL)
237
gtk_notebook_remove_page
239
g_list_length (options_note_book->children) - 1);
240
cylinder_page = NULL;
243
if (box_page == NULL)
245
box_page = create_box_page ();
246
gtk_notebook_append_page (options_note_book,
248
gtk_label_new_with_mnemonic (_("_Box")));
251
else if (mapvals.maptype == MAP_CYLINDER)
253
if (box_page != NULL)
255
gtk_notebook_remove_page
257
g_list_length (options_note_book->children) - 1);
261
if (cylinder_page == NULL)
263
cylinder_page = create_cylinder_page ();
264
gtk_notebook_append_page (options_note_book,
266
gtk_label_new_with_mnemonic (_("C_ylinder")));
271
if (box_page != NULL)
273
gtk_notebook_remove_page
275
g_list_length (options_note_book->children) - 1);
278
if (cylinder_page != NULL)
280
gtk_notebook_remove_page
282
g_list_length (options_note_book->children) - 1);
286
cylinder_page = NULL;
290
/******************************************/
291
/* Main window "Preview!" button callback */
292
/******************************************/
295
preview_callback (GtkWidget *widget,
298
draw_preview_image (TRUE);
302
/*********************************************/
303
/* Main window "-" (zoom in) button callback */
304
/*********************************************/
307
zoomout_callback (GtkWidget *widget,
310
if (mapvals.preview_zoom_factor < 2)
312
mapvals.preview_zoom_factor++;
313
if (linetab[0].x1 != -1)
315
draw_preview_image (TRUE);
319
/**********************************************/
320
/* Main window "+" (zoom out) button callback */
321
/**********************************************/
324
zoomin_callback (GtkWidget *widget,
327
if (mapvals.preview_zoom_factor > 0)
329
mapvals.preview_zoom_factor--;
330
if (linetab[0].x1 != -1)
332
draw_preview_image (TRUE);
336
/**********************************************/
337
/* Main window "Apply" button callback. */
338
/* Render to GIMP image, close down and exit. */
339
/**********************************************/
342
box_constrain (gint32 image_id,
346
if (drawable_id == -1)
349
return (gimp_drawable_is_rgb (drawable_id) &&
350
!gimp_drawable_is_indexed (drawable_id));
354
cylinder_constrain (gint32 image_id,
358
if (drawable_id == -1)
361
return (gimp_drawable_is_rgb (drawable_id) &&
362
!gimp_drawable_is_indexed (drawable_id));
365
/******************************/
366
/* Preview area event handler */
367
/******************************/
370
preview_events (GtkWidget *area,
381
/* Is this the first exposure? */
382
/* =========================== */
386
gc = gdk_gc_new (area->window);
387
draw_preview_image (TRUE);
391
draw_preview_image (FALSE);
392
if (mapvals.showgrid == 1 && linetab[0].x1 != -1)
393
draw_preview_wireframe ();
397
case GDK_ENTER_NOTIFY:
400
case GDK_LEAVE_NOTIFY:
403
case GDK_BUTTON_PRESS:
404
light_hit = check_light_hit (event->button.x, event->button.y);
405
if (light_hit == FALSE)
407
pos.x = -(2.0 * (gdouble) event->button.x /
408
(gdouble) PREVIEW_WIDTH - 1.0);
409
pos.y = (2.0 * (gdouble) event->button.y /
410
(gdouble) PREVIEW_HEIGHT - 1.0);
411
/*ArcBall_Mouse(pos);
412
ArcBall_BeginDrag(); */
414
left_button_pressed = TRUE;
417
case GDK_BUTTON_RELEASE:
418
if (light_hit == TRUE)
420
draw_preview_image (TRUE);
424
pos.x = -(2.0 * (gdouble) event->button.x /
425
(gdouble) PREVIEW_WIDTH - 1.0);
426
pos.y = (2.0 * (gdouble) event->button.y /
427
(gdouble) PREVIEW_HEIGHT - 1.0);
428
/*ArcBall_Mouse(pos);
429
ArcBall_EndDrag(); */
431
left_button_pressed = FALSE;
434
case GDK_MOTION_NOTIFY:
435
if (left_button_pressed == TRUE)
437
if (light_hit == TRUE)
439
update_light (event->motion.x, event->motion.y);
440
update_light_pos_entries ();
444
pos.x = -(2.0 * (gdouble) event->motion.x /
445
(gdouble) PREVIEW_WIDTH - 1.0);
446
pos.y = (2.0 * (gdouble) event->motion.y /
447
(gdouble) PREVIEW_HEIGHT - 1.0);
448
/* ArcBall_Mouse(pos);
450
ArcBall_Values(&a,&b,&c);
454
if (Alpha>180) Alpha-=360;
455
if (Alpha<-180) Alpha+=360;
456
if (Beta>180) Beta-=360;
457
if (Beta<-180) Beta+=360;
458
if (Gamma>180) Gamma-=360;
459
if (Gamma<-180) Gamma+=360;
460
UpdateAngleSliders(); */
472
/*******************************/
473
/* Create general options page */
474
/*******************************/
477
create_options_page (void)
488
GtkWidget *spinbutton;
491
page = gtk_vbox_new (FALSE, 12);
492
gtk_container_set_border_width (GTK_CONTAINER (page), 12);
494
/* General options */
496
frame = gimp_frame_new (_("General options"));
497
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
498
gtk_widget_show (frame);
500
vbox = gtk_vbox_new (FALSE, 6);
501
gtk_container_add (GTK_CONTAINER (frame), vbox);
502
gtk_widget_show (vbox);
504
hbox = gtk_hbox_new (FALSE, 6);
505
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
506
gtk_widget_show (hbox);
508
label = gtk_label_new (_("Map to:"));
509
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
510
gtk_widget_show (label);
512
combo = gimp_int_combo_box_new (_("Plane"), MAP_PLANE,
513
_("Sphere"), MAP_SPHERE,
515
_("Cylinder"), MAP_CYLINDER,
517
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), mapvals.maptype);
519
g_signal_connect (combo, "changed",
520
G_CALLBACK (mapmenu_callback),
523
ebox = gtk_event_box_new ();
524
gtk_container_add (GTK_CONTAINER (ebox), combo);
525
gtk_widget_show (combo);
527
gtk_box_pack_start (GTK_BOX (hbox), ebox, TRUE, TRUE, 0);
528
gtk_widget_show (ebox);
530
gimp_help_set_help_data (ebox, _("Type of object to map to"), NULL);
532
toggle = gtk_check_button_new_with_label (_("Transparent background"));
533
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
534
mapvals.transparent_background);
535
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
536
gtk_widget_show (toggle);
538
g_signal_connect (toggle, "toggled",
539
G_CALLBACK (toggle_update),
540
&mapvals.transparent_background);
542
gimp_help_set_help_data (toggle,
543
_("Make image transparent outside object"), NULL);
545
toggle = gtk_check_button_new_with_label (_("Tile source image"));
546
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
548
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
549
gtk_widget_show (toggle);
551
g_signal_connect (toggle, "toggled",
552
G_CALLBACK (toggle_update),
555
gimp_help_set_help_data (toggle,
556
_("Tile source image: useful for infinite planes"),
559
toggle = gtk_check_button_new_with_label (_("Create new image"));
560
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
561
mapvals.create_new_image);
562
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
563
gtk_widget_show (toggle);
565
g_signal_connect (toggle, "toggled",
566
G_CALLBACK (gimp_toggle_button_update),
567
&mapvals.create_new_image);
569
gimp_help_set_help_data (toggle,
570
_("Create a new image when applying filter"), NULL);
572
/* Antialiasing options */
574
frame = gimp_frame_new (NULL);
575
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
576
gtk_widget_show (frame);
578
toggle = gtk_check_button_new_with_mnemonic (_("Enable _antialiasing"));
579
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
580
mapvals.antialiasing);
581
gtk_frame_set_label_widget (GTK_FRAME (frame), toggle);
582
gtk_widget_show (toggle);
584
gimp_help_set_help_data (toggle,
585
_("Enable/disable jagged edges removal "
586
"(antialiasing)"), NULL);
588
g_signal_connect (toggle, "toggled",
589
G_CALLBACK (gimp_toggle_button_update),
590
&mapvals.antialiasing);
592
table = gtk_table_new (2, 3, FALSE);
593
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
594
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
595
gtk_container_add (GTK_CONTAINER (frame), table);
596
gtk_widget_show (table);
598
gtk_widget_set_sensitive (table, mapvals.antialiasing);
599
g_object_set_data (G_OBJECT (toggle), "set_sensitive", table);
601
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
603
mapvals.maxdepth, 1.0, 5.0, 0.1, 1.0,
605
_("Antialiasing quality. Higher is better, "
606
"but slower"), NULL);
607
g_signal_connect (adj, "value_changed",
608
G_CALLBACK (gimp_double_adjustment_update),
611
spinbutton = gimp_spin_button_new (&adj, mapvals.pixeltreshold,
612
0.001, 1000, 0.1, 1, 1, 0, 3);
613
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
614
_("_Threshold:"), 0.0, 0.5,
615
spinbutton, 1, TRUE);
617
g_signal_connect (adj, "value_changed",
618
G_CALLBACK (gimp_double_adjustment_update),
619
&mapvals.pixeltreshold);
621
gimp_help_set_help_data (spinbutton,
622
_("Stop when pixel differences are smaller than "
623
"this value"), NULL);
625
gtk_widget_show (page);
630
/******************************/
631
/* Create light settings page */
632
/******************************/
635
create_light_page (void)
642
GtkWidget *colorbutton;
643
GtkWidget *spinbutton;
646
page = gtk_vbox_new (FALSE, 12);
647
gtk_container_set_border_width (GTK_CONTAINER (page), 12);
649
frame = gimp_frame_new (_("Light Settings"));
650
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
651
gtk_widget_show (frame);
653
table = gtk_table_new (2, 2, FALSE);
654
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
655
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
656
gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table);
658
combo = gimp_int_combo_box_new (_("Point light"), POINT_LIGHT,
659
_("Directional light"), DIRECTIONAL_LIGHT,
660
_("No light"), NO_LIGHT,
662
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo),
663
mapvals.lightsource.type);
665
g_signal_connect (combo, "changed",
666
G_CALLBACK (lightmenu_callback),
667
&mapvals.lightsource.type);
669
ebox = gtk_event_box_new ();
670
gtk_container_add (GTK_CONTAINER (ebox), combo);
671
gtk_widget_show (combo);
673
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
674
_("Lightsource type:"), 0.0, 0.5,
677
gimp_help_set_help_data (ebox, _("Type of light source to apply"), NULL);
679
colorbutton = gimp_color_button_new (_("Select lightsource color"),
681
&mapvals.lightsource.color,
682
GIMP_COLOR_AREA_FLAT);
683
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
684
_("Lightsource color:"), 0.0, 0.5,
685
colorbutton, 1, FALSE);
687
g_signal_connect (colorbutton, "color_changed",
688
G_CALLBACK (gimp_color_button_get_color),
689
&mapvals.lightsource.color);
691
gimp_help_set_help_data (colorbutton,
692
_("Set light source color"), NULL);
694
pointlightwid = gimp_frame_new (_("Position"));
695
gtk_box_pack_start (GTK_BOX (page), pointlightwid, FALSE, FALSE, 0);
697
if (mapvals.lightsource.type == POINT_LIGHT)
698
gtk_widget_show (pointlightwid);
700
table = gtk_table_new (3, 2, FALSE);
701
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
702
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
703
gtk_container_add (GTK_CONTAINER (pointlightwid), table);
704
gtk_widget_show (table);
706
spinbutton = gimp_spin_button_new (&xadj, mapvals.lightsource.position.x,
707
-G_MAXFLOAT, G_MAXFLOAT,
708
0.1, 1.0, 1.0, 0.0, 2);
709
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
711
spinbutton, 1, TRUE);
713
g_signal_connect (xadj, "value_changed",
714
G_CALLBACK (gimp_double_adjustment_update),
715
&mapvals.lightsource.position.x);
717
gimp_help_set_help_data (spinbutton,
718
_("Light source X position in XYZ space"), NULL);
720
spinbutton = gimp_spin_button_new (&yadj, mapvals.lightsource.position.y,
721
-G_MAXFLOAT, G_MAXFLOAT,
722
0.1, 1.0, 1.0, 0.0, 2);
723
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
725
spinbutton, 1, TRUE);
727
g_signal_connect (yadj, "value_changed",
728
G_CALLBACK (gimp_double_adjustment_update),
729
&mapvals.lightsource.position.y);
731
gimp_help_set_help_data (spinbutton,
732
_("Light source Y position in XYZ space"), NULL);
734
spinbutton = gimp_spin_button_new (&zadj, mapvals.lightsource.position.z,
735
-G_MAXFLOAT, G_MAXFLOAT,
736
0.1, 1.0, 1.0, 0.0, 2);
737
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
739
spinbutton, 1, TRUE);
741
g_signal_connect (zadj, "value_changed",
742
G_CALLBACK (gimp_double_adjustment_update),
743
&mapvals.lightsource.position.z);
745
gimp_help_set_help_data (spinbutton,
746
_("Light source Z position in XYZ space"), NULL);
749
dirlightwid = gimp_frame_new (_("Direction Vector"));
750
gtk_box_pack_start (GTK_BOX (page), dirlightwid, FALSE, FALSE, 0);
752
if (mapvals.lightsource.type == DIRECTIONAL_LIGHT)
753
gtk_widget_show (dirlightwid);
755
table = gtk_table_new (3, 2, FALSE);
756
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
757
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
758
gtk_container_add (GTK_CONTAINER (dirlightwid), table);
759
gtk_widget_show (table);
761
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.x,
762
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
763
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
765
spinbutton, 1, TRUE);
767
g_signal_connect (adj, "value_changed",
768
G_CALLBACK (gimp_double_adjustment_update),
769
&mapvals.lightsource.direction.x);
771
gimp_help_set_help_data (spinbutton,
772
_("Light source X direction in XYZ space"), NULL);
774
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.y,
775
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
776
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
778
spinbutton, 1, TRUE);
780
g_signal_connect (adj, "value_changed",
781
G_CALLBACK (gimp_double_adjustment_update),
782
&mapvals.lightsource.direction.y);
784
gimp_help_set_help_data (spinbutton,
785
_("Light source Y direction in XYZ space"), NULL);
787
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.z,
788
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
789
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
791
spinbutton, 1, TRUE);
793
g_signal_connect (adj, "value_changed",
794
G_CALLBACK (gimp_double_adjustment_update),
795
&mapvals.lightsource.direction.z);
797
gimp_help_set_help_data (spinbutton,
798
_("Light source Z direction in XYZ space"), NULL);
800
gtk_widget_show (page);
805
/*********************************/
806
/* Create material settings page */
807
/*********************************/
810
create_material_page (void)
812
GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
818
GtkWidget *spinbutton;
822
page = gtk_vbox_new (FALSE, 12);
823
gtk_container_set_border_width (GTK_CONTAINER (page), 12);
825
frame = gimp_frame_new (_("Intensity Levels"));
826
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
827
gtk_widget_show (frame);
829
hbox = gtk_hbox_new (FALSE, 6);
830
gtk_container_add (GTK_CONTAINER (frame), hbox);
831
gtk_widget_show (hbox);
833
table = gtk_table_new (2, 4, FALSE);
834
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
835
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
836
gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
837
gtk_widget_show (table);
839
/* Ambient intensity */
841
image = gtk_image_new_from_stock (STOCK_INTENSITY_AMBIENT_LOW,
842
GTK_ICON_SIZE_BUTTON);
843
label = gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
844
_("Ambient:"), 0.0, 0.5,
846
gtk_size_group_add_widget (group, label);
848
spinbutton = gimp_spin_button_new (&adj, mapvals.material.ambient_int,
849
0, G_MAXFLOAT, 0.1, 1.0, 1.0, 0.0, 2);
850
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 0, 1,
851
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
852
gtk_widget_show (spinbutton);
854
g_signal_connect (adj, "value_changed",
855
G_CALLBACK (gimp_double_adjustment_update),
856
&mapvals.material.ambient_int);
858
gimp_help_set_help_data (spinbutton,
859
_("Amount of original color to show where no "
860
"direct light falls"), NULL);
862
image = gtk_image_new_from_stock (STOCK_INTENSITY_AMBIENT_HIGH,
863
GTK_ICON_SIZE_BUTTON);
864
gtk_table_attach (GTK_TABLE (table), image, 3, 4, 0, 1,
865
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
866
gtk_widget_show (image);
868
/* Diffuse intensity */
870
image = gtk_image_new_from_stock (STOCK_INTENSITY_DIFFUSE_LOW,
871
GTK_ICON_SIZE_BUTTON);
872
label = gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
873
_("Diffuse:"), 0.0, 0.5,
875
gtk_size_group_add_widget (group, label);
877
spinbutton = gimp_spin_button_new (&adj, mapvals.material.diffuse_int,
878
0, G_MAXFLOAT, 0.1, 1.0, 1.0, 0.0, 2);
879
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 1, 2,
880
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
881
gtk_widget_show (spinbutton);
883
g_signal_connect (adj, "value_changed",
884
G_CALLBACK (gimp_double_adjustment_update),
885
&mapvals.material.diffuse_int);
887
gimp_help_set_help_data (spinbutton,
888
_("Intensity of original color when lit by a light "
891
image = gtk_image_new_from_stock (STOCK_INTENSITY_DIFFUSE_HIGH,
892
GTK_ICON_SIZE_BUTTON);
893
gtk_table_attach (GTK_TABLE (table), image, 3, 4, 1, 2,
894
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
895
gtk_widget_show (image);
897
frame = gimp_frame_new (_("Reflectivity"));
898
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
899
gtk_widget_show (frame);
901
hbox = gtk_hbox_new (FALSE, 6);
902
gtk_container_add (GTK_CONTAINER (frame), hbox);
903
gtk_widget_show (hbox);
905
table = gtk_table_new (3, 4, FALSE);
906
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
907
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
908
gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
909
gtk_widget_show (table);
911
/* Diffuse reflection */
913
image = gtk_image_new_from_stock (STOCK_REFLECTIVITY_DIFFUSE_LOW,
914
GTK_ICON_SIZE_BUTTON);
915
label = gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
916
_("Diffuse:"), 0.0, 0.5,
918
gtk_size_group_add_widget (group, label);
920
spinbutton = gimp_spin_button_new (&adj, mapvals.material.diffuse_ref,
921
0, G_MAXFLOAT, 0.1, 1.0, 1.0, 0.0, 2);
922
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 0, 1,
923
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
924
gtk_widget_show (spinbutton);
926
g_signal_connect (adj, "value_changed",
927
G_CALLBACK (gimp_double_adjustment_update),
928
&mapvals.material.diffuse_ref);
930
gimp_help_set_help_data (spinbutton,
931
_("Higher values makes the object reflect more "
932
"light (appear lighter)"), NULL);
934
image = gtk_image_new_from_stock (STOCK_REFLECTIVITY_DIFFUSE_HIGH,
935
GTK_ICON_SIZE_BUTTON);
936
gtk_table_attach (GTK_TABLE (table), image, 3, 4, 0, 1,
937
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
938
gtk_widget_show (image);
940
/* Specular reflection */
942
image = gtk_image_new_from_stock (STOCK_REFLECTIVITY_SPECULAR_LOW,
943
GTK_ICON_SIZE_BUTTON);
944
label = gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
945
_("Specular:"), 0.0, 0.5,
947
gtk_size_group_add_widget (group, label);
949
spinbutton = gimp_spin_button_new (&adj, mapvals.material.specular_ref,
950
0, G_MAXFLOAT, 0.1, 1.0, 1.0, 0.0, 2);
951
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 1, 2,
952
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
953
gtk_widget_show (spinbutton);
955
g_signal_connect (adj, "value_changed",
956
G_CALLBACK (gimp_double_adjustment_update),
957
&mapvals.material.specular_ref);
959
gimp_help_set_help_data (spinbutton,
960
_("Controls how intense the highlights will be"),
963
image = gtk_image_new_from_stock (STOCK_REFLECTIVITY_SPECULAR_HIGH,
964
GTK_ICON_SIZE_BUTTON);
965
gtk_table_attach (GTK_TABLE (table), image, 3, 4, 1, 2,
966
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
967
gtk_widget_show (image);
971
image = gtk_image_new_from_stock (STOCK_REFLECTIVITY_HIGHLIGHT_LOW,
972
GTK_ICON_SIZE_BUTTON);
973
label = gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
974
_("Highlight:"), 0.0, 0.5,
976
gtk_size_group_add_widget (group, label);
978
spinbutton = gimp_spin_button_new (&adj, mapvals.material.highlight,
979
0, G_MAXFLOAT, 0.1, 1.0, 1.0, 0.0, 2);
980
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 2, 3,
981
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
982
gtk_widget_show (spinbutton);
984
g_signal_connect (adj, "value_changed",
985
G_CALLBACK (gimp_double_adjustment_update),
986
&mapvals.material.highlight);
988
gimp_help_set_help_data (spinbutton,
989
_("Higher values makes the highlights more focused"),
992
image = gtk_image_new_from_stock (STOCK_REFLECTIVITY_HIGHLIGHT_HIGH,
993
GTK_ICON_SIZE_BUTTON);
994
gtk_table_attach (GTK_TABLE (table), image, 3, 4, 2, 3,
995
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
996
gtk_widget_show (image);
998
gtk_widget_show (page);
1000
g_object_unref (group);
1005
/****************************************/
1006
/* Create orientation and position page */
1007
/****************************************/
1010
create_orientation_page (void)
1012
GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
1018
page = gtk_vbox_new (FALSE, 12);
1019
gtk_container_set_border_width (GTK_CONTAINER (page), 12);
1021
frame = gimp_frame_new (_("Position"));
1022
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
1023
gtk_widget_show (frame);
1025
table = gtk_table_new (3, 3, FALSE);
1026
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
1027
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
1028
gtk_container_add (GTK_CONTAINER (frame), table);
1029
gtk_widget_show (table);
1031
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
1033
mapvals.position.x, -1.0, 2.0, 0.01, 0.1, 5,
1035
_("Object X position in XYZ space"), NULL);
1036
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_SPINBUTTON (adj));
1037
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1038
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.01, 5);
1040
g_signal_connect (adj, "value_changed",
1041
G_CALLBACK (double_adjustment_update),
1042
&mapvals.position.x);
1044
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
1046
mapvals.position.y, -1.0, 2.0, 0.01, 0.1, 5,
1048
_("Object Y position in XYZ space"), NULL);
1049
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_SPINBUTTON (adj));
1050
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1051
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.01, 5);
1053
g_signal_connect (adj, "value_changed",
1054
G_CALLBACK (double_adjustment_update),
1055
&mapvals.position.y);
1057
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
1059
mapvals.position.z, -1.0, 2.0, 0.01, 0.1, 5,
1061
_("Object Z position in XYZ space"), NULL);
1062
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_SPINBUTTON (adj));
1063
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1064
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.01, 5);
1066
g_signal_connect (adj, "value_changed",
1067
G_CALLBACK (double_adjustment_update),
1068
&mapvals.position.z);
1070
frame = gimp_frame_new (_("Rotation"));
1071
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
1072
gtk_widget_show (frame);
1074
table = gtk_table_new (3, 3, FALSE);
1075
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
1076
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
1077
gtk_container_add (GTK_CONTAINER (frame), table);
1078
gtk_widget_show (table);
1080
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
1082
mapvals.alpha, -180.0, 180.0, 1.0, 15.0, 1,
1084
_("Rotation angle about X axis"), NULL);
1085
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_SPINBUTTON (adj));
1087
g_signal_connect (adj, "value_changed",
1088
G_CALLBACK (double_adjustment_update),
1091
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
1093
mapvals.beta, -180.0, 180.0, 1.0, 15.0, 1,
1095
_("Rotation angle about Y axis"), NULL);
1096
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_SPINBUTTON (adj));
1098
g_signal_connect (adj, "value_changed",
1099
G_CALLBACK (double_adjustment_update),
1102
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
1104
mapvals.gamma, -180.0, 180.0, 1.0, 15.0, 1,
1106
_("Rotation angle about Z axis"), NULL);
1107
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_SPINBUTTON (adj));
1109
g_signal_connect (adj, "value_changed",
1110
G_CALLBACK (double_adjustment_update),
1113
gtk_widget_show (page);
1115
g_object_unref (group);
1121
create_box_page (void)
1130
static gchar *labels[] =
1132
N_("Front:"), N_("Back:"),
1133
N_("Top:"), N_("Bottom:"),
1134
N_("Left:"), N_("Right:")
1137
page = gtk_vbox_new (FALSE, 12);
1138
gtk_container_set_border_width (GTK_CONTAINER (page), 12);
1140
frame = gimp_frame_new (_("Map Images to Box Faces"));
1141
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
1142
gtk_widget_show (frame);
1144
vbox = gtk_vbox_new (FALSE, 12);
1145
gtk_container_add (GTK_CONTAINER (frame), vbox);
1146
gtk_widget_show (vbox);
1148
table = gtk_table_new (6, 2, FALSE);
1149
gtk_table_set_row_spacings (GTK_TABLE(table), 6);
1150
gtk_table_set_col_spacings (GTK_TABLE(table), 6);
1151
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 5);
1152
gtk_widget_show (table);
1154
for (i = 0; i < 6; i++)
1158
combo = gimp_drawable_combo_box_new (box_constrain, NULL);
1159
gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
1160
mapvals.boxmap_id[i],
1161
G_CALLBACK (gimp_int_combo_box_get_active),
1162
&mapvals.boxmap_id[i]);
1164
gimp_table_attach_aligned (GTK_TABLE (table), 0, i,
1165
gettext (labels[i]), 0.0, 0.5,
1171
table = gtk_table_new (3, 3, FALSE);
1172
gtk_table_set_row_spacings (GTK_TABLE(table), 6);
1173
gtk_table_set_col_spacings (GTK_TABLE(table), 6);
1174
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
1175
gtk_widget_show (table);
1177
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
1178
_("Scale X:"), 0, 0,
1179
mapvals.scale.x, 0.0, 5.0, 0.01, 0.1, 2,
1181
_("X scale (size)"), NULL);
1182
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1183
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.1, 2);
1185
g_signal_connect (adj, "value_changed",
1186
G_CALLBACK (double_adjustment_update),
1189
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
1191
mapvals.scale.y, 0.0, 5.0, 0.01, 0.1, 2,
1193
_("Y scale (size)"), NULL);
1194
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1195
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.1, 2);
1197
g_signal_connect (adj, "value_changed",
1198
G_CALLBACK (double_adjustment_update),
1201
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
1203
mapvals.scale.z, 0.0, 5.0, 0.01, 0.1, 2,
1205
_("Z scale (size)"), NULL);
1206
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1207
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.1, 2);
1209
g_signal_connect (adj, "value_changed",
1210
G_CALLBACK (double_adjustment_update),
1213
gtk_widget_show (page);
1219
create_cylinder_page (void)
1221
GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
1228
static gchar *labels[] = { N_("_Top:"), N_("_Bottom:") };
1230
page = gtk_vbox_new (FALSE, 12);
1231
gtk_container_set_border_width (GTK_CONTAINER (page), 12);
1233
frame = gimp_frame_new (_("Images for the Cap Faces"));
1234
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
1235
gtk_widget_show (frame);
1237
table = gtk_table_new (2, 2, FALSE);
1238
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
1239
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
1240
gtk_container_add (GTK_CONTAINER (frame), table);
1241
gtk_widget_show (table);
1245
for (i = 0; i < 2; i++)
1250
combo = gimp_drawable_combo_box_new (cylinder_constrain, NULL);
1251
gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
1252
mapvals.cylindermap_id[i],
1253
G_CALLBACK (gimp_int_combo_box_get_active),
1254
&mapvals.cylindermap_id[i]);
1256
label = gimp_table_attach_aligned (GTK_TABLE (table), 0, i,
1257
gettext (labels[i]), 0.0, 0.5,
1259
gtk_size_group_add_widget (group, label);
1262
frame = gimp_frame_new (_("Size"));
1263
gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0);
1264
gtk_widget_show (frame);
1266
table = gtk_table_new (2, 3, FALSE);
1267
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
1268
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
1269
gtk_container_add (GTK_CONTAINER (frame), table);
1270
gtk_widget_show (table);
1272
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
1273
_("R_adius:"), 0, 0,
1274
mapvals.cylinder_radius,
1275
0.0, 2.0, 0.01, 0.1, 2,
1277
_("Cylinder radius"), NULL);
1278
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_LABEL (adj));
1279
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1280
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.1, 2);
1282
g_signal_connect (adj, "value_changed",
1283
G_CALLBACK (double_adjustment_update),
1284
&mapvals.cylinder_radius);
1286
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
1287
_("L_ength:"), 0, 0,
1288
mapvals.cylinder_length,
1289
0.0, 2.0, 0.01, 0.1, 2,
1291
_("Cylinder length"), NULL);
1292
gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_LABEL (adj));
1293
gtk_spin_button_configure (GIMP_SCALE_ENTRY_SPINBUTTON (adj),
1294
GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj), 0.1, 2);
1296
g_signal_connect (adj, "value_changed",
1297
G_CALLBACK (double_adjustment_update),
1298
&mapvals.cylinder_length);
1300
gtk_widget_show (page);
1302
g_object_unref (group);
1307
/****************************/
1308
/* Create notbook and pages */
1309
/****************************/
1312
create_main_notebook (GtkWidget *container)
1316
options_note_book = GTK_NOTEBOOK (gtk_notebook_new ());
1317
gtk_container_add (GTK_CONTAINER (container),
1318
GTK_WIDGET (options_note_book));
1320
page = create_options_page ();
1321
gtk_notebook_append_page (options_note_book, page,
1322
gtk_label_new_with_mnemonic (_("O_ptions")));
1324
page = create_light_page ();
1325
gtk_notebook_append_page (options_note_book, page,
1326
gtk_label_new_with_mnemonic (_("_Light")));
1328
page = create_material_page ();
1329
gtk_notebook_append_page (options_note_book, page,
1330
gtk_label_new_with_mnemonic (_("_Material")));
1332
page = create_orientation_page ();
1333
gtk_notebook_append_page (options_note_book, page,
1334
gtk_label_new_with_mnemonic (_("O_rientation")));
1336
if (mapvals.maptype == MAP_BOX)
1338
box_page = create_box_page ();
1339
gtk_notebook_append_page (options_note_book, box_page,
1340
gtk_label_new_with_mnemonic (_("_Box")));
1342
else if (mapvals.maptype == MAP_CYLINDER)
1344
cylinder_page = create_cylinder_page ();
1345
gtk_notebook_append_page (options_note_book, cylinder_page,
1346
gtk_label_new_with_mnemonic (_("C_ylinder")));
1349
gtk_widget_show (GTK_WIDGET (options_note_book));
1352
/********************************/
1353
/* Create and show main dialog. */
1354
/********************************/
1357
main_dialog (GimpDrawable *drawable)
1359
GtkWidget *main_hbox;
1366
gboolean run = FALSE;
1368
gimp_ui_init ("MapObject", FALSE);
1370
appwin = gimp_dialog_new (_("Map to Object"), "MapObject",
1372
gimp_standard_help_func, "plug-in-map-object",
1374
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
1375
GTK_STOCK_OK, GTK_RESPONSE_OK,
1379
main_hbox = gtk_hbox_new (FALSE, 12);
1380
gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 12);
1381
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (appwin)->vbox), main_hbox,
1383
gtk_widget_show (main_hbox);
1385
/* Create the Preview */
1387
vbox = gtk_vbox_new (FALSE, 6);
1388
gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0);
1389
gtk_widget_show (vbox);
1391
/* Add preview widget and various buttons to the first part */
1393
frame = gtk_frame_new (NULL);
1394
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
1395
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1396
gtk_widget_show (frame);
1398
gtk_widget_realize (appwin);
1399
previewarea = gtk_drawing_area_new ();
1400
gtk_widget_set_size_request (previewarea, PREVIEW_WIDTH, PREVIEW_HEIGHT);
1401
gtk_widget_set_events (previewarea, (GDK_EXPOSURE_MASK |
1402
GDK_BUTTON1_MOTION_MASK |
1403
GDK_BUTTON_PRESS_MASK |
1404
GDK_BUTTON_RELEASE_MASK));
1405
gtk_container_add (GTK_CONTAINER (frame), previewarea);
1406
gtk_widget_show (previewarea);
1408
g_signal_connect (previewarea, "event",
1409
G_CALLBACK (preview_events),
1412
hbox = gtk_hbox_new (FALSE, 6);
1413
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1414
gtk_widget_show (hbox);
1416
button = gtk_button_new_with_mnemonic (_("_Preview!"));
1417
gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 2, 0);
1418
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1419
gtk_widget_show (button);
1421
g_signal_connect (button, "clicked",
1422
G_CALLBACK (preview_callback),
1425
gimp_help_set_help_data (button, _("Recompute preview image"), NULL);
1427
button = gtk_button_new ();
1428
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1429
gtk_widget_show (button);
1431
image = gtk_image_new_from_stock (GTK_STOCK_ZOOM_OUT, GTK_ICON_SIZE_MENU);
1432
gtk_container_add (GTK_CONTAINER (button), image);
1433
gtk_widget_show (image);
1435
g_signal_connect (button, "clicked",
1436
G_CALLBACK (zoomout_callback),
1439
gimp_help_set_help_data (button, _("Zoom out (make image smaller)"), NULL);
1441
button = gtk_button_new ();
1442
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1443
gtk_widget_show (button);
1445
image = gtk_image_new_from_stock (GTK_STOCK_ZOOM_IN, GTK_ICON_SIZE_MENU);
1446
gtk_container_add (GTK_CONTAINER (button), image);
1447
gtk_widget_show (image);
1449
g_signal_connect (button, "clicked",
1450
G_CALLBACK (zoomin_callback),
1453
gimp_help_set_help_data (button, _("Zoom in (make image bigger)"), NULL);
1455
toggle = gtk_check_button_new_with_mnemonic (_("Show preview _wireframe"));
1456
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), mapvals.showgrid);
1457
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
1458
gtk_widget_show (toggle);
1460
g_signal_connect (toggle, "toggled",
1461
G_CALLBACK (togglegrid_update),
1464
gimp_help_set_help_data (toggle, _("Show/hide preview wireframe"), NULL);
1466
create_main_notebook (main_hbox);
1468
/* Endmarkers for line table */
1472
gtk_widget_show (appwin);
1477
cursor = gdk_cursor_new_for_display (gtk_widget_get_display (previewarea),
1479
gdk_window_set_cursor (previewarea->window, cursor);
1480
gdk_cursor_unref (cursor);
1483
image_setup (drawable, TRUE);
1485
if (gimp_dialog_run (GIMP_DIALOG (appwin)) == GTK_RESPONSE_OK)
1488
gtk_widget_destroy (appwin);
1489
g_free (preview_rgb_data);