From 74a186065ad04a1ed3d43baeccec9083910ec623 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 3 Jul 2016 10:16:12 -0400 Subject: [PATCH 1/2] Add wxEVT_MAGNIFY mouse event. Currently this is implemented for wxOSX only. Closes #14322. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78274 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + include/wx/event.h | 9 ++++++++- interface/wx/event.h | 29 +++++++++++++++++++++++++++++ src/common/event.cpp | 4 ++++ src/osx/cocoa/window.mm | 10 ++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff --git a/docs/changes.txt b/docs/changes.txt index 72e7d42..6436bfb 100644 --- docs/changes.txt +++ docs/changes.txt @@ -585,6 +585,7 @@ All: All (GUI): +- Add wxEVT_MAGNIFY mouse event (Joost Nieuwenhuijse). - Add wxGenericListCtrl::EndEditLabel() (Tim Kosse). - Implement bounding box computation in wxGCDC (Toni Ruža). - Fix saving GIF animations with 2.5s+ delays between frames (elvissteinjr). diff --git a/include/wx/event.h b/include/wx/event.h index 61ec19c..26af365 100644 --- include/wx/event.h +++ include/wx/event.h @@ -716,6 +716,7 @@ wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX1_DCLICK, wxMouseEvent); wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX2_DOWN, wxMouseEvent); wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX2_UP, wxMouseEvent); wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX2_DCLICK, wxMouseEvent); +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_MAGNIFY, wxMouseEvent); // Character input event type wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_CHAR, wxKeyEvent); @@ -1751,6 +1752,8 @@ public: bool Aux1DClick() const { return (m_eventType == wxEVT_AUX1_DCLICK); } bool Aux2DClick() const { return (m_eventType == wxEVT_AUX2_DCLICK); } + bool Magnify() const { return (m_eventType == wxEVT_MAGNIFY); } + // True if a button is down and the mouse is moving bool Dragging() const { @@ -1805,6 +1808,7 @@ public: // Is the system set to do page scrolling? bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); } + float GetMagnification() const { return m_magnification; } virtual wxEvent *Clone() const { return new wxMouseEvent(*this); } virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_USER_INPUT; } @@ -1823,6 +1827,7 @@ public: int m_wheelDelta; int m_linesPerAction; int m_columnsPerAction; + float m_magnification; protected: void Assign(const wxMouseEvent& evt); @@ -4218,6 +4223,7 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent& #define EVT_MOUSE_AUX2_DOWN(func) wx__DECLARE_EVT0(wxEVT_AUX2_DOWN, wxMouseEventHandler(func)) #define EVT_MOUSE_AUX2_UP(func) wx__DECLARE_EVT0(wxEVT_AUX2_UP, wxMouseEventHandler(func)) #define EVT_MOUSE_AUX2_DCLICK(func) wx__DECLARE_EVT0(wxEVT_AUX2_DCLICK, wxMouseEventHandler(func)) +#define EVT_MAGNIFY(func) wx__DECLARE_EVT0(wxEVT_MAGNIFY, wxMouseEventHandler(func)) // All mouse events #define EVT_MOUSE_EVENTS(func) \ @@ -4239,7 +4245,8 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent& EVT_MOTION(func) \ EVT_LEAVE_WINDOW(func) \ EVT_ENTER_WINDOW(func) \ - EVT_MOUSEWHEEL(func) + EVT_MOUSEWHEEL(func) \ + EVT_MAGNIFY(func) // Scrolling from wxWindow (sent to wxScrolledWindow) #define EVT_SCROLLWIN_TOP(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_TOP, wxScrollWinEventHandler(func)) diff --git a/interface/wx/event.h b/interface/wx/event.h index 52bb609..7fe007a 100644 --- interface/wx/event.h +++ interface/wx/event.h @@ -2626,6 +2626,8 @@ enum wxMouseWheelAxis Process a @c wxEVT_MOUSEWHEEL event. @event{EVT_MOUSE_EVENTS(func)} Process all mouse events. + @event{EVT_MAGNIFY(func)} + Process a @c wxEVT_MAGNIFY event (new since wxWidgets 3.1.0). @endEventTable @library{wxcore} @@ -2659,6 +2661,7 @@ public: @li @c wxEVT_AUX2_DCLICK @li @c wxEVT_MOTION @li @c wxEVT_MOUSEWHEEL + @li @c wxEVT_MAGNIFY */ wxMouseEvent(wxEventType mouseEventType = wxEVT_NULL); @@ -2785,6 +2788,21 @@ public: wxPoint GetLogicalPosition(const wxDC& dc) const; /** + For magnify (pinch to zoom) events: returns the change in magnification. + + A value of 0 means no change, a positive value means we should enlarge + (or zoom in), a negative value means we should shrink (or zoom out). + + This method is only valid to call for @c wxEVT_MAGNIFY events which are + currently only generated under OS X. + + @see Magnify() + + @since 3.1.0 + */ + float GetMagnification() const; + + /** Get wheel delta, normally 120. This is the threshold for action to be taken, and one such action @@ -2851,6 +2869,17 @@ public: bool LeftUp() const; /** + Returns @true if the event is a magnify (i.e.\ pinch to zoom) event. + + Such events are currently generated only under OS X. + + @see GetMagnification() + + @since 3.1.0 + */ + bool Magnify() const; + + /** Returns @true if the Meta key was down at the time of the event. */ bool MetaDown() const; diff --git a/src/common/event.cpp b/src/common/event.cpp index d92a4ac..1015c84 100644 --- src/common/event.cpp +++ src/common/event.cpp @@ -208,6 +208,7 @@ wxDEFINE_EVENT( wxEVT_AUX1_DCLICK, wxMouseEvent ); wxDEFINE_EVENT( wxEVT_AUX2_DOWN, wxMouseEvent ); wxDEFINE_EVENT( wxEVT_AUX2_UP, wxMouseEvent ); wxDEFINE_EVENT( wxEVT_AUX2_DCLICK, wxMouseEvent ); +wxDEFINE_EVENT( wxEVT_MAGNIFY, wxMouseEvent ); // Character input event type wxDEFINE_EVENT( wxEVT_CHAR, wxKeyEvent ); @@ -576,6 +577,7 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType) m_wheelDelta = 0; m_linesPerAction = 0; m_columnsPerAction = 0; + m_magnification = 0.0f; } void wxMouseEvent::Assign(const wxMouseEvent& event) @@ -600,6 +602,8 @@ void wxMouseEvent::Assign(const wxMouseEvent& event) m_linesPerAction = event.m_linesPerAction; m_columnsPerAction = event.m_columnsPerAction; m_wheelAxis = event.m_wheelAxis; + + m_magnification = event.m_magnification; } // return true if was a button dclick event diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index ede8ebf..d9fa4ae 100644 --- src/osx/cocoa/window.mm +++ src/osx/cocoa/window.mm @@ -741,6 +741,12 @@ void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEve case NSMouseMoved : wxevent.SetEventType( wxEVT_MOTION ) ; break; + + case NSEventTypeMagnify: + wxevent.SetEventType( wxEVT_MAGNIFY ); + wxevent.m_magnification = [nsEvent magnification]; + break; + default : break ; } @@ -1772,6 +1778,10 @@ void wxOSXCocoaClassAddWXMethods(Class c) wxOSX_CLASS_ADD_METHOD(c, @selector(scrollWheel:), (IMP) wxOSX_mouseEvent, "v@:@" ) wxOSX_CLASS_ADD_METHOD(c, @selector(mouseEntered:), (IMP) wxOSX_mouseEvent, "v@:@" ) wxOSX_CLASS_ADD_METHOD(c, @selector(mouseExited:), (IMP) wxOSX_mouseEvent, "v@:@" ) + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + wxOSX_CLASS_ADD_METHOD(c, @selector(magnifyWithEvent:), (IMP)wxOSX_mouseEvent, "v@:@") +#endif wxOSX_CLASS_ADD_METHOD(c, @selector(cursorUpdate:), (IMP) wxOSX_cursorUpdate, "v@:@" ) -- 2.3.2 (Apple Git-55)