add shadow from outside
... because the class is not a QskControl
This commit is contained in:
parent
a6f7c16e24
commit
c6cd1016df
|
@ -8,18 +8,18 @@
|
||||||
#include <QskBoxShapeMetrics.h>
|
#include <QskBoxShapeMetrics.h>
|
||||||
#include <QskTextLabel.h>
|
#include <QskTextLabel.h>
|
||||||
|
|
||||||
ShadowBox::ShadowBox( QskControl* control, QQuickItem* parent )
|
ShadowBox::ShadowBox( QQuickItem* parent )
|
||||||
: QskControl( parent )
|
: QskControl( parent )
|
||||||
, m_control( control )
|
// , m_control( control )
|
||||||
, m_rectangle( new ShadowedRectangle( this ) )
|
, m_rectangle( new ShadowedRectangle( this ) )
|
||||||
{
|
{
|
||||||
setAutoLayoutChildren( true );
|
// setAutoLayoutChildren( true );
|
||||||
|
|
||||||
m_rectangle->shadow()->setColor( Qt::black );
|
m_rectangle->shadow()->setColor( Qt::black );
|
||||||
m_rectangle->shadow()->setSize( 15 );
|
m_rectangle->shadow()->setSize( 15 );
|
||||||
m_rectangle->setColor( Qt::white ); // ### opacity should only be for the shadow, not the background
|
m_rectangle->setColor( Qt::white ); // ### opacity should only be for the shadow, not the background
|
||||||
m_rectangle->setOpacity( 0.1 );
|
// m_rectangle->setOpacity( 0.1 );
|
||||||
m_rectangle->setSize( m_control->preferredSize() );
|
// m_rectangle->setSize( m_control->preferredSize() );
|
||||||
m_rectangle->corners()->setTopLeft( 6 );
|
m_rectangle->corners()->setTopLeft( 6 );
|
||||||
m_rectangle->corners()->setTopRight( 6 );
|
m_rectangle->corners()->setTopRight( 6 );
|
||||||
m_rectangle->corners()->setBottomLeft( 6 );
|
m_rectangle->corners()->setBottomLeft( 6 );
|
||||||
|
@ -28,10 +28,10 @@ ShadowBox::ShadowBox( QskControl* control, QQuickItem* parent )
|
||||||
|
|
||||||
void ShadowBox::updateLayout()
|
void ShadowBox::updateLayout()
|
||||||
{
|
{
|
||||||
const auto s = m_rectangle->shadow()->size();
|
// const auto s = m_rectangle->shadow()->size();
|
||||||
qDebug() << m_control->geometry() << geometry();
|
// qDebug() << m_control->geometry() << geometry();
|
||||||
m_control->setPosition( {15, 0} ); // ### why?
|
// m_control->setPosition( {15, 0} ); // ### why?
|
||||||
m_control->setZ( 1 );
|
// m_control->setZ( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
Box::Box( const QString& title, QQuickItem* parent )
|
Box::Box( const QString& title, QQuickItem* parent )
|
||||||
|
@ -46,24 +46,24 @@ Box::Box( const QString& title, QQuickItem* parent )
|
||||||
setMarginsHint( Panel | QskAspect::Padding, 15 );
|
setMarginsHint( Panel | QskAspect::Padding, 15 );
|
||||||
setPanel( true );
|
setPanel( true );
|
||||||
setBoxShapeHint( QskBox::Panel, 6 );
|
setBoxShapeHint( QskBox::Panel, 6 );
|
||||||
setBoxBorderMetricsHint( QskBox::Panel, 2 );
|
// setBoxBorderMetricsHint( QskBox::Panel, 2 );
|
||||||
QskBoxBorderColors borderColors( "#dddddd" );
|
QskBoxBorderColors borderColors( "#dddddd" );
|
||||||
borderColors.setAlpha( 100 );
|
borderColors.setAlpha( 100 );
|
||||||
setBoxBorderColorsHint( QskBox::Panel, borderColors );
|
setBoxBorderColorsHint( QskBox::Panel, borderColors );
|
||||||
|
|
||||||
|
|
||||||
auto* r = new ShadowedRectangle( this );
|
// auto* r = new ShadowedRectangle( this );
|
||||||
r->shadow()->setColor( Qt::black );
|
// r->shadow()->setColor( Qt::black );
|
||||||
r->shadow()->setSize( 15 );
|
// r->shadow()->setSize( 15 );
|
||||||
r->setPosition( {0, 0} );
|
// r->setPosition( {0, 0} );
|
||||||
r->setOpacity( 0.1 );
|
// r->setOpacity( 0.1 );
|
||||||
r->setSize( {100, 50} );
|
// r->setSize( {100, 50} );
|
||||||
r->corners()->setTopLeft( 6 );
|
// r->corners()->setTopLeft( 6 );
|
||||||
r->corners()->setTopRight( 6 );
|
// r->corners()->setTopRight( 6 );
|
||||||
r->corners()->setBottomLeft( 6 );
|
// r->corners()->setBottomLeft( 6 );
|
||||||
r->corners()->setBottomRight( 6 );
|
// r->corners()->setBottomRight( 6 );
|
||||||
// r->setRadius( 5 );
|
//// r->setRadius( 5 );
|
||||||
auto* t = new QskTextLabel( "bla", r );
|
// auto* t = new QskTextLabel( "bla", r );
|
||||||
|
|
||||||
|
|
||||||
m_label->setFontRole( DaytimeSkin::TitleFont );
|
m_label->setFontRole( DaytimeSkin::TitleFont );
|
||||||
|
|
|
@ -11,13 +11,13 @@ class ShadowBox : public QskControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ShadowBox( QskControl* control, QQuickItem* parent );
|
ShadowBox( QQuickItem* parent = nullptr );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void updateLayout() override;
|
void updateLayout() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QskControl* m_control;
|
// QskControl* m_control;
|
||||||
ShadowedRectangle* m_rectangle;
|
ShadowedRectangle* m_rectangle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
IndoorTemperature::IndoorTemperature( QQuickItem* parent )
|
IndoorTemperature::IndoorTemperature( QQuickItem* parent )
|
||||||
: Box( "", parent )
|
: Box( "", parent )
|
||||||
{
|
{
|
||||||
|
// setBackgroundColor( Qt::transparent );
|
||||||
setMarginsHint( Panel | QskAspect::Padding, 10 );
|
setMarginsHint( Panel | QskAspect::Padding, 10 );
|
||||||
|
|
||||||
auto* layout = new QskLinearBox( Qt::Horizontal, this );
|
auto* layout = new QskLinearBox( Qt::Horizontal, this );
|
||||||
|
|
|
@ -16,24 +16,73 @@
|
||||||
#include <QskGridBox.h>
|
#include <QskGridBox.h>
|
||||||
#include <QskTextLabel.h>
|
#include <QskTextLabel.h>
|
||||||
|
|
||||||
|
#include "src/shadowedrectangle.h"
|
||||||
|
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
ShadowPositioner::ShadowPositioner( QQuickItem* parent ) : QskControl( parent )
|
||||||
|
{
|
||||||
|
setAutoLayoutChildren( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShadowPositioner::setGridBox( QskGridBox* gridBox )
|
||||||
|
{
|
||||||
|
m_gridBox = gridBox;
|
||||||
|
m_rectangles.reserve( m_gridBox->count() );
|
||||||
|
|
||||||
|
for( int i = 0; i < m_gridBox->count(); ++i )
|
||||||
|
{
|
||||||
|
auto* r = new ShadowedRectangle( this );
|
||||||
|
r->setZ( 5 );
|
||||||
|
r->shadow()->setColor( Qt::black );
|
||||||
|
r->shadow()->setSize( 15 );
|
||||||
|
r->setColor( Qt::white ); // ### opacity should only be for the shadow, not the background
|
||||||
|
r->setOpacity( 0.1 );
|
||||||
|
r->corners()->setTopLeft( 6 );
|
||||||
|
r->corners()->setTopRight( 6 );
|
||||||
|
r->corners()->setBottomLeft( 6 );
|
||||||
|
r->corners()->setBottomRight( 6 );
|
||||||
|
m_rectangles.append( r );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShadowPositioner::updateLayout()
|
||||||
|
{
|
||||||
|
auto* mainContent = static_cast<QskLinearBox*>( parentItem() );
|
||||||
|
|
||||||
|
QTimer::singleShot( 0, this, [this, mainContent]()
|
||||||
|
{
|
||||||
|
for( int i = 0; i < m_rectangles.count(); ++i )
|
||||||
|
{
|
||||||
|
auto* item = m_gridBox->itemAtIndex( i );
|
||||||
|
m_rectangles[i]->setSize( item->size() );
|
||||||
|
m_rectangles[i]->setPosition( mainContent->itemAtIndex( 1 )->position() + item->position() );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
MainContent::MainContent( QQuickItem* parent ) : QskLinearBox( Qt::Vertical, parent )
|
MainContent::MainContent( QQuickItem* parent ) : QskLinearBox( Qt::Vertical, parent )
|
||||||
{
|
{
|
||||||
|
setAutoAddChildren( false );
|
||||||
setSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding );
|
setSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding );
|
||||||
setDefaultAlignment( Qt::AlignTop );
|
setDefaultAlignment( Qt::AlignTop );
|
||||||
setSpacing( 30 );
|
setSpacing( 30 );
|
||||||
setBackgroundColor( "#FBFBFB" );
|
setBackgroundColor( "#FBFBFB" );
|
||||||
|
|
||||||
new TopBar( this );
|
auto* topBar = new TopBar( this );
|
||||||
|
addItem( topBar );
|
||||||
|
|
||||||
auto* gridBox = new QskGridBox( this );
|
auto* gridBox = new QskGridBox( this );
|
||||||
|
gridBox->setSpacing( 15 );
|
||||||
gridBox->setMargins( {15, 0, 15, 20} );
|
gridBox->setMargins( {15, 0, 15, 20} );
|
||||||
gridBox->setPanel( true );
|
gridBox->setPanel( true );
|
||||||
gridBox->setBoxShapeHint( QskBox::Panel, 6 );
|
gridBox->setBoxShapeHint( QskBox::Panel, 6 );
|
||||||
gridBox->setBoxBorderMetricsHint( QskBox::Panel, 2 );
|
gridBox->setBoxBorderMetricsHint( QskBox::Panel, 2 );
|
||||||
|
addItem( gridBox );
|
||||||
|
|
||||||
auto* usage = new Usage( gridBox );
|
auto* usage = new Usage( gridBox );
|
||||||
auto* usageShadowBox = new ShadowBox( usage, this );
|
|
||||||
gridBox->addItem( usageShadowBox, 0, 0, 2, 1 );
|
gridBox->addItem( usage, 0, 0, 2, 1 );
|
||||||
|
|
||||||
auto* indoorTemperature = new IndoorTemperature( gridBox );
|
auto* indoorTemperature = new IndoorTemperature( gridBox );
|
||||||
gridBox->addItem( indoorTemperature, 0, 1 );
|
gridBox->addItem( indoorTemperature, 0, 1 );
|
||||||
|
@ -49,4 +98,13 @@ MainContent::MainContent( QQuickItem* parent ) : QskLinearBox( Qt::Vertical, par
|
||||||
|
|
||||||
auto* lightIntensity = new LightIntensity( gridBox );
|
auto* lightIntensity = new LightIntensity( gridBox );
|
||||||
gridBox->addItem( lightIntensity, 2, 2 );
|
gridBox->addItem( lightIntensity, 2, 2 );
|
||||||
|
|
||||||
|
m_shadowPositioner = new ShadowPositioner( this );
|
||||||
|
m_shadowPositioner->setGridBox( gridBox );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainContent::geometryChanged( const QRectF& newGeometry, const QRectF& oldGeometry )
|
||||||
|
{
|
||||||
|
QskLinearBox::geometryChanged( newGeometry, oldGeometry );
|
||||||
|
m_shadowPositioner->polish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,24 @@
|
||||||
|
|
||||||
#include <QskLinearBox.h>
|
#include <QskLinearBox.h>
|
||||||
|
|
||||||
|
class QskGridBox;
|
||||||
|
class ShadowBox;
|
||||||
|
class ShadowedRectangle;
|
||||||
|
|
||||||
|
class ShadowPositioner : public QskControl
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
ShadowPositioner( QQuickItem* parent );
|
||||||
|
|
||||||
|
void updateLayout() override;
|
||||||
|
void setGridBox( QskGridBox* gridBox );
|
||||||
|
|
||||||
|
private:
|
||||||
|
QskGridBox* m_gridBox;
|
||||||
|
QVector<ShadowedRectangle*> m_rectangles;
|
||||||
|
};
|
||||||
|
|
||||||
class MainContent : public QskLinearBox
|
class MainContent : public QskLinearBox
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -10,8 +28,12 @@ class MainContent : public QskLinearBox
|
||||||
public:
|
public:
|
||||||
MainContent( QQuickItem* parent );
|
MainContent( QQuickItem* parent );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void geometryChanged( const QRectF&, const QRectF& ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList< QskLinearBox* > m_columns;
|
QList< QskLinearBox* > m_columns;
|
||||||
|
ShadowPositioner* m_shadowPositioner;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINCONTENT_H
|
#endif // MAINCONTENT_H
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
Usage::Usage( QQuickItem* parent )
|
Usage::Usage( QQuickItem* parent )
|
||||||
: Box( "Usage", parent )
|
: Box( "Usage", parent )
|
||||||
{
|
{
|
||||||
|
setBackgroundColor( Qt::transparent );
|
||||||
auto* content = new QskLinearBox( Qt::Vertical, this );
|
auto* content = new QskLinearBox( Qt::Vertical, this );
|
||||||
|
|
||||||
auto* today = new QskLinearBox( Qt::Horizontal, content );
|
auto* today = new QskLinearBox( Qt::Horizontal, content );
|
||||||
|
|
Loading…
Reference in New Issue