diff --git a/include/wx/msw/setup.h b/include/wx/msw/setup.h index b1d20d927..4f834c941 100644 --- a/include/wx/msw/setup.h +++ b/include/wx/msw/setup.h @@ -1648,7 +1648,7 @@ #if defined(_MSC_VER) && _MSC_VER >= 1600 #define wxUSE_GRAPHICS_DIRECT2D wxUSE_GRAPHICS_CONTEXT #else - #define wxUSE_GRAPHICS_DIRECT2D 0 + #define wxUSE_GRAPHICS_DIRECT2D wxUSE_GRAPHICS_CONTEXT #endif // wxWebRequest backend based on WinHTTP. diff --git a/src/generic/tipwin.cpp b/src/generic/tipwin.cpp index f8ac37f5f..c95371d06 100644 --- a/src/generic/tipwin.cpp +++ b/src/generic/tipwin.cpp @@ -33,6 +33,10 @@ #include "wx/display.h" #include "wx/vector.h" +#if defined(WIN32) +#include "wx/graphics.h" +#endif // defined(WIN32) + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -298,15 +302,38 @@ void wxTipWindowView::OnPaint(wxPaintEvent& WXUNUSED(event)) rect.width = size.x; rect.height = size.y; - // first filll the background - dc.SetBrush(wxBrush(GetBackgroundColour(), wxBRUSHSTYLE_SOLID)); - dc.SetPen(wxPen(GetForegroundColour(), 1, wxPENSTYLE_SOLID)); - dc.DrawRectangle(rect); +#if defined(WIN32) + // Tooltips should be rendered with Direct2D if at all possible. + wxGraphicsRenderer* renderer = wxGraphicsRenderer::GetDirect2DRenderer(); + wxGraphicsContext* context = nullptr; + if (renderer != nullptr) + { + context = renderer->CreateContextFromUnknownDC(dc); + if (context != nullptr) + { + // first fill the background + context->SetBrush(wxBrush(GetBackgroundColour(), wxBRUSHSTYLE_SOLID)); + context->SetPen(wxPen(GetForegroundColour(), 1, wxPENSTYLE_SOLID)); + context->DrawRectangle(0, 0, rect.width - 1, rect.height - 1); - // and then draw the text line by line - dc.SetTextBackground(GetBackgroundColour()); - dc.SetTextForeground(GetForegroundColour()); - dc.SetFont(GetFont()); + // and then draw the text line by line + context->SetFont(GetFont(), GetForegroundColour()); + } + } + + if (context == nullptr) +#endif // defined(WIN32) + { + // first filll the background + dc.SetBrush(wxBrush(GetBackgroundColour(), wxBRUSHSTYLE_SOLID)); + dc.SetPen(wxPen(GetForegroundColour(), 1, wxPENSTYLE_SOLID)); + dc.DrawRectangle(rect); + + // and then draw the text line by line + dc.SetTextBackground(GetBackgroundColour()); + dc.SetTextForeground(GetForegroundColour()); + dc.SetFont(GetFont()); + } wxPoint pt; pt.x = TEXT_MARGIN_X; @@ -314,10 +341,26 @@ void wxTipWindowView::OnPaint(wxPaintEvent& WXUNUSED(event)) const size_t count = m_textLines.size(); for ( size_t n = 0; n < count; n++ ) { - dc.DrawText(m_textLines[n], pt); +#if defined(WIN32) + if (context != nullptr) + { + context->DrawText(m_textLines[n], pt.x, pt.y); + } + else +#endif // defined(WIN32) + { + dc.DrawText(m_textLines[n], pt); + } pt.y += m_heightLine; } + +#if defined(WIN32) + if (context != nullptr) + { + delete context; + } +#endif // defined(WIN32) } void wxTipWindowView::OnMouseClick(wxMouseEvent& WXUNUSED(event)) diff --git a/src/msw/graphicsd2d.cpp b/src/msw/graphicsd2d.cpp index 89b74102a..e2a96a760 100644 --- a/src/msw/graphicsd2d.cpp +++ b/src/msw/graphicsd2d.cpp @@ -4767,7 +4767,8 @@ void wxD2DContext::DoDrawText(const wxString& str, wxDouble x, wxDouble y) GetRenderTarget()->DrawTextLayout( D2D1::Point2F(x, y), textLayout, - fontData->GetBrushData().GetBrush()); + fontData->GetBrushData().GetBrush(), + D2D1_DRAW_TEXT_OPTIONS::D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT); } void wxD2DContext::EnsureInitialized() diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 93554f1c7..3e879b3c1 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -1573,6 +1573,7 @@ outlineView:(NSOutlineView*)outlineView [self setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO]; [self setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES]; [self setTarget:self]; + self.intercellSpacing = NSZeroSize; } return self; }