X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8a9c22462aec446d06267ac10b99f1115704b9d1..aaf765a54931a3add43bcf68cec8c80f0b66b18a:/src/generic/sashwin.cpp diff --git a/src/generic/sashwin.cpp b/src/generic/sashwin.cpp index 6daf05f134..8d679953df 100644 --- a/src/generic/sashwin.cpp +++ b/src/generic/sashwin.cpp @@ -22,20 +22,23 @@ #pragma hdrstop #endif +#if wxUSE_SASH + #ifndef WX_PRECOMP -#include "wx/wx.h" + #include "wx/dialog.h" + #include "wx/frame.h" + #include "wx/settings.h" #endif -#if wxUSE_SASH - #include #include -#include "wx/string.h" #include "wx/dcscreen.h" #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 +48,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 +76,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,8 +100,9 @@ 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(wxNullCursor); @@ -121,6 +111,7 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) if (event.LeftDown()) { CaptureMouse(); + m_mouseCaptured = TRUE; if ( sashHit != wxSASH_NONE ) { @@ -159,7 +150,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 +162,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 +285,9 @@ void wxSashWindow::OnMouseEvent(wxMouseEvent& event) } else if ( event.LeftUp() ) { - ReleaseMouse(); + if (m_mouseCaptured) + ReleaseMouse(); + m_mouseCaptured = FALSE; } else if (event.Moving() && !event.Dragging()) { @@ -415,7 +414,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); @@ -480,7 +479,7 @@ 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) { @@ -491,9 +490,9 @@ void wxSashWindow::DrawSash(wxSashEdgePosition edge, wxDC& dc) } else { - // Draw a light grey line on the right to indicate that the + // Draw a highlight line on the right to indicate that the // sash is raised - dc.SetPen(lightShadowPen); + dc.SetPen(hilightPen); dc.DrawLine(w - GetEdgeMargin(edge), 0, w - GetEdgeMargin(edge), h); } } @@ -510,13 +509,13 @@ 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 light grey line on the bottom to indicate that the + // Draw a highlight line on the bottom to indicate that the // sash is raised - dc.SetPen(lightShadowPen); + dc.SetPen(hilightPen); dc.DrawLine(0, h - GetEdgeMargin(edge), w, h - GetEdgeMargin(edge)); } else @@ -660,7 +659,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);