54static void realize(GtkWidget *widget,
void *data) {
57 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
58 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
61 float ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
62 float diffuse[] = {0.5f, 0.5f, 0.5f, 1.0f};
63 float position[] = {0.0f, 3.0f, 3.0f, 0.0f};
65 float lmodel_ambient[] = {0.2f, 0.2f, 0.2f, 1.0f};
66 float local_view[] = {0.0f};
69 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
75 glClear(GL_COLOR_BUFFER_BIT);
78 glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
79 glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
80 glLightfv(GL_LIGHT0, GL_POSITION,
position);
81 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
82 glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
86 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
87 gdk_gl_drawable_gl_end(gldrawable);
103 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
104 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
105 view->
w = widget->allocation.width;
106 view->
h = widget->allocation.height;
112 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
116 glGetIntegerv(GL_VIEWPORT, vPort);
118 glMatrixMode(GL_PROJECTION);
120 if (widget->allocation.width > 1)
134 glMatrixMode(GL_MODELVIEW);
135 gdk_gl_drawable_gl_end(gldrawable);
147gboolean
expose_event(GtkWidget *widget, GdkEventExpose *event,
void *data) {
151 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
152 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
155 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
157 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
161 if (gdk_gl_drawable_is_double_buffered(gldrawable))
162 gdk_gl_drawable_swap_buffers(gldrawable);
165 gdk_gl_drawable_gl_end(gldrawable);
185 if (
view->
g == 0)
return FALSE;
193 if (event->button == 1)
196 if (event->button == 3)
198 if (event->button == 2)
224 if (event->button == 1 || event->button == 2 || event->button == 3)
259 if (seconds > 0.005) {
261 if (event->direction == 0)
263 if (event->direction == 1)
282 float x = (float) event->x;
283 float y = (float) event->y;
305 gdk_window_invalidate_rect(widget->window, &widget->allocation,FALSE);
316 GdkGLConfig *glconfig;
318 glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB |
321 if (glconfig ==
NULL) {
322 g_print(
"\n*** Cannot find the double-buffered visual.\n");
323 g_print(
"\n*** Trying single-buffered visual.\n");
326 glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB |
328 if (glconfig ==
NULL) {
329 g_print(
"*** No appropriate OpenGL-capable visual found.\n");
352 glconfig,
NULL, TRUE, GDK_GL_RGBA_TYPE);
355 GDK_BUTTON_MOTION_MASK |
356 GDK_POINTER_MOTION_MASK |
357 GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS |
358 GDK_BUTTON_RELEASE_MASK |
359 GDK_SCROLL | GDK_VISIBILITY_NOTIFY_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK );
386 gtk_widget_add_events(glade_xml_get_widget(
xml,
"frmMain"),
387 GDK_BUTTON_MOTION_MASK |
388 GDK_POINTER_MOTION_MASK |
389 GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS |
390 GDK_BUTTON_RELEASE_MASK |
391 GDK_SCROLL | GDK_VISIBILITY_NOTIFY_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK );
394 g_signal_connect(G_OBJECT(glade_xml_get_widget(
xml,
"frmMain")),
"key_release_event", G_CALLBACK(
key_release_event),
NULL);
395 g_signal_connect(G_OBJECT(glade_xml_get_widget(
xml,
"frmMain")),
"key_press_event", G_CALLBACK(
key_press_event),
NULL);
void appmouse_drag(ViewInfo *v, int x, int y)
void appmouse_key_release(ViewInfo *v)
void appmouse_move(ViewInfo *v, int x, int y)
void appmouse_key_press(ViewInfo *v, int key)
void appmouse_middle_click_down(ViewInfo *v, int x, int y)
void appmouse_left_click_down(ViewInfo *v, int x, int y)
void appmouse_right_click_down(ViewInfo *v, int x, int y)
void appmouse_up(ViewInfo *v, int x, int y)
ArcBall_t init_arcBall(float NewWidth, float NewHeight)
static NORETURN void graphviz_exit(int status)
void glcompsetUpdateBorder(glCompSet *s, int w, int h)
int glexpose_main(ViewInfo *vi)
static gboolean button_press_event(GtkWidget *widget, GdkEventButton *event, void *data)
static gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event, void *data)
static void realize(GtkWidget *widget, void *data)
static gboolean button_release_event(GtkWidget *widget, GdkEventButton *event, void *data)
static gboolean motion_notify_event(GtkWidget *widget, GdkEventMotion *event, void *data)
static gboolean scroll_event(GtkWidget *widget, GdkEventScroll *event, void *data)
gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, void *data)
static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event, void *data)
static glMouseButtonType getGlCompMouseType(int n)
static gboolean key_release_event(GtkWidget *widget, GdkEventKey *event, void *data)
GdkGLConfig * configure_gl(void)
void create_window(GdkGLConfig *glconfig, GtkWidget *vbox)
type-generic dynamically expanding list
#define LIST_IS_EMPTY(list)
#define GL_VIEWPORT_FACTOR
GtkWidget * drawing_area
open gl canvas
glcompmouseupfunc_t mouseup
glcompmousedownfunc_t mousedown
glcompmouseoverfunc_t mouseover
glCompCallBacks functions
void close_graph(ViewInfo *vi)
int add_graph_to_viewport_from_file(char *fileName)