qskinny/src/controls/QskSkinlet.h

122 lines
3.3 KiB
C
Raw Normal View History

2017-07-21 18:21:34 +02:00
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#ifndef QSK_SKINLET_H
#define QSK_SKINLET_H 1
#include "QskAspect.h"
2018-07-19 14:10:48 +02:00
#include <qnamespace.h>
#include <qrect.h>
2017-07-21 18:21:34 +02:00
#include <memory>
class QskSkin;
class QskControl;
class QskSkinnable;
class QskGradient;
class QskColorFilter;
class QskGraphic;
class QskTextOptions;
class QSGNode;
class QRectF;
class QRect;
class QSize;
class QSK_EXPORT QskSkinlet
{
Q_GADGET
2018-08-03 08:15:28 +02:00
public:
2017-07-21 18:21:34 +02:00
Q_INVOKABLE QskSkinlet( QskSkin* = nullptr );
virtual ~QskSkinlet();
QskSkin* skin() const;
void updateNode( QskSkinnable*, QSGNode* parent ) const;
virtual QRectF subControlRect(
const QskSkinnable*, const QRectF&, QskAspect::Subcontrol ) const;
2017-07-21 18:21:34 +02:00
const QVector< quint8 >& nodeRoles() const;
void setOwnedBySkinnable( bool on );
bool isOwnedBySkinnable() const;
static void setNodeRole( QSGNode* node, quint8 nodeRole );
2018-08-03 08:15:28 +02:00
static quint8 nodeRole( const QSGNode* node );
2017-07-21 18:21:34 +02:00
static QSGNode* findNodeByRole( QSGNode* parent, quint8 nodeRole );
static QSGNode* updateBoxNode( const QskSkinnable*, QSGNode*,
const QRectF&, QskAspect::Subcontrol );
static QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
const QRectF&, Qt::Alignment, const QString&, const QskTextOptions&,
QskAspect::Subcontrol );
// keeping the aspect ratio
static QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
const QskGraphic&, const QskColorFilter&,
const QRectF&, Qt::Alignment );
// stretching to fit
static QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
const QskGraphic&, const QskColorFilter&, const QRectF& );
2017-10-23 10:19:49 +02:00
static QSGNode* updateBoxClipNode( const QskSkinnable*, QSGNode*,
const QRectF&, QskAspect::Subcontrol );
2018-08-03 08:15:28 +02:00
protected:
2017-07-21 18:21:34 +02:00
void setNodeRoles( const QVector< quint8 >& );
void appendNodeRoles( const QVector< quint8 >& );
virtual QSGNode* updateSubNode( const QskSkinnable*,
quint8 nodeRole, QSGNode* ) const;
virtual QSGNode* updateBackgroundNode(
const QskControl*, QSGNode* ) const;
virtual QSGNode* updateDebugNode(
const QskControl*, QSGNode* node ) const;
QSGNode* updateBoxNode( const QskSkinnable*, QSGNode*,
QskAspect::Subcontrol ) const;
QSGNode* updateBoxClipNode( const QskSkinnable*, QSGNode*,
QskAspect::Subcontrol ) const;
2017-07-21 18:21:34 +02:00
QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
const QString&, const QskTextOptions&, QskAspect::Subcontrol ) const;
QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
const QskGraphic&, QskAspect::Subcontrol ) const;
void insertRemoveNodes( QSGNode* parentNode,
2017-12-07 17:12:52 +01:00
QSGNode* oldNode, QSGNode* newNode, quint8 nodeRole ) const;
2017-07-21 18:21:34 +02:00
2018-08-03 08:15:28 +02:00
private:
2017-07-21 18:21:34 +02:00
void insertNodeSorted( QSGNode* node, QSGNode* parentNode ) const;
class PrivateData;
std::unique_ptr< PrivateData > m_data;
};
2017-09-01 11:55:55 +02:00
inline QRectF QskSkinlet::subControlRect(
const QskSkinnable*, const QRectF&, QskAspect::Subcontrol ) const
2017-09-01 11:55:55 +02:00
{
return QRectF();
}
inline QSGNode* QskSkinlet::updateSubNode(
const QskSkinnable*, quint8, QSGNode*) const
{
return nullptr;
}
2017-07-21 18:21:34 +02:00
#endif