mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-04 05:15:21 +00:00
(svn r19042) -Add: Allow mousewheel zooming in smallmap.
This commit is contained in:
parent
a6e8c747c9
commit
4cf65e6e81
@ -535,9 +535,11 @@ class SmallMapWindow : public Window {
|
||||
}
|
||||
|
||||
/** Initialize or change the zoom level.
|
||||
* @param change Way to change the zoom level.
|
||||
* @param change Way to change the zoom level.
|
||||
* @param zoom_pt Position to keep fixed while zooming.
|
||||
* @pre \c *zoom_pt should contain a point in the smallmap display when zooming in or out.
|
||||
*/
|
||||
void SetZoomLevel(ZoomLevelChange change)
|
||||
void SetZoomLevel(ZoomLevelChange change, const Point *zoom_pt)
|
||||
{
|
||||
static const int zoomlevels[] = {1, 2, 4, 6, 8}; // Available zoom levels. Bigger number means more zoom-out (further away).
|
||||
static const int MIN_ZOOM_INDEX = 0;
|
||||
@ -545,7 +547,6 @@ class SmallMapWindow : public Window {
|
||||
|
||||
int new_index, cur_index, sub;
|
||||
Point tile;
|
||||
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(SM_WIDGET_MAP);
|
||||
switch (change) {
|
||||
case ZLC_INITIALIZE:
|
||||
cur_index = - 1; // Definitely different from new_index.
|
||||
@ -559,7 +560,7 @@ class SmallMapWindow : public Window {
|
||||
}
|
||||
assert(cur_index <= MAX_ZOOM_INDEX);
|
||||
|
||||
tile = this->PixelToTile(wid->current_x / 2, wid->current_y / 2, &sub);
|
||||
tile = this->PixelToTile(zoom_pt->x, zoom_pt->y, &sub);
|
||||
new_index = Clamp(cur_index + ((change == ZLC_ZOOM_IN) ? -1 : 1), MIN_ZOOM_INDEX, MAX_ZOOM_INDEX);
|
||||
break;
|
||||
|
||||
@ -569,7 +570,7 @@ class SmallMapWindow : public Window {
|
||||
if (new_index != cur_index) {
|
||||
this->zoom = zoomlevels[new_index];
|
||||
if (cur_index >= 0) {
|
||||
Point new_tile = this->PixelToTile(wid->current_x / 2, wid->current_y / 2, &sub);
|
||||
Point new_tile = this->PixelToTile(zoom_pt->x, zoom_pt->y, &sub);
|
||||
this->SetNewScroll(this->scroll_x + (tile.x - new_tile.x) * TILE_SIZE,
|
||||
this->scroll_y + (tile.y - new_tile.y) * TILE_SIZE, sub);
|
||||
}
|
||||
@ -858,7 +859,7 @@ public:
|
||||
this->SetWidgetLoweredState(SM_WIDGET_TOGGLETOWNNAME, this->show_towns);
|
||||
this->GetWidget<NWidgetStacked>(SM_WIDGET_SELECTINDUSTRIES)->SetDisplayedPlane(this->map_type != SMT_INDUSTRY);
|
||||
|
||||
this->SetZoomLevel(ZLC_INITIALIZE);
|
||||
this->SetZoomLevel(ZLC_INITIALIZE, NULL);
|
||||
this->SmallMapCenterOnCurrentPos();
|
||||
}
|
||||
|
||||
@ -1033,12 +1034,12 @@ public:
|
||||
} break;
|
||||
|
||||
case SM_WIDGET_ZOOM_IN:
|
||||
this->SetZoomLevel(ZLC_ZOOM_IN);
|
||||
break;
|
||||
|
||||
case SM_WIDGET_ZOOM_OUT:
|
||||
this->SetZoomLevel(ZLC_ZOOM_OUT);
|
||||
case SM_WIDGET_ZOOM_OUT: {
|
||||
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(SM_WIDGET_MAP);
|
||||
Point pt = {wid->current_x / 2, wid->current_y / 2};
|
||||
this->SetZoomLevel((widget == SM_WIDGET_ZOOM_IN) ? ZLC_ZOOM_IN : ZLC_ZOOM_OUT, &pt);
|
||||
break;
|
||||
}
|
||||
|
||||
case SM_WIDGET_CONTOUR: // Show land contours
|
||||
case SM_WIDGET_VEHICLES: // Show vehicles
|
||||
@ -1135,6 +1136,17 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnMouseWheel(int wheel)
|
||||
{
|
||||
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(SM_WIDGET_MAP);
|
||||
int cursor_x = _cursor.pos.x - this->left - wid->pos_x;
|
||||
int cursor_y = _cursor.pos.y - this->top - wid->pos_y;
|
||||
if (IsInsideMM(cursor_x, 0, wid->current_x) && IsInsideMM(cursor_y, 0, wid->current_y)) {
|
||||
Point pt = {cursor_x, cursor_y};
|
||||
this->SetZoomLevel((wheel < 0) ? ZLC_ZOOM_IN : ZLC_ZOOM_OUT, &pt);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnTick()
|
||||
{
|
||||
/* Update the window every now and then */
|
||||
|
Loading…
Reference in New Issue
Block a user