gboolean osm_gps_map_osd_get_state(OsmGpsMap *map) { osm_gps_map_osd_t *osd = osm_gps_map_osd_get(map); g_return_val_if_fail (osd, FALSE); osd_priv_t *priv = (osd_priv_t *)(osd->priv); g_return_val_if_fail (priv, FALSE); return priv->select_toggle.state; }
static gboolean on_map_button_release_event(GtkWidget *widget, GdkEventButton *event, area_context_t *context) { OsmGpsMap *map = OSM_GPS_MAP(widget); osm_gps_map_osd_t *osd = osm_gps_map_osd_get(map); if(!std::isnan(context->map.start.rlon) && !std::isnan(context->map.start.rlat)) { OsmGpsMapPoint start = context->map.start; OsmGpsMapPoint end = osm_gps_map_convert_screen_to_geographic(map, event->x, event->y); GSList *box = pos_append_rad(nullptr, start.rlat, start.rlon); box = pos_append_rad(box, end.rlat, start.rlon); box = pos_append_rad(box, end.rlat, end.rlon); box = pos_append_rad(box, start.rlat, end.rlon); box = pos_append_rad(box, start.rlat, start.rlon); osm_gps_map_add_track(map, box); if(start.rlat < end.rlat) { context->bounds.min.lat = RAD2DEG(start.rlat); context->bounds.max.lat = RAD2DEG(end.rlat); } else { context->bounds.min.lat = RAD2DEG(end.rlat); context->bounds.max.lat = RAD2DEG(start.rlat); } if(start.rlon < end.rlon) { context->bounds.min.lon = RAD2DEG(start.rlon); context->bounds.max.lon = RAD2DEG(end.rlon); } else { context->bounds.min.lon = RAD2DEG(end.rlon); context->bounds.max.lon = RAD2DEG(start.rlon); } area_main_update(context); direct_update(context); extent_update(context); context->map.start.rlon = context->map.start.rlat = NAN; } /* osm-gps-map needs this event to handle the OSD */ if(osd->check(osd, TRUE, event->x, event->y) != OSD_NONE) return FALSE; /* returning true here disables dragging in osm-gps-map */ return osm_gps_map_osd_get_state(map) == TRUE ? FALSE : TRUE; }
static gboolean on_map_button_press_event(GtkWidget *widget, GdkEventButton *event, area_context_t *context) { OsmGpsMap *map = OSM_GPS_MAP(widget); osm_gps_map_osd_t *osd = osm_gps_map_osd_get(map); /* osm-gps-map needs this event to handle the OSD */ if(osd->check(osd, TRUE, event->x, event->y) != OSD_NONE) return FALSE; if(osm_gps_map_osd_get_state(map) == TRUE) return FALSE; /* remove existing marker */ osm_gps_map_track_remove_all(map); /* and remember this location as the start */ context->map.start = osm_gps_map_convert_screen_to_geographic(map, event->x, event->y); return TRUE; }