diff --git a/docs/changes.txt b/docs/changes.txt index dead06c6e6..ad9a6df3d6 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -62,6 +62,7 @@ All (GUI): - Allow requesting modern (3.x+) OpenGL version in wxGLCanvas (Fabio Arnold). - Allow customizing window shown by wxBusyInfo. +- Add wxEVT_MAGNIFY mouse event (Joost Nieuwenhuijse). - Make results of wxDC::DrawEllipticArc() consistent across all platforms. - XRC handler for wxAuiToolBar added (Kinaou Hervé, David Hart). - Add wxCursor::GetHotSpot(). diff --git a/include/wx/event.h b/include/wx/event.h index 4f6aca1f80..23f2764e09 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -681,6 +681,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); @@ -1733,6 +1734,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 { @@ -1787,6 +1790,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 wxOVERRIDE { return new wxMouseEvent(*this); } virtual wxEventCategory GetEventCategory() const wxOVERRIDE { return wxEVT_CATEGORY_USER_INPUT; } @@ -1805,6 +1809,7 @@ public: int m_wheelDelta; int m_linesPerAction; int m_columnsPerAction; + float m_magnification; protected: void Assign(const wxMouseEvent& evt); @@ -4198,6 +4203,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) \ @@ -4219,7 +4225,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 b1702d3a9b..ad310c0b3b 100644 --- a/interface/wx/event.h +++ b/interface/wx/event.h @@ -2634,6 +2634,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} @@ -2667,6 +2669,7 @@ public: @li @c wxEVT_AUX2_DCLICK @li @c wxEVT_MOTION @li @c wxEVT_MOUSEWHEEL + @li @c wxEVT_MAGNIFY */ wxMouseEvent(wxEventType mouseEventType = wxEVT_NULL); @@ -2792,6 +2795,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. @@ -2858,6 +2876,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. */ diff --git a/src/common/event.cpp b/src/common/event.cpp index e1457b408e..9883e0422d 100644 --- a/src/common/event.cpp +++ b/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 ); @@ -565,6 +566,7 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType) m_wheelDelta = 0; m_linesPerAction = 0; m_columnsPerAction = 0; + m_magnification = 0.0f; } void wxMouseEvent::Assign(const wxMouseEvent& event) @@ -589,6 +591,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 0e09c00fb8..c1b26371a9 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -749,6 +749,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 ; } @@ -1739,6 +1745,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@:@" )