# 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(CAIRO, cairo)
-PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.16)
+PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.0)
PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.26)
# Check for glut for example plugin
*.o
*.so
*.exe
+gl/gl
info/info
interp/interp
plugin/teapot
************************/
#if defined(SYS_CAIRO)
gpointer setup(GtkWidget *widget) { return NULL; }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, void *cairo, gpointer user_data)
{
GtkAllocation alloc;
gtk_widget_get_allocation(widget, &alloc);
glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
return NULL;
}
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, void *cairo, gpointer user_data)
{
GtkAllocation alloc;
gtk_widget_get_allocation(widget, &alloc);
#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)
{
XVisualInfo *xvinfo = glXChooseVisual(xdisplay, nscreen, attribs);
GLXContext context = glXCreateContext(xdisplay, xvinfo, 0, True);
- /* Fix up colormap */
- GdkVisual *visual = gdk_x11_screen_lookup_visual(screen, xvinfo->visualid);
- GdkColormap *cmap = gdk_colormap_new(visual, FALSE);
- gtk_widget_set_colormap(widget, cmap);
+ /* Fix up visual */
+ GdkVisual *visual = gdk_x11_screen_lookup_visual(screen, xvinfo->visualid);
+ gtk_widget_set_visual(widget, visual);
/* 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, void *cairo, GLXContext context)
{
/* Make current */
Display *xdisplay = GDK_SCREEN_XDISPLAY(gdk_screen_get_default());
gtk_widget_set_double_buffered(widget, FALSE);
return FALSE;
}
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, void *cairo, gpointer user_data)
{
GtkWidget *toplevel = gtk_widget_get_toplevel(widget);
GdkWindow *window = gtk_widget_get_window(widget);
[ctx update];
return FALSE;
}
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, NSOpenGLContext *ctx)
+gboolean expose(GtkWidget *widget, void *cairo, NSOpenGLContext *ctx)
{
gdk_window_ensure_native(gtk_widget_get_window(widget));
****************************/
#else
gpointer setup(GtkWidget *widget) { return NULL; }
-gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+gboolean expose(GtkWidget *widget, void *cairo, gpointer user_data)
{
g_message("unimplemented");
return FALSE;
***************/
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;
}
{
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);
- g_signal_connect(draw, "expose-event", G_CALLBACK(expose), data);
+ g_signal_connect(draw, "draw", G_CALLBACK(expose), data);
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
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);
int main(int argc, char **argv)
{
- gdk_threads_init();
gtk_init(&argc, &argv);
prefs = grits_prefs_new(NULL, NULL);
plugins = grits_plugins_new(g_getenv("GRITS_PLUGIN_PATH"), prefs);
viewer = grits_opengl_new(plugins, prefs);
- gdk_threads_enter();
+ //gdk_threads_enter();
GtkWidget *notebook = NULL;
GtkUIManager *manager = setup_actions();
grits_plugins_free(plugins);
g_object_unref(prefs);
- gdk_threads_leave();
+ //gdk_threads_leave();
g_debug("GritsDemo: main - refs=%d,%d",
G_OBJECT(manager)->ref_count,
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- double width = GTK_WIDGET(opengl)->allocation.width;
- double height = GTK_WIDGET(opengl)->allocation.height;
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
+ double width = alloc.width;
+ double height = alloc.height;
double ang = atan((height/2)/FOV_DIST)*2;
double atmos = 100000;
double near = MAX(elev*0.75 - atmos, 50); // View 100km of atmosphere
static gboolean run_mouse_move(GritsOpenGL *opengl, GdkEventMotion *event)
{
- gdouble height = GTK_WIDGET(opengl)->allocation.height;
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
+
gdouble gl_x = event->x;
- gdouble gl_y = height - event->y;
+ gdouble gl_y = alloc.height - event->y;
gdouble delta = opengl->pickmode ? 200 : 2;
if (opengl->pickmode) {
/* Start ortho */
if (level->num >= GRITS_LEVEL_HUD) {
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity();
glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity();
- gint win_width = GTK_WIDGET(opengl)->allocation.width;
- gint win_height = GTK_WIDGET(opengl)->allocation.height;
- glOrtho(0, win_width, win_height, 0, 1000, -1000);
+ glOrtho(0, alloc.width, alloc.height, 0, 1000, -1000);
}
/* Draw unsorted objects without depth testing,
nunsorted, nsorted);
}
-static gboolean on_expose(GritsOpenGL *opengl, GdkEventExpose *event, gpointer _)
+static gboolean on_draw(GritsOpenGL *opengl, void *cairo, gpointer _)
{
- g_debug("GritsOpenGL: on_expose - begin");
+ g_debug("GritsOpenGL: on_draw - begin");
if (opengl->pickmode)
- return run_mouse_move(opengl, (GdkEventMotion*)event);
+ return run_mouse_move(opengl, &(GdkEventMotion){});
if (opengl->mouse_queue.type != GDK_NOTHING) {
run_mouse_move(opengl, &opengl->mouse_queue);
gtk_gl_end(GTK_WIDGET(opengl));
- g_debug("GritsOpenGL: on_expose - end\n");
+ g_debug("GritsOpenGL: on_draw - end\n");
return FALSE;
}
static gboolean on_key_press(GritsOpenGL *opengl, GdkEventKey *event, gpointer _)
{
g_debug("GritsOpenGL: on_key_press - key=%x, state=%x, plus=%x",
- event->keyval, event->state, GDK_plus);
+ event->keyval, event->state, GDK_KEY_plus);
guint kv = event->keyval;
/* Testing */
- if (kv == GDK_w) {
+ if (kv == GDK_KEY_w) {
opengl->wireframe = !opengl->wireframe;
grits_viewer_queue_draw(GRITS_VIEWER(opengl));
}
- if (kv == GDK_p) {
+ if (kv == GDK_KEY_p) {
opengl->pickmode = !opengl->pickmode;
grits_viewer_queue_draw(GRITS_VIEWER(opengl));
}
#ifdef ROAM_DEBUG
- else if (kv == GDK_n) roam_sphere_split_one(opengl->sphere);
- else if (kv == GDK_p) roam_sphere_merge_one(opengl->sphere);
- else if (kv == GDK_r) roam_sphere_split_merge(opengl->sphere);
- else if (kv == GDK_u) roam_sphere_update_errors(opengl->sphere);
+ else if (kv == GDK_KEY_n) roam_sphere_split_one(opengl->sphere);
+ else if (kv == GDK_KEY_p) roam_sphere_merge_one(opengl->sphere);
+ else if (kv == GDK_KEY_r) roam_sphere_split_merge(opengl->sphere);
+ else if (kv == GDK_KEY_u) roam_sphere_update_errors(opengl->sphere);
grits_viewer_queue_draw(GRITS_VIEWER(opengl));
#endif
return FALSE;
/* 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);
- g_signal_connect(opengl, "expose-event", G_CALLBACK(on_expose), NULL);
+ g_signal_connect(opengl, "draw", G_CALLBACK(on_draw), NULL);
g_signal_connect(opengl, "key-press-event", G_CALLBACK(on_key_press), NULL);
static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event,
gpointer _)
{
- if (event->keyval == GDK_q)
+ if (event->keyval == GDK_KEY_q)
return grits_shutdown(widget);
return FALSE;
}
***********/
int main(int argc, char **argv)
{
- gdk_threads_init();
gtk_init(&argc, &argv);
prefs = grits_prefs_new(NULL, NULL);
plugins = grits_plugins_new(g_getenv("GRITS_PLUGIN_PATH"), prefs);
viewer = grits_opengl_new(plugins, prefs);
- gdk_threads_enter();
+ //gdk_threads_enter();
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_threads_leave();
+ //gdk_threads_leave();
- gdk_display_close(gdk_display_get_default());
+ //gdk_display_close(gdk_display_get_default());
prefs = NULL;
plugins = NULL;
static gboolean on_key_press(GritsViewer *viewer, GdkEventKey *event, gpointer _)
{
g_debug("GritsViewer: on_key_press - key=%x, state=%x, plus=%x",
- event->keyval, event->state, GDK_plus);
+ event->keyval, event->state, GDK_KEY_plus);
double lat, lon, elev, pan;
grits_viewer_get_location(viewer, &lat, &lon, &elev);
pan = MIN(elev/(EARTH_R/2), 30);
switch (event->keyval) {
- case GDK_Left: case GDK_h: grits_viewer_pan(viewer, 0, -pan, 0); break;
- case GDK_Down: case GDK_j: grits_viewer_pan(viewer, -pan, 0, 0); break;
- case GDK_Up: case GDK_k: grits_viewer_pan(viewer, pan, 0, 0); break;
- case GDK_Right: case GDK_l: grits_viewer_pan(viewer, 0, pan, 0); break;
- case GDK_minus: case GDK_o: grits_viewer_zoom(viewer, 10./9); break;
- case GDK_plus: case GDK_i: grits_viewer_zoom(viewer, 9./10); break;
- case GDK_H: grits_viewer_rotate(viewer, 0, 0, -2); break;
- case GDK_J: grits_viewer_rotate(viewer, 2, 0, 0); break;
- case GDK_K: grits_viewer_rotate(viewer, -2, 0, 0); break;
- case GDK_L: grits_viewer_rotate(viewer, 0, 0, 2); break;
+ case GDK_KEY_Left: case GDK_KEY_h: grits_viewer_pan(viewer, 0, -pan, 0); break;
+ case GDK_KEY_Down: case GDK_KEY_j: grits_viewer_pan(viewer, -pan, 0, 0); break;
+ case GDK_KEY_Up: case GDK_KEY_k: grits_viewer_pan(viewer, pan, 0, 0); break;
+ case GDK_KEY_Right: case GDK_KEY_l: grits_viewer_pan(viewer, 0, pan, 0); break;
+ case GDK_KEY_minus: case GDK_KEY_o: grits_viewer_zoom(viewer, 10./9); break;
+ case GDK_KEY_plus: case GDK_KEY_i: grits_viewer_zoom(viewer, 9./10); break;
+ case GDK_KEY_H: grits_viewer_rotate(viewer, 0, 0, -2); break;
+ case GDK_KEY_J: grits_viewer_rotate(viewer, 2, 0, 0); break;
+ case GDK_KEY_K: grits_viewer_rotate(viewer, -2, 0, 0); break;
+ case GDK_KEY_L: grits_viewer_rotate(viewer, 0, 0, 2); break;
}
return FALSE;
}
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 gtk+-3.0 libsoup-2.4
Libs: -L${libdir} -lgrits @GL_LIBS@
Cflags: -I${includedir}/grits @GL_CFLAGS@
g_object_set_data(G_OBJECT(widget), "glcontext", context);
- /* Fix up colormap */
- 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);
+ /* Fix up visual */
+ GdkVisual *visual = gdk_x11_screen_lookup_visual(screen, xvinfo->visualid);
+ gtk_widget_set_visual(widget, visual);
XFree(xvinfo);
/* Disable GTK double buffering */
/* Call before widget is realized */
void gtk_gl_enable(GtkWidget *widget);
-/* Call at the start of "expose" */
+/* Call at the start of "draw" */
void gtk_gl_begin(GtkWidget *widget);
-/* Call at the end of "expose-event" */
+/* Call at the end of "draw" */
void gtk_gl_end(GtkWidget *widget);
/* Call when done to cleanup data */
point->lat, point->lon, point->elev,
&px, &py, &pz);
- gint win_height = GTK_WIDGET(opengl)->allocation.height;
if (pz > 1)
return;
- glTranslated(px, win_height-py, 0);
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
+ glTranslated(px, alloc.height-py, 0);
glRotatef(marker->angle, 0, 0, -1);
glTranslated(-marker->xoff, -marker->yoff, 0);
} else {
grits_viewer_get_rotation(env->viewer, &x, &y, &z);
/* Setup projection */
- gint win_width = GTK_WIDGET(opengl)->allocation.width;
- gint win_height = GTK_WIDGET(opengl)->allocation.height;
- float scale = CLAMP(MIN(win_width,win_height)/2.0 * 0.1, 40, 100);
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
+ float scale = CLAMP(MIN(alloc.width,alloc.height)/2.0 * 0.1, 40, 100);
float offset = scale + 20;
- glTranslatef(win_width - offset, offset, 0);
+ glTranslatef(alloc.width - offset, offset, 0);
/* Setup state */
glClear(GL_DEPTH_BUFFER_BIT);
/* Info */
static void info_expose(GritsCallback *compass, GritsOpenGL *opengl, gpointer _env)
{
- gint win_width = GTK_WIDGET(opengl)->allocation.width;
- gint win_height = GTK_WIDGET(opengl)->allocation.height;
+ GtkAllocation alloc;
+ gtk_widget_get_allocation(GTK_WIDGET(opengl), &alloc);
/* Create cairo surface */
guint tex = 0;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex);
glDisable(GL_CULL_FACE);
- glTranslatef(win_width - width, win_height - height, 0);
+ glTranslatef(alloc.width - width, alloc.height - height, 0);
glBegin(GL_QUADS);
glTexCoord2f(1, 0); glVertex3f(width, 0 , 0); // 0 - 3 0
glTexCoord2f(1, 1); glVertex3f(width, height, 0); // 1 - | |
{
g_debug("GritsPluginTest: on_poly_key - %d", event->keyval);
gdouble colors[0xff][3] = {
- [GDK_r] {1, 0, 0},
- [GDK_g] {0, 1, 0},
- [GDK_b] {0, 0, 1},
+ [GDK_KEY_r] {1, 0, 0},
+ [GDK_KEY_g] {0, 1, 0},
+ [GDK_KEY_b] {0, 0, 1},
};
if (event->keyval >= G_N_ELEMENTS(colors))
return FALSE;
g_message("Loading bmng image: [%s]", path);
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, NULL);
- gdk_threads_enter();
+ //gdk_threads_enter();
gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
- gdk_threads_leave();
+ //gdk_threads_leave();
g_message("Cleaning bmng up");
grits_wms_free(bmng_wms);
g_message("Loading osm image: [%s]", path);
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, NULL);
- gdk_threads_enter();
+ //gdk_threads_enter();
gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
- gdk_threads_leave();
+ //gdk_threads_leave();
g_message("Cleaning osm up");
grits_wms_free(osm_wms);
g_message("Loading osm2 image: [%s]", path);
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, NULL);
- gdk_threads_enter();
+ //gdk_threads_enter();
gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
- gdk_threads_leave();
+ //gdk_threads_leave();
g_message("Cleaning osm2 up");
grits_tms_free(osm2_tms);
gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
- if (event->keyval == GDK_q)
+ if (event->keyval == GDK_KEY_q)
gtk_main_quit();
return TRUE;
}
int main(int argc, char **argv)
{
- gdk_threads_init();
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();