(svn r19905) -Codechange: Use EventState for mouse handling routines.

pull/155/head
alberth 14 years ago
parent b40fc5bab8
commit ee390ab713

@ -2640,23 +2640,23 @@ calc_heightdiff_single_direction:;
/** /**
* Handle the mouse while dragging for placement/resizing. * Handle the mouse while dragging for placement/resizing.
* @return Boolean whether search for a handler should continue * @return State of handling the event.
*/ */
bool VpHandlePlaceSizingDrag() EventState VpHandlePlaceSizingDrag()
{ {
if (_special_mouse_mode != WSM_SIZING) return true; if (_special_mouse_mode != WSM_SIZING) return ES_NOT_HANDLED;
/* stop drag mode if the window has been closed */ /* stop drag mode if the window has been closed */
Window *w = FindWindowById(_thd.window_class, _thd.window_number); Window *w = FindWindowById(_thd.window_class, _thd.window_number);
if (w == NULL) { if (w == NULL) {
ResetObjectToPlace(); ResetObjectToPlace();
return false; return ES_HANDLED;
} }
/* while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() ) */ /* while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() ) */
if (_left_button_down) { if (_left_button_down) {
w->OnPlaceDrag(_thd.select_method, _thd.select_proc, GetTileBelowCursor()); w->OnPlaceDrag(_thd.select_method, _thd.select_proc, GetTileBelowCursor());
return false; return ES_HANDLED;
} }
/* mouse button released.. /* mouse button released..
@ -2675,7 +2675,7 @@ bool VpHandlePlaceSizingDrag()
w->OnPlaceMouseUp(_thd.select_method, _thd.select_proc, _thd.selend, TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y)); w->OnPlaceMouseUp(_thd.select_method, _thd.select_proc, _thd.selend, TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y));
return false; return ES_HANDLED;
} }
void SetObjectToPlaceWnd(CursorID icon, PaletteID pal, HighLightStyle mode, Window *w) void SetObjectToPlaceWnd(CursorID icon, PaletteID pal, HighLightStyle mode, Window *w)

@ -1362,10 +1362,13 @@ static void HandlePlacePresize()
w->OnPlacePresize(pt, TileVirtXY(pt.x, pt.y)); w->OnPlacePresize(pt, TileVirtXY(pt.x, pt.y));
} }
static bool HandleDragDrop() /** Handle drop in mouse dragging mode (#WSM_DRAGDROP).
* @return State of handling the event.
*/
static EventState HandleDragDrop()
{ {
if (_special_mouse_mode != WSM_DRAGDROP) return true; if (_special_mouse_mode != WSM_DRAGDROP) return ES_NOT_HANDLED;
if (_left_button_down) return false; if (_left_button_down) return ES_HANDLED;
Window *w = GetCallbackWnd(); Window *w = GetCallbackWnd();
@ -1379,13 +1382,16 @@ static bool HandleDragDrop()
ResetObjectToPlace(); ResetObjectToPlace();
return false; return ES_HANDLED;
} }
static bool HandleMouseDrag() /** Handle dragging in mouse dragging mode (#WSM_DRAGDROP).
* @return State of handling the event.
*/
static EventState HandleMouseDrag()
{ {
if (_special_mouse_mode != WSM_DRAGDROP) return true; if (_special_mouse_mode != WSM_DRAGDROP) return ES_NOT_HANDLED;
if (!_left_button_down || (_cursor.delta.x == 0 && _cursor.delta.y == 0)) return true; if (!_left_button_down || (_cursor.delta.x == 0 && _cursor.delta.y == 0)) return ES_NOT_HANDLED;
Window *w = GetCallbackWnd(); Window *w = GetCallbackWnd();
@ -1397,7 +1403,7 @@ static bool HandleMouseDrag()
w->OnMouseDrag(pt, GetWidgetFromPos(w, pt.x, pt.y)); w->OnMouseDrag(pt, GetWidgetFromPos(w, pt.x, pt.y));
} }
return false; return ES_HANDLED;
} }
static bool HandleMouseOver() static bool HandleMouseOver()
@ -1526,13 +1532,16 @@ static void PreventHiding(int *nx, int *ny, const Rect &rect, const Window *v, i
static bool _dragging_window; ///< A window is being dragged or resized. static bool _dragging_window; ///< A window is being dragged or resized.
static bool HandleWindowDragging() /** Handle dragging/resizing of a window.
* @return State of handling the event.
*/
static EventState HandleWindowDragging()
{ {
/* Get out immediately if no window is being dragged at all. */ /* Get out immediately if no window is being dragged at all. */
if (!_dragging_window) return true; if (!_dragging_window) return ES_NOT_HANDLED;
/* If button still down, but cursor hasn't moved, there is nothing to do. */ /* If button still down, but cursor hasn't moved, there is nothing to do. */
if (_left_button_down && _cursor.delta.x == 0 && _cursor.delta.y == 0) return false; if (_left_button_down && _cursor.delta.x == 0 && _cursor.delta.y == 0) return ES_HANDLED;
/* Otherwise find the window... */ /* Otherwise find the window... */
Window *w; Window *w;
@ -1652,7 +1661,7 @@ static bool HandleWindowDragging()
w->top = ny; w->top = ny;
w->SetDirty(); w->SetDirty();
return false; return ES_HANDLED;
} else if (w->flags4 & WF_SIZING) { } else if (w->flags4 & WF_SIZING) {
/* Stop the sizing if the left mouse button was released */ /* Stop the sizing if the left mouse button was released */
if (!_left_button_down) { if (!_left_button_down) {
@ -1690,7 +1699,7 @@ static bool HandleWindowDragging()
} }
/* Window already on size */ /* Window already on size */
if (x == 0 && y == 0) return false; if (x == 0 && y == 0) return ES_HANDLED;
/* Now find the new cursor pos.. this is NOT _cursor, because we move in steps. */ /* Now find the new cursor pos.. this is NOT _cursor, because we move in steps. */
_drag_delta.y += y; _drag_delta.y += y;
@ -1705,12 +1714,12 @@ static bool HandleWindowDragging()
/* ResizeWindow sets both pre- and after-size to dirty for redrawal */ /* ResizeWindow sets both pre- and after-size to dirty for redrawal */
ResizeWindow(w, x, y); ResizeWindow(w, x, y);
return false; return ES_HANDLED;
} }
} }
_dragging_window = false; _dragging_window = false;
return false; return ES_HANDLED;
} }
/** /**
@ -1748,13 +1757,15 @@ static void StartWindowSizing(Window *w, bool to_left)
DeleteWindowById(WC_DROPDOWN_MENU, 0); DeleteWindowById(WC_DROPDOWN_MENU, 0);
} }
/** handle scrollbar scrolling with the mouse.
static bool HandleScrollbarScrolling() * @return State of handling the event.
*/
static EventState HandleScrollbarScrolling()
{ {
Window *w; Window *w;
/* Get out quickly if no item is being scrolled */ /* Get out quickly if no item is being scrolled */
if (!_scrolling_scrollbar) return true; if (!_scrolling_scrollbar) return ES_NOT_HANDLED;
/* Find the scrolling window */ /* Find the scrolling window */
FOR_ALL_WINDOWS_FROM_BACK(w) { FOR_ALL_WINDOWS_FROM_BACK(w) {
@ -1789,33 +1800,36 @@ static bool HandleScrollbarScrolling()
sb->SetPosition(pos); sb->SetPosition(pos);
w->SetDirty(); w->SetDirty();
} }
return false; return ES_HANDLED;
} }
} }
_scrolling_scrollbar = false; _scrolling_scrollbar = false;
return false; return ES_HANDLED;
} }
static bool HandleViewportScroll() /** Handle viewport scrolling with the mouse.
* @return State of handling the event.
*/
static EventState HandleViewportScroll()
{ {
bool scrollwheel_scrolling = _settings_client.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0); bool scrollwheel_scrolling = _settings_client.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
if (!_scrolling_viewport) return true; if (!_scrolling_viewport) return ES_NOT_HANDLED;
Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y); Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
if (!(_right_button_down || scrollwheel_scrolling || (_settings_client.gui.left_mouse_btn_scrolling && _left_button_down)) || w == NULL) { if (!(_right_button_down || scrollwheel_scrolling || (_settings_client.gui.left_mouse_btn_scrolling && _left_button_down)) || w == NULL) {
_cursor.fix_at = false; _cursor.fix_at = false;
_scrolling_viewport = false; _scrolling_viewport = false;
return true; return ES_NOT_HANDLED;
} }
if (w == FindWindowById(WC_MAIN_WINDOW, 0) && w->viewport->follow_vehicle != INVALID_VEHICLE) { if (w == FindWindowById(WC_MAIN_WINDOW, 0) && w->viewport->follow_vehicle != INVALID_VEHICLE) {
/* If the main window is following a vehicle, then first let go of it! */ /* If the main window is following a vehicle, then first let go of it! */
const Vehicle *veh = Vehicle::Get(w->viewport->follow_vehicle); const Vehicle *veh = Vehicle::Get(w->viewport->follow_vehicle);
ScrollMainWindowTo(veh->x_pos, veh->y_pos, veh->z_pos, true); // This also resets follow_vehicle ScrollMainWindowTo(veh->x_pos, veh->y_pos, veh->z_pos, true); // This also resets follow_vehicle
return true; return ES_NOT_HANDLED;
} }
Point delta; Point delta;
@ -1840,7 +1854,7 @@ static bool HandleViewportScroll()
_cursor.delta.x = 0; _cursor.delta.x = 0;
_cursor.delta.y = 0; _cursor.delta.y = 0;
return false; return ES_HANDLED;
} }
/** Check if a window can be made top-most window, and if so do /** Check if a window can be made top-most window, and if so do
@ -2016,7 +2030,7 @@ enum MouseClick {
TIME_BETWEEN_DOUBLE_CLICK = 500, ///< Time between 2 left clicks before it becoming a double click, in ms TIME_BETWEEN_DOUBLE_CLICK = 500, ///< Time between 2 left clicks before it becoming a double click, in ms
}; };
extern bool VpHandlePlaceSizingDrag(); extern EventState VpHandlePlaceSizingDrag();
static void ScrollMainViewport(int x, int y) static void ScrollMainViewport(int x, int y)
{ {
@ -2074,12 +2088,12 @@ static void MouseLoop(MouseClick click, int mousewheel)
HandlePlacePresize(); HandlePlacePresize();
UpdateTileSelection(); UpdateTileSelection();
if (!VpHandlePlaceSizingDrag()) return; if (VpHandlePlaceSizingDrag() == ES_HANDLED) return;
if (!HandleMouseDrag()) return; if (HandleMouseDrag() == ES_HANDLED) return;
if (!HandleDragDrop()) return; if (HandleDragDrop() == ES_HANDLED) return;
if (!HandleWindowDragging()) return; if (HandleWindowDragging() == ES_HANDLED) return;
if (!HandleScrollbarScrolling()) return; if (HandleScrollbarScrolling() == ES_HANDLED) return;
if (!HandleViewportScroll()) return; if (HandleViewportScroll() == ES_HANDLED) return;
if (!HandleMouseOver()) return; if (!HandleMouseOver()) return;
bool scrollwheel_scrolling = _settings_client.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0); bool scrollwheel_scrolling = _settings_client.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);

Loading…
Cancel
Save