aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/others/mimesh/g3dviewer-0.2.99.4/src/gui_callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/others/mimesh/g3dviewer-0.2.99.4/src/gui_callbacks.c')
-rw-r--r--src/others/mimesh/g3dviewer-0.2.99.4/src/gui_callbacks.c364
1 files changed, 364 insertions, 0 deletions
diff --git a/src/others/mimesh/g3dviewer-0.2.99.4/src/gui_callbacks.c b/src/others/mimesh/g3dviewer-0.2.99.4/src/gui_callbacks.c
new file mode 100644
index 0000000..dfff61f
--- /dev/null
+++ b/src/others/mimesh/g3dviewer-0.2.99.4/src/gui_callbacks.c
@@ -0,0 +1,364 @@
1/* $Id: gui_callbacks.c 58 2006-11-05 19:21:04Z mmmaddd $ */
2
3/*
4 G3DViewer - 3D object viewer
5
6 Copyright (C) 2005, 2006 Markus Dahms <mad@automagically.de>
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21*/
22
23#ifdef HAVE_CONFIG_H
24# include <config.h>
25#endif
26
27#include <stdlib.h>
28#include <string.h>
29
30#include <gtk/gtk.h>
31
32#include "main.h"
33#include "gl.h"
34#include "glarea.h"
35#include "gui_glade.h"
36#include "trackball.h"
37#include "screenshot.h"
38
39/*
40 * File->Open
41 */
42
43void gui_on_open_cb(GtkWidget *widget, gpointer user_data)
44{
45 G3DViewer *viewer;
46
47 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
48
49 gui_glade_open_dialog(viewer);
50}
51
52/*
53 * File->Properties
54 */
55
56void gui_on_properties_cb(GtkWidget *widget, gpointer user_data)
57{
58 G3DViewer *viewer;
59 GtkWidget *propwin;
60
61 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
62 g_assert(viewer);
63
64 propwin = glade_xml_get_widget(viewer->interface.xml, "properties_window");
65
66 gtk_widget_show_all(propwin);
67}
68
69/*
70 * View->Show Menubar
71 */
72
73void gui_on_show_menubar_cb(GtkWidget *widget, gpointer user_data)
74{
75 G3DViewer *viewer;
76 GtkWidget *menubar;
77
78 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
79 g_assert(viewer);
80
81 menubar = glade_xml_get_widget(viewer->interface.xml, "menu_main");
82 g_assert(menubar);
83
84 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
85 gtk_widget_show(menubar);
86 else
87 gtk_widget_hide(menubar);
88}
89
90/*
91 * View->Show Toolbar
92 */
93
94void gui_on_show_toolbar_cb(GtkWidget *widget, gpointer user_data)
95{
96 G3DViewer *viewer;
97 GtkWidget *toolbar;
98
99 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
100 g_assert(viewer);
101
102 toolbar = glade_xml_get_widget(viewer->interface.xml, "toolbar_main");
103 g_assert(toolbar);
104
105 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
106 gtk_widget_show(toolbar);
107 else
108 gtk_widget_hide(toolbar);
109}
110
111/*
112 * View->Fullscreen
113 */
114void gui_on_fullscreen_cb(GtkWidget *widget, gpointer user_data)
115{
116 G3DViewer *viewer;
117
118 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
119 g_assert(viewer);
120
121 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
122 gtk_window_fullscreen(GTK_WINDOW(viewer->interface.window));
123 else
124 gtk_window_unfullscreen(GTK_WINDOW(viewer->interface.window));
125}
126
127/*
128 * Window state event
129 */
130void gui_on_window_state_event(GtkWidget *widget, GdkEventVisibility *event,
131 gpointer user_data)
132{
133 G3DViewer *viewer;
134
135 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
136 g_assert(viewer);
137}
138
139/*
140 * View->ZoomFit
141 */
142void gui_on_zoomfit_cb(GtkWidget *widget, gpointer user_data)
143{
144 G3DViewer *viewer;
145
146 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
147 g_assert(viewer);
148
149 /* zoom */
150 viewer->zoom = 45;
151
152 /* reset trackball */
153#if 1
154 trackball(viewer->quat, 0.0, 0.0, 0.0, 0.0);
155#endif
156
157 glarea_update(viewer->interface.glarea);
158}
159
160/*
161 * View->Shininess
162 */
163
164void gui_on_shininess_cb(GtkWidget *widget, gpointer user_data)
165{
166 G3DViewer *viewer;
167
168 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
169 g_assert(viewer);
170
171 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
172 viewer->glflags |= G3D_FLAG_GL_SHININESS;
173 else
174 viewer->glflags &= ~G3D_FLAG_GL_SHININESS;
175}
176
177/*
178 * View->Two-sided Faces
179 */
180
181void gui_on_twosided_cb(GtkWidget *widget, gpointer user_data)
182{
183 G3DViewer *viewer;
184
185 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
186 g_assert(viewer);
187
188 gl_set_twoside(
189 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
190}
191
192/*
193 * View->Textures
194 */
195
196void gui_on_textures_cb(GtkWidget *widget, gpointer user_data)
197{
198 G3DViewer *viewer;
199
200 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
201 g_assert(viewer);
202
203 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
204 viewer->glflags |= G3D_FLAG_GL_TEXTURES;
205 else
206 viewer->glflags &= ~G3D_FLAG_GL_TEXTURES;
207}
208
209/*
210 * View->Specular Lighting
211 */
212
213void gui_on_specular_cb(GtkWidget *widget, gpointer user_data)
214{
215 G3DViewer *viewer;
216
217 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
218 g_assert(viewer);
219
220 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
221 viewer->glflags |= G3D_FLAG_GL_SPECULAR;
222 else
223 viewer->glflags &= ~G3D_FLAG_GL_SPECULAR;
224}
225
226/*
227 * View->Wireframe
228 */
229
230void gui_on_wireframe_cb(GtkWidget *widget, gpointer user_data)
231{
232 G3DViewer *viewer;
233
234 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
235 g_assert(viewer);
236
237 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
238 {
239 glPolygonMode(GL_FRONT, GL_LINE);
240 glPolygonMode(GL_BACK, GL_LINE);
241 }
242 else
243 {
244 glPolygonMode(GL_FRONT, GL_FILL);
245 glPolygonMode(GL_BACK, GL_FILL);
246 }
247}
248
249/*
250 * View->Background Color
251 */
252
253void gui_on_bgcolor_cb(GtkWidget *widget, gpointer user_data)
254{
255 G3DViewer *viewer;
256 GtkWidget *colorsel, *colordialog;
257 GdkColor color;
258 gint retval;
259
260 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
261 g_assert(viewer != NULL);
262
263 colorsel = glade_xml_get_widget(viewer->interface.xml, "cs_background");
264 colordialog = glade_xml_get_widget(viewer->interface.xml, "color_dialog");
265
266 /* set active background color */
267 color.red = viewer->bgcolor[0] * 0xFFFF;
268 color.green = viewer->bgcolor[1] * 0xFFFF;
269 color.blue = viewer->bgcolor[2] * 0xFFFF;
270 gtk_color_selection_set_previous_color(GTK_COLOR_SELECTION(colorsel),
271 &color);
272 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel),
273 &color);
274
275 retval = gtk_dialog_run(GTK_DIALOG(colordialog));
276 gtk_widget_hide(colordialog);
277 if(retval == GTK_RESPONSE_CANCEL)
278 {
279 gtk_color_selection_get_previous_color(GTK_COLOR_SELECTION(colorsel),
280 &color);
281 viewer->bgcolor[0] = (gdouble)color.red / 65536.0;
282 viewer->bgcolor[1] = (gdouble)color.green / 65536.0;
283 viewer->bgcolor[2] = (gdouble)color.blue / 65536.0;
284
285 glarea_update(viewer->interface.glarea);
286 }
287}
288
289/*
290 * Help->Info
291 */
292
293void gui_on_help_info_cb(GtkWidget *widget, gpointer user_data)
294{
295 G3DViewer *viewer;
296 GtkWidget *info_dialog;
297
298 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
299 g_assert(viewer != NULL);
300
301 info_dialog = glade_xml_get_widget(viewer->interface.xml, "info_dialog");
302
303 gtk_widget_show_all(info_dialog);
304}
305
306/*
307 * ColorDialog: color changed
308 */
309void gui_color_changed_cb(GtkColorSelection *colorsel,
310 gpointer user_data)
311{
312 G3DViewer *viewer;
313 GdkColor color;
314
315 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(colorsel), "viewer");
316 g_assert(viewer != NULL);
317
318 gtk_color_selection_get_current_color(colorsel, &color);
319 viewer->bgcolor[0] = (gdouble)color.red / 65536.0;
320 viewer->bgcolor[1] = (gdouble)color.green / 65536.0;
321 viewer->bgcolor[2] = (gdouble)color.blue / 65536.0;
322
323#if DEBUG > 4
324 g_printerr("D: gui_color_changed_cb: color %.2f, %.2f, %.2f\n",
325 viewer->bgcolor[0],
326 viewer->bgcolor[1],
327 viewer->bgcolor[2]);
328#endif
329
330 glarea_update(viewer->interface.glarea);
331}
332
333/*
334 * Screenshot
335 */
336void gui_on_screenshot_cb(GtkWidget *widget, gpointer user_data)
337{
338 G3DViewer *viewer;
339 gchar *filename, *basename;
340 guint32 width, height;
341
342 viewer = (G3DViewer *)g_object_get_data(G_OBJECT(widget), "viewer");
343 g_assert(viewer);
344
345 /* don't screenshot empty window */
346 if(viewer->filename == NULL)
347 return;
348
349 width = viewer->interface.glarea->allocation.width;
350 height = viewer->interface.glarea->allocation.height;
351
352 basename = g_path_get_basename(viewer->filename);
353 filename = g_strdup_printf("g3dviewer-screenshot-%s.png", basename);
354 g_free(basename);
355
356
357
358 if(screenshot_save(filename, width, height))
359 g_print("screenshot \"%s\" saved.\n", filename);
360 else
361 g_printerr("failed saving screenshot \"%s\".\n", filename);
362
363 g_free(filename);
364}