Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP1:GA
libchamplain
libchamplain-Fix-wrapping-champlain_view_x_to_l...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libchamplain-Fix-wrapping-champlain_view_x_to_longitude.patch of Package libchamplain
From 122d872eddec278d3b21aa6088ee2d57981e7da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= <tomasz.miasko@gmail.com> Date: Wed, 20 Dec 2017 00:00:00 +0000 Subject: Fix wrapping in champlain_view_x_to_longitude. Previous implementation assumed that after using x_to_wrap_x further wrapping would be needed only if x + priv->viewport_x >= width. Unfortunately, this is not the case when priv->viewport_x is negative and whole x + priv->viewport_x ends up negative. --- champlain/champlain-view.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/champlain/champlain-view.c b/champlain/champlain-view.c index 784d644..154b5eb 100644 --- a/champlain/champlain-view.c +++ b/champlain/champlain-view.c @@ -2471,18 +2471,17 @@ champlain_view_x_to_longitude (ChamplainView *view, g_return_val_if_fail (CHAMPLAIN_IS_VIEW (view), 0.0); + x += priv->viewport_x; + if (priv->hwrap) { gdouble width = get_map_width (view); x = x_to_wrap_x (x, width); - - if (x >= width - priv->viewport_x) - x -= width; } longitude = champlain_map_source_get_longitude (priv->map_source, priv->zoom_level, - x + priv->viewport_x); + x); return longitude; } -- cgit v0.12 From 602e52f5f32c6e5751653571b69105d389bfe125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Techet?= <techet@gmail.com> Date: Sun, 31 Dec 2017 14:51:41 +0100 Subject: Create a wrap-aware get_longitude() function and use it everywhere in view --- champlain/champlain-view.c | 53 ++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/champlain/champlain-view.c b/champlain/champlain-view.c index 154b5eb..dd8b3bd 100644 --- a/champlain/champlain-view.c +++ b/champlain/champlain-view.c @@ -334,6 +334,26 @@ get_map_width (ChamplainView *view) } +static gdouble +get_longitude (ChamplainView *view, + guint zoom_level, + gdouble x) +{ + ChamplainViewPrivate *priv = view->priv; + + DEBUG_LOG () + + g_return_val_if_fail (CHAMPLAIN_IS_VIEW (view), 0.0); + + if (priv->hwrap) + x = x_to_wrap_x (x, get_map_width (view)); + + return champlain_map_source_get_longitude (priv->map_source, + zoom_level, + x); +} + + static void update_coords (ChamplainView *view, gdouble x, @@ -346,7 +366,7 @@ update_coords (ChamplainView *view, priv->viewport_x = x; priv->viewport_y = y; - priv->longitude = champlain_map_source_get_longitude (priv->map_source, + priv->longitude = get_longitude (view, priv->zoom_level, x + priv->viewport_width / 2.0); priv->latitude = champlain_map_source_get_latitude (priv->map_source, @@ -1440,7 +1460,7 @@ zoom_gesture_zoom_cb (ClutterZoomAction *gesture, dx = (priv->viewport_width / 2.0) - focal_point->x; dy = (priv->viewport_height / 2.0) - focal_point->y; - lon = champlain_map_source_get_longitude (priv->map_source, zoom_level, focus.x + dx); + lon = get_longitude (view, zoom_level, focus.x + dx); lat = champlain_map_source_get_latitude (priv->map_source, zoom_level, focus.y + dy); champlain_view_center_on (view, lat, lon); @@ -1830,7 +1850,7 @@ champlain_view_scroll (ChamplainView *view, y = priv->viewport_y + priv->viewport_height / 2.0 + deltay; lat = champlain_map_source_get_latitude (priv->map_source, priv->zoom_level, y); - lon = champlain_map_source_get_longitude (priv->map_source, priv->zoom_level, x); + lon = get_longitude (view, priv->zoom_level, x); if (priv->kinetic_mode) champlain_view_go_to_with_duration (view, lat, lon, 300); @@ -2465,25 +2485,12 @@ champlain_view_x_to_longitude (ChamplainView *view, gdouble x) { ChamplainViewPrivate *priv = view->priv; - gdouble longitude; DEBUG_LOG () g_return_val_if_fail (CHAMPLAIN_IS_VIEW (view), 0.0); - x += priv->viewport_x; - - if (priv->hwrap) - { - gdouble width = get_map_width (view); - x = x_to_wrap_x (x, width); - } - - longitude = champlain_map_source_get_longitude (priv->map_source, - priv->zoom_level, - x); - - return longitude; + return get_longitude (view, priv->zoom_level, x + priv->viewport_x); } @@ -4036,12 +4043,12 @@ get_bounding_box (ChamplainView *view, bbox->bottom = champlain_map_source_get_latitude (priv->map_source, zoom_level, y + priv->viewport_height); - bbox->left = champlain_map_source_get_longitude (priv->map_source, - zoom_level, - x); - bbox->right = champlain_map_source_get_longitude (priv->map_source, - zoom_level, - x + priv->viewport_width); + bbox->left = get_longitude (view, + zoom_level, + x); + bbox->right = get_longitude (view, + zoom_level, + x + priv->viewport_width); return bbox; } -- cgit v0.12 From 8752cbe1825a301418451c4cf2e20d8577308c93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Techet?= <techet@gmail.com> Date: Sun, 31 Dec 2017 14:57:34 +0100 Subject: Properly wrap coordinates in champlain_view_center_on() --- champlain/champlain-view.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/champlain/champlain-view.c b/champlain/champlain-view.c index dd8b3bd..4edabef 100644 --- a/champlain/champlain-view.c +++ b/champlain/champlain-view.c @@ -1950,7 +1950,10 @@ champlain_view_center_on (ChamplainView *view, DEBUG ("Centering on %f, %f (%g, %g)", latitude, longitude, x, y); - position_viewport (view, x, y); + if (priv->hwrap) + position_viewport (view, x_to_wrap_x (x, get_map_width (view)), y); + else + position_viewport (view, x, y); load_visible_tiles (view, FALSE); } -- cgit v0.12
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor