int main (int argc, char *argv[]) { set_log_handlers(); wf_debug = 0; memset(&app, 0, sizeof(app)); gtk_init(&argc, &argv); if(!(glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE))){ gerr ("Cannot initialise gtkglext."); return EXIT_FAILURE; } GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); canvas = gtk_drawing_area_new(); #ifdef HAVE_GTK_2_18 gtk_widget_set_can_focus (canvas, true); #endif gtk_widget_set_size_request (canvas, 480, 64); gtk_widget_set_gl_capability (canvas, glconfig, NULL, 1, GDK_GL_RGBA_TYPE); gtk_widget_add_events (canvas, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_container_add((GtkContainer*)window, (GtkWidget*)canvas); g_signal_connect((gpointer)canvas, "realize", G_CALLBACK(on_canvas_realise), NULL); g_signal_connect((gpointer)canvas, "size-allocate", G_CALLBACK(on_allocate), NULL); g_signal_connect((gpointer)canvas, "expose_event", G_CALLBACK(on_expose), NULL); gtk_widget_show_all(window); gboolean key_press(GtkWidget* widget, GdkEventKey* event, gpointer user_data) { switch(event->keyval){ case 61: start_zoom(zoom * 1.5); break; case 45: start_zoom(zoom / 1.5); break; case KEY_Left: case KEY_KP_Left: dbg(0, "left"); break; case KEY_Right: case KEY_KP_Right: dbg(0, "right"); break; case (char)'a': toggle_animate(); break; case GDK_KP_Enter: break; case 113: exit(EXIT_SUCCESS); break; case GDK_Delete: break; default: dbg(0, "%i", event->keyval); break; } return TRUE; } g_signal_connect(window, "key-press-event", G_CALLBACK(key_press), NULL); gboolean window_on_delete(GtkWidget* widget, GdkEvent* event, gpointer user_data){ gtk_main_quit(); return false; }
static bool HandleClient(t_x11 *x11, int ID, t_gmx *gmx) { t_pulldown *pd; pd = gmx->pd; switch (ID) { /* File Menu */ case IDDUMPWIN: write_gmx(x11, gmx, IDDODUMP); break; case IDDODUMP: if (gmx->man->bAnimate) { hide_but(x11, gmx->man->vbox); } dump_it(gmx->man); if (gmx->man->bAnimate) { show_but(x11, gmx->man->vbox); } break; case IDCLOSE: case IDIMPORT: case IDEXPORT: ShowDlg(gmx->dlgs[edExport]); break; case IDDOEXPORT: write_sto_conf(gmx->confout, *gmx->man->top.name, &(gmx->man->top.atoms), gmx->man->x, NULL, gmx->man->molw->ePBC, gmx->man->box); break; case IDQUIT: show_mb(gmx, emQuit); break; case IDTERM: done_gmx(x11, gmx); return true; /* Edit Menu */ case IDEDITTOP: edit_file("topol.gmx"); break; case IDEDITCOORDS: edit_file("confin.gmx"); break; case IDEDITPARAMS: edit_file("mdparin.gmx"); break; /* Display Menu */ case IDFILTER: if (gmx->filter) { ShowDlg(gmx->dlgs[edFilter]); } break; case IDDOFILTER: do_filter(x11, gmx->man, gmx->filter); break; case IDANIMATE: check_pd_item(pd, IDANIMATE, toggle_animate(x11, gmx->man)); break; case IDLABELSOFF: no_labels(x11, gmx->man); break; case IDRESETVIEW: reset_view(gmx->man->view); ExposeWin(x11->disp, gmx->man->molw->wd.self); break; case IDPHOTO: show_mb(gmx, emNotImplemented); break; case IDBONDOPTS: ShowDlg(gmx->dlgs[edBonds]); break; case IDTHIN: set_bond_type(x11, gmx->man->molw, eBThin); break; case IDFAT: set_bond_type(x11, gmx->man->molw, eBFat); break; case IDVERYFAT: set_bond_type(x11, gmx->man->molw, eBVeryFat); break; case IDBALLS: set_bond_type(x11, gmx->man->molw, eBSpheres); break; case IDNOBOX: set_box_type(x11, gmx->man->molw, esbNone); break; case IDRECTBOX: set_box_type(x11, gmx->man->molw, esbRect); break; case IDTRIBOX: set_box_type(x11, gmx->man->molw, esbTri); break; case IDTOBOX: set_box_type(x11, gmx->man->molw, esbTrunc); break; /* Analysis Menu */ case IDBOND: case IDANGLE: case IDDIH: case IDRMS: case IDRDF: case IDENERGIES: case IDCORR: show_mb(gmx, emNotImplemented); break; /* Help Menu */ case IDHELP: show_mb(gmx, emHelp); break; case IDABOUT: show_logo(x11, gmx->logo); break; default: break; } return false; }