X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4a4bd13d46c34069661766e9d3d2cfbdd0dbb86..a3f4e9e81afa4f435b137ebbfb5b07e98a698271:/src/generic/splitter.cpp diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index bc24c4bae5..9486d9425e 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -152,41 +152,23 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) { CaptureMouse(); - // Required for X to specify that - // that we wish to draw on top of all windows - // - and we optimise by specifying the area - // for creating the overlap window. - wxScreenDC::StartDrawingOnTop(this); - - // We don't say we're dragging yet; we leave that - // decision for the Dragging() branch, to ensure - // the user has dragged a little bit. - m_dragMode = wxSPLIT_DRAG_LEFT_DOWN; - m_firstX = x; - m_firstY = y; + m_dragMode = wxSPLIT_DRAG_DRAGGING; + + DrawSashTracker(x, y); + m_oldX = x; + m_oldY = y; + return; } } - else if ( event.LeftUp() && m_dragMode == wxSPLIT_DRAG_LEFT_DOWN ) - { - // Wasn't a proper drag - ReleaseMouse(); - wxScreenDC::EndDrawingOnTop(); - m_dragMode = wxSPLIT_DRAG_NONE; - - SetCursor(*wxSTANDARD_CURSOR); - } else if (event.LeftUp() && m_dragMode == wxSPLIT_DRAG_DRAGGING) { // We can stop dragging now and see what we've got. m_dragMode = wxSPLIT_DRAG_NONE; ReleaseMouse(); + // Erase old tracker DrawSashTracker(m_oldX, m_oldY); - // End drawing on top (frees the window used for drawing - // over the screen) - wxScreenDC::EndDrawingOnTop(); - int w, h; GetClientSize(&w, &h); if ( m_splitMode == wxSPLIT_VERTICAL ) @@ -217,7 +199,7 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) m_sashPosition = x; } } - else + else // m_splitMode == wxSPLIT_VERTICAL { if ( !OnSashPositionChange(y) ) return; @@ -244,9 +226,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) { m_sashPosition = y; } - } + } // m_splitMode == wxSPLIT_VERTICAL SizeWindows(); - } + } // left up && dragging else if (event.Moving() && !event.Dragging()) { // Just change the cursor if required @@ -266,37 +248,14 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) SetCursor(*wxSTANDARD_CURSOR); } } - else if ( (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING)) || - (event.Dragging() && SashHitTest(x, y, 4)) ) + else if (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING)) { - if ( m_splitMode == wxSPLIT_VERTICAL ) - { - SetCursor(*m_sashCursorWE); - } - else - { - SetCursor(*m_sashCursorNS); - } - - // Detect that this is really a drag: we've moved more than 1 pixel either way - if ((m_dragMode == wxSPLIT_DRAG_LEFT_DOWN) && -// (abs((int)x - m_firstX) > 1 || abs((int)y - m_firstY) > 1) ) - (abs((int)x - m_firstX) > 0 || abs((int)y - m_firstY) > 1) ) - { - m_dragMode = wxSPLIT_DRAG_DRAGGING; - DrawSashTracker(x, y); - } - else - { - if ( m_dragMode == wxSPLIT_DRAG_DRAGGING ) - { - // Erase old tracker - DrawSashTracker(m_oldX, m_oldY); + // Erase old tracker + DrawSashTracker(m_oldX, m_oldY); + + // Draw new one + DrawSashTracker(x, y); - // Draw new one - DrawSashTracker(x, y); - } - } m_oldX = x; m_oldY = y; } @@ -304,9 +263,6 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) { OnDoubleClickSash(x, y); } - else - { - } } void wxSplitterWindow::OnSize(wxSizeEvent& WXUNUSED(event)) @@ -635,8 +591,8 @@ bool wxSplitterWindow::Unsplit(wxWindow *toRemove) { wxWindow *win = m_windowTwo ; m_windowTwo = (wxWindow *) NULL; - m_sashPosition = 0; OnUnsplit(win); + m_sashPosition = 0; SizeWindows(); } else if ( toRemove == m_windowOne ) @@ -644,12 +600,16 @@ bool wxSplitterWindow::Unsplit(wxWindow *toRemove) wxWindow *win = m_windowOne ; m_windowOne = m_windowTwo; m_windowTwo = (wxWindow *) NULL; - m_sashPosition = 0; OnUnsplit(win); + m_sashPosition = 0; SizeWindows(); } else + { + wxFAIL_MSG("splitter: attempt to remove a non-existent window"); + return FALSE; + } return TRUE; }