void DrawSVG::render() { if (method == Hardware) { redraw(); } if (method == Software) { display_pixels(&framebuffer[0]); } if (show_zoom) { draw_zoom(); } }
static int handle_input(void) { static struct timeval pressed; static int long_press; struct timeval now, diff; unsigned long key; int rc; serial_poll(); if (pressed.tv_sec && pressed.tv_usec) { gettimeofday(&now, NULL); timesub(&diff, &now, &pressed); /* LONG_PRESS? */ if (diff.tv_sec >= 1) { switch (visual) { case VIEW_SATS: visual = VIEW_MAP; break; case VIEW_MAP: visual = VIEW_ROUTE; break; case VIEW_ROUTE: visual = VIEW_SATS; break; } /* allow for cycling by keeping the button pressed */ pressed.tv_sec = now.tv_sec; pressed.tv_usec = now.tv_usec; long_press = 1; do_refresh = 1; return 0; } } rc = empeg_getkey(&key); if (rc != 1) return rc; switch(key) { case IR_TOP_BUTTON_PRESSED: if (!load_route && !menu) return 1; /* done, wait to be selected again in the hijack menu */ load_route = 0; menu = 0; do_refresh = 1; break; case IR_BOTTOM_BUTTON_PRESSED: gettimeofday(&pressed, NULL); break; case IR_BOTTOM_BUTTON_RELEASED: pressed.tv_sec = pressed.tv_usec = 0; if (long_press) { long_press = 0; break; } if (load_route) { route_load(); load_route = 0; menu = 0; } else if (menu) { switch(menu_pos) { case 0: load_route = routes_init(); break; case 1: switch (visual) { case VIEW_SATS: visual = VIEW_MAP; break; case VIEW_MAP: visual = VIEW_ROUTE; break; case VIEW_ROUTE: visual = VIEW_SATS; break; } break; case 2: if (++show_popups == 3) show_popups = 0; break; case 3: show_metric = 1 - show_metric; break; case 4: show_gpscoords = 1 - show_gpscoords; break; case 5: show_time = 1 - show_time; break; case 6: show_track = 1 - show_track; break; case 7: if (++coord_format == 3) coord_format = 0; break; } menu = 0; lastmenu = 3; lastmenu_pos = menu_pos; } else menu = 1; do_refresh = 1; break; case IR_LEFT_BUTTON_PRESSED: if (load_route) route_select(0); else if (menu) { if (--menu_pos < 0) menu_pos = MENU_ENTRIES - 1; } else { switch (visual) { case VIEW_SATS: break; case VIEW_MAP: draw_zoom(0); break; case VIEW_ROUTE: route_skipwp(-1); break; } } do_refresh = 1; break; case IR_RIGHT_BUTTON_PRESSED: if (load_route) route_select(1); else if (menu) { if (++menu_pos >= MENU_ENTRIES) menu_pos = 0; } else { switch (visual) { case VIEW_SATS: break; case VIEW_MAP: draw_zoom(1); break; case VIEW_ROUTE: route_skipwp(1); break; } } do_refresh = 1; break; case IR_KNOB_LEFT: case IR_KNOB_RIGHT: route_skipwp(key == IR_KNOB_LEFT ? -1 : 1); route_locate(); do_refresh = 1; break; case IR_KNOB_PRESSED: default: break; } return 0; }