Mercurial > hg > openttd
changeset 14427:368b198b010a draft
(svn r18984) -Add: Viewport place methods for dragging a line with limited size.
author | terkhen <terkhen@openttd.org> |
---|---|
date | Mon, 01 Feb 2010 23:13:15 +0000 |
parents | f479e89fe597 |
children | f412a4431c2d |
files | src/viewport.cpp src/viewport_type.h |
diffstat | 2 files changed, 22 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2526,6 +2526,8 @@ 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 @@ 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 @@ 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[] = {
--- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -77,6 +77,8 @@ 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 };