qskinny/src/nodes/QskGraduationRenderer.h

117 lines
2.7 KiB
C
Raw Normal View History

/******************************************************************************
2024-01-17 13:31:45 +00:00
* QSkinny - Copyright (C) The authors
2023-04-06 07:23:37 +00:00
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#ifndef QSK_GRADUATION_RENDERER_H
#define QSK_GRADUATION_RENDERER_H
#include "QskGlobal.h"
#include <qnamespace.h>
#include <qfont.h>
#include <qcolor.h>
2022-03-24 10:14:46 +00:00
#include <memory>
class QskSkinnable;
2022-03-24 10:14:46 +00:00
class QskIntervalF;
2023-11-28 13:35:28 +00:00
class QskGraduationMetrics;
2023-11-28 09:46:03 +00:00
class QskTickmarks;
2022-03-24 10:14:46 +00:00
class QskTextColors;
class QskColorFilter;
class QSGNode;
class QVariant;
class QRectF;
2023-11-28 12:36:47 +00:00
class QPointF;
2023-07-20 06:29:32 +00:00
class QSizeF;
2023-11-28 12:36:47 +00:00
class QTransform;
class QSK_EXPORT QskGraduationRenderer
{
2023-11-28 12:36:47 +00:00
Q_GADGET
public:
2024-12-09 14:39:06 +00:00
enum Flag : quint8
2023-11-28 12:36:47 +00:00
{
Backbone = 1 << 0,
CenteredTickmarks = 1 << 1,
ClampedLabels = 1 << 2
};
Q_ENUM( Flag )
Q_DECLARE_FLAGS( Flags, Flag )
QskGraduationRenderer();
virtual ~QskGraduationRenderer();
2022-03-24 10:14:46 +00:00
2023-11-28 12:36:47 +00:00
void setEdge( Qt::Edge );
Qt::Edge edge() const;
2023-04-24 09:55:36 +00:00
2023-11-28 12:36:47 +00:00
void setFlags( Flags );
Flags flags() const;
2023-11-28 12:36:47 +00:00
void setFlag( Flag, bool );
// scale coordinates
2023-04-24 09:55:36 +00:00
void setBoundaries( qreal lowerBound, qreal upperBound );
void setBoundaries( const QskIntervalF& );
2023-04-24 09:55:36 +00:00
QskIntervalF boundaries() const;
2023-11-28 12:36:47 +00:00
// item coordiates
qreal position() const;
void setPosition( qreal );
void setRange( qreal from, qreal to );
void setRange( const QskIntervalF& );
QskIntervalF range() const;
2023-11-28 09:46:03 +00:00
void setTickmarks( const QskTickmarks& );
const QskTickmarks& tickmarks() const;
2023-11-28 12:36:47 +00:00
void setSpacing( qreal );
qreal spacing() const;
void setTickColor( const QColor& );
2023-04-24 09:55:36 +00:00
QColor tickColor() const;
2023-11-28 13:35:28 +00:00
void setTickMetrics( const QskGraduationMetrics& );
const QskGraduationMetrics& tickMetrics() const;
2023-11-28 12:36:47 +00:00
void setFont( const QFont& );
2023-04-24 09:55:36 +00:00
QFont font() const;
void setTextColors( const QskTextColors& );
2023-04-24 09:55:36 +00:00
QskTextColors textColors() const;
void setColorFilter( const QskColorFilter& );
2023-04-24 09:55:36 +00:00
const QskColorFilter& colorFilter() const;
2023-11-28 12:36:47 +00:00
QSGNode* updateNode( const QskSkinnable*, QSGNode* );
virtual QVariant labelAt( qreal pos ) const;
2021-08-04 07:31:16 +00:00
QSizeF boundingLabelSize() const;
2023-11-28 12:36:47 +00:00
protected:
virtual QSGNode* updateTicksNode( const QTransform&, QSGNode* ) const;
virtual QSGNode* updateLabelsNode(
2023-11-28 12:36:47 +00:00
const QskSkinnable*, const QTransform&, QSGNode* ) const;
private:
Q_DISABLE_COPY( QskGraduationRenderer )
2022-03-24 07:08:40 +00:00
2023-11-28 12:36:47 +00:00
QRectF labelRect( const QTransform&, qreal, const QSizeF& ) const;
QSGNode* updateTickLabelNode( const QskSkinnable*,
QSGNode*, const QVariant&, const QRectF& ) const;
2022-03-24 10:14:46 +00:00
class PrivateData;
std::unique_ptr< PrivateData > m_data;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QskGraduationRenderer::Flags )
2023-11-28 12:36:47 +00:00
#endif