2017-07-21 16:21:34 +00: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
|
2020-10-23 11:41:18 +00:00
|
|
|
#define QSK_SKINLET_H
|
2017-07-21 16:21:34 +00:00
|
|
|
|
|
|
|
#include "QskAspect.h"
|
|
|
|
|
2018-07-19 12:10:48 +00:00
|
|
|
#include <qnamespace.h>
|
|
|
|
#include <qrect.h>
|
|
|
|
|
2017-07-21 16:21:34 +00: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 06:15:28 +00:00
|
|
|
public:
|
2017-07-21 16:21:34 +00:00
|
|
|
Q_INVOKABLE QskSkinlet( QskSkin* = nullptr );
|
|
|
|
virtual ~QskSkinlet();
|
|
|
|
|
|
|
|
QskSkin* skin() const;
|
|
|
|
|
2020-07-29 05:22:04 +00:00
|
|
|
virtual void updateNode( QskSkinnable*, QSGNode* parent ) const;
|
2019-04-25 12:23:39 +00:00
|
|
|
|
|
|
|
virtual QRectF subControlRect(
|
|
|
|
const QskSkinnable*, const QRectF&, QskAspect::Subcontrol ) const;
|
2017-07-21 16:21:34 +00:00
|
|
|
|
|
|
|
const QVector< quint8 >& nodeRoles() const;
|
|
|
|
|
|
|
|
void setOwnedBySkinnable( bool on );
|
|
|
|
bool isOwnedBySkinnable() const;
|
|
|
|
|
2017-10-23 06:36:19 +00:00
|
|
|
static QSGNode* updateBoxNode( const QskSkinnable*, QSGNode*,
|
|
|
|
const QRectF&, QskAspect::Subcontrol );
|
|
|
|
|
2020-07-31 05:40:33 +00:00
|
|
|
static QSGNode* updateBoxNode( const QskSkinnable*, QSGNode*,
|
|
|
|
const QRectF&, const QskGradient&, QskAspect::Subcontrol );
|
|
|
|
|
2017-10-23 06:36:19 +00:00
|
|
|
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*,
|
2020-11-19 10:48:25 +00:00
|
|
|
const QskGraphic&, const QskColorFilter&, const QRectF&,
|
|
|
|
Qt::Alignment, Qt::Orientations mirrored = Qt::Orientations() );
|
2017-10-23 06:36:19 +00:00
|
|
|
|
|
|
|
// stretching to fit
|
|
|
|
static QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
|
2020-11-01 14:44:15 +00:00
|
|
|
const QskGraphic&, const QskColorFilter&, const QRectF&,
|
|
|
|
Qt::Orientations mirrored = Qt::Orientations() );
|
2017-10-23 06:36:19 +00:00
|
|
|
|
2017-10-23 08:19:49 +00:00
|
|
|
static QSGNode* updateBoxClipNode( const QskSkinnable*, QSGNode*,
|
|
|
|
const QRectF&, QskAspect::Subcontrol );
|
|
|
|
|
2018-08-03 06:15:28 +00:00
|
|
|
protected:
|
2017-07-21 16:21:34 +00: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;
|
|
|
|
|
2017-10-17 15:34:00 +00:00
|
|
|
QSGNode* updateBoxClipNode( const QskSkinnable*, QSGNode*,
|
|
|
|
QskAspect::Subcontrol ) const;
|
|
|
|
|
2017-07-21 16:21:34 +00:00
|
|
|
QSGNode* updateTextNode( const QskSkinnable*, QSGNode*,
|
|
|
|
const QString&, const QskTextOptions&, QskAspect::Subcontrol ) const;
|
|
|
|
|
|
|
|
QSGNode* updateGraphicNode( const QskSkinnable*, QSGNode*,
|
2020-11-01 14:44:15 +00:00
|
|
|
const QskGraphic&, QskAspect::Subcontrol,
|
|
|
|
Qt::Orientations mirrored = Qt::Orientations() ) const;
|
2017-07-21 16:21:34 +00:00
|
|
|
|
2020-11-22 14:27:58 +00:00
|
|
|
void replaceChildNode( quint8 nodeRole, QSGNode* parentNode,
|
|
|
|
QSGNode* oldNode, QSGNode* newNode ) const;
|
2017-07-21 16:21:34 +00:00
|
|
|
|
2018-08-03 06:15:28 +00:00
|
|
|
private:
|
2017-07-21 16:21:34 +00:00
|
|
|
class PrivateData;
|
|
|
|
std::unique_ptr< PrivateData > m_data;
|
|
|
|
};
|
|
|
|
|
2017-09-01 09:55:55 +00:00
|
|
|
inline QRectF QskSkinlet::subControlRect(
|
2019-04-25 12:23:39 +00:00
|
|
|
const QskSkinnable*, const QRectF&, QskAspect::Subcontrol ) const
|
2017-09-01 09:55:55 +00:00
|
|
|
{
|
|
|
|
return QRectF();
|
|
|
|
}
|
|
|
|
|
|
|
|
inline QSGNode* QskSkinlet::updateSubNode(
|
|
|
|
const QskSkinnable*, quint8, QSGNode*) const
|
|
|
|
{
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2017-07-21 16:21:34 +00:00
|
|
|
#endif
|