X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cd0f218cdd3114dc6770bc9f6703225aabb5a2de..cc4d5638c66a409e421420ed7110917755a66788:/src/osx/uiaction_osx.cpp diff --git a/src/osx/uiaction_osx.cpp b/src/osx/uiaction_osx.cpp index d480f83817..c916923a3f 100644 --- a/src/osx/uiaction_osx.cpp +++ b/src/osx/uiaction_osx.cpp @@ -4,7 +4,6 @@ // Author: Kevin Ollivier, Steven Lamerton, Vadim Zeitlin // Modified by: // Created: 2010-03-06 -// RCS-ID: $Id$ // Copyright: (c) Kevin Ollivier // (c) 2010 Steven Lamerton // (c) 2010 Vadim Zeitlin @@ -53,7 +52,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 +117,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 +177,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 +201,37 @@ bool wxUIActionSimulator::MouseDblClick(int button) return true; } -bool wxUIActionSimulator::MouseMove(long x, long y) +bool wxUIActionSimulator::MouseDragDrop(long x1, long y1, long x2, long y2, + int button) { - CGPoint pos; - pos.x = x; - pos.y = y; + CGPoint pos1,pos2; + pos1.x = x1; + pos1.y = y1; + pos2.x = x2; + pos2.y = y2; - CGEventType type = kCGEventMouseMoved; - wxCFRef event( - CGEventCreateMouseEvent(NULL, type, pos, kCGMouseButtonLeft)); + CGEventType downtype = CGEventTypeForMouseButton(button, true); + CGEventType uptype = CGEventTypeForMouseButton(button, false); + CGEventType dragtype = CGEventTypeForMouseDrag(button) ; + wxCFRef event( + CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, pos1, CGButtonForMouseButton(button))); + if ( !event ) return false; - - CGEventSetType(event, type); + + CGEventSetType(event,kCGEventMouseMoved); 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); + CGEventSetType(event,downtype); + CGEventPost(tap, event); + + + CGEventSetType(event, dragtype); + CGEventSetLocation(event,pos2); + CGEventPost(tap, event); + + CGEventSetType(event, uptype); CGEventPost(tap, event); wxCFEventLoop* loop = dynamic_cast(wxEventLoop::GetActive()); if (loop)