diff options
-rw-r--r-- | src/viewport.cpp | 23 | ||||
-rw-r--r-- | src/viewport_type.h | 2 |
2 files changed, 22 insertions, 3 deletions
diff --git a/src/viewport.cpp b/src/viewport.cpp index 4239a299e..4fe1553bb 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2526,6 +2526,8 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method) sx = _thd.selstart.x; sy = _thd.selstart.y; + int limit = 0; + switch (method) { case VPM_X_OR_Y: // drag in X or Y direction if (abs(sy - y) < abs(sx - x)) { @@ -2536,15 +2538,29 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method) style = HT_DIR_Y; } goto calc_heightdiff_single_direction; + + case VPM_X_LIMITED: // Drag in X direction (limited size). + limit = (_thd.sizelimit - 1) * TILE_SIZE; + /* Fallthrough. */ + case VPM_FIX_X: // drag in Y direction x = sx; style = HT_DIR_Y; goto calc_heightdiff_single_direction; + + case VPM_Y_LIMITED: // Drag in Y direction (limited size). + limit = (_thd.sizelimit - 1) * TILE_SIZE; + /* Fallthrough. */ + case VPM_FIX_Y: // drag in X direction y = sy; style = HT_DIR_X; calc_heightdiff_single_direction:; + if (limit > 0) { + x = sx + Clamp(x - sx, -limit, limit); + y = sy + Clamp(y - sy, -limit, limit); + } if (_settings_client.gui.measure_tooltip) { TileIndex t0 = TileVirtXY(sx, sy); TileIndex t1 = TileVirtXY(x, y); @@ -2567,11 +2583,12 @@ calc_heightdiff_single_direction:; ShowMeasurementTooltips(measure_strings_length[index], index, params); } break; - case VPM_X_AND_Y_LIMITED: { // drag an X by Y constrained rect area - int limit = (_thd.sizelimit - 1) * TILE_SIZE; + case VPM_X_AND_Y_LIMITED: // Drag an X by Y constrained rect area. + limit = (_thd.sizelimit - 1) * TILE_SIZE; x = sx + Clamp(x - sx, -limit, limit); y = sy + Clamp(y - sy, -limit, limit); - } // Fallthrough + /* Fallthrough. */ + case VPM_X_AND_Y: { // drag an X by Y area if (_settings_client.gui.measure_tooltip) { static const StringID measure_strings_area[] = { diff --git a/src/viewport_type.h b/src/viewport_type.h index 5f8002bc6..72f1835e2 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -77,6 +77,8 @@ enum ViewportPlaceMethod { VPM_X_AND_Y_LIMITED = 4, ///< area of land of limited size VPM_FIX_HORIZONTAL = 5, ///< drag only in horizontal direction VPM_FIX_VERTICAL = 6, ///< drag only in vertical direction + VPM_X_LIMITED = 7, ///< Drag only in X axis with limited size + VPM_Y_LIMITED = 8, ///< Drag only in Y axis with limited size VPM_RAILDIRS = 0x40, ///< all rail directions VPM_SIGNALDIRS = 0x80, ///< similiar to VMP_RAILDIRS, but with different cursor }; |