From: Braden M. <br...@us...> - 2006-10-01 05:48:22
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/examples/glade In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/examples/glade Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am README share-lists.c share-lists.glade simple.c simple.glade Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: share-lists.c --- /* * share-lists.c: * Simple display list sharing example using libglade. * * written by Naofumi Yasufuku <na...@us...> */ #include <gtk/gtk.h> #include <gtk/gtkgl.h> #include <glade/glade.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> gboolean on_window1_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_main_quit (); return FALSE; } static void init_gl (GLfloat *light_diffuse) { static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glClearColor (1.0, 1.0, 1.0, 1.0); glClearDepth (1.0); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (40.0, 1.0, 1.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glTranslatef (0.0, 0.0, -3.0); } void on_drawingarea1_realize (GtkWidget *widget, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLUquadricObj *qobj; static GLfloat red[] = {1.0, 0.0, 0.0, 1.0}; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; /* Create display list #1 */ qobj = gluNewQuadric (); gluQuadricDrawStyle (qobj, GLU_FILL); glNewList (1, GL_COMPILE); gluSphere (qobj, 1.0, 20, 20); glEndList (); /* Initialize rendering context */ init_gl (red); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } gboolean on_drawingarea1_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, widget->allocation.width, widget->allocation.height); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } gboolean on_drawingarea1_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (1); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } void on_drawingarea2_realize (GtkWidget *widget, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); static GLfloat blue[] = {0.0, 0.0, 1.0, 1.0}; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; /* Initialize rendering context */ init_gl (blue); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } gboolean on_drawingarea2_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, widget->allocation.width, widget->allocation.height); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } gboolean on_drawingarea2_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (1); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } void on_button1_clicked (GtkButton *button, gpointer user_data) { gtk_main_quit (); } int main (int argc, char *argv[]) { GdkGLConfig *glconfig; GdkGLContext *glcontext; GladeXML *xml; GtkWidget *window; GtkWidget *drawingarea; /* * Init GTK+ and GtkGLExt. */ gtk_init (&argc, &argv); gtk_gl_init (&argc, &argv); /* * Configure OpenGL-capable visual. */ /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("*** Cannot find the double-buffered visual.\n"); g_print ("*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glconfig == NULL) { g_print ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } /* * Load the interface. */ xml = glade_xml_new ("share-lists.glade", NULL, NULL); /* * Connect the signals in the interface. */ glade_xml_signal_autoconnect (xml); /* * Top-level window. */ window = glade_xml_get_widget (xml, "window1"); gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE); /* * Drawing area #1. */ drawingarea = glade_xml_get_widget (xml, "drawingarea1"); /* Add OpenGL-capability to drawingarea1. */ gtk_widget_set_gl_capability (drawingarea, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); /* Get GL context. */ gtk_widget_realize (drawingarea); glcontext = gtk_widget_get_gl_context (drawingarea); /* * Drawing area #2. */ drawingarea = glade_xml_get_widget (xml, "drawingarea2"); /* Add OpenGL-capability to drawingarea2. */ gtk_widget_set_gl_capability (drawingarea, glconfig, glcontext, /* share lists */ TRUE, GDK_GL_RGBA_TYPE); /* * Show top-level window, then run. */ gtk_widget_show (window); gtk_main (); return 0; } --- NEW FILE: simple.c --- /* * simple.c: * Simple GtkGLExt example using libglade. * * written by Naofumi Yasufuku <na...@us...> */ #include <gtk/gtk.h> #include <gtk/gtkgl.h> #include <glade/glade.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> gboolean on_window1_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_main_quit (); return FALSE; } void on_drawingarea1_realize (GtkWidget *widget, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLUquadricObj *qobj; static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; qobj = gluNewQuadric (); gluQuadricDrawStyle (qobj, GLU_FILL); glNewList (1, GL_COMPILE); gluSphere (qobj, 1.0, 20, 20); glEndList (); glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glClearColor (1.0, 1.0, 1.0, 1.0); glClearDepth (1.0); glViewport (0, 0, widget->allocation.width, widget->allocation.height); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (40.0, 1.0, 1.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glTranslatef (0.0, 0.0, -3.0); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } gboolean on_drawingarea1_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, widget->allocation.width, widget->allocation.height); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } gboolean on_drawingarea1_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (1); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } void on_button1_clicked (GtkButton *button, gpointer user_data) { gtk_main_quit (); } int main (int argc, char *argv[]) { GdkGLConfig *glconfig; GladeXML *xml; GtkWidget *window; GtkWidget *drawingarea; /* * Init GTK+ and GtkGLExt. */ gtk_init (&argc, &argv); gtk_gl_init (&argc, &argv); /* * Configure OpenGL-capable visual. */ /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("*** Cannot find the double-buffered visual.\n"); g_print ("*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glconfig == NULL) { g_print ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } /* * Load the interface. */ xml = glade_xml_new ("simple.glade", NULL, NULL); /* * Connect the signals in the interface. */ glade_xml_signal_autoconnect (xml); /* * Top-level window. */ window = glade_xml_get_widget (xml, "window1"); gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE); /* * Drawing area. */ drawingarea = glade_xml_get_widget (xml, "drawingarea1"); /* Add OpenGL-capability to drawingarea1. */ gtk_widget_set_gl_capability (drawingarea, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); /* * Show top-level window, then run. */ gtk_widget_show (window); gtk_main (); return 0; } --- NEW FILE: simple.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <property name="title" translatable="yes">simple</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <signal name="delete_event" handler="on_window1_delete_event" last_modification_time="Tue, 09 Sep 2003 06:39:08 GMT"/> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkDrawingArea" id="drawingarea1"> <property name="width_request">200</property> <property name="height_request">200</property> <property name="visible">True</property> <signal name="realize" handler="on_drawingarea1_realize" after="yes" last_modification_time="Tue, 09 Sep 2003 06:39:51 GMT"/> <signal name="configure_event" handler="on_drawingarea1_configure_event" after="yes" last_modification_time="Tue, 09 Sep 2003 06:39:57 GMT"/> <signal name="expose_event" handler="on_drawingarea1_expose_event" last_modification_time="Tue, 09 Sep 2003 06:40:03 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Quit</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <signal name="clicked" handler="on_button1_clicked" last_modification_time="Tue, 09 Sep 2003 06:40:26 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </glade-interface> --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/examples/glade EXTRA_DIST = \ README \ simple.glade \ simple.c \ share-lists.glade \ share-lists.c --- NEW FILE: README --- This directory contains simple GtkGLExt application examples using libglade. To build examples, type $ gcc -o simple simple.c \ `pkg-config --cflags --libs gtkglext-1.0 libglade-2.0` $ gcc -o share-lists share-lists.c \ `pkg-config --cflags --libs gtkglext-1.0 libglade-2.0` Note that "configure_event" signal handlers are connected with after="yes" (g_signal_connect_after()), because users' "configure_event" signal handers are connected before gtk_widget_set_gl_capability() by glade_xml_signal_autoconnect(). --- NEW FILE: share-lists.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <property name="title" translatable="yes">share-lists</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <signal name="delete_event" handler="on_window1_delete_event" last_modification_time="Tue, 09 Sep 2003 07:40:26 GMT"/> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkHBox" id="hbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkDrawingArea" id="drawingarea1"> <property name="width_request">200</property> <property name="height_request">200</property> <property name="visible">True</property> <signal name="realize" handler="on_drawingarea1_realize" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:00 GMT"/> <signal name="configure_event" handler="on_drawingarea1_configure_event" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:06 GMT"/> <signal name="expose_event" handler="on_drawingarea1_expose_event" last_modification_time="Tue, 09 Sep 2003 07:41:13 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkVSeparator" id="vseparator1"> <property name="visible">True</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkDrawingArea" id="drawingarea2"> <property name="width_request">200</property> <property name="height_request">200</property> <property name="visible">True</property> <signal name="realize" handler="on_drawingarea2_realize" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:40 GMT"/> <signal name="configure_event" handler="on_drawingarea2_configure_event" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:49 GMT"/> <signal name="expose_event" handler="on_drawingarea2_expose_event" last_modification_time="Tue, 09 Sep 2003 07:41:59 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Quit</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <signal name="clicked" handler="on_button1_clicked" last_modification_time="Tue, 09 Sep 2003 07:42:07 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </glade-interface> |