X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0bca03736369e836cce9297509505c5972e775dd..ded83b1a5cebd3c1257f4d254c97d3cfb39bb5aa:/src/univ/topluniv.cpp diff --git a/src/univ/topluniv.cpp b/src/univ/topluniv.cpp index 401881eb91..3d0f437c5b 100644 --- a/src/univ/topluniv.cpp +++ b/src/univ/topluniv.cpp @@ -27,13 +27,37 @@ #include "wx/dcclient.h" #include "wx/settings.h" #include "wx/bitmap.h" + #include "wx/image.h" + #include "wx/frame.h" #endif #include "wx/univ/renderer.h" -#include "wx/image.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 @@ -97,8 +121,7 @@ bool wxTopLevelWindow::Create(wxWindow *parent, wxSYSTEM_MENU | wxRESIZE_BORDER | wxFRAME_TOOL_WINDOW | wxRESIZE_BORDER); style |= wxSIMPLE_BORDER; - SetExtraStyle(exstyleOrig & - ~(wxFRAME_EX_CONTEXTHELP | wxDIALOG_EX_CONTEXTHELP)); + SetExtraStyle(exstyleOrig & ~wxWS_EX_CONTEXTHELP); } if ( !wxTopLevelWindowNative::Create(parent, id, title, pos, @@ -154,7 +177,7 @@ long wxTopLevelWindow::GetDecorationsStyle() const style |= wxTOPLEVEL_BUTTON_MAXIMIZE; } #if wxUSE_HELP - if ( m_exStyle & (wxFRAME_EX_CONTEXTHELP | wxDIALOG_EX_CONTEXTHELP)) + if ( m_exStyle & wxWS_EX_CONTEXTHELP) style |= wxTOPLEVEL_BUTTON_HELP; #endif } @@ -780,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; @@ -794,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: @@ -855,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 ) { @@ -906,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 ) {