From: Brad A. <br...@us...> - 2012-06-18 01:06:34
|
gemrb: Infinity Engine emulator The branch master has been updated via f12332b196cac82627f60208db6f8cd14970c333 (commit) via 56ab28d7b6e1ae314c5a1bd9cb134857e98cbe95 (commit) via 2f6ea6c9e3cbd7ceeb9bc6678787fc1ecdb88c94 (commit) via ccdebc7e0c1e302136277cf62ed9703e80af7b0e (commit) via c7a550eab283fdff41dd8d90e840e3f68e682512 (commit) Summary of changes: gemrb/core/GUI/EventMgr.cpp | 23 ++++++++--------------- gemrb/core/GUI/EventMgr.h | 2 +- gemrb/plugins/SDLVideo/SDL20Video.cpp | 10 +++++++--- gemrb/plugins/SDLVideo/SDLVideo.cpp | 22 +++++++++++++--------- 4 files changed, 29 insertions(+), 28 deletions(-) from 611f14197d41a64a6e2f25c62a437e7e69638806 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=f12332b196cac82627f60208db6f8cd14970c333 commit f12332b196cac82627f60208db6f8cd14970c333 Author: Brad Allred <bra...@me...> Date: Sun Jun 17 19:00:43 2012 -0600 EventMgr: remove no longer used method GetMouseFocusedControlType() diff --git a/gemrb/core/GUI/EventMgr.cpp b/gemrb/core/GUI/EventMgr.cpp index 45c8a07..6daf018 100644 --- a/gemrb/core/GUI/EventMgr.cpp +++ b/gemrb/core/GUI/EventMgr.cpp @@ -474,14 +474,6 @@ unsigned long EventMgr::SetRKFlags(unsigned long arg, unsigned int op) return rk_flags; } -int EventMgr::GetMouseFocusedControlType() { - Control *ctrl = GetMouseFocusedControl(); - if (ctrl) { - return ctrl->ControlType; - } - return -1; -} - Control* EventMgr::GetMouseFocusedControl() { if (last_win_mousefocused) { diff --git a/gemrb/core/GUI/EventMgr.h b/gemrb/core/GUI/EventMgr.h index 17f4e6e..8921ce7 100644 --- a/gemrb/core/GUI/EventMgr.h +++ b/gemrb/core/GUI/EventMgr.h @@ -138,7 +138,6 @@ public: unsigned long GetRKDelay(); unsigned long SetRKFlags(unsigned long arg, unsigned int op); void inline SetFunctionBar(Window *win) { function_bar = win; } - int GetMouseFocusedControlType(); Control* GetMouseFocusedControl(); /** Mask of which Mouse Buttons are pressed */ unsigned char MButtons; http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=56ab28d7b6e1ae314c5a1bd9cb134857e98cbe95 commit 56ab28d7b6e1ae314c5a1bd9cb134857e98cbe95 Author: Brad Allred <bra...@me...> Date: Sun Jun 17 18:59:53 2012 -0600 SDL20Video: switch from using GetMouseFocusedControlType to new GetMouseFocusedControl since this is the only place it is used we can remove that method. diff --git a/gemrb/plugins/SDLVideo/SDL20Video.cpp b/gemrb/plugins/SDLVideo/SDL20Video.cpp index 483a611..f198800 100644 --- a/gemrb/plugins/SDLVideo/SDL20Video.cpp +++ b/gemrb/plugins/SDLVideo/SDL20Video.cpp @@ -335,6 +335,7 @@ void SDL20VideoDriver::ProcessFirstTouch( int mouseButton ) int SDL20VideoDriver::ProcessEvent(const SDL_Event & event) { + Control* focusCtrl = NULL; //used for contextual touch events. /* the digitizer could have a higher resolution then the screen. we need to get the scale factor to convert digitizer touch coordinates to screen pixel coordinates @@ -344,6 +345,7 @@ int SDL20VideoDriver::ProcessEvent(const SDL_Event & event) int xOffset, yOffset = 0; int numFingers = 0; if(state){ + focusCtrl = EvntManager->GetMouseFocusedControl(); numFingers = state->num_fingers; #if TARGET_OS_IPHONE if (fullscreen) { @@ -385,9 +387,11 @@ int SDL20VideoDriver::ProcessEvent(const SDL_Event & event) // For swipes only. gestures requireing pinch or rotate need to use SDL_MULTIGESTURE or SDL_DOLLARGESTURE case SDL_FINGERMOTION: ignoreNextFingerUp = true; - if (numFingers == core->NumFingScroll || (numFingers != core->NumFingKboard && EvntManager->GetMouseFocusedControlType() == IE_GUI_TEXTAREA)) { + + if (numFingers == core->NumFingScroll + || (numFingers != core->NumFingKboard && (focusCtrl && focusCtrl->ControlType == IE_GUI_TEXTAREA))) { //any # of fingers != NumFingKBoard will scroll a text area - if (EvntManager->GetMouseFocusedControlType() == IE_GUI_TEXTAREA) { + if (focusCtrl->ControlType == IE_GUI_TEXTAREA) { // if we are scrolling a text area we dont want the keyboard in the way HideSoftKeyboard(); } else { @@ -459,7 +463,7 @@ int SDL20VideoDriver::ProcessEvent(const SDL_Event & event) // purposely ignore processing first touch here. I think users ould find it annoying // to attempt a gesture and accidently command a party movement etc if (firstFingerDown.fingerId && numFingers == 2 - && EvntManager->GetMouseFocusedControlType() == IE_GUI_GAMECONTROL) { + && focusCtrl && focusCtrl->ControlType == IE_GUI_GAMECONTROL) { /* formation rotation gesture: first touch with a single finger to obtain the pivot then touch and drag with a second finger (while maintaining contact with first) http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=2f6ea6c9e3cbd7ceeb9bc6678787fc1ecdb88c94 commit 2f6ea6c9e3cbd7ceeb9bc6678787fc1ecdb88c94 Author: Brad Allred <bra...@me...> Date: Sun Jun 17 18:51:53 2012 -0600 SDLVideo: force button state to pressed when firing "repeat" mouse events. diff --git a/gemrb/plugins/SDLVideo/SDLVideo.cpp b/gemrb/plugins/SDLVideo/SDLVideo.cpp index 34a6564..731055a 100644 --- a/gemrb/plugins/SDLVideo/SDLVideo.cpp +++ b/gemrb/plugins/SDLVideo/SDLVideo.cpp @@ -33,6 +33,8 @@ #include "Palette.h" #include "Polygon.h" #include "SpriteCover.h" + +#include "GUI/Button.h" #include "GUI/Console.h" #include "GUI/Window.h" @@ -125,8 +127,13 @@ int SDLVideoDriver::PollEvents() && SDL_GetMouseState(&x,&y)==SDL_BUTTON(SDL_BUTTON_LEFT)) { lastMouseDownTime=lastTime + EvntManager->GetRKDelay(); - if (!core->ConsolePopped) + if (!core->ConsolePopped) { EvntManager->MouseUp( x, y, GEM_MB_ACTION, GetModState(SDL_GetModState()) ); + Control* ctl = EvntManager->GetMouseFocusedControl(); + if (ctl && ctl->ControlType == IE_GUI_BUTTON) + // these are repeat events so the control should stay pressed + ((Button*)ctl)->SetState(IE_GUI_BUTTON_PRESSED); + } } return ret; } http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=ccdebc7e0c1e302136277cf62ed9703e80af7b0e commit ccdebc7e0c1e302136277cf62ed9703e80af7b0e Author: Brad Allred <bra...@me...> Date: Sun Jun 17 18:49:19 2012 -0600 EventMgr: Add GetMouseFocusedControl() method. diff --git a/gemrb/core/GUI/EventMgr.cpp b/gemrb/core/GUI/EventMgr.cpp index 3975e18..45c8a07 100644 --- a/gemrb/core/GUI/EventMgr.cpp +++ b/gemrb/core/GUI/EventMgr.cpp @@ -306,8 +306,7 @@ void EventMgr::MouseUp(unsigned short x, unsigned short y, unsigned short Button unsigned short Mod) { MButtons &= ~Button; - if (last_win_mousefocused == NULL) return; - Control *last_ctrl_mousefocused = last_win_mousefocused->GetMouseFocus(); + Control *last_ctrl_mousefocused = GetMouseFocusedControl(); if (last_ctrl_mousefocused == NULL) return; last_ctrl_mousefocused->OnMouseUp( x - last_win_mousefocused->XPos - last_ctrl_mousefocused->XPos, y - last_win_mousefocused->YPos - last_ctrl_mousefocused->YPos, Button, Mod ); @@ -316,12 +315,9 @@ void EventMgr::MouseUp(unsigned short x, unsigned short y, unsigned short Button /** BroadCast Mouse ScrollWheel Event */ void EventMgr::MouseWheelScroll( short x, short y)//these are signed! { - if (last_win_mousefocused) { - Control *ctrl; - ctrl = last_win_mousefocused->GetMouseFocus(); - if (ctrl) { - ctrl->OnMouseWheelScroll( x, y); - } + Control *ctrl = GetMouseFocusedControl(); + if (ctrl) { + ctrl->OnMouseWheelScroll( x, y); } } @@ -479,13 +475,18 @@ unsigned long EventMgr::SetRKFlags(unsigned long arg, unsigned int op) } int EventMgr::GetMouseFocusedControlType() { - if (last_win_mousefocused) { - Control *ctrl = last_win_mousefocused->GetMouseFocus(); - if (ctrl) { - return ctrl->ControlType; - } + Control *ctrl = GetMouseFocusedControl(); + if (ctrl) { + return ctrl->ControlType; } return -1; } +Control* EventMgr::GetMouseFocusedControl() +{ + if (last_win_mousefocused) { + return last_win_mousefocused->GetMouseFocus(); + } + return NULL; +} } diff --git a/gemrb/core/GUI/EventMgr.h b/gemrb/core/GUI/EventMgr.h index badce06..17f4e6e 100644 --- a/gemrb/core/GUI/EventMgr.h +++ b/gemrb/core/GUI/EventMgr.h @@ -139,6 +139,7 @@ public: unsigned long SetRKFlags(unsigned long arg, unsigned int op); void inline SetFunctionBar(Window *win) { function_bar = win; } int GetMouseFocusedControlType(); + Control* GetMouseFocusedControl(); /** Mask of which Mouse Buttons are pressed */ unsigned char MButtons; private: http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=c7a550eab283fdff41dd8d90e840e3f68e682512 commit c7a550eab283fdff41dd8d90e840e3f68e682512 Author: Brad Allred <bra...@me...> Date: Sun Jun 17 17:17:28 2012 -0600 SDLVideo: simpler logic in PollEvents() that fixes the pre-emptive bailout that broke repeat (while holding mouse button down) mouse button events. diff --git a/gemrb/plugins/SDLVideo/SDLVideo.cpp b/gemrb/plugins/SDLVideo/SDLVideo.cpp index cd58362..34a6564 100644 --- a/gemrb/plugins/SDLVideo/SDLVideo.cpp +++ b/gemrb/plugins/SDLVideo/SDLVideo.cpp @@ -112,24 +112,21 @@ int SDLVideoDriver::SwapBuffers(void) int SDLVideoDriver::PollEvents() { - int ret; + int ret = GEM_OK; SDL_Event currentEvent; - if (!SDL_PollEvent(¤tEvent) ) return GEM_OK; - - do { + while (ret != GEM_ERROR && SDL_PollEvent(¤tEvent)) { ret = ProcessEvent(currentEvent); - } while (ret !=GEM_ERROR && SDL_PollEvent(¤tEvent) ); + } - bool eventWasMouseEvent = (currentEvent.type & (SDL_MOUSEMOTION | SDL_MOUSEBUTTONDOWN)); int x, y; if (ret == GEM_OK && !(MouseFlags & (MOUSE_DISABLED | MOUSE_GRAYED)) - && eventWasMouseEvent && lastTime>lastMouseDownTime + && lastTime>lastMouseDownTime && SDL_GetMouseState(&x,&y)==SDL_BUTTON(SDL_BUTTON_LEFT)) { lastMouseDownTime=lastTime + EvntManager->GetRKDelay(); if (!core->ConsolePopped) - EvntManager->MouseUp( x, y, 1 << ( 0 ), GetModState(SDL_GetModState()) ); + EvntManager->MouseUp( x, y, GEM_MB_ACTION, GetModState(SDL_GetModState()) ); } return ret; } ----------------------------------------------------------------------- This is an automated email from the git hooks/post-receive script. -- gemrb: Infinity Engine emulator |