2023-04-06 09:23:37 +02:00
|
|
|
/******************************************************************************
|
2021-10-20 07:50:25 +02:00
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
2023-04-06 09:23:37 +02:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
2021-10-20 07:50:25 +02:00
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#include "QskArcNode.h"
|
2022-06-01 16:57:57 +02:00
|
|
|
#include "QskArcMetrics.h"
|
2021-10-20 07:50:25 +02:00
|
|
|
#include "QskArcRenderer.h"
|
2022-06-01 16:57:57 +02:00
|
|
|
#include "QskGradient.h"
|
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
class ArcData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
const QskArcMetrics& metrics;
|
|
|
|
const QskGradient& gradient;
|
|
|
|
};
|
|
|
|
}
|
2021-10-20 07:50:25 +02:00
|
|
|
|
|
|
|
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 )
|
2021-10-20 07:50:25 +02:00
|
|
|
{
|
2022-06-01 16:57:57 +02:00
|
|
|
const ArcData arcData { metrics, gradient };
|
2022-06-02 16:02:42 +02:00
|
|
|
update( window, rect, QSizeF(), &arcData );
|
2021-10-20 07:50:25 +02:00
|
|
|
}
|
|
|
|
|
2022-06-02 16:02:42 +02:00
|
|
|
void QskArcNode::paint( QPainter* painter, const QSize& size, const void* nodeData )
|
2021-10-20 07:50:25 +02:00
|
|
|
{
|
2022-06-01 16:57:57 +02:00
|
|
|
const auto arcData = reinterpret_cast< const ArcData* >( nodeData );
|
|
|
|
|
|
|
|
const qreal w = arcData->metrics.width();
|
2021-10-20 07:50:25 +02:00
|
|
|
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 );
|
2021-10-20 07:50:25 +02:00
|
|
|
}
|
|
|
|
|
2022-06-01 16:57:57 +02:00
|
|
|
QskHashValue QskArcNode::hash( const void* nodeData ) const
|
2021-10-20 07:50:25 +02:00
|
|
|
{
|
2022-06-01 16:57:57 +02:00
|
|
|
const auto arcData = reinterpret_cast< const ArcData* >( nodeData );
|
|
|
|
|
|
|
|
auto h = arcData->metrics.hash();
|
2022-10-14 17:13:33 +02:00
|
|
|
return arcData->gradient.hash( h );
|
2021-10-20 07:50:25 +02:00
|
|
|
}
|