Merge branch 'uwerat-master' into material-theme
This commit is contained in:
commit
f53d0daeda
@ -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();
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
@ -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;
|
|
||||||
};
|
};
|
||||||
|
@ -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 );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -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(
|
||||||
|
@ -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 ...
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
@ -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 )
|
||||||
|
58
src/nodes/QskShadedBoxNode.cpp
Normal file
58
src/nodes/QskShadedBoxNode.cpp
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
34
src/nodes/QskShadedBoxNode.h
Normal file
34
src/nodes/QskShadedBoxNode.h
Normal 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
|
@ -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 \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user