GTK_DOC_CHECK(1.9)
# Check for required packages
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.14 gobject-2.0 gthread-2.0 gmodule-2.0)
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.32 gobject-2.0 gthread-2.0 gmodule-2.0)
PKG_CHECK_MODULES(CAIRO, cairo)
-PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.16)
PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.26)
+# Check for gtk 3
+AC_ARG_ENABLE([gtk3],
+ AS_HELP_STRING([--enable-gtk3], [Build with gtk3 support]))
+AS_IF([test "$enable_gtk3" = "yes"],
+ [PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.0)],
+ [PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.18)])
+AS_IF([test "$enable_gtk3" = "yes"],
+ [GTK_VERSION=gtk+-3.0],
+ [GTK_VERSION=gtk+-2.0])
+AC_SUBST(GTK_VERSION)
+
# Check for glut for example plugin
AC_CHECK_LIB(glut, glutSolidTeapot, GLUT_LIBS="-lglut")
AM_CONDITIONAL(HAVE_GLUT, test "$GLUT_LIBS" != "")
XVisualInfo *xvinfo = glXChooseVisual(xdisplay, nscreen, attribs);
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);
{
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");
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);
-PKGS=gtk+-2.0
+PKGS=gtk+-3.0
PROGS=gl
# Cairo
--- /dev/null
+#include <gtk/gtk.h>
+
+#if ! GTK_CHECK_VERSION(3,0,0)
+static inline GtkWidget *gtk_box_new(GtkOrientation orientation, gint spacing)
+{
+ return orientation == GTK_ORIENTATION_HORIZONTAL
+ ? gtk_hbox_new(0, spacing)
+ : gtk_vbox_new(0, spacing);
+}
+#endif
#include "grits.h"
+#include "compat.h"
static GritsPrefs *prefs;
static GritsPlugins *plugins;
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *menu = gtk_ui_manager_get_widget(manager, "/Menu");
GtkWidget *notebook = gtk_notebook_new();
- GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+ GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_box_pack_start(GTK_BOX(vbox), menu, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(viewer), TRUE, TRUE, 0);
/* Connect signals and idle functions now that opengl is fully initialized */
gtk_widget_add_events(GTK_WIDGET(opengl), GDK_KEY_PRESS_MASK);
g_signal_connect(opengl, "configure-event", G_CALLBACK(_set_projection), NULL);
+#if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(opengl, "draw", G_CALLBACK(on_expose), NULL);
+#else
g_signal_connect(opengl, "expose-event", G_CALLBACK(on_expose), NULL);
+#endif
g_signal_connect(opengl, "key-press-event", G_CALLBACK(on_key_press), NULL);
#include "grits.h"
+#include "compat.h"
+
GritsPrefs *prefs = NULL;
GritsPlugins *plugins = NULL;
GritsViewer *viewer = NULL;
viewer = grits_opengl_new(plugins, prefs);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+ GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
GtkWidget *config = gtk_notebook_new();
g_signal_connect(window, "delete-event", G_CALLBACK(on_delete), NULL);
g_signal_connect(window, "key-press-event", G_CALLBACK(on_key_press), NULL);
gtk_widget_show_all(config);
gtk_main();
- gdk_display_close(gdk_display_get_default());
+ //gdk_display_close(gdk_display_get_default());
prefs = NULL;
plugins = NULL;
Name: Grits
Description: Grits is a Virtual Globe library
Version: @VERSION@
-Requires: gmodule-2.0 gtk+-2.0 libsoup-2.4
+Requires: gmodule-2.0 libsoup-2.4 @GTK_VERSION@
Libs: -L${libdir} -lgrits @GL_LIBS@
Cflags: -I${includedir}/grits @GL_CFLAGS@
g_object_set_data(G_OBJECT(widget), "glcontext", context);
- /* 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);
g_object_unref(cmap);
+#endif
XFree(xvinfo);
/* Disable GTK double buffering */
/* Call before widget is realized */
void gtk_gl_enable(GtkWidget *widget);
-/* Call at the start of "expose-event" */
+/* Call at the start of expose */
void gtk_gl_begin(GtkWidget *widget);
-/* Call at the end of "expose-event" */
+/* Call at the end of expose */
void gtk_gl_end(GtkWidget *widget);
/* Call when done to cleanup data */
#include "data/grits-tms.h"
#include "objects/grits-tile.h"
+#include "compat.h"
+
struct CacheState {
GtkWidget *image;
GtkWidget *status;
gtk_init(&argc, &argv);
GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- GtkWidget *vbox1 = gtk_vbox_new(FALSE, 0);
- GtkWidget *vbox2 = gtk_vbox_new(FALSE, 0);
+ GtkWidget *vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ GtkWidget *vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
GtkWidget *status = gtk_statusbar_new();
GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL);
GtkWidget *bmng_image = gtk_image_new();