qskinny/src/nodes/QskArcNode.cpp
Uwe Rathmann 54b55c0324 default graphic pipeline without native OpenGL calls.
code is QRHI compiant now
2022-06-02 16:02:42 +02:00

58 lines
1.5 KiB
C++

/**********************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#include "QskArcNode.h"
#include "QskArcMetrics.h"
#include "QskArcRenderer.h"
#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,
const QskGradient& gradient, QQuickWindow* window )
{
const ArcData arcData { metrics, gradient };
update( window, rect, QSizeF(), &arcData );
}
void QskArcNode::paint( QPainter* painter, const QSize& size, const void* nodeData )
{
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;
renderer.renderArc( rect, arcData->metrics, arcData->gradient, painter );
}
QskHashValue QskArcNode::hash( const void* nodeData ) const
{
const auto arcData = reinterpret_cast< const ArcData* >( nodeData );
auto h = arcData->metrics.hash();
for( const auto& stop : qAsConst( arcData->gradient.stops() ) )
h = stop.hash( h );
return h;
}