Merge branch 'uwerat-master' into material-theme

This commit is contained in:
Peter Hartmann 2022-06-13 17:12:25 +02:00
commit f53d0daeda
14 changed files with 174 additions and 184 deletions

View File

@ -150,7 +150,6 @@ QSGNode* LightDisplaySkinlet::updateSubNode(
shadowNode->setShape( grooveRect.width() / 2 ); shadowNode->setShape( grooveRect.width() / 2 );
shadowNode->setBlurRadius( shadowMetrics.blurRadius() ); shadowNode->setBlurRadius( shadowMetrics.blurRadius() );
shadowNode->setColor( display->shadowColor() ); shadowNode->setColor( display->shadowColor() );
shadowNode->setClipRect( grooveRect );
shadowNode->updateGeometry(); shadowNode->updateGeometry();

View File

@ -59,7 +59,6 @@ namespace
shadowNode->setShape( box->shape() ); shadowNode->setShape( box->shape() );
shadowNode->setBlurRadius( shadowMetrics.blurRadius() ); shadowNode->setBlurRadius( shadowMetrics.blurRadius() );
shadowNode->setColor( box->shadowColor() ); shadowNode->setColor( box->shadowColor() );
shadowNode->setClipRect( r );
shadowNode->updateGeometry(); shadowNode->updateGeometry();

View File

@ -5,92 +5,15 @@
#include "ShadowedBox.h" #include "ShadowedBox.h"
#include <QskBoxNode.h>
#include <QskBoxShadowNode.h>
#include <QskSGNode.h>
#include <QskBoxBorderMetrics.h>
#include <QskBoxBorderColors.h>
#include <QskGradient.h> #include <QskGradient.h>
#include <QskSkinlet.h> #include <QskShadowMetrics.h>
#include <QskBoxShapeMetrics.h>
namespace #include <QskBoxBorderColors.h>
{ #include <QskBoxBorderMetrics.h>
class Skinlet : public QskSkinlet
{
public:
enum NodeRole { ShadowRole, PanelRole };
Skinlet()
{
setOwnedBySkinnable( true );
setNodeRoles( { ShadowRole, PanelRole } );
}
QRectF subControlRect( const QskSkinnable*,
const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const override
{
if ( subControl == ShadowedBox::Panel )
{
return contentsRect;
}
return QRectF();
}
QSGNode* updateSubNode( const QskSkinnable* skinnable,
quint8 nodeRole, QSGNode* node ) const override
{
const auto box = static_cast< const ShadowedBox* >( skinnable );
const auto r = box->subControlRect( ShadowedBox::Panel );
if ( r.isEmpty() )
return nullptr;
switch ( nodeRole )
{
case ShadowRole:
{
const auto& shadowMetrics = box->shadow();
auto shadowNode = QskSGNode::ensureNode< QskBoxShadowNode >( node );
shadowNode->setRect( shadowMetrics.shadowRect( r ) );
shadowNode->setShape( box->shape() );
shadowNode->setBlurRadius( shadowMetrics.blurRadius() );
shadowNode->setColor( box->shadowColor() );
shadowNode->setClipRect( r );
shadowNode->updateGeometry();
return shadowNode;
}
case PanelRole:
{
auto boxNode = static_cast< QskBoxNode* >( node );
if ( boxNode == nullptr )
boxNode = new QskBoxNode();
const auto r = box->subControlRect( ShadowedBox::Panel );
boxNode->setBoxData( r, box->shape(), box->borderWidth(),
box->borderColor(), box->gradient() );
return boxNode;
}
}
return nullptr;
}
};
}
QSK_SUBCONTROL( ShadowedBox, Panel )
ShadowedBox::ShadowedBox( QQuickItem* parentItem ) ShadowedBox::ShadowedBox( QQuickItem* parentItem )
: QskControl( parentItem ) : QskBox( true, parentItem )
{ {
setFlag( QQuickItem::ItemHasContents, true );
setSkinlet( new Skinlet() );
} }
ShadowedBox::~ShadowedBox() ShadowedBox::~ShadowedBox()
@ -99,68 +22,32 @@ ShadowedBox::~ShadowedBox()
void ShadowedBox::setShadow( const QskShadowMetrics& shadow ) void ShadowedBox::setShadow( const QskShadowMetrics& shadow )
{ {
m_shadow = shadow; setShadowMetricsHint( Panel, shadow );
update();
}
const QskShadowMetrics& ShadowedBox::shadow() const
{
return m_shadow;
} }
void ShadowedBox::setShadowColor( const QColor& color ) void ShadowedBox::setShadowColor( const QColor& color )
{ {
m_shadowColor = color; setShadowColorHint( Panel, color );
update();
}
QColor ShadowedBox::shadowColor() const
{
return m_shadowColor;
} }
void ShadowedBox::setGradient( const QskGradient& gradient ) void ShadowedBox::setGradient( const QskGradient& gradient )
{ {
m_gradient = gradient; setGradientHint( Panel, gradient );
update();
}
const QskGradient& ShadowedBox::gradient() const
{
return m_gradient;
} }
void ShadowedBox::setShape( const QskBoxShapeMetrics& shape ) void ShadowedBox::setShape( const QskBoxShapeMetrics& shape )
{ {
m_shape = shape; setBoxShapeHint( Panel, shape );
update();
}
const QskBoxShapeMetrics& ShadowedBox::shape() const
{
return m_shape;
} }
void ShadowedBox::setBorderWidth( qreal width ) void ShadowedBox::setBorderWidth( qreal width )
{ {
m_borderWidth = qMax( width, 0.0 ); setBoxBorderMetricsHint( Panel, width );
update();
} }
qreal ShadowedBox::borderWidth() const void ShadowedBox::setBorderColors( const QskBoxBorderColors& colors )
{ {
return m_borderWidth; setBoxBorderColorsHint( Panel, colors );
}
void ShadowedBox::setBorderColor( const QColor& color )
{
m_borderColor = color;
update();
}
QColor ShadowedBox::borderColor() const
{
return m_borderColor;
} }
#include "moc_ShadowedBox.cpp" #include "moc_ShadowedBox.cpp"

View File

@ -5,47 +5,27 @@
#pragma once #pragma once
#include <QskControl.h> #include <QskBox.h>
#include <QskBoxShapeMetrics.h>
#include <QskShadowMetrics.h>
class QskGradient; class QskGradient;
class QskShadowMetrics;
class QskBoxShapeMetrics;
class QskBoxBorderColors;
class ShadowedBox : public QskControl class ShadowedBox : public QskBox
{ {
Q_OBJECT Q_OBJECT
public: public:
QSK_SUBCONTROLS( Panel )
ShadowedBox(QQuickItem* parent = nullptr); ShadowedBox(QQuickItem* parent = nullptr);
~ShadowedBox() override; ~ShadowedBox() override;
void setShadow( const QskShadowMetrics& );
const QskShadowMetrics& shadow() const;
void setGradient( const QskGradient& );
const QskGradient& gradient() const;
void setShadowColor( const QColor& );
QColor shadowColor() const;
void setShape( const QskBoxShapeMetrics& ); void setShape( const QskBoxShapeMetrics& );
const QskBoxShapeMetrics& shape() const; void setGradient( const QskGradient& );
void setBorderWidth( qreal width ); void setBorderWidth( qreal width );
qreal borderWidth() const; void setBorderColors( const QskBoxBorderColors& );
void setBorderColor( const QColor& ); void setShadow( const QskShadowMetrics& );
QColor borderColor() const; void setShadowColor( const QColor& );
private:
QskShadowMetrics m_shadow;
QColor m_shadowColor = Qt::black;
QskGradient m_gradient;
QskBoxShapeMetrics m_shape;
qreal m_borderWidth = 0.0;
QColor m_borderColor = Qt::black;
}; };

View File

@ -5,15 +5,19 @@
#include "ShadowedBox.h" #include "ShadowedBox.h"
#include <SkinnyShortcut.h>
#include <QGuiApplication>
#include <QskObjectCounter.h> #include <QskObjectCounter.h>
#include <QskWindow.h> #include <QskWindow.h>
#include <QskLinearBox.h> #include <QskLinearBox.h>
#include <QskBoxShapeMetrics.h>
#include <QskRgbValue.h> #include <QskRgbValue.h>
#include <QskGradient.h>
#include <QskShadowMetrics.h>
#include <QskBoxShapeMetrics.h>
#include <QskBoxBorderColors.h>
#include <SkinnyShortcut.h>
#include <QGuiApplication>
class Box : public ShadowedBox class Box : public ShadowedBox
{ {
public: public:
@ -39,7 +43,7 @@ class Box : public ShadowedBox
setShape( QskBoxShapeMetrics( 40, 10, 15, 5 ) ); setShape( QskBoxShapeMetrics( 40, 10, 15, 5 ) );
setBorderWidth( w ); setBorderWidth( w );
setBorderColor( Qt::blue ); setBorderColors( Qt::blue );
} }
}; };

