]> Pileus Git - grits/blobdiff - examples/gl/gl.c
Add support for GTK 3
[grits] / examples / gl / gl.c
index 378fd9a65ae884b1e72d7e81fa7ec98ee3f77ff7..1ece4c2d84ebcbf5fdf58196177a465b895abce8 100644 (file)
@@ -13,7 +13,7 @@
  ************************/
 #if defined(SYS_CAIRO)
 gpointer setup(GtkWidget *widget) { return NULL; }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, gpointer data, gpointer user_data)
 {
        GtkAllocation alloc;
        gtk_widget_get_allocation(widget, &alloc);
@@ -50,7 +50,7 @@ gpointer setup(GtkWidget *widget)
                        glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
        return NULL;
 }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, gpointer data, gpointer user_data)
 {
        GtkAllocation alloc;
        gtk_widget_get_allocation(widget, &alloc);
@@ -80,7 +80,7 @@ gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
 #include <gdk/gdkx.h>
 void realize(GtkWidget *widget, gpointer user_data)
 {
-      gdk_window_ensure_native(gtk_widget_get_window(widget));
+       gdk_window_ensure_native(gtk_widget_get_window(widget));
 }
 gpointer setup(GtkWidget *widget)
 {
@@ -98,19 +98,24 @@ gpointer setup(GtkWidget *widget)
                                GLX_DEPTH_SIZE,  1,
                                None};
        XVisualInfo *xvinfo  = glXChooseVisual(xdisplay, nscreen, attribs);
-       GLXContext   context = glXCreateContext(xdisplay, xvinfo, 0, False);
+       GLXContext   context = glXCreateContext(xdisplay, xvinfo, 0, True);
 
-       /* Fix up colormap */
+       /* Fix up visual/colormap */
+#if GTK_CHECK_VERSION(3,0,0)
+       GdkVisual *visual = gdk_x11_screen_lookup_visual(screen, xvinfo->visualid);
+       gtk_widget_set_visual(widget, visual);
+#else
        GdkVisual   *visual  = gdk_x11_screen_lookup_visual(screen, xvinfo->visualid);
        GdkColormap *cmap    = gdk_colormap_new(visual, FALSE);
        gtk_widget_set_colormap(widget, cmap);
+#endif
 
        /* Disable GTK double buffering */
        gtk_widget_set_double_buffered(widget, FALSE);
 
        return context;
 }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, GLXContext context)
+gboolean expose(GtkWidget *widget, gpointer data, GLXContext context)
 {
        /* Make current */
        Display     *xdisplay = GDK_SCREEN_XDISPLAY(gdk_screen_get_default());
@@ -168,7 +173,7 @@ gpointer setup(GtkWidget *widget)
        gtk_widget_set_double_buffered(widget, FALSE);
        return FALSE;
 }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, gpointer data, gpointer user_data)
 {
        GtkWidget *toplevel = gtk_widget_get_toplevel(widget);
        GdkWindow *window   = gtk_widget_get_window(widget);
@@ -236,6 +241,8 @@ gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
  * Mac OSX implementation *
  **************************/
 #elif defined(SYS_MAC)
+#include <OpenGL/gl.h>
+#include <OpenGL/glu.h>
 #include <gdk/gdkquartz.h>
 gpointer setup(GtkWidget *widget)
 {
@@ -268,7 +275,7 @@ gboolean configure(GtkWidget *widget, GdkEventConfigure *event, NSOpenGLContext
        [ctx  update];
        return FALSE;
 }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, NSOpenGLContext *ctx)
+gboolean expose(GtkWidget *widget, gpointer data, NSOpenGLContext *ctx)
 {
        gdk_window_ensure_native(gtk_widget_get_window(widget));
 
@@ -302,7 +309,7 @@ gboolean expose(GtkWidget *widget, GdkEventExpose *event, NSOpenGLContext *ctx)
  ****************************/
 #else
 gpointer setup(GtkWidget *widget) { return NULL; }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, gpointer data, gpointer user_data)
 {
        g_message("unimplemented");
        return FALSE;
@@ -316,7 +323,7 @@ gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
  ***************/
 gboolean key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
 {
-       if (event->keyval == GDK_q)
+       if (event->keyval == GDK_KEY_q)
                gtk_main_quit();
        return FALSE;
 }
@@ -324,7 +331,7 @@ int main(int argc, char **argv)
 {
        gtk_init_check(&argc, &argv);
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-       GtkWidget *box    = gtk_vbox_new(FALSE, 5);
+       GtkWidget *box    = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
        GtkWidget *draw   = gtk_drawing_area_new();
        GtkWidget *label  = gtk_label_new("Hello, World");
        GtkWidget *button = gtk_button_new_with_label("Hello, World");
@@ -332,7 +339,11 @@ int main(int argc, char **argv)
        g_signal_connect(window, "destroy",         G_CALLBACK(gtk_main_quit), NULL);
        g_signal_connect(window, "key-press-event", G_CALLBACK(key_press),     NULL);
        //g_signal_connect(draw,   "configure-event", G_CALLBACK(configure),     data);
+#if GTK_CHECK_VERSION(3,0,0)
+       g_signal_connect(draw,   "draw",            G_CALLBACK(expose),        data);
+#else
        g_signal_connect(draw,   "expose-event",    G_CALLBACK(expose),        data);
+#endif
        gtk_widget_set_size_request(draw,   300, 300);
        gtk_widget_set_size_request(button, -1,  50);
        gtk_box_pack_start(GTK_BOX(box), label,  FALSE, TRUE, 0);