diff options
author | Jiří Techet <techet@gmail.com> | 2010-08-20 02:20:10 +0200 |
---|---|---|
committer | Jiří Techet <techet@gmail.com> | 2010-08-20 02:20:10 +0200 |
commit | 90a031aa03b3bfcd1f9b6b96fe10272d70c76314 (patch) | |
tree | db012a2085b9d6c80721c82b86a5ca9fb1c62860 | |
parent | 3fd656c0c203c12e5ae823f175087b4a07c35427 (diff) | |
download | libchamplain-90a031aa03b3bfcd1f9b6b96fe10272d70c76314.tar.gz |
On double click, center to the clicked area
Makes us behave the same way as google maps.
Signed-off-by: Jiří Techet <techet@gmail.com>
-rw-r--r-- | champlain/champlain-view.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/champlain/champlain-view.c b/champlain/champlain-view.c index b449c47..b88fb4b 100644 --- a/champlain/champlain-view.c +++ b/champlain/champlain-view.c @@ -1739,9 +1739,27 @@ finger_scroll_button_press_cb (G_GNUC_UNUSED ClutterActor *actor, DEBUG_LOG () ChamplainViewPrivate *priv = view->priv; + guint zoom_level = priv->zoom_level + 1; - if (priv->zoom_on_double_click && event->button == 1 && event->click_count == 2) - return view_set_zoom_level_at (view, priv->zoom_level + 1, event->x, event->y); + if (!ZOOM_LEVEL_OUT_OF_RANGE (priv, zoom_level) && priv->zoom_on_double_click && + event->button == 1 && event->click_count == 2) + { + gdouble lon, lat; + + champlain_view_get_coords_from_event (view, (ClutterEvent *) event, &lat, &lon); + + champlain_view_stop_go_to (view); + + priv->zoom_level = zoom_level; + + resize_viewport (view); + + champlain_view_center_on (view, lat, lon); + + g_object_notify (G_OBJECT (view), "zoom-level"); + + return TRUE; + } return FALSE; /* Propagate the event */ } |