View File

@ -4,6 +4,7 @@
*****************************************************************************/ *****************************************************************************/
#include "QskBoxHints.h" #include "QskBoxHints.h"
#include "QskRgbValue.h"
QskBoxHints::QskBoxHints() QskBoxHints::QskBoxHints()
{ {
@ -11,18 +12,22 @@ QskBoxHints::QskBoxHints()
QskBoxHints::QskBoxHints( QskBoxHints::QskBoxHints(
const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics, const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics,
const QskBoxBorderColors& borderColors, const QskGradient& gradient ) const QskBoxBorderColors& borderColors, const QskGradient& gradient,
const QskShadowMetrics& shadowMetrics, const QColor& shadowColor )
: shape( shape ) : shape( shape )
, borderMetrics( borderMetrics ) , borderMetrics( borderMetrics )
, borderColors( borderColors ) , borderColors( borderColors )
, gradient( gradient ) , gradient( gradient )
, shadowMetrics( shadowMetrics )
, shadowColor( shadowColor )
{ {
} }
QskBoxHints QskBoxHints::toAbsolute( const QSizeF& size ) const noexcept QskBoxHints QskBoxHints::toAbsolute( const QSizeF& size ) const noexcept
{ {
return QskBoxHints( shape.toAbsolute( size ), return QskBoxHints( shape.toAbsolute( size ),
borderMetrics.toAbsolute( size ), borderColors, gradient ); borderMetrics.toAbsolute( size ), borderColors, gradient,
shadowMetrics.toAbsolute( size ), shadowColor );
} }
QskBoxHints QskBoxHints::interpolated( QskBoxHints QskBoxHints::interpolated(
@ -32,7 +37,9 @@ QskBoxHints QskBoxHints::interpolated(
shape.interpolated( to.shape, value ), shape.interpolated( to.shape, value ),
borderMetrics.interpolated( to.borderMetrics, value ), borderMetrics.interpolated( to.borderMetrics, value ),
borderColors.interpolated( to.borderColors, value ), borderColors.interpolated( to.borderColors, value ),
gradient.interpolated( to.gradient, value ) ); gradient.interpolated( to.gradient, value ),
shadowMetrics.interpolated( to.shadowMetrics, value ),
QskRgb::interpolated( shadowColor, to.shadowColor, value ) );
} }
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM
@ -42,7 +49,8 @@ QskBoxHints QskBoxHints::interpolated(
QDebug operator<<( QDebug debug, const QskBoxHints& hints ) QDebug operator<<( QDebug debug, const QskBoxHints& hints )
{ {
debug << hints.shape << hints.borderMetrics debug << hints.shape << hints.borderMetrics
<< hints.borderColors << hints.gradient; << hints.borderColors << hints.gradient << hints.shadowMetrics
<< hints.shadowColor;
return debug; return debug;
} }

View File

@ -9,7 +9,9 @@
#include "QskBoxBorderMetrics.h" #include "QskBoxBorderMetrics.h"
#include "QskBoxBorderColors.h" #include "QskBoxBorderColors.h"
#include "QskBoxShapeMetrics.h" #include "QskBoxShapeMetrics.h"
#include "QskShadowMetrics.h"
#include "QskGradient.h" #include "QskGradient.h"
#include <qcolor.h>
class QSK_EXPORT QskBoxHints class QSK_EXPORT QskBoxHints
{ {
@ -19,11 +21,14 @@ class QSK_EXPORT QskBoxHints
Q_PROPERTY( QskBoxBorderMetrics borderMetrics MEMBER borderMetrics ) Q_PROPERTY( QskBoxBorderMetrics borderMetrics MEMBER borderMetrics )
Q_PROPERTY( QskBoxBorderColors borderColors MEMBER borderColors ) Q_PROPERTY( QskBoxBorderColors borderColors MEMBER borderColors )
Q_PROPERTY( QskGradient gradient MEMBER gradient ) Q_PROPERTY( QskGradient gradient MEMBER gradient )
Q_PROPERTY( QskShadowMetrics shadowMetrics MEMBER shadowMetrics )
Q_PROPERTY( QColor shadowColor MEMBER shadowColor )
public: public:
QskBoxHints(); QskBoxHints();
QskBoxHints( const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QskBoxHints( const QskBoxShapeMetrics&, const QskBoxBorderMetrics&,
const QskBoxBorderColors&, const QskGradient& ); const QskBoxBorderColors&, const QskGradient&,
const QskShadowMetrics&, const QColor& );
QskBoxHints toAbsolute( const QSizeF& ) const noexcept; QskBoxHints toAbsolute( const QSizeF& ) const noexcept;
@ -34,6 +39,8 @@ class QSK_EXPORT QskBoxHints
QskBoxBorderMetrics borderMetrics; QskBoxBorderMetrics borderMetrics;
QskBoxBorderColors borderColors; QskBoxBorderColors borderColors;
QskGradient gradient; QskGradient gradient;
QskShadowMetrics shadowMetrics;
QColor shadowColor;
}; };
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM

View File

@ -12,6 +12,7 @@
#include "QskBoxBorderMetrics.h" #include "QskBoxBorderMetrics.h"
#include "QskBoxClipNode.h" #include "QskBoxClipNode.h"
#include "QskBoxNode.h" #include "QskBoxNode.h"
#include "QskShadedBoxNode.h"
#include "QskBoxShapeMetrics.h" #include "QskBoxShapeMetrics.h"
#include "QskBoxHints.h" #include "QskBoxHints.h"
#include "QskColorFilter.h" #include "QskColorFilter.h"
@ -166,26 +167,30 @@ static inline QskTextColors qskTextColors(
return c; return c;
} }
static inline QSGNode* qskUpdateBoxNode( static inline QSGNode* qskUpdateShadedBoxNode(
const QskSkinnable*, QSGNode* node, const QRectF& rect, const QskSkinnable*, QSGNode* node, const QRectF& rect,
const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics, const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics,
const QskBoxBorderColors& borderColors, const QskGradient& gradient ) const QskBoxBorderColors& borderColors, const QskGradient& gradient,
const QskShadowMetrics& shadowMetrics, const QColor& shadowColor )
{ {
if ( rect.isEmpty() ) if ( rect.isEmpty() )
return nullptr; return nullptr;
const auto absoluteMetrics = borderMetrics.toAbsolute( rect.size() ); const auto size = rect.size();
const auto absoluteMetrics = borderMetrics.toAbsolute( size );
if ( qskIsBoxVisible( absoluteMetrics, borderColors, gradient ) ) if ( qskIsBoxVisible( absoluteMetrics, borderColors, gradient ) )
{ {
auto boxNode = static_cast< QskBoxNode* >( node ); auto boxNode = static_cast< QskShadedBoxNode* >( node );
if ( boxNode == nullptr ) if ( boxNode == nullptr )
boxNode = new QskBoxNode(); boxNode = new QskShadedBoxNode();
const auto absoluteShape = shape.toAbsolute( rect.size() ); const auto absoluteShape = shape.toAbsolute( size );
const auto absoluteShadowMetrics = shadowMetrics.toAbsolute( size );
boxNode->setBoxData( rect, absoluteShape, boxNode->setBoxData( rect, absoluteShape, absoluteMetrics,
absoluteMetrics, borderColors, gradient ); borderColors, gradient, absoluteShadowMetrics, shadowColor );
return boxNode; return boxNode;
} }
@ -402,9 +407,12 @@ QSGNode* QskSkinlet::updateBoxNode( const QskSkinnable* skinnable,
const auto borderMetrics = skinnable->boxBorderMetricsHint( subControl ); const auto borderMetrics = skinnable->boxBorderMetricsHint( subControl );
const auto borderColors = skinnable->boxBorderColorsHint( subControl ); const auto borderColors = skinnable->boxBorderColorsHint( subControl );
const auto shape = skinnable->boxShapeHint( subControl ); const auto shape = skinnable->boxShapeHint( subControl );
const auto shadowMetrics = skinnable->shadowMetricsHint( subControl );
const auto shadowColor = skinnable->shadowColorHint( subControl );
return qskUpdateBoxNode( skinnable, node, return qskUpdateShadedBoxNode( skinnable, node,
boxRect, shape, borderMetrics, borderColors, fillGradient ); boxRect, shape, borderMetrics, borderColors, fillGradient,
shadowMetrics, shadowColor );
} }
QSGNode* QskSkinlet::updateBoxNode( QSGNode* QskSkinlet::updateBoxNode(
@ -412,15 +420,17 @@ QSGNode* QskSkinlet::updateBoxNode(
const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics, const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics,
const QskBoxBorderColors& borderColors, const QskGradient& fillGradient ) const QskBoxBorderColors& borderColors, const QskGradient& fillGradient )
{ {
return qskUpdateBoxNode( skinnable, node, return qskUpdateShadedBoxNode( skinnable, node,
rect, shape, borderMetrics, borderColors, fillGradient ); rect, shape, borderMetrics, borderColors, fillGradient,
QskShadowMetrics(), QColor() );
} }
QSGNode* QskSkinlet::updateBoxNode( const QskSkinnable* skinnable, QSGNode* QskSkinlet::updateBoxNode( const QskSkinnable* skinnable,
QSGNode* node, const QRectF& rect, const QskBoxHints& hints ) QSGNode* node, const QRectF& rect, const QskBoxHints& hints )
{ {
return qskUpdateBoxNode( skinnable, node, rect, return qskUpdateShadedBoxNode( skinnable, node, rect,
hints.shape, hints.borderMetrics, hints.borderColors, hints.gradient ); hints.shape, hints.borderMetrics, hints.borderColors, hints.gradient,
hints.shadowMetrics, hints.shadowColor );
} }
QSGNode* QskSkinlet::updateInterpolatedBoxNode( QSGNode* QskSkinlet::updateInterpolatedBoxNode(

View File

@ -613,7 +613,8 @@ QskBoxHints QskSkinnable::boxHints( QskAspect aspect ) const
{ {
return QskBoxHints( return QskBoxHints(
boxShapeHint( aspect ), boxBorderMetricsHint( aspect ), boxShapeHint( aspect ), boxBorderMetricsHint( aspect ),
boxBorderColorsHint( aspect ), gradientHint( aspect ) ); boxBorderColorsHint( aspect ), gradientHint( aspect ),
shadowMetricsHint( aspect ), shadowColorHint( aspect ) );
} }
bool QskSkinnable::setArcMetricsHint( bool QskSkinnable::setArcMetricsHint(

View File

@ -346,10 +346,10 @@ void QskBoxShadowNode::setBlurRadius( qreal blurRadius )
} }
} }
void QskBoxShadowNode::setClipRect( const QRectF& ) void QskBoxShadowNode::setClipShape( const QskBoxShapeMetrics& )
{ {
/* /*
Usually only the parts, that are not covered by the related rectangle Usually only the parts, that are not covered by the related box
should be painted. TODO ... should be painted. TODO ...
*/ */
} }

View File

@ -25,8 +25,9 @@ class QSK_EXPORT QskBoxShadowNode : public QSGGeometryNode
void setColor( const QColor& ); void setColor( const QColor& );
void setBlurRadius( qreal ); void setBlurRadius( qreal );
void setClipShape( const QskBoxShapeMetrics& );
void updateGeometry(); void updateGeometry();
void setClipRect( const QRectF& );
private: private:
Q_DECLARE_PRIVATE( QskBoxShadowNode ) Q_DECLARE_PRIVATE( QskBoxShadowNode )

View File

@ -0,0 +1,58 @@
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#include "QskShadedBoxNode.h"
#include "QskBoxShadowNode.h"
#include "QskShadowMetrics.h"
#include <qcolor.h>
QskShadedBoxNode::QskShadedBoxNode()
{
m_boxNode.setFlag( QSGNode::OwnedByParent, false );
appendChildNode( &m_boxNode );
}
QskShadedBoxNode::~QskShadedBoxNode()
{
}
void QskShadedBoxNode::setBoxData( const QRectF& rect,
const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& borderMetrics,
const QskBoxBorderColors& borderColors, const QskGradient& gradient,
const QskShadowMetrics& shadowMetrics, const QColor& shadowColor )
{
m_boxNode.setBoxData( rect, shape, borderMetrics, borderColors, gradient );
setShadowData( rect, shape, shadowMetrics, shadowColor );
}
void QskShadedBoxNode::setShadowData(
const QRectF& rect, const QskBoxShapeMetrics& shape,
const QskShadowMetrics& metrics, const QColor& color )
{
if ( metrics.isNull() || !color.isValid() || color.alpha() == 0 )
{
if ( m_shadowNode )
{
removeChildNode( m_shadowNode );
delete m_shadowNode;
m_shadowNode = nullptr;
}
}
else
{
if ( m_shadowNode == nullptr )
{
m_shadowNode = new QskBoxShadowNode();
insertChildNodeBefore( m_shadowNode, &m_boxNode );
}
m_shadowNode->setRect( metrics.shadowRect( rect ) );
m_shadowNode->setShape( shape );
m_shadowNode->setBlurRadius( metrics.blurRadius() );
m_shadowNode->setClipShape( shape );
m_shadowNode->updateGeometry();
}
}

View File

@ -0,0 +1,34 @@
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#ifndef QSK_SHADED_BOX_NODE_H
#define QSK_SHADED_BOX_NODE_H
#include "QskGlobal.h"
#include "QskBoxNode.h"
class QskBoxShadowNode;
class QskShadowMetrics;
class QSK_EXPORT QskShadedBoxNode : public QSGNode
{
public:
QskShadedBoxNode();
~QskShadedBoxNode() override;
void setBoxData( const QRectF&,
const QskBoxShapeMetrics&, const QskBoxBorderMetrics&,
const QskBoxBorderColors&, const QskGradient&,
const QskShadowMetrics&, const QColor& shadowColor );
private:
void setShadowData( const QRectF&, const QskBoxShapeMetrics&,
const QskShadowMetrics&, const QColor& );
QskBoxNode m_boxNode;
QskBoxShadowNode* m_shadowNode = nullptr;
};
#endif

View File

@ -110,6 +110,7 @@ HEADERS += \
nodes/QskRichTextRenderer.h \ nodes/QskRichTextRenderer.h \
nodes/QskScaleRenderer.h \ nodes/QskScaleRenderer.h \
nodes/QskSGNode.h \ nodes/QskSGNode.h \
nodes/QskShadedBoxNode.h \
nodes/QskTextNode.h \ nodes/QskTextNode.h \
nodes/QskTextRenderer.h \ nodes/QskTextRenderer.h \
nodes/QskTextureRenderer.h \ nodes/QskTextureRenderer.h \
@ -131,6 +132,7 @@ SOURCES += \
nodes/QskRichTextRenderer.cpp \ nodes/QskRichTextRenderer.cpp \
nodes/QskScaleRenderer.cpp \ nodes/QskScaleRenderer.cpp \
nodes/QskSGNode.cpp \ nodes/QskSGNode.cpp \
nodes/QskShadedBoxNode.cpp \
nodes/QskTextNode.cpp \ nodes/QskTextNode.cpp \
nodes/QskTextRenderer.cpp \ nodes/QskTextRenderer.cpp \
nodes/QskTextureRenderer.cpp \ nodes/QskTextureRenderer.cpp \