static void _view_map_filmstrip_activate_callback(gpointer instance, gpointer user_data) { double longitude, latitude; int32_t imgid = 0; if ((imgid=dt_view_filmstrip_get_activated_imgid(darktable.view_manager))>0) { const dt_image_t *cimg = dt_image_cache_read_get(darktable.image_cache, imgid); longitude = cimg->longitude; latitude = cimg->latitude; dt_image_cache_read_release(darktable.image_cache, cimg); if(!isnan(longitude) && !isnan(latitude)) _view_map_center_on_location((dt_view_t*)user_data, longitude, latitude, 16); // TODO: is it better to keep the zoom level? } }
static void _view_map_filmstrip_activate_callback(gpointer instance, gpointer user_data) { dt_view_t *self = (dt_view_t*)user_data; dt_map_t *lib = (dt_map_t*)self->data; double longitude, latitude; int32_t imgid = 0; if ((imgid=dt_view_filmstrip_get_activated_imgid(darktable.view_manager))>0) { const dt_image_t *cimg = dt_image_cache_read_get(darktable.image_cache, imgid); longitude = cimg->longitude; latitude = cimg->latitude; dt_image_cache_read_release(darktable.image_cache, cimg); if(!isnan(longitude) && !isnan(latitude)) { int zoom; g_object_get(G_OBJECT(lib->map), "zoom", &zoom, NULL); _view_map_center_on_location(self, longitude, latitude, zoom); // TODO: is it better to keep the zoom level or to zoom in? 16 is a nice close up. } } }
static gboolean _view_map_button_press_callback(GtkWidget *w, GdkEventButton *e, dt_view_t *self) { dt_map_t *lib = (dt_map_t*)self->data; if(e->button == 1) { // check if the click was on an image or just some random position lib->selected_image = _view_map_get_img_at_pos(self, e->x, e->y); if(e->type == GDK_BUTTON_PRESS && lib->selected_image > 0) { lib->start_drag = TRUE; return TRUE; } if(e->type == GDK_2BUTTON_PRESS) { if(lib->selected_image > 0) { // open the image in darkroom DT_CTL_SET_GLOBAL(lib_image_mouse_over_id, lib->selected_image); dt_ctl_switch_mode_to(DT_DEVELOP); return TRUE; } else { // zoom into that position float longitude, latitude; OsmGpsMapPoint *pt = osm_gps_map_point_new_degrees(0.0, 0.0); osm_gps_map_convert_screen_to_geographic(lib->map, e->x, e->y, pt); osm_gps_map_point_get_degrees(pt, &latitude, &longitude); osm_gps_map_point_free(pt); int zoom, max_zoom; g_object_get(G_OBJECT(lib->map), "zoom", &zoom, "max-zoom", &max_zoom, NULL); zoom = MIN(zoom+1, max_zoom); _view_map_center_on_location(self, longitude, latitude, zoom); } return TRUE; } } return FALSE; }