From ce0cf2b871bcb97b4d8565f725574aa54981dc95 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Wed, 17 Oct 2007 20:57:01 +0000 Subject: [PATCH] Make wxRenderer::DrawItemSelectionRect() draw a focus outline of wxCONTROL_CURRENT and wxCONTROL_FOCUSED is given, blind patch for wxMac git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49204 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/datavgen.cpp | 3 +-- src/generic/listctrl.cpp | 6 +----- src/generic/renderg.cpp | 20 +++++++++++++++++++- src/gtk/renderer.cpp | 2 +- src/mac/carbon/renderer.cpp | 6 ++++++ src/msw/renderer.cpp | 9 ++++----- 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index f91f29dc78..dfc95dbb3f 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -2351,7 +2351,6 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) x, item_last * m_lineHeight); } - bool has_focus = (FindFocus() == this); // redraw the background for the items which are selected/current for (unsigned int item = item_start; item < item_last; item++) { @@ -2359,7 +2358,7 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) if (selected || item == m_currentRow) { int flags = selected ? (int)wxCONTROL_SELECTED : 0; - if ((item == m_currentRow) && has_focus) + if (item == m_currentRow) flags |= wxCONTROL_CURRENT; if (m_hasFocus) flags |= wxCONTROL_FOCUSED; diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index b316c39ea9..7e1830b570 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -1541,11 +1541,7 @@ void wxListLineData::DrawInReportMode( wxDC *dc, if (highlighted) { int flags = wxCONTROL_SELECTED; - if (m_owner->HasFocus() -#ifdef __WXMAC__ - && IsControlActive( (ControlRef)m_owner->GetHandle() ) -#endif - ) + if (m_owner->HasFocus()) flags |= wxCONTROL_FOCUSED; wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, rectHL, flags ); } diff --git a/src/generic/renderg.cpp b/src/generic/renderg.cpp index 7c07f55ff1..0dba0f18d3 100644 --- a/src/generic/renderg.cpp +++ b/src/generic/renderg.cpp @@ -37,6 +37,10 @@ #include "wx/splitter.h" #include "wx/dcmirror.h" +#ifdef __WXMAC__ + #include "wx/mac/private.h" +#endif + // ---------------------------------------------------------------------------- // wxRendererGeneric: our wxRendererNative implementation // ---------------------------------------------------------------------------- @@ -635,10 +639,17 @@ wxRendererGeneric::DrawPushButton(wxWindow *win, } void +#ifdef __WXMAC__ +wxRendererGeneric::DrawItemSelectionRect(wxWindow * win, + wxDC& dc, + const wxRect& rect, + int flags) +#else wxRendererGeneric::DrawItemSelectionRect(wxWindow * WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) +#endif { wxBrush brush; if ( flags & wxCONTROL_SELECTED ) @@ -658,7 +669,14 @@ wxRendererGeneric::DrawItemSelectionRect(wxWindow * WXUNUSED(win), } dc.SetBrush(brush); - dc.SetPen(flags & wxCONTROL_CURRENT ? *wxBLACK_PEN : *wxTRANSPARENT_PEN); + if ((flags & wxCONTROL_CURRENT) && (flags & wxCONTROL_FOCUSED) +#ifdef __WXMAC__ + && IsControlActive( (ControlRef)win->GetHandle() ) +#endif + ) + dc.SetPen( *wxBLACK_PEN ); + else + dc.SetPen( *wxTRANSPARENT_PEN ); dc.DrawRectangle( rect ); } diff --git a/src/gtk/renderer.cpp b/src/gtk/renderer.cpp index 0e945d4d1e..5be8e51806 100644 --- a/src/gtk/renderer.cpp +++ b/src/gtk/renderer.cpp @@ -619,7 +619,7 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, state = GTK_STATE_NORMAL; } - if (flags & wxCONTROL_CURRENT) + if ((flags & wxCONTROL_CURRENT) && (flags & wxCONTROL_FOCUSED)) { gtk_paint_focus( win->m_widget->style, gdk_window, diff --git a/src/mac/carbon/renderer.cpp b/src/mac/carbon/renderer.cpp index e0f9bc23e2..1a58d904af 100644 --- a/src/mac/carbon/renderer.cpp +++ b/src/mac/carbon/renderer.cpp @@ -374,6 +374,12 @@ wxRendererMac::DrawItemSelectionRect(wxWindow *win, { if ( !(flags & wxCONTROL_SELECTED) ) return; + + if (flags & wxCONTROL_FOCUSED) + { + if (!IsControlActive( (ControlRef)win->GetHandle() )) + flags = wxCONTROL_SELECTED; + } RGBColor selColor; GetThemeBrushAsColor(flags & wxCONTROL_FOCUSED diff --git a/src/msw/renderer.cpp b/src/msw/renderer.cpp index b1a3c77ff6..101f7ca658 100644 --- a/src/msw/renderer.cpp +++ b/src/msw/renderer.cpp @@ -534,7 +534,7 @@ wxRendererXP::DrawPushButton(wxWindow * win, } void -wxRendererXP::DrawItemSelectionRect(wxWindow * WXUNUSED(win), +wxRendererXP::DrawItemSelectionRect(wxWindow *win, wxDC& dc, const wxRect& rect, int flags) @@ -557,12 +557,11 @@ wxRendererXP::DrawItemSelectionRect(wxWindow * WXUNUSED(win), } dc.SetBrush(brush); - - // unlike for wxRendererGeneric, on windows we _never_ want to draw - // the outline of the rectangle: dc.SetPen(*wxTRANSPARENT_PEN); - dc.DrawRectangle( rect ); + + if ((flags & wxCONTROL_FOCUSED) && (flags & wxCONTROL_CURRENT)) + DrawFocusRect( win, dc, rect, flags ); } -- 2.45.2