int main (int argc, char** argv) { gtk_init(&argc, &argv); _engine.window = GTK_WIDGET(gtk_window_new(GTK_WINDOW_TOPLEVEL)); gtk_window_set_default_size(GTK_WINDOW(_engine.window), 800, 600); gtk_window_set_title(GTK_WINDOW(_engine.window), "OpenGL ES2 in GTK3 application"); gtk_widget_show_all(_engine.window); _egl_init(&_engine); _s52_init(&_engine); gtk_widget_set_app_paintable (_engine.window, TRUE ); gtk_widget_set_double_buffered (_engine.window, FALSE); gtk_widget_set_redraw_on_allocate(_engine.window, TRUE ); g_signal_connect(G_OBJECT(_engine.window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(_engine.window), "draw", G_CALLBACK(_s52_draw_cb), &_engine); g_signal_connect(G_OBJECT(_engine.window), "key_release_event", G_CALLBACK(key_release_event), NULL); g_signal_connect(G_OBJECT(_engine.window), "configure_event", G_CALLBACK(configure_event), NULL); g_timeout_add(500, step, gtk_widget_get_window(_engine.window)); // 0.5 sec gtk_main(); _s52_done(&_engine); _egl_done(&_engine); g_print("%s .. done\n", argv[0]); return 0; }
static gboolean _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) { (void)widget; (void)event; (void)data; //g_print("_configure_event\n"); // FIXME: find the new screen size //GtkAllocation allocation; //gtk_widget_get_allocation(GTK_WIDGET(widget), &allocation); //_engine.width = allocation.width; //_engine.height = allocation.height; //gtk_widget_get_allocation(GTK_WIDGET(_engine.window), &allocation); //gtk_widget_size_allocate(GTK_WIDGET(_engine.window), &allocation); //GtkRequisition requisition; //gtk_widget_get_child_requisition(widget, &requisition); //* if (TRUE == _engine.do_S52init) { g_print("s52egl:configure_event()\n"); _egl_init(&_engine); _s52_init(&_engine); _engine.do_S52init = FALSE; } _s52_computeView(&_engine.state); S52_setView(_engine.state.cLat, _engine.state.cLon, _engine.state.rNM, _engine.state.north); S52_setViewPort(0, 0, _engine.width, _engine.height); _engine.do_S52draw = TRUE; //*/ return TRUE; }