X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f334beabb2c4e7f1e2552c608876184e5c5fa3f..54921697ae6cb35c5865620dce494227b0df5e02:/src/generic/sashwin.cpp?ds=sidebyside diff --git a/src/generic/sashwin.cpp b/src/generic/sashwin.cpp index b326c0caee..1b64276b86 100644 --- a/src/generic/sashwin.cpp +++ b/src/generic/sashwin.cpp @@ -36,6 +36,8 @@ #include "wx/sashwin.h" #include "wx/laywin.h" +DEFINE_EVENT_TYPE(wxEVT_SASH_DRAGGED) + IMPLEMENT_DYNAMIC_CLASS(wxSashWindow, wxWindow) IMPLEMENT_DYNAMIC_CLASS(wxSashEvent, wxCommandEvent) @@ -45,28 +47,19 @@ BEGIN_EVENT_TABLE(wxSashWindow, wxWindow) EVT_MOUSE_EVENTS(wxSashWindow::OnMouseEvent) END_EVENT_TABLE() -wxSashWindow::wxSashWindow() +bool wxSashWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style, const wxString& name) { - m_draggingEdge = wxSASH_NONE; - m_dragMode = wxSASH_DRAG_NONE; - m_oldX = 0; - m_oldY = 0; - m_firstX = 0; - m_firstY = 0; - m_borderSize = 3 ; - m_extraBorderSize = 0; - m_sashCursorWE = NULL; - m_sashCursorNS = NULL; + return wxWindow::Create(parent, id, pos, size, style, name); +} - m_minimumPaneSizeX = 0; - m_minimumPaneSizeY = 0; - m_maximumPaneSizeX = 10000; - m_maximumPaneSizeY = 10000; +wxSashWindow::~wxSashWindow() +{ + delete m_sashCursorWE; + delete m_sashCursorNS; } -wxSashWindow::wxSashWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, - const wxSize& size, long style, const wxString& name) - :wxWindow(parent, id, pos, size, style, name) +void wxSashWindow::Init() { m_draggingEdge = wxSASH_NONE; m_dragMode = wxSASH_DRAG_NONE; @@ -82,17 +75,12 @@ wxSashWindow::wxSashWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, m_maximumPaneSizeY = 10000; m_sashCursorWE = new wxCursor(wxCURSOR_SIZEWE); m_sashCursorNS = new wxCursor(wxCURSOR_SIZENS); + m_mouseCaptured = FALSE; // Eventually, we'll respond to colour change messages InitColours(); } -wxSashWindow::~wxSashWindow() -{ - delete m_sashCursorWE; - delete m_sashCursorNS; -} - void wxSashWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); @@ -111,16 +99,18 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) wxSashEdgePosition sashHit = SashHitTest(x, y); // reset the cursor -#ifdef __WXMOTIF__ - SetCursor(* wxSTANDARD_CURSOR); +#if defined(__WXMOTIF__) || defined(__WXGTK__) + // Not necessary and in fact inhibits proper cursor setting (JACS 8/2000) + //SetCursor(* wxSTANDARD_CURSOR); #endif #ifdef __WXMSW__ - SetCursor(wxCursor()); + SetCursor(wxNullCursor); #endif if (event.LeftDown()) { CaptureMouse(); + m_mouseCaptured = TRUE; if ( sashHit != wxSASH_NONE ) { @@ -159,7 +149,10 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) else if ( event.LeftUp() && m_dragMode == wxSASH_DRAG_LEFT_DOWN ) { // Wasn't a proper drag - ReleaseMouse(); + if (m_mouseCaptured) + ReleaseMouse(); + m_mouseCaptured = FALSE; + wxScreenDC::EndDrawingOnTop(); m_dragMode = wxSASH_DRAG_NONE; m_draggingEdge = wxSASH_NONE; @@ -168,7 +161,10 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) { // We can stop dragging now and see what we've got. m_dragMode = wxSASH_DRAG_NONE; - ReleaseMouse(); + if (m_mouseCaptured) + ReleaseMouse(); + m_mouseCaptured = FALSE; + // Erase old tracker DrawSashTracker(m_draggingEdge, m_oldX, m_oldY); @@ -288,7 +284,9 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) } else if ( event.LeftUp() ) { - ReleaseMouse(); + if (m_mouseCaptured) + ReleaseMouse(); + m_mouseCaptured = FALSE; } else if (event.Moving() && !event.Dragging()) { @@ -304,6 +302,10 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) SetCursor(*m_sashCursorNS); } } + else + { + SetCursor(wxNullCursor); + } } else if ( event.Dragging() && ((m_dragMode == wxSASH_DRAG_DRAGGING) || @@ -411,7 +413,7 @@ void wxSashWindow::DrawBorders(wxDC& dc) wxPen lightShadowPen(m_lightShadowColour, 1, wxSOLID); wxPen hilightPen(m_hilightColour, 1, wxSOLID); - if ( GetWindowStyleFlag() & wxSW_3D ) + if ( GetWindowStyleFlag() & wxSW_3DBORDER ) { dc.SetPen(mediumShadowPen); dc.DrawLine(0, 0, w-1, 0); @@ -476,20 +478,20 @@ void wxSashWindow::DrawSash(wxSashEdgePosition edge, wxDC& dc) dc.SetBrush(faceBrush); dc.DrawRectangle(sashPosition, 0, GetEdgeMargin(edge), h); - if (GetWindowStyleFlag() & wxSW_3D) + if (GetWindowStyleFlag() & wxSW_3DSASH) { if (edge == wxSASH_LEFT) { - // Draw a black line on the left to indicate that the + // Draw a dark grey line on the left to indicate that the // sash is raised - dc.SetPen(blackPen); + dc.SetPen(mediumShadowPen); dc.DrawLine(GetEdgeMargin(edge), 0, GetEdgeMargin(edge), h); } else { - // Draw a white line on the right to indicate that the + // Draw a highlight line on the right to indicate that the // sash is raised - dc.SetPen(whitePen); + dc.SetPen(hilightPen); dc.DrawLine(w - GetEdgeMargin(edge), 0, w - GetEdgeMargin(edge), h); } } @@ -506,21 +508,21 @@ void wxSashWindow::DrawSash(wxSashEdgePosition edge, wxDC& dc) dc.SetBrush(faceBrush); dc.DrawRectangle(0, sashPosition, w, GetEdgeMargin(edge)); - if (GetWindowStyleFlag() & wxSW_3D) + if (GetWindowStyleFlag() & wxSW_3DSASH) { if (edge == wxSASH_BOTTOM) { - // Draw a black line on the bottom to indicate that the + // Draw a highlight line on the bottom to indicate that the // sash is raised - dc.SetPen(blackPen); + dc.SetPen(hilightPen); dc.DrawLine(0, h - GetEdgeMargin(edge), w, h - GetEdgeMargin(edge)); } else { - // Draw a white line on the top to indicate that the + // Draw a drak grey line on the top to indicate that the // sash is raised - dc.SetPen(whitePen); - dc.DrawLine(0, GetEdgeMargin(edge), w, GetEdgeMargin(edge)); + dc.SetPen(mediumShadowPen); + dc.DrawLine(1, GetEdgeMargin(edge), w-1, GetEdgeMargin(edge)); } } } @@ -656,7 +658,7 @@ void wxSashWindow::SizeWindows() void wxSashWindow::InitColours() { // Shadow colours -#if defined(__WIN95__) +#ifndef __WIN16__ m_faceColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE); m_mediumShadowColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW); m_darkShadowColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DDKSHADOW);