Changeset - r14417:ef850931da5a
[Not reviewed]
master
0 2 0
terkhen - 15 years ago 2010-02-01 23:13:15
terkhen@openttd.org
(svn r18984) -Add: Viewport place methods for dragging a line with limited size.
2 files changed with 22 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/viewport.cpp
Show inline comments
 
@@ -2526,6 +2526,8 @@ void VpSelectTilesWithMethod(int x, int 
 
	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 
 
				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[] = {
src/viewport_type.h
Show inline comments
 
@@ -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
 
};
0 comments (0 inline, 0 general)