QskArcNode supports borders now
This commit is contained in:
parent
328e6a9e6f
commit
785cb33739
|
@ -287,9 +287,9 @@ void Skin::initHints( const Palette& palette )
|
||||||
ed.setColor( QskTextLabel::Text, palette.text );
|
ed.setColor( QskTextLabel::Text, palette.text );
|
||||||
ed.setColor( UsageDiagramBox::DayText, palette.text );
|
ed.setColor( UsageDiagramBox::DayText, palette.text );
|
||||||
|
|
||||||
auto grooveGradient = palette.circularProgressBarGroove;
|
ed.setMetric( CircularProgressBar::Groove | QskAspect::Border, 2 );
|
||||||
grooveGradient.setDirection( QskGradient::Linear );
|
ed.setColor( CircularProgressBar::Groove | QskAspect::Border,
|
||||||
ed.setGradient( CircularProgressBar::Groove, grooveGradient );
|
palette.circularProgressBarGroove );
|
||||||
|
|
||||||
// storage bar
|
// storage bar
|
||||||
{
|
{
|
||||||
|
@ -326,8 +326,8 @@ Skin::Palette DaytimeSkin::palette() const
|
||||||
0xffc4c4c4,
|
0xffc4c4c4,
|
||||||
{ { { 0.0, 0xffff3122 }, { 0.2, 0xfffeeeb7 }, { 0.3, 0xffa7b0ff }, { 0.5, 0xff6776ff },
|
{ { { 0.0, 0xffff3122 }, { 0.2, 0xfffeeeb7 }, { 0.3, 0xffa7b0ff }, { 0.5, 0xff6776ff },
|
||||||
{ 1.0, Qt::black } } },
|
{ 1.0, Qt::black } } },
|
||||||
{ { { 0.0, 0xffe0e0e0 }, { 0.5, 0xfff8f8f8 }, { 1.0, 0xffe0e0e0 } } },
|
0x10000000,
|
||||||
0xffdddddd,
|
0xffdddddd
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ Skin::Palette NighttimeSkin::palette() const
|
||||||
0xff4a4a4a,
|
0xff4a4a4a,
|
||||||
0xff555555,
|
0xff555555,
|
||||||
{ { { 0.0, 0xff991100 }, { 0.2, 0xff9a7a57 }, { 0.5, 0xff3726af }, { 1.0, Qt::black } } },
|
{ { { 0.0, 0xff991100 }, { 0.2, 0xff9a7a57 }, { 0.5, 0xff3726af }, { 1.0, Qt::black } } },
|
||||||
{ { { 0.0, 0xff666666 }, { 0.5, 0xff222222 }, { 1.0, 0xff333333 } } },
|
0x10ffffff,
|
||||||
0xff222222,
|
0xff222222
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ class Skin : public QskSkin
|
||||||
QColor shadow;
|
QColor shadow;
|
||||||
QColor lightDisplayKnobBorder;
|
QColor lightDisplayKnobBorder;
|
||||||
QskGradient lightDisplayColdAndWarmArc;
|
QskGradient lightDisplayColdAndWarmArc;
|
||||||
QskGradient circularProgressBarGroove;
|
QRgb circularProgressBarGroove;
|
||||||
QRgb deviceGraphic;
|
QRgb deviceGraphic;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -144,9 +144,15 @@ static inline bool qskIsBoxVisible( const QskBoxBorderMetrics& borderMetrics,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool qskIsArcVisible( const QskArcMetrics& arcMetrics,
|
static inline bool qskIsArcVisible( const QskArcMetrics& arcMetrics,
|
||||||
const QskGradient& gradient )
|
qreal borderWidth, const QColor borderColor, const QskGradient& gradient )
|
||||||
{
|
{
|
||||||
return !arcMetrics.isNull() && gradient.isVisible();
|
if ( arcMetrics.isNull() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ( borderWidth > 0.0 && borderColor.isValid() && borderColor.alpha() > 0 )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return gradient.isVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline QskTextColors qskTextColors(
|
static inline QskTextColors qskTextColors(
|
||||||
|
@ -205,16 +211,20 @@ static inline QSGNode* qskUpdateBoxNode(
|
||||||
|
|
||||||
static inline QSGNode* qskUpdateArcNode(
|
static inline QSGNode* qskUpdateArcNode(
|
||||||
const QskSkinnable*, QSGNode* node, const QRectF& rect,
|
const QskSkinnable*, QSGNode* node, const QRectF& rect,
|
||||||
|
qreal borderWidth, const QColor borderColor,
|
||||||
const QskGradient& gradient, const QskArcMetrics& metrics )
|
const QskGradient& gradient, const QskArcMetrics& metrics )
|
||||||
{
|
{
|
||||||
if ( rect.isEmpty() || !qskIsArcVisible( metrics, gradient ) )
|
if ( rect.isEmpty() )
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
if ( !qskIsArcVisible( metrics, borderWidth, borderColor, gradient ) )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
auto arcNode = static_cast< QskArcNode* >( node );
|
auto arcNode = static_cast< QskArcNode* >( node );
|
||||||
if ( arcNode == nullptr )
|
if ( arcNode == nullptr )
|
||||||
arcNode = new QskArcNode();
|
arcNode = new QskArcNode();
|
||||||
|
|
||||||
arcNode->setArcData( rect, metrics, gradient );
|
arcNode->setArcData( rect, metrics, borderWidth, borderColor, gradient );
|
||||||
|
|
||||||
return arcNode;
|
return arcNode;
|
||||||
}
|
}
|
||||||
|
@ -502,14 +512,23 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||||
const auto metrics = skinnable->arcMetricsHint( subControl );
|
const auto metrics = skinnable->arcMetricsHint( subControl );
|
||||||
const auto r = rect.marginsRemoved( skinnable->marginHint( subControl ) );
|
const auto r = rect.marginsRemoved( skinnable->marginHint( subControl ) );
|
||||||
|
|
||||||
return qskUpdateArcNode( skinnable, node, r, fillGradient, metrics );
|
const qreal borderWidth = skinnable->metric( subControl | QskAspect::Border );
|
||||||
|
|
||||||
|
QColor borderColor;
|
||||||
|
if ( borderWidth > 0.0 )
|
||||||
|
borderColor = skinnable->color( subControl | QskAspect::Border );
|
||||||
|
|
||||||
|
return qskUpdateArcNode( skinnable, node,
|
||||||
|
r, borderWidth, borderColor, fillGradient, metrics );
|
||||||
}
|
}
|
||||||
|
|
||||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
QSGNode* QskSkinlet::updateArcNode(
|
||||||
QSGNode* node, const QRectF& rect, const QskGradient& fillGradient,
|
const QskSkinnable* skinnable, QSGNode* node, const QRectF& rect,
|
||||||
const QskArcMetrics& metrics )
|
qreal borderWidth, const QColor& borderColor,
|
||||||
|
const QskGradient& fillGradient, const QskArcMetrics& metrics )
|
||||||
{
|
{
|
||||||
return qskUpdateArcNode( skinnable, node, rect, fillGradient, metrics );
|
return qskUpdateArcNode( skinnable, node, rect,
|
||||||
|
borderWidth, borderColor, fillGradient, metrics );
|
||||||
}
|
}
|
||||||
|
|
||||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||||
|
@ -517,8 +536,9 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||||
QskAspect::Subcontrol subControl ) const
|
QskAspect::Subcontrol subControl ) const
|
||||||
{
|
{
|
||||||
const auto rect = qskSubControlRect( this, skinnable, subControl );
|
const auto rect = qskSubControlRect( this, skinnable, subControl );
|
||||||
return updateArcNode( skinnable, node, rect, startAngle, spanAngle,
|
|
||||||
subControl );
|
return updateArcNode( skinnable, node,
|
||||||
|
rect, startAngle, spanAngle, subControl );
|
||||||
}
|
}
|
||||||
|
|
||||||
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||||
|
@ -538,8 +558,15 @@ QSGNode* QskSkinlet::updateArcNode( const QskSkinnable* skinnable,
|
||||||
arcMetrics.setStartAngle( startAngle );
|
arcMetrics.setStartAngle( startAngle );
|
||||||
arcMetrics.setSpanAngle( spanAngle );
|
arcMetrics.setSpanAngle( spanAngle );
|
||||||
|
|
||||||
|
const qreal borderWidth = skinnable->metric( subControl | QskAspect::Border );
|
||||||
|
|
||||||
|
QColor borderColor;
|
||||||
|
if ( borderWidth > 0.0 )
|
||||||
|
borderColor = skinnable->color( subControl | QskAspect::Border );
|
||||||
|
|
||||||
const auto r = rect.marginsRemoved( skinnable->marginHint( subControl ) );
|
const auto r = rect.marginsRemoved( skinnable->marginHint( subControl ) );
|
||||||
return updateArcNode( skinnable, node, r, fillGradient, arcMetrics );
|
return updateArcNode( skinnable, node, r,
|
||||||
|
borderWidth, borderColor, fillGradient, arcMetrics );
|
||||||
}
|
}
|
||||||
|
|
||||||
QSGNode* QskSkinlet::updateBoxClipNode( const QskSkinnable* skinnable,
|
QSGNode* QskSkinlet::updateBoxClipNode( const QskSkinnable* skinnable,
|
||||||
|
|
|
@ -101,7 +101,8 @@ class QSK_EXPORT QskSkinlet
|
||||||
const QRectF&, const QskGradient&, QskAspect::Subcontrol );
|
const QRectF&, const QskGradient&, QskAspect::Subcontrol );
|
||||||
|
|
||||||
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||||
const QRectF&, const QskGradient&, const QskArcMetrics& );
|
const QRectF&, qreal borderWidth, const QColor& borderColor,
|
||||||
|
const QskGradient&, const QskArcMetrics& );
|
||||||
|
|
||||||
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
static QSGNode* updateArcNode( const QskSkinnable*, QSGNode*,
|
||||||
const QRectF&, qreal startAngle, qreal spanAngle, QskAspect::Subcontrol );
|
const QRectF&, qreal startAngle, qreal spanAngle, QskAspect::Subcontrol );
|
||||||
|
|
|
@ -16,58 +16,6 @@
|
||||||
#include <qpen.h>
|
#include <qpen.h>
|
||||||
#include <qpainterpath.h>
|
#include <qpainterpath.h>
|
||||||
|
|
||||||
#define LINEAR_GRADIENT_HACK 1
|
|
||||||
|
|
||||||
#if LINEAR_GRADIENT_HACK
|
|
||||||
|
|
||||||
static inline QskGradient qskBuildGradient( QskGradient::Type type,
|
|
||||||
const QRectF& rect, const QskArcMetrics& metrics,
|
|
||||||
const QskGradientStops& stops )
|
|
||||||
{
|
|
||||||
const auto center = rect.center();
|
|
||||||
|
|
||||||
QskGradient gradient;
|
|
||||||
gradient.setStretchMode( QskGradient::NoStretch );
|
|
||||||
|
|
||||||
if ( type == QskGradient::Conic )
|
|
||||||
{
|
|
||||||
gradient.setConicDirection(
|
|
||||||
center.x(), center.y(), metrics.startAngle() );
|
|
||||||
|
|
||||||
gradient.setStops( stops );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gradient.setRadialDirection( center.x(), center.y(),
|
|
||||||
rect.width(), rect.height() );
|
|
||||||
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
Trying to do what QGradient::LogicalMode does in
|
|
||||||
the previous QPainter based implementation
|
|
||||||
*/
|
|
||||||
|
|
||||||
const auto radius = 0.5 * qMin( rect.width(), rect.height() );
|
|
||||||
const auto t = metrics.thickness() / radius;
|
|
||||||
|
|
||||||
QskGradientStops scaledStops;
|
|
||||||
scaledStops.reserve( stops.size() );
|
|
||||||
|
|
||||||
for ( const auto& stop : stops )
|
|
||||||
{
|
|
||||||
const auto pos = 0.5 - t * ( 0.75 - stop.position() );
|
|
||||||
scaledStops += QskGradientStop( pos, stop.color() );
|
|
||||||
}
|
|
||||||
|
|
||||||
gradient.setStops( scaledStops );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return gradient;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline QskGradient qskEffectiveGradient(
|
static inline QskGradient qskEffectiveGradient(
|
||||||
const QskGradient& gradient, const QRectF& rect,
|
const QskGradient& gradient, const QRectF& rect,
|
||||||
const QskArcMetrics& metrics )
|
const QskArcMetrics& metrics )
|
||||||
|
@ -88,18 +36,6 @@ static inline QskGradient qskEffectiveGradient(
|
||||||
|
|
||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LINEAR_GRADIENT_HACK
|
|
||||||
if ( gradient.type() == QskGradient::Linear )
|
|
||||||
{
|
|
||||||
// to keep the iotdashboard working: to be removed
|
|
||||||
|
|
||||||
const auto type = gradient.linearDirection().isHorizontal()
|
|
||||||
? QskGradient::Conic : QskGradient::Radial;
|
|
||||||
|
|
||||||
return qskBuildGradient( type, rect, metrics, gradient.stops() );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return gradient;
|
return gradient;
|
||||||
|
@ -143,7 +79,7 @@ void QskArcNode::setArcData( const QRectF& rect,
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskArcNode::setArcData( const QRectF& rect, const QskArcMetrics& arcMetrics,
|
void QskArcNode::setArcData( const QRectF& rect, const QskArcMetrics& arcMetrics,
|
||||||
qreal borderWidth, const QColor borderColor, const QskGradient& fillGradient )
|
qreal borderWidth, const QColor& borderColor, const QskGradient& fillGradient )
|
||||||
{
|
{
|
||||||
enum NodeRole
|
enum NodeRole
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,7 @@ class QSK_EXPORT QskArcNode : public QskShapeNode
|
||||||
|
|
||||||
void setArcData( const QRectF&, const QskArcMetrics&, const QskGradient& );
|
void setArcData( const QRectF&, const QskArcMetrics&, const QskGradient& );
|
||||||
void setArcData( const QRectF&, const QskArcMetrics&,
|
void setArcData( const QRectF&, const QskArcMetrics&,
|
||||||
qreal borderWidth, const QColor borderColor, const QskGradient& );
|
qreal borderWidth, const QColor& borderColor, const QskGradient& );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue