diff --git a/src/qt/brush.cpp b/src/qt/brush.cpp index b37b3cc601..53877420a2 100644 --- a/src/qt/brush.cpp +++ b/src/qt/brush.cpp @@ -13,6 +13,7 @@ #include "wx/qt/private/utils.h" #include "wx/bitmap.h" +#include #include wxIMPLEMENT_DYNAMIC_CLASS(wxBrush,wxGDIObject); @@ -76,11 +77,34 @@ public: void DoSetStipple(const wxBitmap& stipple) { - m_qtBrush.setTexture(*stipple.GetHandle()); - if (stipple.GetMask() != nullptr) - m_style = wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE; + m_style = wxBRUSHSTYLE_STIPPLE; + + if ( !stipple.GetMask() && stipple.GetDepth() == 32 ) + { + m_qtBrush.setTextureImage(stipple.GetHandle()->toImage()); + } else - m_style = wxBRUSHSTYLE_STIPPLE; + { + if ( stipple.GetMask() || stipple.GetDepth() == 1 ) + { + auto pixmap = stipple.GetMask() ? stipple.GetMask()->GetBitmap().GetHandle() + : stipple.GetHandle(); + m_qtBrush.setTexture(*pixmap); + m_style = wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE; + } + else + { + m_qtBrush.setTexture(*stipple.GetHandle()); + + // Note: This code used to be in wxQtDCImpl::SetBrush(). + // But, do we really need to do it ? + + //Don't use the mask + QPixmap p = m_qtBrush.texture(); + p.setMask(QBitmap()); + m_qtBrush.setTexture(p); + } + } } bool operator == (const wxBrushRefData& data) const diff --git a/src/qt/dc.cpp b/src/qt/dc.cpp index c1483c696e..cc82af2acb 100644 --- a/src/qt/dc.cpp +++ b/src/qt/dc.cpp @@ -194,26 +194,10 @@ void wxQtDCImpl::SetBrush(const wxBrush& brush) if (brush.GetStyle() == wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE) { // Use a monochrome mask: use foreground color for the mask - QBrush b(brush.GetHandle()); - b.setColor(m_textForegroundColour.GetQColor()); - b.setTexture(b.texture().mask()); - m_qtPainter->setBrush(b); + m_brush.SetColour(m_textForegroundColour); } - else if (brush.GetStyle() == wxBRUSHSTYLE_STIPPLE) - { - //Don't use the mask - QBrush b(brush.GetHandle()); - QPixmap p = b.texture(); - p.setMask(QBitmap()); - b.setTexture(p); - - m_qtPainter->setBrush(b); - } - else - { - m_qtPainter->setBrush(brush.GetHandle()); - } + m_qtPainter->setBrush(m_brush.GetHandle()); ApplyRasterColourOp(); }