From: Stefan Csomor Date: Tue, 11 Jun 2013 22:25:21 +0000 (+0000) Subject: add more high-level event concepts, fixing native button number X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/5ed9f8b2313b80158b44390fc6222f04f6130478 add more high-level event concepts, fixing native button number git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74169 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/osx/uiaction_osx.cpp b/src/osx/uiaction_osx.cpp index d480f83817..5c1bbade27 100644 --- a/src/osx/uiaction_osx.cpp +++ b/src/osx/uiaction_osx.cpp @@ -53,7 +53,53 @@ CGEventType CGEventTypeForMouseButton(int button, bool isDown) return isDown ? kCGEventOtherMouseDown : kCGEventOtherMouseUp; } } + +CGEventType CGEventTypeForMouseDrag(int button) +{ + switch ( button ) + { + case wxMOUSE_BTN_LEFT: + return kCGEventLeftMouseDragged; + break; + + case wxMOUSE_BTN_RIGHT: + return kCGEventRightMouseDragged; + break; + + // All the other buttons use the constant OtherMouseDown but we still + // want to check for invalid parameters so assert first + default: + wxFAIL_MSG("Unsupported button passed in."); + // fall back to the only known remaining case + + case wxMOUSE_BTN_MIDDLE: + return kCGEventOtherMouseDragged; + break; + } + +} +CGMouseButton CGButtonForMouseButton(int button) +{ + switch ( button ) + { + case wxMOUSE_BTN_LEFT: + return kCGMouseButtonLeft; + + case wxMOUSE_BTN_RIGHT: + return kCGMouseButtonRight; + + // All the other buttons use the constant OtherMouseDown but we still + // want to check for invalid parameters so assert first + default: + wxFAIL_MSG("Unsupported button passed in."); + // fall back to the only known remaining case + + case wxMOUSE_BTN_MIDDLE: + return kCGMouseButtonCenter; + } +} + CGPoint GetMousePosition() { int x, y; @@ -72,7 +118,48 @@ bool wxUIActionSimulator::MouseDown(int button) { CGEventType type = CGEventTypeForMouseButton(button, true); wxCFRef event( - CGEventCreateMouseEvent(NULL, type, GetMousePosition(), button)); + CGEventCreateMouseEvent(NULL, type, GetMousePosition(), CGButtonForMouseButton(button))); + + if ( !event ) + return false; + + CGEventSetType(event, type); + CGEventPost(tap, event); + wxCFEventLoop* loop = dynamic_cast(wxEventLoop::GetActive()); + if (loop) + loop->SetShouldWaitForEvent(true); + + return true; +} + +bool wxUIActionSimulator::MouseMove(long x, long y) +{ + CGPoint pos; + pos.x = x; + pos.y = y; + + CGEventType type = kCGEventMouseMoved; + wxCFRef event( + CGEventCreateMouseEvent(NULL, type, pos, kCGMouseButtonLeft)); + + if ( !event ) + return false; + + CGEventSetType(event, type); + CGEventPost(tap, event); + + wxCFEventLoop* loop = dynamic_cast(wxEventLoop::GetActive()); + if (loop) + loop->SetShouldWaitForEvent(true); + + return true; +} + +bool wxUIActionSimulator::MouseUp(int button) +{ + CGEventType type = CGEventTypeForMouseButton(button, false); + wxCFRef event( + CGEventCreateMouseEvent(NULL, type, GetMousePosition(), CGButtonForMouseButton(button))); if ( !event ) return false; @@ -91,14 +178,14 @@ bool wxUIActionSimulator::MouseDblClick(int button) CGEventType downtype = CGEventTypeForMouseButton(button, true); CGEventType uptype = CGEventTypeForMouseButton(button, false); wxCFRef event( - CGEventCreateMouseEvent(NULL, downtype, GetMousePosition(), button)); + CGEventCreateMouseEvent(NULL, downtype, GetMousePosition(), CGButtonForMouseButton(button))); if ( !event ) return false; CGEventSetType(event,downtype); CGEventPost(tap, event); - + CGEventSetType(event, uptype); CGEventPost(tap, event); @@ -115,38 +202,30 @@ bool wxUIActionSimulator::MouseDblClick(int button) return true; } -bool wxUIActionSimulator::MouseMove(long x, long y) +bool wxUIActionSimulator::MouseClickAndDragTo(long x, long y, int button) { - CGPoint pos; - pos.x = x; - pos.y = y; + CGEventType downtype = CGEventTypeForMouseButton(button, true); + CGEventType uptype = CGEventTypeForMouseButton(button, false); + CGEventType dragtype = CGEventTypeForMouseDrag(button) ; - CGEventType type = kCGEventMouseMoved; wxCFRef event( - CGEventCreateMouseEvent(NULL, type, pos, kCGMouseButtonLeft)); - + CGEventCreateMouseEvent(NULL, downtype, GetMousePosition(), CGButtonForMouseButton(button))); + if ( !event ) return false; - - CGEventSetType(event, type); + + CGEventSetType(event,downtype); CGEventPost(tap, event); - wxCFEventLoop* loop = dynamic_cast(wxEventLoop::GetActive()); - if (loop) - loop->SetShouldWaitForEvent(true); - return true; -} - -bool wxUIActionSimulator::MouseUp(int button) -{ - CGEventType type = CGEventTypeForMouseButton(button, false); - wxCFRef event( - CGEventCreateMouseEvent(NULL, type, GetMousePosition(), button)); - - if ( !event ) - return false; - - CGEventSetType(event, type); + CGPoint pos; + pos.x = x; + pos.y = y; + + CGEventSetType(event, dragtype); + CGEventSetLocation(event,pos); + CGEventPost(tap, event); + + CGEventSetType(event, uptype); CGEventPost(tap, event); wxCFEventLoop* loop = dynamic_cast(wxEventLoop::GetActive()); if (loop)