QskRgb::isVisible introduced

This commit is contained in:
Uwe Rathmann 2024-09-24 10:14:26 +02:00
parent 3ecd1e90cc
commit 25b9423ae4
7 changed files with 29 additions and 15 deletions

View File

@ -209,6 +209,16 @@ namespace QskRgb
return toTransparent( rgb, qRound( opacity * 255 ) );
}
inline bool isVisible( QRgb rgb )
{
return qAlpha( rgb ) > 0;
}
inline bool isVisible( const QColor& color )
{
return color.isValid() && color.alpha() > 0;
}
QSK_EXPORT QRgb lighter( QRgb, int factor = 150 ) noexcept;
QSK_EXPORT QRgb darker( QRgb, int factor = 200 ) noexcept;
}

View File

@ -12,6 +12,7 @@
#include "QskGradient.h"
#include "QskSGNode.h"
#include "QskShadowMetrics.h"
#include "QskRgbValue.h"
#include <qpainterpath.h>
@ -91,12 +92,10 @@ void QskArcNode::setArcData( const QRectF& rect, const QskArcMetrics& arcMetrics
const auto metricsArc = arcMetrics.toAbsolute( rect.size() );
const auto hasFilling = gradient.isVisible();
const auto hasBorder = ( borderWidth > 0.0 )
&& borderColor.isValid() && ( borderColor.alpha() > 0 );
const auto hasBorder = ( borderWidth > 0.0 ) && QskRgb::isVisible( borderColor );
const auto hasShadow = hasFilling && QskRgb::isVisible( shadowColor );
const auto hasShadow = shadowColor.isValid() && ( shadowColor.alpha() > 0 );
if ( hasShadow && hasFilling )
if ( hasShadow )
{
/*
The shader of the shadow node is for circular arcs and we have some

View File

@ -9,11 +9,12 @@
#include "QskArcMetrics.h"
#include "QskGradient.h"
#include "QskSGNode.h"
#include "QskRgbValue.h"
#include "QskFillNodePrivate.h"
static inline bool qskHasBorder( qreal width, const QColor& color )
{
return ( width > 0.0 ) && color.isValid() && ( color.alpha() > 0 );
return ( width > 0.0 ) && QskRgb::isVisible( color );
}
class QskArcRenderNodePrivate final : public QskFillNodePrivate
@ -42,7 +43,7 @@ class QskArcRenderNodePrivate final : public QskFillNodePrivate
{
QskHashValue hash = 13000;
if ( borderColor.isValid() && ( borderColor.alpha() > 0 ) )
if ( QskRgb::isVisible( borderColor ) )
hash = qHashBits( &borderColor, sizeof( borderColor ), hash );
if ( gradient.isVisible() )

View File

@ -489,7 +489,7 @@ void QskArcRenderer::setColoredBorderLines( const QRectF& rect,
geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip );
geometry.markVertexDataDirty();
if ( borderWidth <= 0.0 || !( borderColor.isValid() && borderColor.alpha() > 0 ) )
if ( borderWidth <= 0.0 || !QskRgb::isVisible( borderColor ) )
{
qskAllocateColoredLines( geometry, 0 );
return;

View File

@ -13,6 +13,7 @@
#include "QskShadowMetrics.h"
#include "QskBoxBorderMetrics.h"
#include "QskBoxBorderColors.h"
#include "QskRgbValue.h"
namespace
{
@ -69,8 +70,10 @@ void QskBoxNode::updateNode( const QRectF& rect,
if ( !rect.isEmpty() )
{
if ( !shadowMetrics.isNull()
&& shadowColor.isValid() && shadowColor.alpha() != 0 )
const auto hasShadow = !shadowMetrics.isNull()
&& QskRgb::isVisible( shadowColor );
if ( hasShadow )
{
shadowNode = qskNode< QskBoxShadowNode >( this, ShadowRole );
shadowNode->setShadowData( shadowMetrics.shadowRect( rect ),

View File

@ -8,6 +8,7 @@
#include "QskStippleMetrics.h"
#include "QskStippledLineRenderer.h"
#include "QskSGNode.h"
#include "QskRgbValue.h"
#include <qtransform.h>
#include <qline.h>
@ -163,8 +164,7 @@ void QskLinesNode::updateLines( const QColor& color,
qreal lineWidth, const QskStippleMetrics& stippleMetrics,
const QTransform& transform, int count, const QLineF* lines )
{
if ( !stippleMetrics.isValid() || !color.isValid()
|| color.alpha() == 0 || count == 0 )
if ( !stippleMetrics.isValid() || !QskRgb::isVisible( color ) || count == 0 )
{
QskSGNode::resetGeometry( this );
return;
@ -195,7 +195,7 @@ void QskLinesNode::updateGrid( const QColor& color,
const QTransform& transform, const QRectF& rect,
const QVector< qreal >& xValues, const QVector< qreal >& yValues )
{
if ( !stippleMetrics.isValid() || !color.isValid() || color.alpha() == 0 )
if ( !stippleMetrics.isValid() || !QskRgb::isVisible( color ) )
{
QskSGNode::resetGeometry( this );
return;
@ -409,7 +409,7 @@ QSGGeometry::Point2D* QskLinesNode::setSolidLines(
void QskLinesNode::updatePolygon( const QColor& color, qreal lineWidth,
const QTransform& transform, const QPolygonF& polygon )
{
if ( polygon.isEmpty() || !color.isValid() || ( color.alpha() == 0 ) )
if ( polygon.isEmpty() || !QskRgb::isVisible( color ) )
{
QskSGNode::resetGeometry( this );
return;

View File

@ -6,6 +6,7 @@
#include "QskStrokeNode.h"
#include "QskVertex.h"
#include "QskGradient.h"
#include "QskRgbValue.h"
#include <qpainterpath.h>
@ -24,7 +25,7 @@ static inline bool qskIsPenVisible( const QPen& pen )
}
else
{
if ( !pen.color().isValid() || ( pen.color().alpha() == 0 ) )
if ( !QskRgb::isVisible( pen.color() ) )
return false;
}