diff --git a/src/generic/caret.cpp b/src/generic/caret.cpp index 5cad74d086..cf90f59851 100644 --- a/src/generic/caret.cpp +++ b/src/generic/caret.cpp @@ -268,10 +268,37 @@ void wxCaret::Refresh() void wxCaret::DoDraw(wxDC *dc) { - dc->SetPen( *wxBLACK_PEN ); - - dc->SetBrush(*(m_hasFocus ? wxBLACK_BRUSH : wxTRANSPARENT_BRUSH)); - dc->SetPen(*wxBLACK_PEN); +#if defined(__WXGTK__) || defined(__WXMAC__) + wxClientDC* clientDC = wxDynamicCast(dc, wxClientDC); + if (clientDC) + { + wxPen pen(*wxBLACK_PEN); + wxBrush brush(*wxBLACK_BRUSH); +#ifdef __WXGTK__ + wxWindow* win = clientDC->m_owner; +#else + wxWindow* win = clientDC->GetWindow(); +#endif + if (win) + { + wxColour backgroundColour(win->GetBackgroundColour()); + if (backgroundColour.Red() < 100 && + backgroundColour.Green() < 100 && + backgroundColour.Blue() < 100) + { + pen = *wxWHITE_PEN; + brush = *wxWHITE_BRUSH; + } + } + dc->SetPen( pen ); + dc->SetBrush(m_hasFocus ? brush : *wxTRANSPARENT_BRUSH); + } + else +#endif + { + dc->SetBrush(*(m_hasFocus ? wxBLACK_BRUSH : wxTRANSPARENT_BRUSH)); + dc->SetPen(*wxBLACK_PEN); + } // VZ: unfortunately, the rectangle comes out a pixel smaller when this is // done under wxGTK - no idea why