diff options
author | peter1138 <peter1138@openttd.org> | 2011-11-24 12:20:14 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2011-11-24 12:20:14 +0000 |
commit | 4e97261315211c65459b91685537f82e5c454604 (patch) | |
tree | 155bbd8a8a459ba9b0a74c4ca230a2ab99cb99fd /src/viewport.cpp | |
parent | 00db8b800866b47f0ee6a7f4ad2c227eab97bd53 (diff) | |
download | openttd-4e97261315211c65459b91685537f82e5c454604.tar.xz |
(svn r23314) -Add: Add settings to restrict viewport zoom levels.
Diffstat (limited to 'src/viewport.cpp')
-rw-r--r-- | src/viewport.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/viewport.cpp b/src/viewport.cpp index 7bcd83d3e..b42acfdfc 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -187,7 +187,7 @@ void InitializeWindowViewport(Window *w, int x, int y, vp->width = width; vp->height = height; - vp->zoom = zoom; + vp->zoom = static_cast<ZoomLevel>(Clamp(zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max)); vp->virtual_width = ScaleByZoom(width, zoom); vp->virtual_height = ScaleByZoom(height, zoom); @@ -459,10 +459,10 @@ Point GetTileZoomCenterWindow(bool in, Window * w) */ void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out) { - w->SetWidgetDisabledState(widget_zoom_in, vp->zoom == ZOOM_LVL_MIN); + w->SetWidgetDisabledState(widget_zoom_in, vp->zoom <= _settings_client.gui.zoom_min); w->SetWidgetDirty(widget_zoom_in); - w->SetWidgetDisabledState(widget_zoom_out, vp->zoom == ZOOM_LVL_MAX); + w->SetWidgetDisabledState(widget_zoom_out, vp->zoom >= _settings_client.gui.zoom_max); w->SetWidgetDirty(widget_zoom_out); } @@ -1645,6 +1645,20 @@ void MarkAllViewportsDirty(int left, int top, int right, int bottom) } } +void ConstrainAllViewportsZoom() +{ + Window *w; + FOR_ALL_WINDOWS_FROM_FRONT(w) { + if (w->viewport == NULL) continue; + + ZoomLevel zoom = static_cast<ZoomLevel>(Clamp(w->viewport->zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max)); + if (zoom != w->viewport->zoom) { + while (w->viewport->zoom < zoom) DoZoomInOutWindow(ZOOM_OUT, w); + while (w->viewport->zoom > zoom) DoZoomInOutWindow(ZOOM_IN, w); + } + } +} + /** * Mark a tile given by its index dirty for repaint. * @param tile The tile to mark dirty. |