qskinny/src/nodes/QskArcNode.cpp

58 lines
1.5 KiB
C++
Raw Normal View History

/**********************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#include "QskArcNode.h"
2022-06-01 16:57:57 +02:00
#include "QskArcMetrics.h"
#include "QskArcRenderer.h"
2022-06-01 16:57:57 +02:00
#include "QskGradient.h"
namespace
{
class ArcData
{
public:
const QskArcMetrics& metrics;
const QskGradient& gradient;
};
}
QskArcNode::QskArcNode()
{
}
QskArcNode::~QskArcNode()
{
}
void QskArcNode::setArcData( const QRectF& rect, const QskArcMetrics& metrics,
2021-12-23 19:05:59 +01:00
const QskGradient& gradient, QQuickWindow* window )
{
2022-06-01 16:57:57 +02:00
const ArcData arcData { metrics, gradient };
update( window, rect, QSizeF(), &arcData );
}
void QskArcNode::paint( QPainter* painter, const QSize& size, const void* nodeData )
{
2022-06-01 16:57:57 +02:00
const auto arcData = reinterpret_cast< const ArcData* >( nodeData );
const qreal w = arcData->metrics.width();
const QRectF rect( 0.5 * w, 0.5 * w, size.width() - w, size.height() - w );
QskArcRenderer renderer;
2022-06-01 16:57:57 +02:00
renderer.renderArc( rect, arcData->metrics, arcData->gradient, painter );
}
2022-06-01 16:57:57 +02:00
QskHashValue QskArcNode::hash( const void* nodeData ) const
{
2022-06-01 16:57:57 +02:00
const auto arcData = reinterpret_cast< const ArcData* >( nodeData );
auto h = arcData->metrics.hash();
2022-06-01 16:57:57 +02:00
for( const auto& stop : qAsConst( arcData->gradient.stops() ) )
h = stop.hash( h );
return h;
}