summaryrefslogtreecommitdiff
path: root/navit/navit.c
diff options
context:
space:
mode:
authorsleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-11-05 20:14:38 +0000
committersleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-11-05 20:14:38 +0000
commitc77d9eb3247647dc9001dbec024f2ba6bd8f5787 (patch)
tree57bfa3dc8433bee7c49fb53bffa65b78debbeded /navit/navit.c
parent2d045f5211455136fe132022735292e813d77608 (diff)
downloadnavit-svn-c77d9eb3247647dc9001dbec024f2ba6bd8f5787.tar.gz
Fix:core:Restrict panning to prevent panning the map off the screen.|Concludes fix for #985.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5259 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/navit.c')
-rw-r--r--navit/navit.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/navit/navit.c b/navit/navit.c
index 223148dd..3510596e 100644
--- a/navit/navit.c
+++ b/navit/navit.c
@@ -388,24 +388,42 @@ navit_ignore_graphics_events(struct navit *this_, int ignore)
this_->ignore_graphics_events=ignore;
}
+static int
+navit_restrict_to_range(int value, int min, int max){
+ if (value>max) {
+ value = max;
+ }
+ if (value<min) {
+ value = min;
+ }
+ return value;
+}
+
+static void
+navit_restrict_map_center_to_visible_area(struct transformation *tr, struct coord *new_center){
+ new_center->x = navit_restrict_to_range(new_center->x, WORLD_BOUNDINGBOX_MIN_X, WORLD_BOUNDINGBOX_MAX_X);
+ new_center->y = navit_restrict_to_range(new_center->y, WORLD_BOUNDINGBOX_MIN_Y, WORLD_BOUNDINGBOX_MAX_Y);
+}
+
/**
* @brief Change map center position by translating from "old" to "new".
*/
-void
+static void
update_transformation(struct transformation *tr, struct point *old, struct point *new)
{
/* Code for rotation was removed in rev. 5252; see Trac #1078. */
- struct coord co,cn;
- struct coord c,*cp;
- if (!transform_reverse(tr, old, &co))
+ struct coord coord_old,coord_new;
+ struct coord center_new,*center_old;
+ if (!transform_reverse(tr, old, &coord_old))
return;
- if (!transform_reverse(tr, new, &cn))
+ if (!transform_reverse(tr, new, &coord_new))
return;
- cp=transform_get_center(tr);
- c.x=cp->x+co.x-cn.x;
- c.y=cp->y+co.y-cn.y;
- dbg(1,"from 0x%x,0x%x to 0x%x,0x%x\n", cp->x, cp->y, c.x, c.y);
- transform_set_center(tr, &c);
+ center_old=transform_get_center(tr);
+ center_new.x=center_old->x+coord_old.x-coord_new.x;
+ center_new.y=center_old->y+coord_old.y-coord_new.y;
+ navit_restrict_map_center_to_visible_area(tr, &center_new);
+ dbg(1,"change center from 0x%x,0x%x to 0x%x,0x%x\n", center_old->x, center_old->y, center_new.x, center_new.y);
+ transform_set_center(tr, &center_new);
}
void