diff options
author | Neil <nyamatongwe@gmail.com> | 2020-07-08 20:30:07 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2020-07-08 20:30:07 +1000 |
commit | 5db47041156b975b99ca9284479f306a3063c3da (patch) | |
tree | cc5d8252b0d22c5862ed1986922a094a59adeaf2 /qt/ScintillaEditBase/PlatQt.cpp | |
parent | 2a04e668c7069e63dd350d4eeb8de54507f1d69d (diff) | |
download | scintilla-mirror-5db47041156b975b99ca9284479f306a3063c3da.tar.gz |
Fix translucent rectangle drawing on Qt.
Diffstat (limited to 'qt/ScintillaEditBase/PlatQt.cpp')
-rw-r--r-- | qt/ScintillaEditBase/PlatQt.cpp | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index 8f572981c..d9838841c 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -353,18 +353,34 @@ void SurfaceImpl::AlphaRectangle(PRectangle rc, int alphaOutline, int /*flags*/) { - QColor qOutline = QColorFromCA(outline); - qOutline.setAlpha(alphaOutline); - GetPainter()->setPen(QPen(qOutline)); - - QColor qFill = QColorFromCA(fill); - qFill.setAlpha(alphaFill); - GetPainter()->setBrush(QBrush(qFill)); - - // A radius of 1 shows no curve so add 1 - qreal radius = cornerSize+1; - QRectF rect(rc.left, rc.top, rc.Width() - 1, rc.Height() - 1); - GetPainter()->drawRoundedRect(rect, radius, radius); + const QColor qFill = QColorFromColourAlpha(ColourAlpha(fill, alphaFill)); + const QBrush brushFill(qFill); + GetPainter()->setBrush(brushFill); + + if ((fill == outline) && (alphaFill == alphaOutline)) { + painter->setPen(Qt::NoPen); + const QRectF rect = QRectFFromPRect(rc); + if (cornerSize > 0.0f) { + // A radius of 1 shows no curve so add 1 + qreal radius = cornerSize+1; + GetPainter()->drawRoundedRect(rect, radius, radius); + } else { + GetPainter()->fillRect(rect, brushFill); + } + } else { + const QColor qOutline = QColorFromColourAlpha(ColourAlpha(outline, alphaOutline)); + const QPen penOutline(qOutline); + GetPainter()->setPen(penOutline); + + const QRectF rect(rc.left, rc.top, rc.Width() - 1.5, rc.Height() - 1.5); + if (cornerSize > 0.0f) { + // A radius of 1 shows no curve so add 1 + qreal radius = cornerSize+1; + GetPainter()->drawRoundedRect(rect, radius, radius); + } else { + GetPainter()->drawRect(rect); + } + } } void SurfaceImpl::GradientRectangle(PRectangle rc, const std::vector<ColourStop> &stops, GradientOptions options) { |