X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7ce6cc9b8eda3c0195ae5233d8a4d35707a88190..df816ad92f556233cc6346e74dbbdb0317f442cd:/src/univ/topluniv.cpp diff --git a/src/univ/topluniv.cpp b/src/univ/topluniv.cpp index a7c87890d6..3d0f437c5b 100644 --- a/src/univ/topluniv.cpp +++ b/src/univ/topluniv.cpp @@ -28,12 +28,36 @@ #include "wx/settings.h" #include "wx/bitmap.h" #include "wx/image.h" + #include "wx/frame.h" #endif #include "wx/univ/renderer.h" #include "wx/cshelp.h" #include "wx/evtloop.h" +// ---------------------------------------------------------------------------- +// wxStdTLWInputHandler: handles focus, resizing and titlebar buttons clicks +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxStdTLWInputHandler : public wxStdInputHandler +{ +public: + wxStdTLWInputHandler(wxInputHandler *inphand); + + virtual bool HandleMouse(wxInputConsumer *consumer, + const wxMouseEvent& event); + virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event); + virtual bool HandleActivation(wxInputConsumer *consumer, bool activated); + +private: + // the window (button) which has capture or NULL and the last hittest result + wxTopLevelWindow *m_winCapture; + long m_winHitTest; + long m_winPressed; + bool m_borderCursorOn; + wxCursor m_origCursor; +}; + // ---------------------------------------------------------------------------- // event tables @@ -779,13 +803,21 @@ void wxTopLevelWindow::OnSystemMenu(wxCommandEvent& event) event.Skip(); } +/* static */ +wxInputHandler * +wxTopLevelWindow::GetStdInputHandler(wxInputHandler *handlerDef) +{ + static wxStdTLWInputHandler s_handler(handlerDef); + + return &s_handler; +} // ============================================================================ -// wxStdFrameInputHandler: handles focus, resizing and titlebar buttons clicks +// wxStdTLWInputHandler: handles focus, resizing and titlebar buttons clicks // ============================================================================ -wxStdFrameInputHandler::wxStdFrameInputHandler(wxInputHandler *inphand) - : wxStdInputHandler(inphand) +wxStdTLWInputHandler::wxStdTLWInputHandler(wxInputHandler *inphand) + : wxStdInputHandler(inphand) { m_winCapture = NULL; m_winHitTest = 0; @@ -793,8 +825,8 @@ wxStdFrameInputHandler::wxStdFrameInputHandler(wxInputHandler *inphand) m_borderCursorOn = false; } -bool wxStdFrameInputHandler::HandleMouse(wxInputConsumer *consumer, - const wxMouseEvent& event) +bool wxStdTLWInputHandler::HandleMouse(wxInputConsumer *consumer, + const wxMouseEvent& event) { // the button has 2 states: pressed and normal with the following // transitions between them: @@ -854,8 +886,8 @@ bool wxStdFrameInputHandler::HandleMouse(wxInputConsumer *consumer, return wxStdInputHandler::HandleMouse(consumer, event); } -bool wxStdFrameInputHandler::HandleMouseMove(wxInputConsumer *consumer, - const wxMouseEvent& event) +bool wxStdTLWInputHandler::HandleMouseMove(wxInputConsumer *consumer, + const wxMouseEvent& event) { if ( event.GetEventObject() == m_winCapture ) { @@ -905,8 +937,8 @@ bool wxStdFrameInputHandler::HandleMouseMove(wxInputConsumer *consumer, return wxStdInputHandler::HandleMouseMove(consumer, event); } -bool wxStdFrameInputHandler::HandleActivation(wxInputConsumer *consumer, - bool activated) +bool wxStdTLWInputHandler::HandleActivation(wxInputConsumer *consumer, + bool activated) { if ( m_borderCursorOn ) {