From 6969e2412cbe0f23db6d15a11582c654ae319e17 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Thu, 9 Jul 2020 12:11:07 +0000 Subject: [PATCH] optimize QBrush::isOpaque() Signed-off-by: Ivailo Monev --- src/gui/painting/qbrush.cpp | 40 ++++++++++++++-------------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index d050f831c..8f487b287 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -758,23 +758,6 @@ const QGradient *QBrush::gradient() const return 0; } -static bool qt_isExtendedRadialGradient(const QBrush &brush) -{ - if (brush.style() == Qt::RadialGradientPattern) { - const QGradient *g = brush.gradient(); - const QRadialGradient *rg = static_cast(g); - - if (!qFuzzyIsNull(rg->focalRadius())) - return true; - - QPointF delta = rg->focalPoint() - rg->center(); - if (delta.x() * delta.x() + delta.y() * delta.y() > rg->radius() * rg->radius()) - return true; - } - - return false; -} - /*! Returns true if the brush is fully opaque otherwise false. A brush is considered opaque if: @@ -789,22 +772,27 @@ static bool qt_isExtendedRadialGradient(const QBrush &brush) bool QBrush::isOpaque() const { - bool opaqueColor = d->color.alpha() == 255; + // Test awfully simple case first, opaque color + if (d->style == Qt::SolidPattern) { + return (d->color.alpha() == 255); + } else if (d->style == Qt::RadialGradientPattern) { + const QRadialGradient *rg = static_cast(gradient()); - // Test awfully simple case first - if (d->style == Qt::SolidPattern) - return opaqueColor; + if (!qFuzzyIsNull(rg->focalRadius())) + return false; - if (qt_isExtendedRadialGradient(*this)) - return false; + QPointF delta = rg->focalPoint() - rg->center(); + if (delta.x() * delta.x() + delta.y() * delta.y() > rg->radius() * rg->radius()) + return false; + } if (d->style == Qt::LinearGradientPattern || d->style == Qt::RadialGradientPattern || d->style == Qt::ConicalGradientPattern) { - QGradientStops stops = gradient()->stops(); - for (int i=0; istops()) { + if (stop.second.alpha() != 255) return false; + } return true; } else if (d->style == Qt::TexturePattern) { return qHasPixmapTexture(*this) -- 2.11.0