1 /*
2 PrtView plugin for GtkRadiant
3 Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20 // ConfigDialog.cpp : implementation file
21 //
22
23 #include "stdafx.h"
24 #include <stdio.h>
25
26 #ifdef _DEBUG
27 #define new DEBUG_NEW
28 #undef THIS_FILE
29 //static char THIS_FILE[] = __FILE__;
30 #endif
31
32 /////////////////////////////////////////////////////////////////////////////
33 // CConfigDialog dialog
34
35 #ifdef GTK_PLUGIN
36
dialog_button_callback(GtkWidget * widget,gpointer data)37 static void dialog_button_callback (GtkWidget *widget, gpointer data)
38 {
39 GtkWidget *parent;
40 int *loop, *ret;
41
42 parent = gtk_widget_get_toplevel (widget);
43 loop = (int*)g_object_get_data (G_OBJECT (parent), "loop");
44 ret = (int*)g_object_get_data (G_OBJECT (parent), "ret");
45
46 *loop = 0;
47 *ret = (int)data;
48 }
49
dialog_delete_callback(GtkWidget * widget,GdkEvent * event,gpointer data)50 static gint dialog_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data)
51 {
52 int *loop;
53
54 gtk_widget_hide (widget);
55 loop = (int*)g_object_get_data (G_OBJECT (widget), "loop");
56 *loop = 0;
57
58 return TRUE;
59 }
60
61 // =============================================================================
62 // Color selection dialog
63
DoColor(COLORREF * c)64 static int DoColor (COLORREF *c)
65 {
66 GtkWidget* dlg;
67 double clr[3];
68 int loop = 1, ret = IDCANCEL;
69
70 clr[0] = ((double)GetRValue (*c)) / 255.0;
71 clr[1] = ((double)GetGValue (*c)) / 255.0;
72 clr[2] = ((double)GetBValue (*c)) / 255.0;
73
74 dlg = gtk_color_selection_dialog_new ("Choose Color");
75 gtk_color_selection_set_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr);
76 gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
77 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
78 gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
79 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
80 gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->ok_button), "clicked",
81 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
82 gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->cancel_button), "clicked",
83 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDCANCEL));
84 g_object_set_data (G_OBJECT (dlg), "loop", &loop);
85 g_object_set_data (G_OBJECT (dlg), "ret", &ret);
86
87 gtk_widget_show(dlg);
88 gtk_grab_add(dlg);
89
90 while (loop)
91 gtk_main_iteration ();
92
93 gtk_color_selection_get_color (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dlg)->colorsel), clr);
94
95 gtk_grab_remove (dlg);
96 gtk_widget_destroy (dlg);
97
98 if (ret == IDOK)
99 {
100 *c = RGB (clr[0]*255, clr[1]*255, clr[2]*255);
101 }
102
103 return ret;
104 }
105
Set2DText(GtkWidget * label)106 static void Set2DText (GtkWidget* label)
107 {
108 char s[40];
109
110 sprintf(s, "Line Width = %6.3f", portals.width_2d * 0.5f);
111
112 gtk_label_set_text (GTK_LABEL (label), s);
113 }
114
Set3DText(GtkWidget * label)115 static void Set3DText (GtkWidget* label)
116 {
117 char s[40];
118
119 sprintf(s, "Line Width = %6.3f", portals.width_3d * 0.5f);
120
121 gtk_label_set_text (GTK_LABEL (label), s);
122 }
123
Set3DTransText(GtkWidget * label)124 static void Set3DTransText (GtkWidget* label)
125 {
126 char s[40];
127
128 sprintf(s, "Polygon transparency = %d%%", (int)portals.trans_3d);
129
130 gtk_label_set_text (GTK_LABEL (label), s);
131 }
132
SetClipText(GtkWidget * label)133 static void SetClipText (GtkWidget* label)
134 {
135 char s[40];
136
137 sprintf(s, "Cubic clip range = %d", (int)portals.clip_range * 64);
138
139 gtk_label_set_text (GTK_LABEL (label), s);
140 }
141
OnScroll2d(GtkAdjustment * adj,gpointer data)142 static void OnScroll2d (GtkAdjustment *adj, gpointer data)
143 {
144 portals.width_2d = static_cast<float>(adj->value);
145 Set2DText (GTK_WIDGET (data));
146
147 if(interfaces_started)
148 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
149 }
150
OnScroll3d(GtkAdjustment * adj,gpointer data)151 static void OnScroll3d (GtkAdjustment *adj, gpointer data)
152 {
153 portals.width_3d = static_cast<float>(adj->value);
154 Set3DText (GTK_WIDGET (data));
155
156 if(interfaces_started)
157 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
158 }
159
OnScrollTrans(GtkAdjustment * adj,gpointer data)160 static void OnScrollTrans (GtkAdjustment *adj, gpointer data)
161 {
162 portals.trans_3d = static_cast<float>(adj->value);
163 Set3DTransText (GTK_WIDGET (data));
164
165 if(interfaces_started)
166 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
167 }
168
OnScrollClip(GtkAdjustment * adj,gpointer data)169 static void OnScrollClip (GtkAdjustment *adj, gpointer data)
170 {
171 portals.clip_range = static_cast<float>(adj->value);
172 SetClipText (GTK_WIDGET (data));
173
174 if(interfaces_started)
175 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
176 }
177
OnAntiAlias2d(GtkWidget * widget,gpointer data)178 static void OnAntiAlias2d (GtkWidget *widget, gpointer data)
179 {
180 portals.aa_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? qtrue : qfalse;
181
182 if(interfaces_started)
183 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
184 }
185
OnConfig2d(GtkWidget * widget,gpointer data)186 static void OnConfig2d (GtkWidget *widget, gpointer data)
187 {
188 portals.show_2d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? qtrue : qfalse;
189
190 if(interfaces_started)
191 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
192 }
193
OnColor2d(GtkWidget * widget,gpointer data)194 static void OnColor2d (GtkWidget *widget, gpointer data)
195 {
196 if (DoColor (&portals.color_2d) == IDOK)
197 {
198 portals.FixColors();
199
200 if(interfaces_started)
201 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
202 }
203 }
204
OnConfig3d(GtkWidget * widget,gpointer data)205 static void OnConfig3d (GtkWidget *widget, gpointer data)
206 {
207 portals.show_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? qtrue : qfalse;
208
209 if(interfaces_started)
210 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
211 }
212
213
OnAntiAlias3d(GtkWidget * widget,gpointer data)214 static void OnAntiAlias3d (GtkWidget *widget, gpointer data)
215 {
216 portals.aa_3d = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? qtrue : qfalse;
217
218 if(interfaces_started)
219 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
220 }
221
OnColor3d(GtkWidget * widget,gpointer data)222 static void OnColor3d (GtkWidget *widget, gpointer data)
223 {
224 if (DoColor (&portals.color_3d) == IDOK)
225 {
226 portals.FixColors();
227
228 if(interfaces_started)
229 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
230 }
231 }
232
OnColorFog(GtkWidget * widget,gpointer data)233 static void OnColorFog (GtkWidget *widget, gpointer data)
234 {
235 if (DoColor (&portals.color_fog) == IDOK)
236 {
237 portals.FixColors();
238
239 if(interfaces_started)
240 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
241 }
242 }
243
OnFog(GtkWidget * widget,gpointer data)244 static void OnFog (GtkWidget *widget, gpointer data)
245 {
246 portals.fog = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? qtrue : qfalse;
247
248 if(interfaces_started)
249 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
250 }
251
OnSelchangeZbuffer(GtkWidget * widget,gpointer data)252 static void OnSelchangeZbuffer (GtkWidget *widget, gpointer data)
253 {
254 portals.zbuffer = GPOINTER_TO_INT (data);
255
256 if(interfaces_started)
257 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
258 }
259
OnPoly(GtkWidget * widget,gpointer data)260 static void OnPoly (GtkWidget *widget, gpointer data)
261 {
262 portals.polygons = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
263
264 if(interfaces_started)
265 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
266 }
267
OnLines(GtkWidget * widget,gpointer data)268 static void OnLines (GtkWidget *widget, gpointer data)
269 {
270 portals.lines = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
271
272 if(interfaces_started)
273 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
274 }
275
OnClip(GtkWidget * widget,gpointer data)276 static void OnClip (GtkWidget *widget, gpointer data)
277 {
278 portals.clip = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? qtrue : qfalse;
279
280 if(interfaces_started)
281 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
282 }
283
DoConfigDialog()284 void DoConfigDialog ()
285 {
286 GtkWidget *dlg, *hbox, *vbox, *vbox2, *button, *table, *frame;
287 GtkWidget *lw3slider, *lw3label, *lw2slider, *lw2label, *zlist, *menu, *item;
288 GtkWidget *aa2check, *aa3check, *depthcheck, *linescheck, *polyscheck;
289 GtkWidget *transslider, *translabel, *clipslider, *cliplabel;
290 GtkWidget *show2check, *show3check, *portalcheck;
291 int loop = 1, ret = IDCANCEL;
292 GtkObject *adj;
293
294 dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
295 gtk_window_set_title (GTK_WINDOW (dlg), "Portal Viewer Configuration");
296 gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
297 GTK_SIGNAL_FUNC (dialog_delete_callback), NULL);
298 gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
299 GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
300 g_object_set_data (G_OBJECT (dlg), "loop", &loop);
301 g_object_set_data (G_OBJECT (dlg), "ret", &ret);
302
303 vbox = gtk_vbox_new (FALSE, 5);
304 gtk_widget_show (vbox);
305 gtk_container_add (GTK_CONTAINER (dlg), vbox);
306 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
307
308 frame = gtk_frame_new ("3D View");
309 gtk_widget_show (frame);
310 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
311
312 vbox2 = gtk_vbox_new (FALSE, 5);
313 gtk_widget_show (vbox2);
314 gtk_container_add (GTK_CONTAINER (frame), vbox2);
315 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5);
316
317 hbox = gtk_hbox_new (FALSE, 5);
318 gtk_widget_show (hbox);
319 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0);
320
321 adj = gtk_adjustment_new (portals.width_3d, 2, 40, 1, 1, 0);
322 lw3slider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
323 gtk_widget_show (lw3slider);
324 gtk_box_pack_start (GTK_BOX (hbox), lw3slider, TRUE, TRUE, 0);
325 gtk_scale_set_draw_value (GTK_SCALE (lw3slider), FALSE);
326
327 lw3label = gtk_label_new ("");
328 gtk_widget_show (lw3label);
329 gtk_box_pack_start (GTK_BOX (hbox), lw3label, FALSE, TRUE, 0);
330 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll3d), lw3label);
331
332 table = gtk_table_new (2, 4, FALSE);
333 gtk_widget_show (table);
334 gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0);
335 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
336 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
337
338 button = gtk_button_new_with_label ("Color");
339 gtk_widget_show (button);
340 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1,
341 (GtkAttachOptions) (GTK_FILL),
342 (GtkAttachOptions) (0), 0, 0);
343 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor3d), NULL);
344
345 button = gtk_button_new_with_label ("Depth Color");
346 gtk_widget_show (button);
347 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2,
348 (GtkAttachOptions) (GTK_FILL),
349 (GtkAttachOptions) (0), 0, 0);
350 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColorFog), NULL);
351
352 aa3check = gtk_check_button_new_with_label ("Anti-Alias (May not work on some video cards)");
353 gtk_widget_show (aa3check);
354 gtk_table_attach (GTK_TABLE (table), aa3check, 1, 4, 0, 1,
355 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
356 (GtkAttachOptions) (0), 0, 0);
357 gtk_signal_connect (GTK_OBJECT (aa3check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias3d), NULL);
358
359 depthcheck = gtk_check_button_new_with_label ("Depth Cue");
360 gtk_widget_show (depthcheck);
361 gtk_table_attach (GTK_TABLE (table), depthcheck, 1, 2, 1, 2,
362 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
363 (GtkAttachOptions) (0), 0, 0);
364 gtk_signal_connect (GTK_OBJECT (depthcheck), "toggled", GTK_SIGNAL_FUNC (OnFog), NULL);
365
366 linescheck = gtk_check_button_new_with_label ("Lines");
367 gtk_widget_show (linescheck);
368 gtk_table_attach (GTK_TABLE (table), linescheck, 2, 3, 1, 2,
369 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
370 (GtkAttachOptions) (0), 0, 0);
371 gtk_signal_connect (GTK_OBJECT (linescheck), "toggled", GTK_SIGNAL_FUNC (OnLines), NULL);
372
373 polyscheck = gtk_check_button_new_with_label ("Polygons");
374 gtk_widget_show (polyscheck);
375 gtk_table_attach (GTK_TABLE (table), polyscheck, 3, 4, 1, 2,
376 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
377 (GtkAttachOptions) (0), 0, 0);
378 gtk_signal_connect (GTK_OBJECT (polyscheck), "toggled", GTK_SIGNAL_FUNC (OnPoly), NULL);
379
380 zlist = gtk_option_menu_new ();
381 gtk_widget_show (zlist);
382 gtk_box_pack_start (GTK_BOX (vbox2), zlist, TRUE, FALSE, 0);
383
384 menu = gtk_menu_new ();
385 gtk_widget_show (menu);
386 gtk_option_menu_set_menu (GTK_OPTION_MENU (zlist), menu);
387
388 item = gtk_menu_item_new_with_label ("Z-Buffer Test and Write (recommended for solid or no polygons)");
389 gtk_widget_show (item);
390 gtk_signal_connect (GTK_OBJECT (item), "activate",
391 GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (0));
392 gtk_menu_append (GTK_MENU (menu), item);
393
394 item = gtk_menu_item_new_with_label ("Z-Buffer Test Only (recommended for transparent polygons)");
395 gtk_widget_show (item);
396 gtk_signal_connect (GTK_OBJECT (item), "activate",
397 GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (1));
398 gtk_menu_append (GTK_MENU (menu), item);
399
400 item = gtk_menu_item_new_with_label ("Z-Buffer Off");
401 gtk_widget_show (item);
402 gtk_signal_connect (GTK_OBJECT (item), "activate",
403 GTK_SIGNAL_FUNC (OnSelchangeZbuffer), GINT_TO_POINTER (2));
404 gtk_menu_append (GTK_MENU (menu), item);
405
406 table = gtk_table_new (2, 2, FALSE);
407 gtk_widget_show (table);
408 gtk_box_pack_start (GTK_BOX (vbox2), table, TRUE, TRUE, 0);
409 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
410 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
411
412 adj = gtk_adjustment_new (portals.trans_3d, 0, 100, 1, 1, 0);
413 transslider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
414 gtk_widget_show (transslider);
415 gtk_table_attach (GTK_TABLE (table), transslider, 0, 1, 0, 1,
416 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
417 (GtkAttachOptions) (0), 0, 0);
418 gtk_scale_set_draw_value (GTK_SCALE (transslider), FALSE);
419
420 translabel = gtk_label_new ("");
421 gtk_widget_show (translabel);
422 gtk_table_attach (GTK_TABLE (table), translabel, 1, 2, 0, 1,
423 (GtkAttachOptions) (GTK_FILL),
424 (GtkAttachOptions) (0), 0, 0);
425 gtk_misc_set_alignment (GTK_MISC (translabel), 0.0, 0.0);
426 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollTrans), translabel);
427
428 adj = gtk_adjustment_new (portals.clip_range, 1, 128, 1, 1, 0);
429 clipslider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
430 gtk_widget_show (clipslider);
431 gtk_table_attach (GTK_TABLE (table), clipslider, 0, 1, 1, 2,
432 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
433 (GtkAttachOptions) (0), 0, 0);
434 gtk_scale_set_draw_value (GTK_SCALE (clipslider), FALSE);
435
436 cliplabel = gtk_label_new ("");
437 gtk_widget_show (cliplabel);
438 gtk_table_attach (GTK_TABLE (table), cliplabel, 1, 2, 1, 2,
439 (GtkAttachOptions) (GTK_FILL),
440 (GtkAttachOptions) (0), 0, 0);
441 gtk_misc_set_alignment (GTK_MISC (cliplabel), 0.0, 0.0);
442 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScrollClip), cliplabel);
443
444 hbox = gtk_hbox_new (TRUE, 5);
445 gtk_widget_show (hbox);
446 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
447
448 show3check = gtk_check_button_new_with_label ("Show");
449 gtk_widget_show (show3check);
450 gtk_box_pack_start (GTK_BOX (hbox), show3check, TRUE, TRUE, 0);
451 gtk_signal_connect (GTK_OBJECT (show3check), "toggled", GTK_SIGNAL_FUNC (OnConfig3d), NULL);
452
453 portalcheck = gtk_check_button_new_with_label ("Portal cubic clipper");
454 gtk_widget_show (portalcheck);
455 gtk_box_pack_start (GTK_BOX (hbox), portalcheck, TRUE, TRUE, 0);
456 gtk_signal_connect (GTK_OBJECT (portalcheck), "toggled", GTK_SIGNAL_FUNC (OnClip), NULL);
457
458 frame = gtk_frame_new ("2D View");
459 gtk_widget_show (frame);
460 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
461
462 vbox2 = gtk_vbox_new (FALSE, 5);
463 gtk_widget_show (vbox2);
464 gtk_container_add (GTK_CONTAINER (frame), vbox2);
465 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 5);
466
467 hbox = gtk_hbox_new (FALSE, 5);
468 gtk_widget_show (hbox);
469 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
470
471 adj = gtk_adjustment_new (portals.width_2d, 2, 40, 1, 1, 0);
472 lw2slider = gtk_hscale_new (GTK_ADJUSTMENT (adj));
473 gtk_widget_show (lw2slider);
474 gtk_box_pack_start (GTK_BOX (hbox), lw2slider, TRUE, TRUE, 0);
475 gtk_scale_set_draw_value (GTK_SCALE (lw2slider), FALSE);
476
477 lw2label = gtk_label_new ("");
478 gtk_widget_show (lw2label);
479 gtk_box_pack_start (GTK_BOX (hbox), lw2label, FALSE, TRUE, 0);
480 gtk_signal_connect (adj, "value_changed", GTK_SIGNAL_FUNC (OnScroll2d), lw2label);
481
482 hbox = gtk_hbox_new (FALSE, 5);
483 gtk_widget_show (hbox);
484 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
485
486 button = gtk_button_new_with_label ("Color");
487 gtk_widget_show (button);
488 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
489 gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (OnColor2d), NULL);
490 gtk_widget_set_usize (button, 60, -2);
491
492 aa2check = gtk_check_button_new_with_label ("Anti-Alias (May not work on some video cards)");
493 gtk_widget_show (aa2check);
494 gtk_box_pack_start (GTK_BOX (hbox), aa2check, TRUE, TRUE, 0);
495 gtk_signal_connect (GTK_OBJECT (aa2check), "toggled", GTK_SIGNAL_FUNC (OnAntiAlias2d), NULL);
496
497 hbox = gtk_hbox_new (FALSE, 5);
498 gtk_widget_show (hbox);
499 gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, FALSE, 0);
500
501 show2check = gtk_check_button_new_with_label ("Show");
502 gtk_widget_show (show2check);
503 gtk_box_pack_start (GTK_BOX (hbox), show2check, FALSE, FALSE, 0);
504 gtk_signal_connect (GTK_OBJECT (show2check), "toggled", GTK_SIGNAL_FUNC (OnConfig2d), NULL);
505
506 hbox = gtk_hbox_new (FALSE, 5);
507 gtk_widget_show (hbox);
508 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
509
510 button = gtk_button_new_with_label ("OK");
511 gtk_widget_show (button);
512 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
513 gtk_signal_connect (GTK_OBJECT (button), "clicked",
514 GTK_SIGNAL_FUNC (dialog_button_callback), GINT_TO_POINTER (IDOK));
515 gtk_widget_set_usize (button, 60, -2);
516
517 // initialize dialog
518 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show2check), portals.show_2d);
519 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa2check), portals.aa_2d);
520 Set2DText (lw2label);
521
522 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show3check), portals.show_3d);
523 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (depthcheck), portals.fog);
524 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (polyscheck), portals.polygons);
525 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linescheck), portals.lines);
526 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aa3check), portals.aa_3d);
527 gtk_option_menu_set_history (GTK_OPTION_MENU (zlist), portals.zbuffer);
528 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (portalcheck), portals.clip);
529
530 Set3DText (lw3label);
531 Set3DTransText (translabel);
532 SetClipText (cliplabel);
533
534 gtk_grab_add (dlg);
535 gtk_widget_show (dlg);
536
537 while (loop)
538 gtk_main_iteration ();
539
540 gtk_grab_remove (dlg);
541 gtk_widget_destroy (dlg);
542 }
543
544 #else // GTK_PLUGIN
545
CConfigDialog(CWnd * pParent)546 CConfigDialog::CConfigDialog(CWnd* pParent /*=NULL*/)
547 : CDialog(CConfigDialog::IDD, pParent)
548 {
549 //{{AFX_DATA_INIT(CConfigDialog)
550 //}}AFX_DATA_INIT
551 }
552
553
DoDataExchange(CDataExchange * pDX)554 void CConfigDialog::DoDataExchange(CDataExchange* pDX)
555 {
556 CDialog::DoDataExchange(pDX);
557 //{{AFX_DATA_MAP(CConfigDialog)
558 DDX_Control(pDX, IDC_CLIP, m_clip_ctrl);
559 DDX_Control(pDX, IDC_CUBIC, m_cubic_ctrl);
560 DDX_Control(pDX, IDC_SCROLL_CUBIC, m_scroll_cubic_ctrl);
561 DDX_Control(pDX, IDC_LINES, m_line_ctrl);
562 DDX_Control(pDX, IDC_SCROLL_3D_TRANS, m_scroll_3d_trans_ctrl);
563 DDX_Control(pDX, IDC_3D_TRANS, m_3d_trans_ctrl);
564 DDX_Control(pDX, IDC_POLY, m_poly_ctrl);
565 DDX_Control(pDX, IDC_FOG, m_fog_ctrl);
566 DDX_Control(pDX, IDC_ZBUFFER, m_z_ctrl);
567 DDX_Control(pDX, IDC_SCROLL_3D_WIDTH, m_scroll_3d_width_ctrl);
568 DDX_Control(pDX, IDC_ANTI_ALIAS_3D, m_aa_3d_ctrl);
569 DDX_Control(pDX, IDC_3D_WIDTH, m_3d_width_ctrl);
570 DDX_Control(pDX, IDC_ANTI_ALIAS_2D, m_aa_2d_ctrl);
571 DDX_Control(pDX, IDC_SCROLL_2D_WIDTH, m_scroll_2d_width_ctrl);
572 DDX_Control(pDX, IDC_2D_WIDTH, m_2d_width_ctrl);
573 DDX_Control(pDX, IDC_CONFIG_3D, m_3d_ctrl);
574 DDX_Control(pDX, IDC_CONFIG_2D, m_2d_ctrl);
575 //}}AFX_DATA_MAP
576 }
577
578
BEGIN_MESSAGE_MAP(CConfigDialog,CDialog)579 BEGIN_MESSAGE_MAP(CConfigDialog, CDialog)
580 //{{AFX_MSG_MAP(CConfigDialog)
581 ON_WM_HSCROLL()
582 ON_BN_CLICKED(IDC_ANTI_ALIAS_2D, OnAntiAlias2d)
583 ON_BN_CLICKED(IDC_CONFIG_2D, OnConfig2d)
584 ON_BN_CLICKED(IDC_CONFIG_3D, OnConfig3d)
585 ON_BN_CLICKED(IDC_COLOR_2D, OnColor2d)
586 ON_BN_CLICKED(IDC_ANTI_ALIAS_3D, OnAntiAlias3d)
587 ON_BN_CLICKED(IDC_COLOR_3D, OnColor3d)
588 ON_BN_CLICKED(IDC_COLOR_FOG, OnColorFog)
589 ON_BN_CLICKED(IDC_FOG, OnFog)
590 ON_CBN_SELCHANGE(IDC_ZBUFFER, OnSelchangeZbuffer)
591 ON_BN_CLICKED(IDC_POLY, OnPoly)
592 ON_BN_CLICKED(IDC_LINES, OnLines)
593 ON_BN_CLICKED(IDC_CLIP, OnClip)
594 //}}AFX_MSG_MAP
595 END_MESSAGE_MAP()
596
597 /////////////////////////////////////////////////////////////////////////////
598 // CConfigDialog message handlers
599
600 void CConfigDialog::Set2DText()
601 {
602 char s[40];
603
604 sprintf(s, "Line Width = %6.3f", portals.width_2d * 0.5f);
605
606 m_2d_width_ctrl.SetWindowText(s);
607 }
608
Set3DText()609 void CConfigDialog::Set3DText()
610 {
611 char s[40];
612
613 sprintf(s, "Line Width = %6.3f", portals.width_3d * 0.5f);
614
615 m_3d_width_ctrl.SetWindowText(s);
616 }
617
Set3DTransText()618 void CConfigDialog::Set3DTransText()
619 {
620 char s[40];
621
622 sprintf(s, "Polygon transparency = %d%%", (int)portals.trans_3d);
623
624 m_3d_trans_ctrl.SetWindowText(s);
625 }
626
SetClipText()627 void CConfigDialog::SetClipText()
628 {
629 char s[40];
630
631 sprintf(s, "Cubic clip range = %d", (int)portals.clip_range * 64);
632
633 m_cubic_ctrl.SetWindowText(s);
634 }
635
OnInitDialog()636 bool CConfigDialog::OnInitDialog()
637 {
638 CDialog::OnInitDialog();
639
640 m_2d_ctrl.SetCheck(portals.show_2d);
641 m_aa_2d_ctrl.SetCheck(portals.aa_2d);
642 Set2DText();
643
644 m_scroll_2d_width_ctrl.SetScrollRange(2, 40, FALSE);
645 m_scroll_2d_width_ctrl.SetScrollPos((int)portals.width_2d, TRUE);
646
647 m_3d_ctrl.SetCheck(portals.show_3d);
648 m_fog_ctrl.SetCheck(portals.fog);
649 m_poly_ctrl.SetCheck(portals.polygons);
650 m_line_ctrl.SetCheck(portals.lines);
651 m_aa_3d_ctrl.SetCheck(portals.aa_3d);
652 m_z_ctrl.SetCurSel(portals.zbuffer);
653 m_clip_ctrl.SetCheck(portals.clip);
654
655 Set3DText();
656 Set3DTransText();
657 SetClipText();
658
659 m_scroll_3d_width_ctrl.SetScrollRange(2, 40, FALSE);
660 m_scroll_3d_width_ctrl.SetScrollPos((int)portals.width_3d, TRUE);
661 m_scroll_3d_trans_ctrl.SetScrollRange(0, 100, FALSE);
662 m_scroll_3d_trans_ctrl.SetScrollPos((int)portals.trans_3d, TRUE);
663 m_scroll_cubic_ctrl.SetScrollRange(1, 128, FALSE);
664 m_scroll_cubic_ctrl.SetScrollPos((int)portals.clip_range, TRUE);
665
666 return true; // return TRUE unless you set the focus to a control
667 // EXCEPTION: OCX Property Pages should return FALSE
668 }
669
OnHScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar)670 void CConfigDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
671 {
672 float *adj;
673 float scr_min, scr_max, scr_big;
674
675 if(nSBCode == SB_THUMBPOSITION)
676 {
677 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
678 return;
679 }
680
681 if(pScrollBar == &m_scroll_2d_width_ctrl)
682 {
683 scr_min = 2.0f;
684 scr_max = 40.0f;
685 scr_big = 4.0f;
686
687 adj = &portals.width_2d;
688 }
689 else if(pScrollBar == &m_scroll_3d_width_ctrl)
690 {
691 scr_min = 2.0f;
692 scr_max = 40.0f;
693 scr_big = 4.0f;
694
695 adj = &portals.width_3d;
696 }
697 else if(pScrollBar == &m_scroll_3d_trans_ctrl)
698 {
699 scr_min = 0.0f;
700 scr_max = 100.0f;
701 scr_big = 10.0f;
702
703 adj = &portals.trans_3d;
704 }
705 else if(pScrollBar == &m_scroll_cubic_ctrl)
706 {
707 scr_min = 1.0f;
708 scr_max = 128.0f;
709 scr_big = 8.0f;
710
711 adj = &portals.clip_range;
712 }
713 else
714 {
715 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
716 return;
717 }
718
719 switch(nSBCode)
720 {
721 case SB_LEFT:
722 *adj = scr_min;
723 pScrollBar->SetScrollPos((int)scr_min, TRUE);
724 break;
725 case SB_RIGHT:
726 *adj = scr_max;
727 pScrollBar->SetScrollPos((int)scr_max, TRUE);
728 break;
729 case SB_LINELEFT:
730 *adj -= 1.0f;
731
732 if(*adj < scr_min)
733 *adj = scr_min;
734
735 pScrollBar->SetScrollPos((int)(*adj), TRUE);
736
737 break;
738 case SB_LINERIGHT:
739 *adj += 1.0f;
740
741 if(*adj > scr_max)
742 *adj = scr_max;
743
744 pScrollBar->SetScrollPos((int)(*adj), TRUE);
745
746 break;
747 case SB_PAGELEFT:
748 *adj -= scr_big;
749
750 if(*adj < scr_min)
751 *adj = scr_min;
752
753 pScrollBar->SetScrollPos((int)(*adj), TRUE);
754
755 break;
756 case SB_PAGERIGHT:
757 *adj += scr_big;
758
759 if(*adj > scr_max)
760 *adj = scr_max;
761
762 pScrollBar->SetScrollPos((int)(*adj), TRUE);
763
764 break;
765 case SB_THUMBTRACK:
766 *adj = (float)nPos;
767
768 break;
769 case SB_ENDSCROLL:
770 pScrollBar->SetScrollPos((int)(*adj), TRUE);
771
772 break;
773 default:
774 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
775 }
776
777 if(pScrollBar == &m_scroll_2d_width_ctrl)
778 {
779 Set2DText();
780
781 if(interfaces_started)
782 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
783 }
784 else if(pScrollBar == &m_scroll_3d_width_ctrl)
785 {
786 Set3DText();
787
788 if(interfaces_started)
789 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
790 }
791 else if(pScrollBar == &m_scroll_3d_trans_ctrl)
792 {
793 Set3DTransText();
794
795 if(interfaces_started)
796 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
797 }
798 else if(pScrollBar == &m_scroll_cubic_ctrl)
799 {
800 SetClipText();
801
802 if(interfaces_started)
803 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
804 }
805 }
806
OnAntiAlias2d()807 void CConfigDialog::OnAntiAlias2d()
808 {
809 portals.aa_2d = m_aa_2d_ctrl.GetCheck();
810
811 if(interfaces_started)
812 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
813 }
814
OnConfig2d()815 void CConfigDialog::OnConfig2d()
816 {
817 portals.show_2d = m_2d_ctrl.GetCheck();
818
819 if(interfaces_started)
820 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
821 }
822
OnColor2d()823 void CConfigDialog::OnColor2d()
824 {
825 CColorDialog dlg(portals.color_2d, CC_ANYCOLOR, this);
826
827 if(dlg.DoModal() == IDOK)
828 {
829 portals.color_2d = dlg.GetColor();
830
831 portals.FixColors();
832
833 if(interfaces_started)
834 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_2D);
835 }
836 }
837
OnConfig3d()838 void CConfigDialog::OnConfig3d()
839 {
840 portals.show_3d = m_3d_ctrl.GetCheck();
841
842 if(interfaces_started)
843 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
844 }
845
846
OnAntiAlias3d()847 void CConfigDialog::OnAntiAlias3d()
848 {
849 portals.aa_3d = m_aa_3d_ctrl.GetCheck();
850
851 if(interfaces_started)
852 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
853 }
854
OnColor3d()855 void CConfigDialog::OnColor3d()
856 {
857 CColorDialog dlg(portals.color_3d, CC_ANYCOLOR, this);
858
859 if(dlg.DoModal() == IDOK)
860 {
861 portals.color_3d = dlg.GetColor();
862
863 portals.FixColors();
864
865 if(interfaces_started)
866 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
867 }
868 }
869
OnColorFog()870 void CConfigDialog::OnColorFog()
871 {
872 CColorDialog dlg(portals.color_fog, CC_ANYCOLOR, this);
873
874 if(dlg.DoModal() == IDOK)
875 {
876 portals.color_fog = dlg.GetColor();
877
878 portals.FixColors();
879
880 if(interfaces_started)
881 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
882 }
883 }
884
OnFog()885 void CConfigDialog::OnFog()
886 {
887 portals.fog = m_fog_ctrl.GetCheck();
888
889 if(interfaces_started)
890 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
891 }
892
OnSelchangeZbuffer()893 void CConfigDialog::OnSelchangeZbuffer()
894 {
895 portals.zbuffer = m_z_ctrl.GetCurSel();
896
897 if(interfaces_started)
898 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
899 }
900
OnPoly()901 void CConfigDialog::OnPoly()
902 {
903 portals.polygons = m_poly_ctrl.GetCheck();
904
905 if(interfaces_started)
906 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
907 }
908
OnLines()909 void CConfigDialog::OnLines()
910 {
911 portals.lines = m_line_ctrl.GetCheck();
912
913 if(interfaces_started)
914 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
915 }
916
OnClip()917 void CConfigDialog::OnClip()
918 {
919 portals.clip = m_clip_ctrl.GetCheck();
920
921 if(interfaces_started)
922 g_FuncTable.m_pfnSysUpdateWindows(UPDATE_3D);
923 }
924
925 #endif // GTK_PLUGIN
926