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
 };