2 GenSurf plugin for GtkRadiant
\r
3 Copyright (C) 2001 David Hyde, Loki software and qeradiant.com
\r
5 This library is free software; you can redistribute it and/or
\r
6 modify it under the terms of the GNU Lesser General Public
\r
7 License as published by the Free Software Foundation; either
\r
8 version 2.1 of the License, or (at your option) any later version.
\r
10 This library is distributed in the hope that it will be useful,
\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
13 Lesser General Public License for more details.
\r
15 You should have received a copy of the GNU Lesser General Public
\r
16 License along with this library; if not, write to the Free Software
\r
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
20 #include <gtk/gtk.h>
\r
25 #include "gensurf.h"
\r
27 #define GENERAL_TAB 0
\r
28 #define EXTENTS_TAB 1
\r
29 #define BITMAP_TAB 2
\r
30 #define FIXPOINTS_TAB 3
\r
31 #define TEXTURE_TAB 4
\r
32 //#define BUFF_SIZE 32768
\r
34 #define ENABLE_WIDGET(name,enable) \
\r
35 gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), (name))), (enable))
\r
36 #define CHECK_WIDGET(name,check) \
\r
37 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), name)), check)
\r
39 static GtkWidget *game_radios[NUMGAMES];
\r
40 static GtkWidget *wave_radios[5];
\r
41 static GtkWidget *plane_radios[6];
\r
42 static guint current_tab;
\r
43 static int OldPreview;
\r
44 static int WasDetail;
\r
45 static GtkTooltips *tooltips;
\r
46 static int FirstPassComplete = 0;
\r
48 void About (GtkWidget *parent)
\r
51 char *icon_xpm[] = {
\r
57 "................................",
\r
58 "................................",
\r
59 "................................",
\r
60 "................................",
\r
61 "................................",
\r
62 "................................",
\r
63 "................................",
\r
64 "...............++...............",
\r
65 ".............++++++.............",
\r
66 "............++@+++@+............",
\r
67 "..........+++..++..+++..........",
\r
68 "........++.+.++..++.+.@+........",
\r
69 ".......+..+..+.++.+..+..++......",
\r
70 ".....++..++.+..++..+.++..++.....",
\r
71 "...++..++...+.+..+.++..++..++...",
\r
72 "..++.+.++....++..++....++.+..+..",
\r
73 ".+.+..+..++....++....++..++.+.+.",
\r
74 "..+++....+.++++++++++.+....+++..",
\r
75 "....++.@@+++++.++.++++@++.++....",
\r
76 "......+++++++......++@+++++.....",
\r
77 ".......+++.+.++..++.+..++.......",
\r
78 ".........++..+.++.+..++.........",
\r
79 "...........++..++..++...........",
\r
80 ".............++..+.+............",
\r
81 "..............+..+@.............",
\r
82 "...............@@...............",
\r
83 "................................",
\r
84 "................................",
\r
85 "................................",
\r
86 "................................",
\r
87 "................................",
\r
88 "................................"
\r
91 // leo: I'm too lazy to create a nice about box
\r
92 // ^Fishman - I am lazy too :P.
\r
93 g_FuncTable.m_pfnMessageBox (parent, "GtkGenSurf 1.05\n\n"
\r
94 "Original version\n"
\r
95 "David Hyde (rascal@vicksburg.com)\n\n"
\r
97 "Leonardo Zide (leo@lokigames.com)\n\n"
\r
99 "Pablo Zurita (pablo@qeradiant.com)\n"
\r
100 "Hydra (hydra@hydras-world.com)",
\r
101 "About GtkGenSurf", MB_OK);
\r
104 // =============================================================================
\r
107 static void SetupControls ()
\r
109 switch (current_tab)
\r
115 if (Game != QUAKE3)
\r
117 gtk_widget_hide (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "use_patches")));
\r
118 ENABLE_WIDGET ("use_patches", FALSE);
\r
122 gtk_widget_show (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "use_patches")));
\r
123 ENABLE_WIDGET ("use_patches", TRUE);
\r
126 if (Game == QUAKE3 && UsePatches != 0)
\r
128 ENABLE_WIDGET ("decimate", FALSE);
\r
130 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "snap_text")), "Snap to grid:"); // ^Fishman - Snap to grid.
\r
134 if (WaveType != WAVE_BITMAP)
\r
136 ENABLE_WIDGET ("bmp_file", FALSE);
\r
137 ENABLE_WIDGET ("bmp_file_browse", FALSE);
\r
138 ENABLE_WIDGET ("bmp_black", FALSE);
\r
139 ENABLE_WIDGET ("bmp_white", FALSE);
\r
140 ENABLE_WIDGET ("bmp_text1", FALSE);
\r
141 ENABLE_WIDGET ("bmp_text2", FALSE);
\r
142 ENABLE_WIDGET ("bmp_text3", FALSE);
\r
143 ENABLE_WIDGET ("bmp_reload", FALSE);
\r
144 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "bmp_note")),
\r
145 "These options are disabled unless \"From Bitmap\"\n"
\r
146 "is selected as the Waveform on the General tab.");
\r
150 ENABLE_WIDGET ("bmp_file", TRUE);
\r
151 ENABLE_WIDGET ("bmp_file_browse", TRUE);
\r
152 ENABLE_WIDGET ("bmp_black", TRUE);
\r
153 ENABLE_WIDGET ("bmp_white", TRUE);
\r
154 ENABLE_WIDGET ("bmp_text1", TRUE);
\r
155 ENABLE_WIDGET ("bmp_text2", TRUE);
\r
156 ENABLE_WIDGET ("bmp_text3", TRUE);
\r
157 ENABLE_WIDGET ("bmp_reload", strlen(gbmp.name) != 0);
\r
158 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "bmp_note")),
\r
159 "GenSurf works only with 8-bit bitmaps. Color indices are\n"
\r
160 "mapped to values for each vertex. Generally, gray scale\n"
\r
161 "images are stored with black as color 0, white as color 255.");
\r
165 case FIXPOINTS_TAB:
\r
166 ENABLE_WIDGET ("fix_value", (NumVerticesSelected != 0));
\r
167 ENABLE_WIDGET ("fix_value_text", (NumVerticesSelected != 0));
\r
168 ENABLE_WIDGET ("fix_free", (NumVerticesSelected != 0));
\r
169 ENABLE_WIDGET ("fix_range", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
\r
170 ENABLE_WIDGET ("fix_range_text", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
\r
171 ENABLE_WIDGET ("fix_rate", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
\r
172 ENABLE_WIDGET ("fix_rate_text", ((NumVerticesSelected != 0) && (WaveType != WAVE_ROUGH_ONLY)));
\r
176 ENABLE_WIDGET ("texture2", (UsePatches == 0));
\r
177 ENABLE_WIDGET ("texture3", (UsePatches == 0));
\r
178 ENABLE_WIDGET ("tex_slant", (UsePatches == 0));
\r
179 ENABLE_WIDGET ("detail", (UsePatches == 0));
\r
180 if (Game != QUAKE3 )
\r
182 ENABLE_WIDGET ("terrain_ent", FALSE); // ^Fishman - Adds terrain key to func_group.
\r
183 ENABLE_WIDGET ("hint", (UsePatches == 0));
\r
190 case WAVE_HCYLINDER:
\r
191 case WAVE_VCYLINDER:
\r
192 ENABLE_WIDGET ("amplitude", TRUE);
\r
193 ENABLE_WIDGET ("wavelength", TRUE);
\r
194 ENABLE_WIDGET ("z00", TRUE);
\r
195 ENABLE_WIDGET ("z01", TRUE);
\r
196 ENABLE_WIDGET ("z10", TRUE);
\r
197 ENABLE_WIDGET ("z11", TRUE);
\r
198 ENABLE_WIDGET ("linearborder", TRUE);
\r
199 ENABLE_WIDGET ("go", TRUE);
\r
202 ENABLE_WIDGET ("amplitude", FALSE);
\r
203 ENABLE_WIDGET ("wavelength", FALSE);
\r
204 ENABLE_WIDGET ("z00", FALSE);
\r
205 ENABLE_WIDGET ("z01", FALSE);
\r
206 ENABLE_WIDGET ("z10", FALSE);
\r
207 ENABLE_WIDGET ("z11", FALSE);
\r
208 ENABLE_WIDGET ("linearborder", FALSE);
\r
209 ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE));
\r
211 case WAVE_ROUGH_ONLY:
\r
212 ENABLE_WIDGET ("amplitude", FALSE);
\r
213 ENABLE_WIDGET ("wavelength", FALSE);
\r
214 ENABLE_WIDGET ("z00", TRUE);
\r
215 ENABLE_WIDGET ("z01", TRUE);
\r
216 ENABLE_WIDGET ("z10", TRUE);
\r
217 ENABLE_WIDGET ("z11", TRUE);
\r
218 ENABLE_WIDGET ("linearborder", TRUE);
\r
219 ENABLE_WIDGET ("go", TRUE);
\r
222 ENABLE_WIDGET ("amplitude", TRUE);
\r
223 ENABLE_WIDGET ("wavelength", TRUE);
\r
224 ENABLE_WIDGET ("z00", TRUE);
\r
225 ENABLE_WIDGET ("z01", TRUE);
\r
226 ENABLE_WIDGET ("z10", TRUE);
\r
227 ENABLE_WIDGET ("z11", TRUE);
\r
228 ENABLE_WIDGET ("linearborder", TRUE);
\r
229 ENABLE_WIDGET ("go", TRUE);
\r
236 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmin_text")), "X:");
\r
237 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmax_text")), "X:");
\r
238 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmin_text")), "Z:");
\r
239 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmax_text")), "Z:");
\r
240 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nh_text")), "X:");
\r
241 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nv_text")), "Z:");
\r
245 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmin_text")), "Y:");
\r
246 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmax_text")), "Y:");
\r
247 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmin_text")), "Z:");
\r
248 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmax_text")), "Z:");
\r
249 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nh_text")), "Y:");
\r
250 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nv_text")), "Z:");
\r
253 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmin_text")), "X:");
\r
254 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "hmax_text")), "X:");
\r
255 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmin_text")), "Y:");
\r
256 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "vmax_text")), "Y:");
\r
257 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nh_text")), "X:");
\r
258 gtk_label_set_text (GTK_LABEL (g_object_get_data (G_OBJECT (g_pWnd), "nv_text")), "Y:");
\r
263 // SetDlgValues fills in text boxes and initializes other input controls
\r
264 static void SetDlgValues (int tab)
\r
267 char RForm[16] = "%.5g";
\r
273 // Hell if I know why, but in the release build the 2nd pass thru the
\r
274 // set_sensitive loop for game_radios crashes. No need to do this more
\r
275 // than once anyhow.
\r
276 if (!FirstPassComplete)
\r
278 for (i = 0; i < NUMGAMES; i++)
\r
279 gtk_widget_set_sensitive (game_radios[i], (i == Game ? TRUE : FALSE));
\r
280 for (i = 0; i < 6; i++)
\r
281 gtk_widget_set_sensitive (plane_radios[i], (i == Plane ? TRUE : FALSE));
\r
283 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (game_radios[Game]), TRUE);
\r
284 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (plane_radios[Plane]), TRUE);
\r
285 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wave_radios[WaveType]), TRUE);
\r
286 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "random")),
\r
288 sprintf (Text, RForm, WaveLength);
\r
289 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "wavelength")), Text);
\r
290 sprintf (Text, RForm, Amplitude);
\r
291 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "amplitude")), Text);
\r
292 sprintf (Text, RForm, Roughness);
\r
293 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "roughness")), Text);
\r
294 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data
\r
295 (G_OBJECT (g_pWnd), "main_antialiasing")), Antialiasing);
\r
299 sprintf (Text,RForm,Hll);
\r
300 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "hmin")), Text);
\r
301 sprintf (Text,RForm,Vll);
\r
302 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "vmin")), Text);
\r
303 sprintf (Text,RForm,Hur);
\r
304 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "hmax")), Text);
\r
305 sprintf (Text,RForm,Vur);
\r
306 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "vmax")), Text);
\r
307 sprintf (Text,RForm,Z00);
\r
308 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z00")), Text);
\r
309 sprintf (Text,RForm,Z01);
\r
310 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z01")), Text);
\r
311 sprintf (Text,RForm,Z10);
\r
312 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z10")), Text);
\r
313 sprintf (Text,RForm,Z11);
\r
314 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "z11")), Text);
\r
315 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nh")), NH);
\r
316 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nv")), NV);
\r
317 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "sp")), SP); // ^Fishman - Snap to grid.
\r
319 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data
\r
320 (G_OBJECT (g_pWnd), "linearborder")), FixBorders);
\r
321 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data
\r
322 (G_OBJECT (g_pWnd), "use_patches")), UsePatches);
\r
323 gtk_adjustment_set_value (GTK_ADJUSTMENT (g_object_get_data (G_OBJECT (g_pWnd), "decimate_adj")),
\r
326 if (Game == QUAKE3 && UsePatches)
\r
328 gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "decimate")), FALSE);
\r
333 if (NH > MAX_ROWS) NH -= 2;
\r
334 SetDlgValues (current_tab);
\r
340 if (NV > MAX_ROWS) NV -= 2;
\r
341 SetDlgValues (current_tab);
\r
344 if (NH < 2 ) NH = 2;
\r
345 if (NH > MAX_ROWS) NH = MAX_ROWS;
\r
347 if (NV < 2 ) NV = 2;
\r
348 if (NV > MAX_ROWS) NV = MAX_ROWS;
\r
350 gpointer spin = g_object_get_data (G_OBJECT (g_pWnd), "nh");
\r
351 GtkAdjustment *adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
\r
353 gtk_adjustment_changed (adj);
\r
354 spin = g_object_get_data (G_OBJECT (g_pWnd), "nv");
\r
355 adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
\r
357 gtk_adjustment_changed (adj);
\r
361 gtk_widget_set_sensitive (GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "decimate")), TRUE);
\r
363 gpointer spin = g_object_get_data (G_OBJECT (g_pWnd), "nh");
\r
364 GtkAdjustment *adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
\r
366 gtk_adjustment_changed (adj);
\r
367 spin = g_object_get_data (G_OBJECT (g_pWnd), "nv");
\r
368 adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
\r
370 gtk_adjustment_changed (adj);
\r
373 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nh")), NH);
\r
374 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "nv")), NV);
\r
379 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file")), gbmp.name);
\r
380 sprintf(Text,"%g",gbmp.black_value);
\r
381 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_black")), Text);
\r
382 sprintf(Text,"%g",gbmp.white_value);
\r
383 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_white")), Text);
\r
386 case FIXPOINTS_TAB:
\r
390 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texture1")), Texture[Game][0]);
\r
391 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texture2")), Texture[Game][1]);
\r
392 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texture3")), Texture[Game][2]);
\r
393 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "tex_slant")),
\r
395 sprintf(Text,RForm,TexOffset[0]);
\r
396 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texoffsetx")), Text);
\r
397 sprintf(Text,RForm,TexOffset[1]);
\r
398 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texoffsety")), Text);
\r
399 sprintf(Text,RForm,TexScale[0]);
\r
400 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texscalex")), Text);
\r
401 sprintf(Text,RForm,TexScale[1]);
\r
402 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "texscaley")), Text);
\r
403 CHECK_WIDGET ("detail", UseDetail);
\r
407 ENABLE_WIDGET ("hint", FALSE);
\r
411 ENABLE_WIDGET ("hint", TRUE);
\r
412 CHECK_WIDGET ("hint", AddHints);
\r
417 // ArghRad doesn't currently support SiN
\r
418 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0);
\r
419 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0);
\r
420 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE);
\r
421 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE);
\r
422 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE);
\r
423 SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use sin file");
\r
424 SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:");
\r
431 // ArghRad sun is inapplicable (so far)
\r
432 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0);
\r
433 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0);
\r
434 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE);
\r
435 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE);
\r
436 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE);
\r
437 // No ladders in Q3
\r
438 EnableWindow(GetDlgItem(hwndDisplay,DLG_LADDER), 0);
\r
439 ShowWindow(GetDlgItem(hwndDisplay,DLG_LADDER), SW_HIDE);
\r
440 SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pk3 file");
\r
441 SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"PK3:");
\r
445 /*trix if(Game==HERETIC2)
\r
447 // ArghRad doesn't currently support Heretic2
\r
448 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0);
\r
449 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0);
\r
450 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE);
\r
451 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE);
\r
452 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE);
\r
454 SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use pak file");
\r
455 SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Pak:");
\r
460 // A bunch of controls aren't applicable to HL
\r
461 EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE_BROWSE), 0);
\r
462 EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE2_BROWSE),0);
\r
463 EnableWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE3_BROWSE),0);
\r
464 EnableWindow(GetDlgItem(hwndDisplay,DLG_DETAIL), 0);
\r
465 EnableWindow(GetDlgItem(hwndDisplay,DLG_LADDER), 0);
\r
466 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0);
\r
467 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0);
\r
468 ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE_BROWSE), SW_HIDE);
\r
469 ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE2_BROWSE),SW_HIDE);
\r
470 ShowWindow(GetDlgItem(hwndDisplay,DLG_TEXTURE3_BROWSE),SW_HIDE);
\r
471 ShowWindow(GetDlgItem(hwndDisplay,DLG_DETAIL), SW_HIDE);
\r
472 ShowWindow(GetDlgItem(hwndDisplay,DLG_LADDER), SW_HIDE);
\r
473 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE);
\r
474 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE);
\r
475 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE);
\r
477 SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use wad file");
\r
478 SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Wad:");
\r
479 SetDlgItemText(hwndDisplay,DLG_HINT,"Hint brushes");
\r
482 if(Game==GENESIS3D)
\r
484 // No Q2-type compilers support Genesis3D (including ArghRad)
\r
485 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), 0);
\r
486 EnableWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), 0);
\r
487 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_TEXT), SW_HIDE);
\r
488 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2), SW_HIDE);
\r
489 ShowWindow(GetDlgItem(hwndDisplay,DLG_ARGHRAD2_SPIN), SW_HIDE);
\r
491 SetDlgItemText(hwndDisplay,DLG_TEX_USEPAK,"Use sin file");
\r
492 SetDlgItemText(hwndDisplay,DLG_TEX_PAK_TEXT,"Sin:");
\r
500 static void ReadDlgValues (int tab)
\r
509 Roughness = atof ( gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "roughness"))));
\r
510 WaveLength = atof ( gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "wavelength"))));
\r
511 Amplitude = atof ( gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "amplitude"))));
\r
512 spin = g_object_get_data (G_OBJECT (g_pWnd), "random");
\r
513 RandomSeed = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
\r
517 SP = atoi (gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "sp"))));
\r
518 NH = atoi (gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "nh"))));
\r
519 NV = atoi (gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "nv"))));
\r
521 if (Game == QUAKE3 && UsePatches != 0)
\r
524 if (NH < 2 ) NH = 2;
\r
525 if (NH > MAX_ROWS) NH = MAX_ROWS;
\r
527 if (NV < 2 ) NV = 2;
\r
528 if (NV > MAX_ROWS) NV = MAX_ROWS;
\r
535 if (WaveType == WAVE_BITMAP)
\r
537 GetDlgItemText(hwnd,DLG_BMP_FILE,gbmp.name,sizeof(gbmp.name));
\r
538 CheckValidDIB(hwnd);
\r
539 GetDlgItemText(hwnd,DLG_BMP_BLACK,Text,sizeof(Text));
\r
540 gbmp.black_value = atof(Text);
\r
541 GetDlgItemText(hwnd,DLG_BMP_WHITE,Text,sizeof(Text));
\r
542 gbmp.white_value = atof(Text);
\r
543 UpdatePreview(TRUE);
\r
547 case FIXPOINTS_TAB:
\r
548 GetDlgItemText(hwnd,DLG_FIX_VALUE,Text,sizeof(Text));
\r
549 temp.fixed_value = atoi(Text);
\r
550 GetDlgItemText(hwnd,DLG_FIX_RANGE,Text,sizeof(Text));
\r
551 temp.range = atoi(Text);
\r
552 GetDlgItemText(hwnd,DLG_FIX_RATE, Text,sizeof(Text));
\r
553 temp.rate = atof(Text);
\r
554 for(k=0; k<NumVerticesSelected; k++)
\r
556 xyz[Vertex[k].i][Vertex[k].j].fixed_value = temp.fixed_value;
\r
557 xyz[Vertex[k].i][Vertex[k].j].range = temp.range;
\r
558 xyz[Vertex[k].i][Vertex[k].j].rate = temp.rate;
\r
563 CheckDlgButton(ghwnd,DLG_PREVIEW,0);
\r
564 SendMessage(ghwnd,WM_COMMAND,DLG_PREVIEW,0);
\r
567 UpdatePreview(TRUE);
\r
573 i = SendDlgItemMessage( hwndDisplay, DLG_TEX_LIST1, CB_GETCURSEL, 0, 0 );
\r
575 Texture[Game][0][0] = '\0';
\r
577 SendDlgItemMessage( hwndDisplay, DLG_TEX_LIST1, CB_GETLBTEXT, i,
\r
578 (LPARAM)(LPCSTR)Texture[Game][0]);
\r
580 i = SendDlgItemMessage( hwndDisplay, DLG_TEX_LIST2, CB_GETCURSEL, 0, 0 );
\r
582 Texture[Game][1][0] = '\0';
\r
584 SendDlgItemMessage( hwndDisplay, DLG_TEX_LIST2, CB_GETLBTEXT, i,
\r
585 (LPARAM)(LPCSTR)Texture[Game][1]);
\r
587 i = SendDlgItemMessage( hwndDisplay, DLG_TEX_LIST3, CB_GETCURSEL, 0, 0 );
\r
589 Texture[Game][2][0] = '\0';
\r
591 SendDlgItemMessage( hwndDisplay, DLG_TEX_LIST3, CB_GETLBTEXT, i,
\r
592 (LPARAM)(LPCSTR)Texture[Game][2]);
\r
596 GetDlgItemText(hwndDisplay,DLG_TEXTURE, Texture[Game][0],sizeof(Texture[Game][0]));
\r
597 GetDlgItemText(hwndDisplay,DLG_TEXTURE2,Texture[Game][1],sizeof(Texture[Game][1]));
\r
598 GetDlgItemText(hwndDisplay,DLG_TEXTURE3,Texture[Game][2],sizeof(Texture[Game][2]));
\r
600 GetDlgItemText(hwndDisplay,DLG_TEX_SLANT,Text,sizeof(Text));
\r
601 SlantAngle = atoi(Text);
\r
602 SlantAngle = max(0,min(SlantAngle,90));
\r
603 GetDlgItemText(hwndDisplay,DLG_TEXOFFSETX,Text,sizeof(Text));
\r
604 TexOffset[0] = atof(Text);
\r
605 GetDlgItemText(hwndDisplay,DLG_TEXOFFSETY,Text,sizeof(Text));
\r
606 TexOffset[1] = atof(Text);
\r
607 GetDlgItemText(hwndDisplay,DLG_TEXSCALEX,Text,sizeof(Text));
\r
608 TexScale[0] = atof(Text);
\r
609 if(TexScale[0] == 0.) TexScale[0] = 1.0;
\r
610 GetDlgItemText(hwndDisplay,DLG_TEXSCALEY,Text,sizeof(Text));
\r
611 TexScale[1] = atof(Text);
\r
612 if(TexScale[1] == 0.) TexScale[1] = 1.0;
\r
613 GetDlgItemText(hwndDisplay,DLG_ARGHRAD2,Text,sizeof(Text));
\r
614 ArghRad2 = atoi(Text);
\r
620 // =============================================================================
\r
621 // main dialog callbacks
\r
623 static void switch_page (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data)
\r
625 if (current_tab != page_num)
\r
627 if (page_num == FIXPOINTS_TAB)
\r
629 OldPreview = Preview;
\r
630 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data (G_OBJECT (g_pWnd),
\r
631 "main_preview")), TRUE);
\r
633 UpdatePreview (true);
\r
634 NumVerticesSelected = 0;
\r
637 if (current_tab == FIXPOINTS_TAB)
\r
640 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_object_get_data (G_OBJECT (g_pWnd),
\r
641 "main_preview")), FALSE);
\r
643 UpdatePreview (true);
\r
644 NumVerticesSelected = 0;
\r
647 if (page_num == TEXTURE_TAB)
\r
649 WasDetail = UseDetail;
\r
653 ENABLE_WIDGET ("detail", FALSE);
\r
657 ReadDlgValues (current_tab);
\r
658 current_tab = page_num;
\r
659 SetDlgValues (current_tab);
\r
663 static gint main_close (GtkWidget *widget, gpointer data)
\r
665 gtk_widget_hide (g_pWnd);
\r
666 gtk_widget_hide (g_pWndPreview);
\r
671 static void main_save (GtkWidget *widget, gpointer data)
\r
673 ReadDlgValues (current_tab);
\r
674 SaveSetup (g_pWnd);
\r
677 static void main_open (GtkWidget *widget, gpointer data)
\r
679 OpenSetup (g_pWnd, 0);
\r
680 for (int i = 0; i < 5; i++)
\r
685 static void main_defaults (GtkWidget *widget, gpointer data)
\r
687 OpenSetup (g_pWnd, 1);
\r
688 for (int i = 0; i < 5; i++)
\r
693 static void main_preview (GtkWidget *widget, gpointer data)
\r
695 Preview = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
699 // ^Fishman - Antializing for the preview window.
\r
700 static void main_antialiasing (GtkWidget *widget, gpointer data)
\r
702 Antialiasing = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
\r
703 UpdatePreview (true);
\r
706 static void main_about (GtkWidget *widget, gpointer data)
\r
711 static void main_go (GtkWidget *widget, gpointer data)
\r
713 GtkWidget *notebook = GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "notebook"));
\r
716 ReadDlgValues (current_tab);
\r
717 if (NH < 1 || NH > MAX_ROWS)
\r
719 sprintf (Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS);
\r
720 g_FuncTable.m_pfnMessageBox (g_pWnd, Text, "GenSurf", MB_ICONEXCLAMATION);
\r
721 gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB);
\r
725 if (NV < 1 || NV > MAX_ROWS)
\r
727 sprintf (Text, "The number of divisions must be > 0 and no greater than %d.", MAX_ROWS);
\r
728 g_FuncTable.m_pfnMessageBox (g_pWnd, Text, "GenSurf", MB_ICONEXCLAMATION);
\r
729 gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB);
\r
735 g_FuncTable.m_pfnMessageBox (g_pWnd, "The \"lower-left\" values must be less than "
\r
736 "the corresponding \"upper-right\" values in "
\r
737 "the \"Extent\" box.","GenSurf", MB_OK | MB_ICONEXCLAMATION);
\r
738 gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB);
\r
744 g_FuncTable.m_pfnMessageBox (g_pWnd,"The \"lower-left\" values must be less than "
\r
745 "the corresponding \"upper-right\" values in "
\r
746 "the \"Extent\" box.","GenSurf", MB_OK | MB_ICONEXCLAMATION);
\r
747 gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB);
\r
751 if (!strlen (Texture[Game][0]))
\r
753 g_FuncTable.m_pfnMessageBox (g_pWnd, "You must supply a texture name.", "GenSurf", MB_ICONEXCLAMATION);
\r
754 gtk_notebook_set_page (GTK_NOTEBOOK (notebook), EXTENTS_TAB);
\r
758 /* if (Decimate>0 && GimpHints!=0)
\r
760 MessageBox(hwnd,"You've elected to use a decimated grid and gimp's non-detail hint brushes. "
\r
761 "This combination usually produces bizarre visual errors in the game, "
\r
762 "so GenSurf has turned off the hint brush option.",
\r
763 "GenSurf",MB_ICONEXCLAMATION);
\r
767 gtk_widget_hide (g_pWnd);
\r
769 gtk_widget_hide (g_pWndPreview);
\r
772 WriteIniFile(gszIni);
\r
775 // =============================================================================
\r
776 // general tab callbacks
\r
778 static void general_game (GtkToggleButton *widget, gpointer data)
\r
780 if (gtk_toggle_button_get_active (widget))
\r
782 Game = GPOINTER_TO_INT (data);
\r
783 UpdatePreview (TRUE);
\r
787 static void general_plane (GtkToggleButton *widget, gpointer data)
\r
789 if (gtk_toggle_button_get_active (widget))
\r
791 Plane = GPOINTER_TO_INT (data);
\r
793 UpdatePreview (TRUE);
\r
797 static void general_wave (GtkToggleButton *widget, gpointer data)
\r
799 if (gtk_toggle_button_get_active (widget))
\r
801 WaveType = GPOINTER_TO_INT (data);
\r
803 UpdatePreview (TRUE);
\r
807 static void general_random (GtkAdjustment *adj, gpointer data)
\r
809 int nPos = (int)adj->value;
\r
811 if (RandomSeed != nPos)
\r
814 UpdatePreview (true);
\r
818 // =============================================================================
\r
819 // extents tab callbacks
\r
821 static void extents_linearborder (GtkToggleButton *check, gpointer data)
\r
823 FixBorders = gtk_toggle_button_get_active (check);
\r
824 UpdatePreview (true);
\r
827 static void extents_use_patches (GtkToggleButton *check, gpointer data)
\r
829 if (Game != QUAKE3)
\r
832 UsePatches = gtk_toggle_button_get_active (check);
\r
833 SetDlgValues (current_tab);
\r
835 UpdatePreview (true);
\r
838 static void extents_nhnv_spin (GtkAdjustment *adj, int *data)
\r
840 int nPos = (int)adj->value;
\r
844 if (Game==QUAKE3 && UsePatches && (nPos % 2))
\r
850 gtk_adjustment_set_value (adj, *data);
\r
854 UpdatePreview (true);
\r
858 static void extents_decimate (GtkAdjustment *adj, gpointer data)
\r
860 int nPos = (int)adj->value;
\r
863 UpdatePreview (true);
\r
866 // Hydra : snap to grid begin
\r
867 /*static void extents_snaptogrid (GtkAdjustment *adj, gpointer data)
\r
869 int nPos = (int)adj->value;
\r
872 UpdatePreview (true);
\r
875 // ^Fishman - Modified version of Hydra's snap to grid code.
\r
876 static void extents_snaptogrid_spin (GtkAdjustment *adj, int *data)
\r
878 int nPos = (int)adj->value;
\r
880 UpdatePreview (true);
\r
883 // =============================================================================
\r
884 // bitmap tab callbacks
\r
886 static gint bitmap_file_entryfocusout(GtkWidget* widget, GdkEventFocus* event, gpointer data)
\r
888 char filename[NAME_MAX];
\r
890 strcpy (filename, gtk_entry_get_text (GTK_ENTRY(widget)));
\r
891 if(strcmp (filename,gbmp.name))
\r
898 strcpy (gbmp.name,filename);
\r
899 if (strlen(gbmp.name) )
\r
901 ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE));
\r
906 static void bitmap_browse (GtkWidget *widget, gpointer data)
\r
908 const char *filename;
\r
911 filename = g_FuncTable.m_pfnFileDialog (g_pWnd, TRUE, "Bitmap File", gbmp.defpath);
\r
913 if (filename != NULL)
\r
915 strcpy (gbmp.name, filename);
\r
917 ptr = strrchr (filename, G_DIR_SEPARATOR);
\r
921 strcpy (gbmp.defpath, filename);
\r
925 ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE));
\r
929 static void bitmap_reload (GtkWidget *widget, gpointer data)
\r
931 strcpy (gbmp.name, gtk_entry_get_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file"))));
\r
932 if(strlen (gbmp.name) )
\r
935 ENABLE_WIDGET ("go", (gbmp.colors != NULL ? TRUE : FALSE));
\r
938 ENABLE_WIDGET ("go", FALSE );
\r
941 // =============================================================================
\r
942 // fix points tab callbacks
\r
944 static gint fix_value_entryfocusout (GtkWidget* widget, GdkEventFocus *event, gpointer data)
\r
946 int i = atoi (gtk_entry_get_text (GTK_ENTRY(widget))), k;
\r
949 if (i < -65536 || i > 65536)
\r
952 g_FuncTable.m_pfnMessageBox (g_pWnd, "The value must be between -65536 and 65536, inclusive.",
\r
953 "GenSurf", MB_OK | MB_ICONEXCLAMATION);
\r
954 sprintf (Text, "%d", (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value);
\r
955 gtk_entry_set_text (GTK_ENTRY(widget), Text);
\r
956 gtk_window_set_focus (GTK_WINDOW (gtk_widget_get_toplevel (widget)), widget);
\r
958 else if (i != xyz[Vertex[0].i][Vertex[0].j].fixed_value)
\r
960 for(k=0; k<NumVerticesSelected; k++)
\r
961 xyz[Vertex[k].i][Vertex[k].j].fixed_value = i;
\r
963 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "fix_value")),
\r
964 (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value);
\r
965 UpdatePreview (true);
\r
970 static void fix_value_changed (GtkAdjustment *adj, gpointer data)
\r
972 int k, i = (int)adj->value;
\r
974 if (xyz[Vertex[0].i][Vertex[0].j].fixed_value != i)
\r
976 for(k=0; k<NumVerticesSelected; k++)
\r
977 xyz[Vertex[k].i][Vertex[k].j].fixed_value = i;
\r
978 UpdatePreview(true);
\r
982 static gint fix_range_entryfocusout (GtkWidget *widget, GdkEventFocus *event, gpointer data)
\r
984 int i = atoi (gtk_entry_get_text (GTK_ENTRY(widget))), k;
\r
986 if (i != xyz[Vertex[0].i][Vertex[0].j].range)
\r
988 for (k=0; k<NumVerticesSelected; k++)
\r
989 xyz[Vertex[k].i][Vertex[k].j].range = i;
\r
990 UpdatePreview (true);
\r
995 static gint fix_rate_entryfocusout (GtkWidget *widget, GdkEventFocus *event, gpointer data)
\r
997 double r = atof (gtk_entry_get_text (GTK_ENTRY(widget)));
\r
1000 if (r != xyz[Vertex[0].i][Vertex[0].j].rate)
\r
1002 for(k=0; k<NumVerticesSelected; k++)
\r
1003 xyz[Vertex[k].i][Vertex[k].j].rate = r;
\r
1004 UpdatePreview (true);
\r
1009 static void fix_free (GtkWidget *widget, gpointer data)
\r
1013 for (k=0; k<NumVerticesSelected; k++)
\r
1014 xyz[Vertex[k].i][Vertex[k].j].fixed = 0;
\r
1015 NumVerticesSelected = 0;
\r
1017 UpdatePreview (true);
\r
1020 static void fix_freeall (GtkWidget *widget, gpointer data)
\r
1024 for (i=0; i<=NH; i++)
\r
1026 for(j=0; j<=NV; j++)
\r
1027 xyz[i][j].fixed = 0;
\r
1029 fix_free (NULL, data); // keep these together
\r
1032 void vertex_selected ()
\r
1043 for(k=0; k<NumVerticesSelected; k++)
\r
1044 xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[1];
\r
1048 for(k=0; k<NumVerticesSelected; k++)
\r
1049 xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[0];
\r
1052 for(k=0; k<NumVerticesSelected; k++)
\r
1053 xyz[Vertex[k].i][Vertex[k].j].fixed_value = xyz[Vertex[0].i][Vertex[0].j].p[2];
\r
1057 gtk_spin_button_set_value (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (g_pWnd), "fix_value")),
\r
1058 (int)xyz[Vertex[0].i][Vertex[0].j].fixed_value);
\r
1060 sprintf(Text,"%d",(int)xyz[Vertex[0].i][Vertex[0].j].range);
\r
1061 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "fix_range")), Text);
\r
1062 sprintf(Text,"%.5g",xyz[Vertex[0].i][Vertex[0].j].rate);
\r
1063 gtk_entry_set_text (GTK_ENTRY (g_object_get_data (G_OBJECT (g_pWnd), "fix_rate")), Text);
\r
1065 for (k=0; k<NumVerticesSelected; k++)
\r
1066 xyz[Vertex[k].i][Vertex[k].j].fixed = 1;
\r
1068 UpdatePreview (true);
\r
1071 // =============================================================================
\r
1072 // texture tab callbacks
\r
1074 static void texture_detail (GtkToggleButton *check, gpointer data)
\r
1076 UseDetail = gtk_toggle_button_get_active (check);
\r
1077 WasDetail = UseDetail;
\r
1080 static void texture_hint (GtkToggleButton *check, gpointer data)
\r
1082 AddHints = gtk_toggle_button_get_active (check);
\r
1083 if (AddHints == 1)
\r
1086 ENABLE_WIDGET ("detail", FALSE);
\r
1090 UseDetail = WasDetail;
\r
1091 ENABLE_WIDGET ("detail", FALSE);
\r
1093 CHECK_WIDGET ("detail", UseDetail);
\r
1096 // ^Fishman - Add terrain key to func_group.
\r
1097 static void texture_terrainent (GtkToggleButton *check, gpointer data)
\r
1099 AddTerrainKey = gtk_toggle_button_get_active (check);
\r
1102 static void texture_set(int index, const char* name)
\r
1104 strcpy(Texture[Game][index], name);
\r
1107 static gint texture_entryfocusout(GtkWidget* widget, GdkEventFocus* event, gpointer data)
\r
1109 texture_set(GPOINTER_TO_INT(data), gtk_entry_get_text(GTK_ENTRY(widget)));
\r
1113 // =============================================================================
\r
1116 static void UpdateVariable (GtkEntry *entry, GdkEventFocus *event, double *data)
\r
1118 double x = atof (gtk_entry_get_text (entry));
\r
1123 UpdatePreview (true);
\r
1127 static gint doublevariable_entryfocusout(GtkWidget* widget, GdkEventFocus* event, gpointer data)
\r
1129 UpdateVariable(GTK_ENTRY(widget), event, reinterpret_cast<double*>(data));
\r
1133 // =============================================================================
\r
1134 // create tooltips
\r
1136 void create_tooltips ()
\r
1138 tooltips = gtk_tooltips_new ();
\r
1141 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1142 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "go")),
\r
1143 "Accept all input and generate a surface in Q3Radiant",
\r
1145 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1146 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "open")),
\r
1147 "Open a previously saved GenSurf settings file.",
\r
1149 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1150 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "save")),
\r
1151 "Save all settings to a file.",
\r
1153 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1154 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "defaults")),
\r
1155 "Restore default values from DEFAULTS.SRF. If this file does not exist, GenSurf "
\r
1156 "initializes all input parameters to reasonable values. You can create your own "
\r
1157 "default surface by setting all parameters to your liking, then saving a settings "
\r
1158 "file as DEFAULTS.SRF with the Save As button.",
\r
1161 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1162 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "main_preview")),
\r
1163 "View a wire-frame representation of the surface",
\r
1166 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1167 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "main_antialiasing")),
\r
1168 "The lines in the preview window are antialiased for better quality",
\r
1172 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1173 GTK_WIDGET (wave_radios[0]),
\r
1174 "Builds a surface with alternating hills and valleys. Uses the general form Z=cos(X) "
\r
1177 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1178 GTK_WIDGET (wave_radios[1]),
\r
1179 "Builds a surface with ridges parallel to the vertical axis.",
\r
1181 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1182 GTK_WIDGET (wave_radios[2]),
\r
1183 "Builds a surface with ridges parallel to the horizontal axis.",
\r
1185 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1186 GTK_WIDGET (wave_radios[3]),
\r
1187 "Builds a map from a bitmap image representing a contour plot. Click the \"Bitmap\" "
\r
1188 "tab to select the image. GenSurf only supports 256-color (8 bit) "
\r
1189 "bitmaps. GenSurf will work with any 256-color bitmap, but gray scale bitmaps are a bit "
\r
1190 "more intuitive.",
\r
1192 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1193 GTK_WIDGET (wave_radios[4]),
\r
1194 "Builds a random surface using the Plasma Cloud technique. Variance is controlled "
\r
1195 "by the Roughness input. To build a surface with completely random values not "
\r
1196 "dependent on neighboring vertices, use one of the other waveforms with 0 amplitude.",
\r
1198 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1199 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "wavelength")),
\r
1200 "Enter the wavelength (distance between crests). NOTE: Wavelengths equal to the grid "
\r
1201 "size or 2 times the grid size will result in 0 amplitudes. For best results, the "
\r
1202 "wavelength value should be at least 4 times the grid size (extents divided by the "
\r
1203 "number of divisions",
\r
1205 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1206 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "amplitude")),
\r
1207 "Enter the height of hills/ridges.",
\r
1209 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1210 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "roughness")),
\r
1211 "Enter the roughness value (noise) for the surface. For fractal surfaces, this value "
\r
1212 "is used as a variance in the fractal calculations.",
\r
1214 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1215 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "random")),
\r
1216 "Seed value for the pseudo-random number generator.",
\r
1219 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1220 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "hmin")),
\r
1221 "Minimum horizontal coordinate of the surface, i.e. X for a surface parallel to "
\r
1222 "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, "
\r
1223 "the extents (maximum-minimum values) in a given direction should be evenly "
\r
1224 "divisible by the number of divisions in that direction.",
\r
1226 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1227 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "hmax")),
\r
1228 "Maximum horizontal coordinate of the surface, i.e. X for a surface parallel to "
\r
1229 "the XY or XZ planes, Y for a surface parallel to the YZ plane. For best results, "
\r
1230 "the extents (maximum-minimum values) in a given direction should be evenly "
\r
1231 "divisible by the number of divisions in that direction.",
\r
1233 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1234 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "vmin")),
\r
1235 "Minimum vertical coordinate of the surface, i.e. Y for a surface parallel to "
\r
1236 "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, "
\r
1237 "the extents (maximum-minimum values) in a given direction should be evenly "
\r
1238 "divisible by the number of divisions in that direction.",
\r
1240 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1241 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "vmax")),
\r
1242 "Maximum vertical coordinate of the surface, i.e. Y for a surface parallel to "
\r
1243 "the XY plane, Z for a surface parallel to the XZ or YZ planes. For best results, "
\r
1244 "the extents (maximum-minimum values) in a given direction should be evenly "
\r
1245 "divisible by the number of divisions in that direction.",
\r
1247 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1248 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "nh")),
\r
1249 "Number of divisions in the horizontal direction. For best results, the extents "
\r
1250 "in a given direction should be evenly divisible by the number of divisions in "
\r
1251 "that direction.",
\r
1253 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1254 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "nv")),
\r
1255 "Number of divisions in the vertical direction. For best results, the extents "
\r
1256 "in a given direction should be evenly divisible by the number of divisions in "
\r
1257 "that direction.",
\r
1259 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1260 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "use_patches")),
\r
1261 "Produce one or more curved patches in the shape of your selected surface rather "
\r
1262 "than producing solid brushes. Depending on the size of your surface (and the "
\r
1263 "user's graphic detail settings, which you cannot control), curved surfaces will "
\r
1264 "be represented in the game by a very large number of polygons. Read the warnings "
\r
1265 "concerning curved surfaces on the GenSurf web page before using this feature.",
\r
1267 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1268 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "decimate")),
\r
1269 "Use the slider to control the number of vertices discarded by GenSurf. For many "
\r
1270 "surfaces, you can produce roughly the same shape surface with a high decimation "
\r
1271 "value. This will generally result in a map with lower polygon counts (and better "
\r
1272 "in-game performance). However, this feature should NOT be used for large terrain "
\r
1275 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1276 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z00")),
\r
1277 "Enter the height of the surface at the lower left corner. This value will likely "
\r
1278 "be modified unless \"Linear Borders\" is checked.",
\r
1280 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1281 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z01")),
\r
1282 "Enter the height of the surface at the upper left corner. This value will likely "
\r
1283 "be modified unless \"Linear Borders\" is checked.",
\r
1285 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1286 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z10")),
\r
1287 "Enter the height of the surface at the lower right corner. This value will likely "
\r
1288 "be modified unless \"Linear Borders\" is checked.",
\r
1290 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1291 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "z11")),
\r
1292 "Enter the height of the surface at the upper right corner. This value will likely "
\r
1293 "be modified unless \"Linear Borders\" is checked.",
\r
1295 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1296 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "linearborder")),
\r
1297 "Restrict the edges of the surface to a straight line. This will help match up "
\r
1298 "brush edges if you drop this surface into another map.",
\r
1301 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1302 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file")),
\r
1303 "Type the name of an 8-bit bitmap image file, or click Browse to select an image "
\r
1304 "from a list of those available on your system.",
\r
1306 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1307 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_file_browse")),
\r
1308 "Select a bitmap image file from a list of those available on your system.",
\r
1310 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1311 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_reload")),
\r
1312 "Reload the selected bitmap file after making changes in an external image editor.",
\r
1314 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1315 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_black")),
\r
1316 "Enter the value corresponding to color index 0 in the bitmap file. For gray scale "
\r
1317 "images, color 0 is normally black.",
\r
1319 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1320 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "bmp_white")),
\r
1321 "Enter the value corresponding to color index 255 in the bitmap file. For gray scale "
\r
1322 "images, color 255 is normally white.",
\r
1325 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1326 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_value")),
\r
1327 "Enter a value for the selected vertex. This value will not be adjusted when applying "
\r
1328 "a waveform or roughness to the surface. Unlock this vertex (so that it will be "
\r
1329 "adjusted normally) by clicking \"Free\". This vertex will influence vertices within "
\r
1330 "the \"Range affected\" of this vertex.",
\r
1332 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1333 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_range")),
\r
1334 "Enter the range away from the selected vertex that other vertices will be affected. "
\r
1335 "Use 0 if you don't want other vertices to be influenced by the currently selected "
\r
1336 "one. Note: this box is disabled if you've chosen the fractal generator, as it uses "
\r
1337 "a completely different method for determining values.",
\r
1339 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1340 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_rate")),
\r
1341 "Enter a rate of change for the surface affected by the fixed value. 0 gives a smooth "
\r
1342 "sinusoidal curve, values less than 0 give progressively sharper spikes, and values "
\r
1343 "greater than 0 take on a square shape. Values less than -30 or greater than 30 are "
\r
1344 "set to -30 and 30, respectively. Note that this entry will have no effect unless "
\r
1345 "you also specify a \"range affected\".",
\r
1347 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1348 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_free")),
\r
1349 "Click this to free (unlock the value of) the currently selected vertex.",
\r
1351 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1352 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "fix_freeall")),
\r
1353 "Click this to free (unlock the values of) all vertices.",
\r
1356 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1357 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "texture1")),
\r
1358 "Enter the name of the texture or shader used for the surface faces.",
\r
1360 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1361 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "texture2")),
\r
1362 "Enter the name of the texture or shader used for faces other than the surface. Under "
\r
1363 "normal circumstances this should be \"common/caulk\"",
\r
1365 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1366 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "texture3")),
\r
1367 "Enter the name of the texture or shader used for \"steep\" surface faces, where \"steep\" "
\r
1368 "is the angle specified below. If this entry is left blank or if the \"steep\" angle is 0, "
\r
1369 "all surface faces will use the texture specified by \"Surface\".",
\r
1372 gtk_tooltips_set_tip(GTK_TOOLTIPS (tooltips),
\r
1373 GTK_WIDGET (g_object_get_data (G_OBJECT (g_pWnd), "detail")),
\r
1374 "Check this box to use the detail content property on the generated brushes. Compile "
\r
1375 "times will be considerably shorter if the detail property is used, though the surface "
\r
1376 "will not block visibility at all. If you use the detail property, you should make sure "
\r
1377 "that \"common/caulk\" is used for the non-surface faces, or the polygon count will be "
\r
1378 "much higher than necessary.",
\r
1382 // =============================================================================
\r
1383 // create main dialog
\r
1385 GtkWidget* create_main_dialog ()
\r
1387 GtkWidget *dlg, *vbox, *hbox, *hbox2, *button, *notebook, *frame, *table, *table2;
\r
1388 GtkWidget *check, *spin, *radio, *label, *entry, *scale;
\r
1392 char *games[] = { "Quake 2", "Half-Life", "SiN", "Heretic 2", "Kingpin", "Genesis3D", "Quake 3 Arena" };
\r
1393 char *waveforms[] = { "Alternating hill/valley", "Cylindrical left-to-right", "Cylindrical top-to-bottom",
\r
1394 "From bitmap", "Fractal" };
\r
1395 char *orientations[] = { "Ground surface", "Ceiling", "Wall facing 0", "Wall facing 90",
\r
1396 "Wall facing 180","Wall facing 270" };
\r
1398 g_pWnd = dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
\r
1399 gtk_window_set_title (GTK_WINDOW (dlg), gszCaption);
\r
1400 g_signal_connect (G_OBJECT (dlg), "delete_event", G_CALLBACK (main_close), NULL);
\r
1401 // g_signal_connect (G_OBJECT (dlg), "destroy", G_CALLBACK (gtk_widget_destroy), NULL);
\r
1402 gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (g_pRadiantWnd));
\r
1404 hbox = gtk_hbox_new (FALSE, 5);
\r
1405 gtk_widget_show (hbox);
\r
1406 gtk_container_add (GTK_CONTAINER (dlg), hbox);
\r
1407 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
\r
1409 notebook = gtk_notebook_new ();
\r
1410 gtk_widget_show (notebook);
\r
1411 gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
\r
1412 g_signal_connect (G_OBJECT (notebook), "switch_page",
\r
1413 G_CALLBACK (switch_page), NULL);
\r
1414 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
\r
1415 g_object_set_data (G_OBJECT (dlg), "notebook", notebook);
\r
1417 table = gtk_table_new (2, 2, FALSE);
\r
1418 gtk_widget_show (table);
\r
1419 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1420 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1421 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1423 label = gtk_label_new ("General");
\r
1424 gtk_widget_show (label);
\r
1425 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, label);
\r
1427 frame = gtk_frame_new ("Game");
\r
1428 gtk_widget_show (frame);
\r
1429 gtk_table_attach (GTK_TABLE (table), frame, 0, 1, 0, 1,
\r
1430 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1431 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1433 vbox = gtk_vbox_new (TRUE, 5);
\r
1434 gtk_widget_show (vbox);
\r
1435 gtk_container_add (GTK_CONTAINER (frame), vbox);
\r
1436 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
1438 for (i = 0, group = NULL; i < NUMGAMES; i++)
\r
1440 radio = gtk_radio_button_new_with_label (group, games[i]);
\r
1441 gtk_widget_show (radio);
\r
1442 gtk_box_pack_start (GTK_BOX (vbox), radio, TRUE, TRUE, 0);
\r
1443 group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio));
\r
1444 game_radios[i] = radio;
\r
1445 g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (general_game), GINT_TO_POINTER (i));
\r
1448 frame = gtk_frame_new ("Waveform");
\r
1449 gtk_widget_show (frame);
\r
1450 gtk_table_attach (GTK_TABLE (table), frame, 1, 2, 0, 1,
\r
1451 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1452 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1454 vbox = gtk_vbox_new (TRUE, 5);
\r
1455 gtk_widget_show (vbox);
\r
1456 gtk_container_add (GTK_CONTAINER (frame), vbox);
\r
1457 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
1459 for (i = 0, group = NULL; i < 5; i++)
\r
1461 radio = gtk_radio_button_new_with_label (group, waveforms[i]);
\r
1462 gtk_widget_show (radio);
\r
1463 gtk_box_pack_start (GTK_BOX (vbox), radio, TRUE, TRUE, 0);
\r
1464 group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio));
\r
1465 wave_radios[i] = radio;
\r
1466 g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (general_wave), GINT_TO_POINTER (i));
\r
1469 frame = gtk_frame_new ("Orientation");
\r
1470 gtk_widget_show (frame);
\r
1471 gtk_table_attach (GTK_TABLE (table), frame, 0, 1, 1, 2,
\r
1472 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1473 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1475 vbox = gtk_vbox_new (TRUE, 5);
\r
1476 gtk_widget_show (vbox);
\r
1477 gtk_container_add (GTK_CONTAINER (frame), vbox);
\r
1478 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
1480 for (i = 0, group = NULL; i < 6; i++)
\r
1482 radio = gtk_radio_button_new_with_label (group, orientations[i]);
\r
1483 gtk_widget_show (radio);
\r
1484 gtk_box_pack_start (GTK_BOX (vbox), radio, TRUE, TRUE, 0);
\r
1485 group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio));
\r
1486 plane_radios[i] = radio;
\r
1487 g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (general_plane), GINT_TO_POINTER (i));
\r
1490 table2 = gtk_table_new (4, 2, FALSE);
\r
1491 gtk_widget_show (table2);
\r
1492 gtk_table_set_row_spacings (GTK_TABLE (table2), 5);
\r
1493 gtk_table_set_col_spacings (GTK_TABLE (table2), 5);
\r
1494 gtk_table_attach (GTK_TABLE (table), table2, 1, 2, 1, 2,
\r
1495 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1496 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1498 label = gtk_label_new ("Wavelength:");
\r
1499 gtk_widget_show (label);
\r
1500 gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 0, 1,
\r
1501 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1502 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1503 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1504 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
\r
1506 label = gtk_label_new ("Max. amplitude:");
\r
1507 gtk_widget_show (label);
\r
1508 gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 1, 2,
\r
1509 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1510 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1511 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1512 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
\r
1514 label = gtk_label_new ("Roughness:");
\r
1515 gtk_widget_show (label);
\r
1516 gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 2, 3,
\r
1517 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1518 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1519 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1520 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
\r
1522 label = gtk_label_new ("Random seed:");
\r
1523 gtk_widget_show (label);
\r
1524 gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 3, 4,
\r
1525 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1526 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1527 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1528 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
\r
1530 entry = gtk_entry_new ();
\r
1531 gtk_widget_show (entry);
\r
1532 gtk_table_attach (GTK_TABLE (table2), entry, 1, 2, 0, 1,
\r
1533 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1534 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1535 gtk_widget_set_usize (entry, 50, -2);
\r
1536 g_object_set_data (G_OBJECT (dlg), "wavelength", entry);
\r
1537 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &WaveLength);
\r
1539 entry = gtk_entry_new ();
\r
1540 gtk_widget_show (entry);
\r
1541 gtk_table_attach (GTK_TABLE (table2), entry, 1, 2, 1, 2,
\r
1542 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1543 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1544 gtk_widget_set_usize (entry, 50, -2);
\r
1545 g_object_set_data (G_OBJECT (dlg), "amplitude", entry);
\r
1546 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Amplitude);
\r
1548 entry = gtk_entry_new ();
\r
1549 gtk_widget_show (entry);
\r
1550 gtk_table_attach (GTK_TABLE (table2), entry, 1, 2, 2, 3,
\r
1551 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1552 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1553 gtk_widget_set_usize (entry, 50, -2);
\r
1554 g_object_set_data (G_OBJECT (dlg), "roughness", entry);
\r
1555 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Roughness);
\r
1557 adj = gtk_adjustment_new (1, 1, 32767, 1, 10, 10);
\r
1558 g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (general_random), NULL);
\r
1559 spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0);
\r
1560 gtk_widget_show (spin);
\r
1561 gtk_table_attach (GTK_TABLE (table2), spin, 1, 2, 3, 4,
\r
1562 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1563 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1564 gtk_widget_set_usize (spin, 60, -2);
\r
1565 g_object_set_data (G_OBJECT (dlg), "random", spin);
\r
1567 vbox = gtk_vbox_new (FALSE, 5);
\r
1568 gtk_widget_show (vbox);
\r
1569 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
1571 label = gtk_label_new ("Extents");
\r
1572 gtk_widget_show (label);
\r
1573 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);
\r
1575 hbox2 = gtk_hbox_new (FALSE, 5);
\r
1576 gtk_widget_show (hbox2);
\r
1577 gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 0);
\r
1579 frame = gtk_frame_new ("Extents");
\r
1580 gtk_widget_show (frame);
\r
1581 gtk_box_pack_start (GTK_BOX (hbox2), frame, TRUE, TRUE, 0);
\r
1583 table = gtk_table_new (3, 4, FALSE);
\r
1584 gtk_widget_show (table);
\r
1585 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1586 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1587 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1588 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1590 label = gtk_label_new ("X:");
\r
1591 gtk_widget_show (label);
\r
1592 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
\r
1593 (GtkAttachOptions) (GTK_FILL),
\r
1594 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1595 g_object_set_data (G_OBJECT (dlg), "hmin_text", label);
\r
1597 label = gtk_label_new ("X:");
\r
1598 gtk_widget_show (label);
\r
1599 gtk_table_attach (GTK_TABLE (table), label, 2, 3, 1, 2,
\r
1600 (GtkAttachOptions) (GTK_FILL),
\r
1601 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1602 g_object_set_data (G_OBJECT (dlg), "hmax_text", label);
\r
1604 label = gtk_label_new ("Y:");
\r
1605 gtk_widget_show (label);
\r
1606 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
\r
1607 (GtkAttachOptions) (GTK_FILL),
\r
1608 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1609 g_object_set_data (G_OBJECT (dlg), "vmin_text", label);
\r
1611 label = gtk_label_new ("Y:");
\r
1612 gtk_widget_show (label);
\r
1613 gtk_table_attach (GTK_TABLE (table), label, 2, 3, 2, 3,
\r
1614 (GtkAttachOptions) (GTK_FILL),
\r
1615 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1616 g_object_set_data (G_OBJECT (dlg), "vmax_text", label);
\r
1618 label = gtk_label_new ("Lower-left");
\r
1619 gtk_widget_show (label);
\r
1620 gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1,
\r
1621 (GtkAttachOptions) (GTK_FILL),
\r
1622 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1624 label = gtk_label_new ("Upper-right");
\r
1625 gtk_widget_show (label);
\r
1626 gtk_table_attach (GTK_TABLE (table), label, 3, 4, 0, 1,
\r
1627 (GtkAttachOptions) (GTK_FILL),
\r
1628 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1630 entry = gtk_entry_new ();
\r
1631 gtk_widget_show (entry);
\r
1632 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2,
\r
1633 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1634 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1635 gtk_widget_set_usize (entry, 50, -2);
\r
1636 g_object_set_data (G_OBJECT (dlg), "hmin", entry);
\r
1637 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Hll);
\r
1639 entry = gtk_entry_new ();
\r
1640 gtk_widget_show (entry);
\r
1641 gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2,
\r
1642 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1643 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1644 gtk_widget_set_usize (entry, 50, -2);
\r
1645 g_object_set_data (G_OBJECT (dlg), "hmax", entry);
\r
1646 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Hur);
\r
1648 entry = gtk_entry_new ();
\r
1649 gtk_widget_show (entry);
\r
1650 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3,
\r
1651 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1652 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1653 gtk_widget_set_usize (entry, 50, -2);
\r
1654 g_object_set_data (G_OBJECT (dlg), "vmin", entry);
\r
1655 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Vll);
\r
1657 entry = gtk_entry_new ();
\r
1658 gtk_widget_show (entry);
\r
1659 gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 2, 3,
\r
1660 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1661 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1662 gtk_widget_set_usize (entry, 50, -2);
\r
1663 g_object_set_data (G_OBJECT (dlg), "vmax", entry);
\r
1664 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Vur);
\r
1666 frame = gtk_frame_new ("Divisions");
\r
1667 gtk_widget_show (frame);
\r
1668 gtk_box_pack_start (GTK_BOX (hbox2), frame, TRUE, TRUE, 0);
\r
1670 table = gtk_table_new (2, 2, FALSE);
\r
1671 gtk_widget_show (table);
\r
1672 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1673 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1674 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1675 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1677 label = gtk_label_new ("X:");
\r
1678 gtk_widget_show (label);
\r
1679 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
\r
1680 (GtkAttachOptions) (GTK_FILL),
\r
1681 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1682 g_object_set_data (G_OBJECT (dlg), "nh_text", label);
\r
1684 label = gtk_label_new ("Y:");
\r
1685 gtk_widget_show (label);
\r
1686 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
\r
1687 (GtkAttachOptions) (GTK_FILL),
\r
1688 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1689 g_object_set_data (G_OBJECT (dlg), "nv_text", label);
\r
1691 adj = gtk_adjustment_new (8, 1, MAX_ROWS, 1, 10, 10);
\r
1692 g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_nhnv_spin), &NH);
\r
1693 spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0);
\r
1694 gtk_widget_show (spin);
\r
1695 gtk_table_attach (GTK_TABLE (table), spin, 1, 2, 0, 1,
\r
1696 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1697 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1698 gtk_widget_set_usize (spin, 60, -2);
\r
1699 g_object_set_data (G_OBJECT (dlg), "nh", spin);
\r
1701 adj = gtk_adjustment_new (8, 1, MAX_ROWS, 1, 10, 10);
\r
1702 g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_nhnv_spin), &NV);
\r
1703 spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0);
\r
1704 gtk_widget_show (spin);
\r
1705 gtk_table_attach (GTK_TABLE (table), spin, 1, 2, 1, 2,
\r
1706 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1707 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1708 gtk_widget_set_usize (spin, 60, -2);
\r
1709 g_object_set_data (G_OBJECT (dlg), "nv", spin);
\r
1711 check = gtk_check_button_new_with_label ("Use Bezier patches");
\r
1712 gtk_widget_show (check);
\r
1713 gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0);
\r
1714 g_object_set_data (G_OBJECT (dlg), "use_patches", check);
\r
1715 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (extents_use_patches), NULL);
\r
1717 // ^Fishman - Snap to grid, replaced scroll bar with a texbox.
\r
1718 label = gtk_label_new ("Snap to grid:");
\r
1719 gtk_widget_show (label);
\r
1720 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
\r
1721 gtk_object_set_data (GTK_OBJECT (dlg), "snap_text", label);
\r
1723 adj = gtk_adjustment_new (8, 0, 256, 1, 10, 10);
\r
1724 g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_snaptogrid_spin), &SP);
\r
1725 spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0);
\r
1726 gtk_widget_show (spin);
\r
1727 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, TRUE, 0);
\r
1728 gtk_widget_set_usize (spin, 60, -2);
\r
1729 g_object_set_data (G_OBJECT (dlg), "sp", spin);
\r
1730 // ^Fishman - End of Snap to grid code.
\r
1732 hbox2 = gtk_hbox_new (FALSE, 5);
\r
1733 gtk_widget_show (hbox2);
\r
1734 gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 10);
\r
1736 label = gtk_label_new ("Decimate:");
\r
1737 gtk_widget_show (label);
\r
1738 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
\r
1740 adj = gtk_adjustment_new (0, 0, 110, 1, 10, 10);
\r
1741 g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (extents_decimate), NULL);
\r
1742 g_object_set_data (G_OBJECT (dlg), "decimate_adj", adj);
\r
1743 scale = gtk_hscale_new (GTK_ADJUSTMENT (adj));
\r
1744 gtk_widget_show (scale);
\r
1745 gtk_box_pack_start (GTK_BOX (hbox2), scale, TRUE, TRUE, 0);
\r
1746 gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_RIGHT);
\r
1747 gtk_scale_set_digits (GTK_SCALE (scale), 0);
\r
1748 g_object_set_data (G_OBJECT (dlg), "decimate", scale);
\r
1750 frame = gtk_frame_new ("Corner values");
\r
1751 gtk_widget_show (frame);
\r
1752 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
\r
1754 table = gtk_table_new (3, 4, FALSE);
\r
1755 gtk_widget_show (table);
\r
1756 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1757 gtk_container_add (GTK_CONTAINER (frame), table);
\r
1758 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1759 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1761 label = gtk_label_new ("Upper-left:");
\r
1762 gtk_widget_show (label);
\r
1763 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
\r
1764 (GtkAttachOptions) (GTK_FILL),
\r
1765 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1767 label = gtk_label_new ("Lower-left:");
\r
1768 gtk_widget_show (label);
\r
1769 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
\r
1770 (GtkAttachOptions) (GTK_FILL),
\r
1771 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1773 label = gtk_label_new ("Upper-right:");
\r
1774 gtk_widget_show (label);
\r
1775 gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1,
\r
1776 (GtkAttachOptions) (GTK_FILL),
\r
1777 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1779 label = gtk_label_new ("Lower-right:");
\r
1780 gtk_widget_show (label);
\r
1781 gtk_table_attach (GTK_TABLE (table), label, 2, 3, 1, 2,
\r
1782 (GtkAttachOptions) (GTK_FILL),
\r
1783 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1785 entry = gtk_entry_new ();
\r
1786 gtk_widget_show (entry);
\r
1787 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1,
\r
1788 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1789 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1790 gtk_widget_set_usize (entry, 50, -2);
\r
1791 g_object_set_data (G_OBJECT (dlg), "z01", entry);
\r
1792 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z01);
\r
1794 entry = gtk_entry_new ();
\r
1795 gtk_widget_show (entry);
\r
1796 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2,
\r
1797 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1798 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1799 gtk_widget_set_usize (entry, 50, -2);
\r
1800 g_object_set_data (G_OBJECT (dlg), "z00", entry);
\r
1801 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z00);
\r
1803 entry = gtk_entry_new ();
\r
1804 gtk_widget_show (entry);
\r
1805 gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 0, 1,
\r
1806 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1807 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1808 gtk_widget_set_usize (entry, 50, -2);
\r
1809 g_object_set_data (G_OBJECT (dlg), "z11", entry);
\r
1810 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z11);
\r
1812 entry = gtk_entry_new ();
\r
1813 gtk_widget_show (entry);
\r
1814 gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2,
\r
1815 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1816 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1817 gtk_widget_set_usize (entry, 50, -2);
\r
1818 g_object_set_data (G_OBJECT (dlg), "z10", entry);
\r
1819 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &Z10);
\r
1821 check = gtk_check_button_new_with_label ("Linear borders");
\r
1822 gtk_widget_show (check);
\r
1823 gtk_table_attach (GTK_TABLE (table), check, 0, 4, 2, 3,
\r
1824 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1825 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1826 g_object_set_data (G_OBJECT (dlg), "linearborder", check);
\r
1827 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (extents_linearborder), NULL);
\r
1829 vbox = gtk_vbox_new (FALSE, 10);
\r
1830 gtk_widget_show (vbox);
\r
1831 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
1833 label = gtk_label_new ("Bitmap");
\r
1834 gtk_widget_show (label);
\r
1835 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);
\r
1837 label = gtk_label_new ("");
\r
1838 gtk_widget_show (label);
\r
1839 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
\r
1840 g_object_set_data (G_OBJECT (dlg), "bmp_note", label);
\r
1842 table = gtk_table_new (2, 2, FALSE);
\r
1843 gtk_widget_show (table);
\r
1844 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1845 gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
\r
1846 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1847 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1849 label = gtk_label_new ("Filename:");
\r
1850 gtk_widget_show (label);
\r
1851 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
\r
1852 (GtkAttachOptions) (GTK_FILL),
\r
1853 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1854 g_object_set_data (G_OBJECT (dlg), "bmp_text1", label);
\r
1856 entry = gtk_entry_new ();
\r
1857 gtk_widget_show (entry);
\r
1858 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1,
\r
1859 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1860 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1861 g_object_set_data (G_OBJECT (dlg), "bmp_file", entry);
\r
1862 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (bitmap_file_entryfocusout), NULL);
\r
1864 hbox2 = gtk_hbox_new (TRUE, 5);
\r
1865 gtk_widget_show (hbox2);
\r
1866 gtk_table_attach (GTK_TABLE (table), hbox2, 1, 2, 1, 2,
\r
1867 (GtkAttachOptions) (0),
\r
1868 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1870 button = gtk_button_new_with_label ("Browse...");
\r
1871 gtk_widget_show (button);
\r
1872 gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0);
\r
1873 gtk_widget_set_usize (button, 60, -2);
\r
1874 g_object_set_data (G_OBJECT (dlg), "bmp_file_browse", button);
\r
1875 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (bitmap_browse), NULL);
\r
1877 button = gtk_button_new_with_label ("Reload");
\r
1878 gtk_widget_show (button);
\r
1879 gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0);
\r
1880 gtk_widget_set_usize (button, 60, -2);
\r
1881 g_object_set_data (G_OBJECT (dlg), "bmp_reload", button);
\r
1882 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (bitmap_reload), NULL);
\r
1884 table = gtk_table_new (2, 2, TRUE);
\r
1885 gtk_widget_show (table);
\r
1886 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1887 gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
\r
1888 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1889 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1891 label = gtk_label_new ("Map color 0 to:");
\r
1892 gtk_widget_show (label);
\r
1893 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
\r
1894 (GtkAttachOptions) (GTK_FILL|GTK_EXPAND),
\r
1895 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1896 g_object_set_data (G_OBJECT (dlg), "bmp_text2", label);
\r
1897 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1898 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
\r
1900 label = gtk_label_new ("Map color 255 to:");
\r
1901 gtk_widget_show (label);
\r
1902 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
\r
1903 (GtkAttachOptions) (GTK_FILL|GTK_EXPAND),
\r
1904 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1905 g_object_set_data (G_OBJECT (dlg), "bmp_text3", label);
\r
1906 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1907 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
\r
1909 hbox2 = gtk_hbox_new (FALSE, 5);
\r
1910 gtk_widget_show (hbox2);
\r
1911 gtk_table_attach (GTK_TABLE (table), hbox2, 1, 2, 0, 1,
\r
1912 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1913 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1915 entry = gtk_entry_new ();
\r
1916 gtk_widget_show (entry);
\r
1917 gtk_box_pack_start (GTK_BOX (hbox2), entry, FALSE, FALSE, 0);
\r
1918 gtk_widget_set_usize (entry, 50, -2);
\r
1919 g_object_set_data (G_OBJECT (dlg), "bmp_black", entry);
\r
1920 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &gbmp.black_value);
\r
1922 hbox2 = gtk_hbox_new (FALSE, 5);
\r
1923 gtk_widget_show (hbox2);
\r
1924 gtk_table_attach (GTK_TABLE (table), hbox2, 1, 2, 1, 2,
\r
1925 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
1926 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL), 0, 0);
\r
1928 entry = gtk_entry_new ();
\r
1929 gtk_widget_show (entry);
\r
1930 gtk_box_pack_start (GTK_BOX (hbox2), entry, FALSE, FALSE, 0);
\r
1931 gtk_widget_set_usize (entry, 50, -2);
\r
1932 g_object_set_data (G_OBJECT (dlg), "bmp_white", entry);
\r
1933 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (doublevariable_entryfocusout), &gbmp.white_value);
\r
1935 vbox = gtk_vbox_new (FALSE, 10);
\r
1936 gtk_widget_show (vbox);
\r
1937 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
1939 label = gtk_label_new ("Fix Points");
\r
1940 gtk_widget_show (label);
\r
1941 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);
\r
1943 label = gtk_label_new ("Click on a vertex in the lower half of the preview window,\n"
\r
1944 "then use the arrow keys or text box to assign a value.\n"
\r
1945 "Use Ctrl+Click to select multiple vertices/toggle a\n"
\r
1946 "selection. Use Shift+Click to select a range of vertices.\n\n"
\r
1947 "Click \"Free\" to unlock a vertex. Vertices within \"Range\n"
\r
1948 "affected\" will be influenced by this vertex.");
\r
1949 gtk_widget_show (label);
\r
1950 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
\r
1952 table = gtk_table_new (3, 3, FALSE);
\r
1953 gtk_widget_show (table);
\r
1954 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
\r
1955 gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
\r
1956 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
1957 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
1959 label = gtk_label_new ("Value:");
\r
1960 gtk_widget_show (label);
\r
1961 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
\r
1962 (GtkAttachOptions) (GTK_FILL),
\r
1963 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1964 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1965 g_object_set_data (G_OBJECT (dlg), "fix_value_text", label);
\r
1967 label = gtk_label_new ("Range affected:");
\r
1968 gtk_widget_show (label);
\r
1969 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
\r
1970 (GtkAttachOptions) (GTK_FILL),
\r
1971 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1972 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1973 g_object_set_data (G_OBJECT (dlg), "fix_range_text", label);
\r
1975 label = gtk_label_new ("Rate of change:");
\r
1976 gtk_widget_show (label);
\r
1977 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
\r
1978 (GtkAttachOptions) (GTK_FILL),
\r
1979 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1980 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
1981 g_object_set_data (G_OBJECT (dlg), "fix_rate_text", label);
\r
1983 adj = gtk_adjustment_new (0, -65536, 65536, 1, 16, 16);
\r
1984 g_signal_connect (G_OBJECT (adj), "value_changed", G_CALLBACK (fix_value_changed), NULL);
\r
1985 spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0);
\r
1986 gtk_widget_show (spin);
\r
1987 gtk_table_attach (GTK_TABLE (table), spin, 1, 2, 0, 1,
\r
1988 (GtkAttachOptions) (GTK_EXPAND),
\r
1989 (GtkAttachOptions) (GTK_EXPAND), 0, 0);
\r
1990 gtk_widget_set_usize (spin, 60, -2);
\r
1991 g_object_set_data (G_OBJECT (dlg), "fix_value", spin);
\r
1992 g_signal_connect (G_OBJECT (spin), "focus_out_event", G_CALLBACK (fix_value_entryfocusout), NULL);
\r
1994 entry = gtk_entry_new ();
\r
1995 gtk_widget_show (entry);
\r
1996 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2,
\r
1997 (GtkAttachOptions) (GTK_EXPAND),
\r
1998 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
1999 gtk_widget_set_usize (entry, 60, -2);
\r
2000 g_object_set_data (G_OBJECT (dlg), "fix_range", entry);
\r
2001 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (fix_range_entryfocusout), NULL);
\r
2003 entry = gtk_entry_new ();
\r
2004 gtk_widget_show (entry);
\r
2005 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3,
\r
2006 (GtkAttachOptions) (GTK_EXPAND),
\r
2007 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2008 gtk_widget_set_usize (entry, 60, -2);
\r
2009 g_object_set_data (G_OBJECT (dlg), "fix_rate", entry);
\r
2010 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (fix_rate_entryfocusout), NULL);
\r
2012 button = gtk_button_new_with_label ("Free");
\r
2013 gtk_widget_show (button);
\r
2014 gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1,
\r
2015 (GtkAttachOptions) (GTK_EXPAND),
\r
2016 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2017 gtk_widget_set_usize (button, 60, -2);
\r
2018 g_object_set_data (G_OBJECT (dlg), "fix_free", button);
\r
2019 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (fix_free), NULL);
\r
2021 button = gtk_button_new_with_label ("Free All");
\r
2022 gtk_widget_show (button);
\r
2023 gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2,
\r
2024 (GtkAttachOptions) (GTK_EXPAND),
\r
2025 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2026 gtk_widget_set_usize (button, 60, -2);
\r
2027 g_object_set_data (G_OBJECT (dlg), "fix_freeall", button);
\r
2028 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (fix_freeall), NULL);
\r
2030 vbox = gtk_vbox_new (FALSE, 10);
\r
2031 gtk_widget_show (vbox);
\r
2032 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
\r
2034 label = gtk_label_new ("Texture");
\r
2035 gtk_widget_show (label);
\r
2036 gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);
\r
2038 // ^Fishman - Modified to add more labels and textboxes.
\r
2039 table = gtk_table_new (5, 2, FALSE);
\r
2040 gtk_widget_show (table);
\r
2041 gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
\r
2042 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
2043 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
2045 label = gtk_label_new ("Surface:");
\r
2046 gtk_widget_show (label);
\r
2047 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
\r
2048 (GtkAttachOptions) (GTK_FILL),
\r
2049 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2050 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
2052 label = gtk_label_new ("Other:");
\r
2053 gtk_widget_show (label);
\r
2054 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
\r
2055 (GtkAttachOptions) (GTK_FILL),
\r
2056 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2057 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
2059 label = gtk_label_new ("Steep:");
\r
2060 gtk_widget_show (label);
\r
2061 gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
\r
2062 (GtkAttachOptions) (GTK_FILL),
\r
2063 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2064 gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
\r
2066 entry = gtk_entry_new ();
\r
2067 gtk_widget_show (entry);
\r
2068 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1,
\r
2069 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2070 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2071 gtk_widget_set_usize (entry, 60, -2);
\r
2072 g_object_set_data (G_OBJECT (dlg), "texture1", entry);
\r
2073 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK(texture_entryfocusout), GINT_TO_POINTER (0));
\r
2075 entry = gtk_entry_new ();
\r
2076 gtk_widget_show (entry);
\r
2077 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2,
\r
2078 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2079 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2080 gtk_widget_set_usize (entry, 60, -2);
\r
2081 g_object_set_data (G_OBJECT (dlg), "texture2", entry);
\r
2082 g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK(texture_entryfocusout), GINT_TO_POINTER (1));
\r
2084 entry = gtk_entry_new ();
\r
2085 gtk_widget_show (entry);
\r
2086 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3,
\r
2087 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2088 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2089 gtk_widget_set_usize (entry, 60, -2);
\r
2090 g_object_set_data (G_OBJECT (dlg), "texture3", entry);
\r
2092 hbox2 = gtk_hbox_new (FALSE, 5);
\r
2093 gtk_widget_show (hbox2);
\r
2094 gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 0);
\r
2096 label = gtk_label_new ("\"Steep\" angle:");
\r
2097 gtk_widget_show (label);
\r
2098 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
\r
2100 adj = gtk_adjustment_new (60, 0, 90, 1, 10, 10);
\r
2101 spin = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1, 0);
\r
2102 gtk_widget_show (spin);
\r
2103 gtk_box_pack_start (GTK_BOX (hbox2), spin, FALSE, TRUE, 0);
\r
2104 g_object_set_data (G_OBJECT (dlg), "tex_slant", spin);
\r
2106 table = gtk_table_new (2, 4, TRUE);
\r
2107 gtk_widget_show (table);
\r
2108 gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
\r
2109 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
\r
2110 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
\r
2112 label = gtk_label_new ("Offset <h,v>");
\r
2113 gtk_widget_show (label);
\r
2114 gtk_table_attach (GTK_TABLE (table), label, 0, 2, 0, 1,
\r
2115 (GtkAttachOptions) (GTK_FILL),
\r
2116 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2118 label = gtk_label_new ("Scale <h,v>");
\r
2119 gtk_widget_show (label);
\r
2120 gtk_table_attach (GTK_TABLE (table), label, 2, 4, 0, 1,
\r
2121 (GtkAttachOptions) (GTK_FILL),
\r
2122 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2124 entry = gtk_entry_new ();
\r
2125 gtk_widget_show (entry);
\r
2126 gtk_table_attach (GTK_TABLE (table), entry, 0, 1, 1, 2,
\r
2127 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2128 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2129 gtk_widget_set_usize (entry, 60, -2);
\r
2130 g_object_set_data (G_OBJECT (dlg), "texoffsetx", entry);
\r
2132 entry = gtk_entry_new ();
\r
2133 gtk_widget_show (entry);
\r
2134 gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2,
\r
2135 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2136 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2137 gtk_widget_set_usize (entry, 60, -2);
\r
2138 g_object_set_data (G_OBJECT (dlg), "texoffsety", entry);
\r
2140 entry = gtk_entry_new ();
\r
2141 gtk_widget_show (entry);
\r
2142 gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 1, 2,
\r
2143 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2144 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2145 gtk_widget_set_usize (entry, 60, -2);
\r
2146 g_object_set_data (G_OBJECT (dlg), "texscalex", entry);
\r
2148 entry = gtk_entry_new ();
\r
2149 gtk_widget_show (entry);
\r
2150 gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2,
\r
2151 (GtkAttachOptions) (GTK_EXPAND|GTK_FILL),
\r
2152 (GtkAttachOptions) (GTK_FILL), 0, 0);
\r
2153 gtk_widget_set_usize (entry, 60, -2);
\r
2154 g_object_set_data (G_OBJECT (dlg), "texscaley", entry);
\r
2158 check = gtk_check_button_new_with_label ("Use detail brushes");
\r
2159 gtk_widget_show (check);
\r
2160 gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0);
\r
2161 g_object_set_data (G_OBJECT (dlg), "detail", check);
\r
2162 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (texture_detail), NULL);
\r
2164 check = gtk_check_button_new_with_label ("Detail hint brushes");
\r
2165 gtk_widget_show (check);
\r
2166 gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0);
\r
2167 g_object_set_data (G_OBJECT (dlg), "hint", check);
\r
2168 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (texture_hint), NULL);
\r
2170 // ^Fishman - Add terrain key to func_group.
\r
2171 check = gtk_check_button_new_with_label ("Add terrain key");
\r
2172 gtk_widget_show (check);
\r
2173 gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0);
\r
2174 g_object_set_data (G_OBJECT (dlg), "terrain_ent", check);
\r
2175 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (texture_terrainent), NULL);
\r
2177 vbox = gtk_vbox_new (FALSE, 5);
\r
2178 gtk_widget_show (vbox);
\r
2179 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, TRUE, 0);
\r
2181 button = gtk_button_new_with_label ("OK");
\r
2182 gtk_widget_show (button);
\r
2183 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
\r
2184 gtk_widget_set_usize (button, 60, -2);
\r
2185 g_object_set_data (G_OBJECT (dlg), "go", button);
\r
2186 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_go), NULL);
\r
2188 label = gtk_label_new ("Settings:");
\r
2189 gtk_widget_show (label);
\r
2190 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
\r
2192 button = gtk_button_new_with_label ("Open...");
\r
2193 gtk_widget_show (button);
\r
2194 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
\r
2195 g_object_set_data (G_OBJECT (dlg), "open", button);
\r
2196 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_open), NULL);
\r
2198 button = gtk_button_new_with_label ("Save as...");
\r
2199 gtk_widget_show (button);
\r
2200 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
\r
2201 g_object_set_data (G_OBJECT (dlg), "save", button);
\r
2202 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_save), NULL);
\r
2204 button = gtk_button_new_with_label ("Defaults");
\r
2205 gtk_widget_show (button);
\r
2206 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
\r
2207 g_object_set_data (G_OBJECT (dlg), "defaults", button);
\r
2208 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_defaults), NULL);
\r
2210 button = gtk_button_new_with_label ("About...");
\r
2211 gtk_widget_show (button);
\r
2212 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
\r
2213 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (main_about), NULL);
\r
2215 check = gtk_check_button_new_with_label ("Preview");
\r
2216 gtk_widget_show (check);
\r
2217 gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0);
\r
2218 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (main_preview), NULL);
\r
2219 g_object_set_data (G_OBJECT (dlg), "main_preview", check);
\r
2221 // ^Fishman - Antializing for the preview window.
\r
2222 check = gtk_check_button_new_with_label ("Antialised lines");
\r
2223 gtk_widget_show (check);
\r
2224 gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0);
\r
2225 g_object_set_data (G_OBJECT (dlg), "main_antialiasing", check);
\r
2226 g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (main_antialiasing), NULL);
\r
2228 for (i = 0; i < 5; i++)
\r
2231 CreateViewWindow ();
\r
2233 create_tooltips();
\r
2235 FirstPassComplete = 1;
\r
2243 HWND hwndDisplay = (HWND)NULL;
\r
2244 HWND ghwndTab = (HWND)NULL;
\r
2249 char GenSurfURL[40] = {"http://tarot.telefragged.com/gensurf"};
\r
2250 char GenSurfBoard[40]={"http://tarot.telefragged.com/board"};
\r
2253 * AboutDlgProc - processes messages for the about dialog.
\r
2256 qboolean CALLBACK AboutDlgProc( HWND hwnd, unsigned msg, UINT wparam, LONG lparam )
\r
2259 DRAWITEMSTRUCT *dis;
\r
2266 lparam = lparam; /* turn off warning */
\r
2269 case WM_INITDIALOG:
\r
2270 strcpy(szText,"About " );
\r
2271 strcat(szText,gszCaption);
\r
2272 SetWindowText(hwnd,gszCaption);
\r
2273 SetDlgItemText(hwnd,DLG_ABOUT_APP,szText);
\r
2274 /* Application icon: */
\r
2275 SendDlgItemMessage( hwnd, DLG_ABOUT_ICON,
\r
2276 STM_SETICON, (WPARAM)(HICON)LoadIcon(ghInst,"GENSURF"),
\r
2279 hwndURL = GetDlgItem(hwnd,DLG_ABOUT_URL);
\r
2280 hdc = GetDC(hwndURL);
\r
2281 GetTextExtentPoint(hdc,GenSurfURL,strlen(GenSurfURL),&size);
\r
2282 ReleaseDC(hwndURL,hdc);
\r
2283 GetWindowRect(hwndURL,&rc);
\r
2284 SetWindowPos(hwndURL,(HWND)NULL,0,0,size.cx,size.cy+2,
\r
2285 SWP_NOMOVE | SWP_NOZORDER);
\r
2287 hwndURL = GetDlgItem(hwnd,DLG_ABOUT_BOARD);
\r
2288 hdc = GetDC(hwndURL);
\r
2289 GetTextExtentPoint(hdc,GenSurfBoard,strlen(GenSurfBoard),&size);
\r
2290 ReleaseDC(hwndURL,hdc);
\r
2291 GetWindowRect(hwndURL,&rc);
\r
2292 SetWindowPos(hwndURL,(HWND)NULL,0,0,size.cx,size.cy+2,
\r
2293 SWP_NOMOVE | SWP_NOZORDER);
\r
2298 switch(LOWORD(wparam))
\r
2300 case DLG_ABOUT_URL:
\r
2303 case DLG_ABOUT_BOARD:
\r
2304 HTTP(GenSurfBoard);
\r
2307 EndDialog(hwnd,1);
\r
2313 if(wparam == DLG_ABOUT_URL)
\r
2315 dis = (LPDRAWITEMSTRUCT)lparam;
\r
2316 SetTextColor(dis->hDC,RGB(0,0,255));
\r
2317 TextOut(dis->hDC,0,0,GenSurfURL,strlen(GenSurfURL));
\r
2318 GetWindowRect(dis->hwndItem,&rc);
\r
2319 GetTextExtentPoint(dis->hDC,GenSurfURL,strlen(GenSurfURL),&size);
\r
2320 hpen = CreatePen(PS_SOLID,0,RGB(0,0,255));
\r
2321 SelectObject(dis->hDC,hpen);
\r
2322 MoveToEx(dis->hDC,0,size.cy,NULL);
\r
2323 LineTo(dis->hDC,size.cx,size.cy);
\r
2324 SelectObject(dis->hDC,GetStockObject(BLACK_PEN));
\r
2325 DeleteObject(hpen);
\r
2327 else if(wparam==DLG_ABOUT_BOARD)
\r
2329 dis = (LPDRAWITEMSTRUCT)lparam;
\r
2330 SetTextColor(dis->hDC,RGB(0,0,255));
\r
2331 TextOut(dis->hDC,0,0,GenSurfBoard,strlen(GenSurfBoard));
\r
2332 GetWindowRect(dis->hwndItem,&rc);
\r
2333 GetTextExtentPoint(dis->hDC,GenSurfBoard,strlen(GenSurfBoard),&size);
\r
2334 hpen = CreatePen(PS_SOLID,0,RGB(0,0,255));
\r
2335 SelectObject(dis->hDC,hpen);
\r
2336 MoveToEx(dis->hDC,0,size.cy,NULL);
\r
2337 LineTo(dis->hDC,size.cx,size.cy);
\r
2338 SelectObject(dis->hDC,GetStockObject(BLACK_PEN));
\r
2339 DeleteObject(hpen);
\r
2344 EndDialog(hwnd,1);
\r
2352 } /* AboutDlgProc */
\r
2356 if( DialogBox( ghInst,"About", ghwnd_main, (DLGPROC)AboutDlgProc ) < 0)
\r
2359 sprintf(Text,"In About(), GetLastError()=0x%08x",GetLastError());
\r
2360 MessageBox(ghwnd_main,Text,"GenSurf",MB_ICONEXCLAMATION);
\r