static gboolean _key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer data) { (void)widget; (void)data; //* switch(event->keyval) { case GDK_Left : case GDK_Right : case GDK_Up : case GDK_Down :_scroll(event); break; case GDK_equal : case GDK_plus : case GDK_minus :_rotation(event); break; case GDK_Page_Down: case GDK_Page_Up:_zoom(event); break; // case GDK_KEY_Escape:_resetView(&_engine.state); break; case GDK_r : //gtk_widget_draw(widget, NULL); break; // case GDK_KEY_h :_doRenderHelp = !_doRenderHelp; // _usage("s52gtk2"); // break; case GDK_v :g_print("%s\n", S52_version()); break; case GDK_x :_dumpParam(); break; case GDK_q :gtk_main_quit(); break; case GDK_w :_toggle(S52_MAR_TWO_SHADES); break; case GDK_s :_toggle(S52_MAR_SHALLOW_PATTERN); break; case GDK_o :_toggle(S52_MAR_SHIPS_OUTLINE); break; case GDK_l :_toggle(S52_MAR_FULL_SECTORS); break; case GDK_b :_toggle(S52_MAR_SYMBOLIZED_BND); break; case GDK_p :_toggle(S52_MAR_SYMPLIFIED_PNT); break; case GDK_n :_toggle(S52_MAR_FONT_SOUNDG); break; case GDK_u :_toggle(S52_MAR_SCAMIN); break; case GDK_i :_toggle(S52_MAR_ANTIALIAS); break; case GDK_j :_toggle(S52_MAR_QUAPNT01); break; case GDK_z :_toggle(S52_MAR_DISP_OVERLAP); break; //case GDK_1 :_toggle(S52_MAR_DISP_LAYER_LAST); break; case GDK_1 :_meterInc(S52_MAR_DISP_LAYER_LAST);break; case GDK_exclam:_meterDec(S52_MAR_DISP_LAYER_LAST);break; case GDK_2 :_inc(S52_MAR_ROT_BUOY_LIGHT); break; case GDK_3 :_toggle(S52_MAR_DISP_CRSR_POS); _toggle(S52_MAR_DISP_LEGEND); _toggle(S52_MAR_DISP_CALIB); _toggle(S52_MAR_DISP_DRGARE_PATTERN); break; case GDK_4 :_toggle(S52_MAR_DISP_GRATICULE); break; case GDK_5 :_toggle(S52_MAR_HEADNG_LINE); break; //case GDK_t :_meterInc(S52_MAR_SHOW_TEXT); break; //case GDK_T :_meterDec(S52_MAR_SHOW_TEXT); break; case GDK_t : case GDK_T :_toggle (S52_MAR_SHOW_TEXT); break; case GDK_c :_meterInc(S52_MAR_SAFETY_CONTOUR); break; case GDK_C :_meterDec(S52_MAR_SAFETY_CONTOUR); break; case GDK_d :_meterInc(S52_MAR_SAFETY_DEPTH); break; case GDK_D :_meterDec(S52_MAR_SAFETY_DEPTH); break; case GDK_a :_meterInc(S52_MAR_SHALLOW_CONTOUR);break; case GDK_A :_meterDec(S52_MAR_SHALLOW_CONTOUR);break; case GDK_e :_meterInc(S52_MAR_DEEP_CONTOUR); break; case GDK_E :_meterDec(S52_MAR_DEEP_CONTOUR); break; case GDK_f :_meterInc(S52_MAR_DISTANCE_TAGS); break; case GDK_F :_meterDec(S52_MAR_DISTANCE_TAGS); break; case GDK_g :_meterInc(S52_MAR_TIME_TAGS); break; case GDK_G :_meterDec(S52_MAR_TIME_TAGS); break; case GDK_y :_meterInc(S52_MAR_BEAM_BRG_NM); break; case GDK_Y :_meterDec(S52_MAR_BEAM_BRG_NM); break; case GDK_m :_meterInc(S52_MAR_DATUM_OFFSET); break; case GDK_M :_meterDec(S52_MAR_DATUM_OFFSET); break; //case GDK_7 :_disp(S52_MAR_DISP_CATEGORY, 'D'); break; // DISPLAYBASE //case GDK_8 :_disp(S52_MAR_DISP_CATEGORY, 'S'); break; // STANDARD //case GDK_9 :_disp(S52_MAR_DISP_CATEGORY, 'O'); break; // OTHER //case GDK_0 :_disp(S52_MAR_DISP_CATEGORY, 'A'); break; // OTHER (all) //case GDK_7 :_disp(S52_MAR_DISP_CATEGORY, 0); break; // DISPLAYBASE //case GDK_8 :_disp(S52_MAR_DISP_CATEGORY, 1); break; // STANDARD //case GDK_9 :_disp(S52_MAR_DISP_CATEGORY, 2); break; // OTHER //case GDK_0 :_disp(S52_MAR_DISP_CATEGORY, 3); break; // OTHER (all) case GDK_7 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_BASE); break; // DISPLAYBASE case GDK_8 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_STD); break; // STANDARD case GDK_9 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_OTHER); break; // OTHER case GDK_0 :_disp(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_SELECT); break; // OTHER (all) case GDK_k :_cpal(S52_MAR_COLOR_PALETTE, 1.0);break; case GDK_K :_cpal(S52_MAR_COLOR_PALETTE, -1.0);break; case GDK_6 :_meterInc(S52_MAR_DISP_WHOLIN); break; case GDK_asciicircum: case GDK_question: case GDK_caret :_meterDec(S52_MAR_DISP_WHOLIN); break; //case GDK_3 :_cpal("S52_MAR_COLOR_PALETTE", 2.0); break; // DAY_WHITEBACK //case GDK_4 :_cpal("S52_MAR_COLOR_PALETTE", 3.0); break; // DUSK //case GDK_5 :_cpal("S52_MAR_COLOR_PALETTE", 4.0); break; // NIGHT //case GDK_F1 :S52_doneCell("/home/vitaly/CHARTS/for_sasha/GB5X01SE.000"); break; //case GDK_F2 :S52_doneCell("/home/vitaly/CHARTS/for_sasha/GB5X01NE.000"); break; case GDK_F1 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_SY); break; case GDK_F2 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_LS); break; case GDK_F3 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_LC); break; case GDK_F4 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_AC); break; case GDK_F5 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_AP); break; case GDK_F6 :S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_TX); break; case GDK_F7 :_mmInc(S52_MAR_DOTPITCH_MM_X); break; case GDK_F8 :_mmInc(S52_MAR_DOTPITCH_MM_Y); break; case GDK_F9 :_toggle(S52_MAR_DISP_NODATA_LAYER); break; default: g_print("key: 0x%04x\n", event->keyval); } //*/ // redraw _engine.do_S52draw = TRUE; return TRUE; }
static int _s52_init (s52engine *engine) { if ((NULL==engine->eglDisplay) || (EGL_NO_DISPLAY==engine->eglDisplay)) { g_print("_init_S52(): no EGL display ..\n"); return FALSE; } eglQuerySurface(engine->eglDisplay, engine->eglSurface, EGL_WIDTH, &engine->width); eglQuerySurface(engine->eglDisplay, engine->eglSurface, EGL_HEIGHT, &engine->height); // return constant value EGL_UNKNOWN (-1) with Mesa eglQuerySurface(engine->eglDisplay, engine->eglSurface, EGL_HORIZONTAL_RESOLUTION, &engine->wmm); eglQuerySurface(engine->eglDisplay, engine->eglSurface, EGL_VERTICAL_RESOLUTION, &engine->hmm); { // FIXME: broken on some monitor GdkScreen *screen = NULL; gint w,h; gint wmm,hmm; screen = gdk_screen_get_default(); w = gdk_screen_get_width (screen); h = gdk_screen_get_height (screen); wmm = gdk_screen_get_width_mm (screen); hmm = gdk_screen_get_height_mm(screen); //w = 1280; //h = 1024; //w = engine->width; //h = engine->height; //wmm = 376; //hmm = 301; // wrong //hmm = 307; //g_print("_init_S52(): start -1- ..\n"); if (FALSE == S52_init(w, h, wmm, hmm, NULL)) { engine->do_S52init = FALSE; return FALSE; } //g_print("_init_S52(): start -2- ..\n"); S52_setViewPort(0, 0, w, h); } // can be called any time S52_version(); #ifdef S52_USE_EGL S52_setEGLcb((EGL_cb)_egl_beg, (EGL_cb)_egl_end, engine); #endif // read cell location fron s52.cfg //S52_loadCell(NULL, NULL); S52_loadCell("CA479017.000", NULL); S52_loadCell("SCX_CapSante.tif", NULL); S52_setMarinerParam(S52_MAR_DISP_RASTER, 1.0); // Rimouski //S52_loadCell("/home/sduclos/dev/gis/S57/riki-ais/ENC_ROOT/CA579041.000", NULL); //S52_loadCell("/home/vitaly/CHARTS/for_sasha/GB5X01SE.000", NULL); //S52_loadCell("/home/vitaly/CHARTS/for_sasha/GB5X01NE.000", NULL); // Ice - experimental //S52_loadCell("/home/sduclos/dev/gis/data/ice/East_Coast/--0WORLD.shp", NULL); // Bathy - experimental //S52_loadCell("/home/sduclos/dev/gis/data/bathy/2009_HD_BATHY_TRIALS/46307260_LOD2.merc.tif", NULL); //S52_loadCell("/home/sduclos/dev/gis/data/bathy/2009_HD_BATHY_TRIALS/46307250_LOD2.merc.tif", NULL); //S52_setMarinerParam(S52_MAR_DISP_RASTER, 1.0); // load AIS select symb. //S52_loadPLib("plib-test-priv.rle"); #ifdef S52_USE_WORLD // World data if (TRUE == S52_loadCell(PATH "/0WORLD/--0WORLD.shp", NULL)) { //S52_setMarinerParam(S52_MAR_DISP_WORLD, 0.0); // default S52_setMarinerParam(S52_MAR_DISP_WORLD, 1.0); // show world } #endif // debug - remove clutter from this symb in SELECT mode //S52_setS57ObjClassSupp("M_QUAL", TRUE); // supress display of the U pattern //S52_setS57ObjClassSupp("M_QUAL", FALSE); // displaythe U pattern S52_toggleObjClassON ("M_QUAL"); // suppression ON //S52_toggleObjClassOFF("M_QUAL"); // suppression OFF S52_loadPLib(PLIB); S52_loadPLib(COLS); // -- DEPTH COLOR ------------------------------------ S52_setMarinerParam(S52_MAR_TWO_SHADES, 0.0); // 0.0 --> 5 shades //S52_setMarinerParam(S52_MAR_TWO_SHADES, 1.0); // 1.0 --> 2 shades // sounding color //S52_setMarinerParam(S52_MAR_SAFETY_DEPTH, 10.0); S52_setMarinerParam(S52_MAR_SAFETY_DEPTH, 15.0); //S52_setMarinerParam(S52_MAR_SAFETY_CONTOUR, 10.0); S52_setMarinerParam(S52_MAR_SAFETY_CONTOUR, 3.0); //S52_setMarinerParam(S52_MAR_SHALLOW_CONTOUR, 10.0); S52_setMarinerParam(S52_MAR_SHALLOW_CONTOUR, 5.0); //S52_setMarinerParam(S52_MAR_DEEP_CONTOUR, 11.0); S52_setMarinerParam(S52_MAR_DEEP_CONTOUR, 10.0); //S52_setMarinerParam(S52_MAR_SHALLOW_PATTERN, 0.0); // (default off) S52_setMarinerParam(S52_MAR_SHALLOW_PATTERN, 1.0); // ON // -- DEPTH COLOR ------------------------------------ S52_setMarinerParam(S52_MAR_SHIPS_OUTLINE, 1.0); S52_setMarinerParam(S52_MAR_HEADNG_LINE, 1.0); S52_setMarinerParam(S52_MAR_BEAM_BRG_NM, 1.0); //S52_setMarinerParam(S52_MAR_FULL_SECTORS, 0.0); // (default ON) //S52_setMarinerParam(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_BASE); // always ON //S52_setMarinerParam(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_STD); // default //S52_setMarinerParam(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_OTHER); //S52_setMarinerParam(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_BASE | S52_MAR_DISP_CATEGORY_STD | S52_MAR_DISP_CATEGORY_OTHER); //S52_setMarinerParam(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_STD | S52_MAR_DISP_CATEGORY_OTHER); S52_setMarinerParam(S52_MAR_DISP_CATEGORY, S52_MAR_DISP_CATEGORY_SELECT); //S52_setMarinerParam(S52_MAR_DISP_LAYER_LAST, S52_MAR_DISP_LAYER_LAST_NONE ); //S52_setMarinerParam(S52_MAR_DISP_LAYER_LAST, S52_MAR_DISP_LAYER_LAST_STD ); // default //S52_setMarinerParam(S52_MAR_DISP_LAYER_LAST, S52_MAR_DISP_LAYER_LAST_OTHER); S52_setMarinerParam(S52_MAR_DISP_LAYER_LAST, S52_MAR_DISP_LAYER_LAST_SELECT); // All Mariner (Standard(default) + Other) //S52_setMarinerParam(S52_MAR_COLOR_PALETTE, 0.0); // DAY (default) //S52_setMarinerParam(S52_MAR_COLOR_PALETTE, 1.0); // DAY DARK S52_setMarinerParam(S52_MAR_COLOR_PALETTE, 5.0); // DAY 60 //S52_setMarinerParam(S52_MAR_COLOR_PALETTE, 6.0); // DUSK 60 //S52_setMarinerParam(S52_MAR_SCAMIN, 1.0); // ON (default) //S52_setMarinerParam(S52_MAR_SCAMIN, 0.0); // debug OFF - show all // remove QUAPNT01 symbole (black diagonal and a '?') S52_setMarinerParam(S52_MAR_QUAPNT01, 0.0); // off S52_setMarinerParam(S52_MAR_DISP_CALIB, 1.0); // --- TEXT ---------------------------------------------- S52_setMarinerParam(S52_MAR_SHOW_TEXT, 1.0); //S52_setMarinerParam(S52_MAR_SHOW_TEXT, 0.0); S52_setTextDisp(0, 100, TRUE); // show all text //S52_setTextDisp(0, 100, FALSE); // no text // cell's legend //S52_setMarinerParam(S52_MAR_DISP_LEGEND, 1.0); // show S52_setMarinerParam(S52_MAR_DISP_LEGEND, 0.0); // hide (default) // ------------------------------------------------------- //S52_setMarinerParam(S52_MAR_DISP_DRGARE_PATTERN, 0.0); // OFF //S52_setMarinerParam(S52_MAR_DISP_DRGARE_PATTERN, 1.0); // ON (default) S52_setMarinerParam(S52_MAR_ANTIALIAS, 1.0); // on //S52_setMarinerParam(S52_MAR_ANTIALIAS, 0.0); // off // a delay of 0.0 to tell to not delete old AIS (default +600 sec old) //S52_setMarinerParam(S52_MAR_DEL_VESSEL_DELAY, 0.0); // debug - use for timing redering //S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_SY); //S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_LS); //S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_LC); //S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_AC); //S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_AP); //S52_setMarinerParam(S52_CMD_WRD_FILTER, S52_CMD_WRD_FILTER_TX); // if first start find where we are looking _s52_computeView(&engine->state); // then (re)position the 'camera' S52_setView(engine->state.cLat, engine->state.cLon, engine->state.rNM, engine->state.north); S52_newCSYMB(); // must be first mariners' object so that the // rendering engine place it on top of OWNSHP/VESSEL //_s52_setupVRMEBL(&engine->state); //_s52_setupLEGLIN(); //_s52_setupPRDARE(&engine->state); #ifdef USE_FAKE_AIS _s52_setupVESSEL(&engine->state); _s52_setupOWNSHP(&engine->state); #endif engine->do_S52init = FALSE; engine->do_S52draw = TRUE; engine->do_S52drawLast = TRUE; engine->do_S52setViewPort = FALSE; return EGL_TRUE; }
int main(int argc, char **argv) { GtkWidget *win; GtkWidget *twin; // toolbar window GtkWidget *swin; const char *filename = NULL; //g_thread_init(NULL); //gdk_threads_init(); gdk_threads_enter(); gtk_init(&argc, &argv); printf("%s\n", S52_version()); //printf("float: %.02f \n", 3.1416); // 3.14 //printf("float: %.2f \n", 3.1416); // 3.14 //printf("float: %.02f \n", 3.1); // 3.10 //printf("float: %.2f \n", 3.1); // 3.10 //printf("float: %.2f \n", 3.665); // 3.67 //printf("float: %.2f \n", 3.664); // 3.66 //return 1; filename = _option(argc, argv); _dumpSetUp(); VecView = gv_view_area_new(); if (NULL == VecView){ printf("main.c:ERROR: VecView == NULL!! no OpenGL .. exit!\n"); exit(0); } win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(_destroy), NULL); toolbox = GV_TOOLBOX(gv_toolbox_new()); gv_toolbox_add_tool(toolbox, "select", gv_selection_tool_new()); gv_toolbox_add_tool(toolbox, "zoompan", gv_zoompan_tool_new()); gv_toolbox_add_tool(toolbox, "point", gv_point_tool_new()); gv_toolbox_add_tool(toolbox, "line", gv_line_tool_new()); gv_toolbox_add_tool(toolbox, "area", gv_area_tool_new()); gv_toolbox_add_tool(toolbox, "node", gv_node_tool_new()); gv_toolbox_add_tool(toolbox, "roi", gv_roi_tool_new()); link = GV_VIEW_LINK(gv_view_link_new()); gtk_window_set_default_size( GTK_WINDOW(win), 800, 600 ); // 2D gv_view_area_set_mode(GV_VIEW_AREA(VecView), 0); gtk_drawing_area_size(GTK_DRAWING_AREA(VecView), 800, 600); swin = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(win), swin); gtk_container_add(GTK_CONTAINER(swin), VecView); //gv_view_area_add_layer(GV_VIEW_AREA(view), gv_shapes_layer_new(shapes)); gtk_signal_connect_object(GTK_OBJECT(VecView), "key-press-event", GTK_SIGNAL_FUNC(_key_press_cb), GTK_OBJECT(VecView)); gtk_widget_show(VecView); gtk_widget_show(swin); gtk_widget_show(win); gtk_widget_grab_focus(VecView); gtk_signal_connect(GTK_OBJECT(win), "delete-event", GTK_SIGNAL_FUNC(gtk_main_quit), NULL); gtk_quit_add_destroy(1, GTK_OBJECT(win)); gv_tool_activate(GV_TOOL(toolbox), GV_VIEW_AREA(VecView)); gv_toolbox_activate_tool(toolbox, "zoompan" ); twin = _create_toolbar(); _loadCell(filename); gtk_main(); gdk_threads_leave(); // FIXME: do we ever get here! // put back env. var. as it was /* if (NULL != genv){ setenv("OGR_S57_OPTIONS", genv->str, 1); g_string_free(genv, TRUE); } */ printf("exit main()\n"); return 0; }