X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f073eb2e0786fa44dd41d31eb34d00a75ab0570..77611ad4da9df336a0805508276a81b8f4437107:/src/generic/splitter.cpp?ds=sidebyside diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index 70ac816c85..6950009cb0 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -31,8 +31,8 @@ #include "wx/string.h" #include "wx/splitter.h" #include "wx/dcscreen.h" +#include "wx/settings.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxSplitterWindow, wxWindow) IMPLEMENT_DYNAMIC_CLASS(wxSplitterEvent, wxCommandEvent) @@ -49,7 +49,6 @@ BEGIN_EVENT_TABLE(wxSplitterWindow, wxWindow) EVT_SPLITTER_DCLICK(-1, wxSplitterWindow::OnDoubleClick) EVT_SPLITTER_UNSPLIT(-1, wxSplitterWindow::OnUnsplitEvent) END_EVENT_TABLE() -#endif wxSplitterWindow::wxSplitterWindow() { @@ -163,8 +162,8 @@ void wxSplitterWindow::OnIdle(wxIdleEvent& WXUNUSED(event)) void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) { - long x = event.GetX(); - long y = event.GetY(); + wxCoord x = (wxCoord)event.GetX(), + y = (wxCoord)event.GetY(); // reset the cursor #ifdef __WXMOTIF__ @@ -184,12 +183,21 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) m_dragMode = wxSPLIT_DRAG_DRAGGING; if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0) - { - DrawSashTracker(x, y); - } + { + DrawSashTracker(x, y); + } m_oldX = x; m_oldY = y; + + if ( m_splitMode == wxSPLIT_VERTICAL ) + { + SetCursor(*m_sashCursorWE); + } + else + { + SetCursor(*m_sashCursorNS); + } return; } } @@ -201,9 +209,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) // Erase old tracker if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0) - { + { DrawSashTracker(m_oldX, m_oldY); - } + } // Obtain window size. We are only interested in the dimension the sash // splits up @@ -283,6 +291,19 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) } else if (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING)) { +#ifdef __WXMSW__ + // Otherwise, the cursor sometimes reverts to the normal cursor + // during dragging. + if ( m_splitMode == wxSPLIT_VERTICAL ) + { + SetCursor(*m_sashCursorWE); + } + else + { + SetCursor(*m_sashCursorNS); + } +#endif + // Obtain window size. We are only interested in the dimension the sash // splits up int new_sash_position = @@ -303,9 +324,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) // Erase old tracker if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0) - { + { DrawSashTracker(m_oldX, m_oldY); - } + } if (m_splitMode == wxSPLIT_VERTICAL) x = new_sash_position; @@ -334,14 +355,14 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) // Draw new one if ((GetWindowStyleFlag() & wxSP_LIVE_UPDATE) == 0) - { + { DrawSashTracker(m_oldX, m_oldY); - } - else - { + } + else + { m_sashPosition = new_sash_position; - m_needUpdating = TRUE; - } + m_needUpdating = TRUE; + } } else if ( event.LeftDClick() ) { @@ -423,8 +444,6 @@ bool wxSplitterWindow::SashHitTest(int x, int y, int tolerance) else return FALSE; } - - return FALSE; } // Draw 3D effect borders @@ -491,14 +510,14 @@ void wxSplitterWindow::DrawSash(wxDC& dc) dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetPen(*m_lightShadowPen); - int xShadow = m_borderSize ? m_borderSize - 1 : 0 ; + int xShadow = m_borderSize ? m_borderSize - 1 : 0 ; dc.DrawLine(m_sashPosition, xShadow , m_sashPosition, h-m_borderSize); dc.SetPen(*m_hilightPen); dc.DrawLine(m_sashPosition+1, m_borderSize - 2, m_sashPosition+1, h - m_borderSize+2); dc.SetPen(*m_mediumShadowPen); - int yMedium = m_borderSize ? h-m_borderSize+1 : h ; + int yMedium = m_borderSize ? h-m_borderSize+1 : h ; dc.DrawLine(m_sashPosition+m_sashSize-2, xShadow, m_sashPosition+m_sashSize-2, yMedium); dc.SetPen(*m_darkShadowPen); @@ -650,8 +669,8 @@ void wxSplitterWindow::SizeWindows() } } wxClientDC dc(this); - if ( m_borderSize > 0 ) - DrawBorders(dc); + if ( m_borderSize > 0 ) + DrawBorders(dc); DrawSash(dc); } @@ -892,8 +911,7 @@ void wxSplitterWindow::OnDoubleClick(wxSplitterEvent& event) // for compatibility, call the virtual function OnDoubleClickSash(event.GetX(), event.GetY()); - if ( GetMinimumPaneSize() == 0 - || m_permitUnsplitAlways) + if ( GetMinimumPaneSize() == 0 || m_permitUnsplitAlways ) { Unsplit(); } @@ -903,8 +921,9 @@ void wxSplitterWindow::OnUnsplitEvent(wxSplitterEvent& event) { wxWindow *win = event.GetWindowBeingRemoved(); + // do it before calling OnUnsplit() which may delete the window + win->Show(FALSE); + // for compatibility, call the virtual function OnUnsplit(win); - - win->Show(FALSE); }