summaryrefslogtreecommitdiff
path: root/viewport.c
diff options
context:
space:
mode:
authordarkvater <darkvater@openttd.org>2005-01-10 22:56:20 +0000
committerdarkvater <darkvater@openttd.org>2005-01-10 22:56:20 +0000
commit38da06301d7543fa878821e6635b24d09eb4b076 (patch)
tree1d6091f65da3309b0b84120009620f35a9a2b874 /viewport.c
parentae726617427da0771639acdb31712ea23455c70a (diff)
downloadopenttd-38da06301d7543fa878821e6635b24d09eb4b076.tar.xz
(svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
Diffstat (limited to 'viewport.c')
-rw-r--r--viewport.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/viewport.c b/viewport.c
index d33ff6a3e..a7f9ef776 100644
--- a/viewport.c
+++ b/viewport.c
@@ -302,7 +302,10 @@ Point TranslateXYToTileCoord(ViewPort *vp, int x, int y) {
return pt;
}
-static Point GetTileFromScreenXY(int x, int y)
+/* When used for zooming, check area below current coordinates (x,y)
+ * and return the tile of the zoomed out/in position (zoom_x, zoom_y)
+ * when you just want the tile, make x = zoom_x and y = zoom_y */
+static Point GetTileFromScreenXY(int x, int y, int zoom_x, int zoom_y)
{
Window *w;
ViewPort *vp;
@@ -310,7 +313,7 @@ static Point GetTileFromScreenXY(int x, int y)
if ( (w = FindWindowFromPt(x, y)) != NULL &&
(vp = IsPtInWindowViewport(w, x, y)) != NULL)
- return TranslateXYToTileCoord(vp, x, y);
+ return TranslateXYToTileCoord(vp, zoom_x, zoom_y);
pt.y = pt.x = -1;
return pt;
@@ -318,7 +321,7 @@ static Point GetTileFromScreenXY(int x, int y)
Point GetTileBelowCursor()
{
- return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y);
+ return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, _cursor.pos.x, _cursor.pos.y);
}
@@ -337,7 +340,8 @@ Point GetTileZoomCenterWindow(bool in, Window * w)
x = vp->width - (_cursor.pos.x - vp->left);
y = vp->height - (_cursor.pos.y - vp->top);
}
- return GetTileFromScreenXY(x+vp->left, y+vp->top);
+ /* Get the tile below the cursor and center on the zoomed-out center */
+ return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, x + vp->left, y + vp->top);
}
void DrawGroundSpriteAt(uint32 image, int32 x, int32 y, byte z)