55 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
56 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
59 float ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
60 float diffuse[] = {0.5f, 0.5f, 0.5f, 1.0f};
61 float position[] = {0.0f, 3.0f, 3.0f, 0.0f};
63 float lmodel_ambient[] = {0.2f, 0.2f, 0.2f, 1.0f};
64 float local_view[] = {0.0f};
67 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
73 glClear(GL_COLOR_BUFFER_BIT);
76 glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
77 glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
78 glLightfv(GL_LIGHT0, GL_POSITION,
position);
79 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
80 glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
84 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
85 gdk_gl_drawable_gl_end(gldrawable);
101 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
102 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
103 view->
w = widget->allocation.width;
104 view->
h = widget->allocation.height;
110 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
114 glGetIntegerv(GL_VIEWPORT, vPort);
116 glMatrixMode(GL_PROJECTION);
118 if (widget->allocation.width > 1)
132 glMatrixMode(GL_MODELVIEW);
133 gdk_gl_drawable_gl_end(gldrawable);
149 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
150 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
153 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
155 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
159 if (gdk_gl_drawable_is_double_buffered(gldrawable))
160 gdk_gl_drawable_swap_buffers(gldrawable);
163 gdk_gl_drawable_gl_end(gldrawable);
183 if (
view->
g == 0)
return FALSE;
191 if (event->button == 1)
194 if (event->button == 3)
196 if (event->button == 2)
222 if (event->button == 1 || event->button == 2 || event->button == 3)
257 if (seconds > 0.005) {
259 if (event->direction == 0)
261 if (event->direction == 1)
280 float x = (float) event->x;
281 float y = (float) event->y;
303 gdk_window_invalidate_rect(widget->window, &widget->allocation,FALSE);
314 GdkGLConfig *glconfig;
316 glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB |
319 if (glconfig ==
NULL) {
320 g_print(
"\n*** Cannot find the double-buffered visual.\n");
321 g_print(
"\n*** Trying single-buffered visual.\n");
324 glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB |
326 if (glconfig ==
NULL) {
327 g_print(
"*** No appropriate OpenGL-capable visual found.\n");
350 glconfig,
NULL, TRUE, GDK_GL_RGBA_TYPE);
353 GDK_BUTTON_MOTION_MASK |
354 GDK_POINTER_MOTION_MASK |
355 GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS |
356 GDK_BUTTON_RELEASE_MASK |
357 GDK_SCROLL | GDK_VISIBILITY_NOTIFY_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK );
384 gtk_widget_add_events(glade_xml_get_widget(
xml,
"frmMain"),
385 GDK_BUTTON_MOTION_MASK |
386 GDK_POINTER_MOTION_MASK |
387 GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS |
388 GDK_BUTTON_RELEASE_MASK |
389 GDK_SCROLL | GDK_VISIBILITY_NOTIFY_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK );
392 g_signal_connect(G_OBJECT(glade_xml_get_widget(
xml,
"frmMain")),
"key_release_event", G_CALLBACK(
key_release_event),
NULL);
393 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)
void init_arcBall(ArcBall_t *a, 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)