Show info about facility/station/vehicle on mouse up instead of mouse down, to allow better map dragging.

This commit is contained in:
pelya
2014-06-01 01:23:34 +03:00
parent d2feaa9316
commit f469e7f57b
3 changed files with 47 additions and 6 deletions

View File

@@ -1953,18 +1953,24 @@ bool HandleViewportClicked(const ViewPort *vp, int x, int y)
{
if (_move_pressed) return false;
if ((_thd.place_mode & HT_DRAG_MASK) != HT_NONE) {
PlaceObject();
return true;
}
return false;
}
bool HandleViewportMouseUp(const ViewPort *vp, int x, int y)
{
if (_move_pressed) return false;
const Vehicle *v = CheckClickOnVehicle(vp, x, y);
if (_thd.place_mode & HT_VEHICLE) {
if (v != NULL && VehicleClicked(v)) return true;
}
/* Vehicle placement mode already handled above. */
if ((_thd.place_mode & HT_DRAG_MASK) != HT_NONE) {
PlaceObject();
return true;
}
if (CheckClickOnTown(vp, x, y)) return true;
if (CheckClickOnStation(vp, x, y)) return true;
if (CheckClickOnSign(vp, x, y)) return true;

View File

@@ -59,6 +59,7 @@ void StartSpriteCombine();
void EndSpriteCombine();
bool HandleViewportClicked(const ViewPort *vp, int x, int y);
bool HandleViewportMouseUp(const ViewPort *vp, int x, int y);
void SetRedErrorSquare(TileIndex tile);
void SetTileSelectSize(int w, int h);
void SetTileSelectBigSize(int ox, int oy, int sx, int sy);

View File

@@ -80,6 +80,7 @@ byte _scroller_click_timeout = 0;
bool _scrolling_viewport; ///< A viewport is being scrolled with the mouse.
bool _mouse_hovering; ///< The mouse is hovering over the same point.
static bool _left_button_dragged;
SpecialMouseMode _special_mouse_mode; ///< Mode of the mouse.
@@ -2397,6 +2398,21 @@ static EventState HandleViewportScroll()
{
bool scrollwheel_scrolling = _settings_client.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
if (_settings_client.gui.left_mouse_btn_scrolling) {
// Do not open vehicle/town info window while scrolling with left mouse button
static int oldDx = 0, oldDy = 0;
if (_left_button_down) {
oldDx += _cursor.delta.x;
oldDy += _cursor.delta.y;
if (!_left_button_dragged && abs(oldDx) + abs(oldDy) > 20) {
_left_button_dragged = true;
}
} else {
oldDx = 0;
oldDy = 0;
}
}
if (!_scrolling_viewport) return ES_NOT_HANDLED;
/* When we don't have a last scroll window we are starting to scroll.
@@ -2735,6 +2751,7 @@ static void HandleAutoscroll()
enum MouseClick {
MC_NONE = 0,
MC_LEFT,
MC_LEFT_UP,
MC_RIGHT,
MC_DOUBLE_LEFT,
MC_HOVER,
@@ -2857,6 +2874,13 @@ static void MouseLoop(MouseClick click, int mousewheel)
}
break;
case MC_LEFT_UP:
if (!_left_button_dragged) {
HandleViewportMouseUp(vp, x, y);
}
_left_button_dragged = false;
break;
case MC_RIGHT:
if (!(w->flags & WF_DISABLE_VP_SCROLL)) {
_scrolling_viewport = true;
@@ -2873,6 +2897,9 @@ static void MouseLoop(MouseClick click, int mousewheel)
}
} else {
switch (click) {
case MC_LEFT_UP:
break;
case MC_LEFT:
case MC_DOUBLE_LEFT:
DispatchLeftClickEvent(w, x - w->left, y - w->top, click == MC_DOUBLE_LEFT ? 2 : 1);
@@ -2902,6 +2929,7 @@ void HandleMouseEvents()
static int double_click_time = 0;
static Point double_click_pos = {0, 0};
static bool left_button_released = false;
/* Mouse event? */
MouseClick click = MC_NONE;
@@ -2915,11 +2943,17 @@ void HandleMouseEvents()
double_click_time = _realtime_tick;
double_click_pos = _cursor.pos;
_left_button_clicked = true;
left_button_released = false;
_input_events_this_tick++;
} else if (_right_button_clicked) {
_right_button_clicked = false;
click = MC_RIGHT;
_input_events_this_tick++;
} else if(!_left_button_down && !left_button_released) {
click = MC_LEFT_UP;
left_button_released = true;
_left_button_clicked = false;
_input_events_this_tick++;
}
int mousewheel = 0;