diff --git a/examples/iotdashboard/Box.cpp b/examples/iotdashboard/Box.cpp index 7371a343..ee628852 100644 --- a/examples/iotdashboard/Box.cpp +++ b/examples/iotdashboard/Box.cpp @@ -8,9 +8,14 @@ #include +QSK_SUBCONTROL( Box, Panel ) + Box::Box( const QString& title, QQuickItem* parent ) - : ShadowedBox( Qt::Vertical, parent ) + : QskLinearBox( Qt::Vertical, parent ) { + setPanel( true ); + setSubcontrolProxy( QskBox::Panel, Panel ); + if ( !title.isEmpty() ) { auto label = new QskTextLabel( title, this ); diff --git a/examples/iotdashboard/Box.h b/examples/iotdashboard/Box.h index 883917f8..ec2edcf7 100644 --- a/examples/iotdashboard/Box.h +++ b/examples/iotdashboard/Box.h @@ -5,12 +5,14 @@ #pragma once -#include "ShadowedBox.h" +#include -class Box : public ShadowedBox +class Box : public QskLinearBox { Q_OBJECT public: + QSK_SUBCONTROLS( Panel ) + Box( const QString& title, QQuickItem* parent = nullptr ); }; diff --git a/examples/iotdashboard/ShadowedBox.cpp b/examples/iotdashboard/ShadowedBox.cpp deleted file mode 100644 index d89646ae..00000000 --- a/examples/iotdashboard/ShadowedBox.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/****************************************************************************** - * QSkinny - Copyright (C) 2016 Uwe Rathmann - * This file may be used under the terms of the 3-clause BSD License - *****************************************************************************/ - -#include "ShadowedBox.h" - - -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - 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->setShadowData( shadowMetrics.shadowRect( r ), - box->shape(), shadowMetrics.blurRadius(), box->shadowColor() ); - - return shadowNode; - } - case PanelRole: - { - const auto r = box->subControlRect( ShadowedBox::Panel ); - - auto boxNode = QskSGNode::ensureNode< QskBoxNode >( node ); - boxNode->setBoxData( r, box->shape(), box->borderWidth(), - box->borderColor(), box->gradient() ); - - return boxNode; - } - } - - return nullptr; - } - }; -} - -QSK_SUBCONTROL( ShadowedBox, Panel ) - -ShadowedBox::ShadowedBox(Qt::Orientation orientation, QQuickItem* parentItem ) - : QskLinearBox( orientation, parentItem ) -{ - setFlag( QQuickItem::ItemHasContents, true ); - setSkinlet( new Skinlet() ); - - // ### move to Skin: - setGradient( Qt::white ); - setShadow( { 0, 10 } ); - setShadowColor( 0xe5e5e5 ); - setShape( 6 ); -} - -ShadowedBox::~ShadowedBox() -{ -} - -void ShadowedBox::setShadow( const QskShadowMetrics& shadow ) -{ - m_shadow = shadow; - update(); -} - -const QskShadowMetrics& ShadowedBox::shadow() const -{ - return m_shadow; -} - -void ShadowedBox::setShadowColor( const QColor& color ) -{ - m_shadowColor = color; - update(); -} - -QColor ShadowedBox::shadowColor() const -{ - return m_shadowColor; -} - -QRectF ShadowedBox::layoutRectForSize( const QSizeF& size ) const -{ - auto padding = paddingHint( Panel ); - return { padding.left() / 2, padding.top() / 2, - size.width() - padding.right(), size.height() - padding.bottom() }; -} - -void ShadowedBox::setGradient( const QskGradient& gradient ) -{ - m_gradient = gradient; - update(); -} - -const QskGradient& ShadowedBox::gradient() const -{ - return m_gradient; -} - -void ShadowedBox::setShape( const QskBoxShapeMetrics& shape ) -{ - m_shape = shape; - update(); -} - -const QskBoxShapeMetrics& ShadowedBox::shape() const -{ - return m_shape; -} - -void ShadowedBox::setBorderWidth( qreal width ) -{ - m_borderWidth = qMax( width, 0.0 ); - update(); -} - -qreal ShadowedBox::borderWidth() const -{ - return m_borderWidth; -} - -void ShadowedBox::setBorderColor( const QColor& color ) -{ - m_borderColor = color; - update(); -} - -QColor ShadowedBox::borderColor() const -{ - return m_borderColor; -} - -#include "moc_ShadowedBox.cpp" diff --git a/examples/iotdashboard/ShadowedBox.h b/examples/iotdashboard/ShadowedBox.h deleted file mode 100644 index e1e243dd..00000000 --- a/examples/iotdashboard/ShadowedBox.h +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * QSkinny - Copyright (C) 2016 Uwe Rathmann - * This file may be used under the terms of the 3-clause BSD License - *****************************************************************************/ - -#pragma once - -#include -#include -#include - -class QskGradient; - -class ShadowedBox : public QskLinearBox -{ - Q_OBJECT - - public: - QSK_SUBCONTROLS( Panel ) - - ShadowedBox( Qt::Orientation orientation, QQuickItem* parent = nullptr ); - ~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; - - QRectF layoutRectForSize( const QSizeF& size ) const override; - - void setShape( const QskBoxShapeMetrics& ); - const QskBoxShapeMetrics& shape() const; - - void setBorderWidth( qreal width ); - qreal borderWidth() const; - - void setBorderColor( const QColor& ); - QColor borderColor() const; - - 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; -}; diff --git a/examples/iotdashboard/Skin.cpp b/examples/iotdashboard/Skin.cpp index f8fae2d6..b68de35e 100644 --- a/examples/iotdashboard/Skin.cpp +++ b/examples/iotdashboard/Skin.cpp @@ -16,10 +16,8 @@ #include "LightDisplaySkinlet.h" #include "DashboardPage.h" #include "MenuBar.h" -#include "PieChartPainted.h" #include "RoundedIcon.h" #include "RoundButton.h" -#include "ShadowedBox.h" #include "TopBar.h" #include "UsageBox.h" #include "UsageDiagram.h" @@ -29,6 +27,7 @@ #include #include #include +#include #include #include @@ -129,8 +128,8 @@ void Skin::initHints( const Palette& palette ) ed.setFontRole( TimeLabel::Text, QskSkin::HugeFont ); ed.setColor( TimeLabel::Text, "#6776FF" ); - // boxes (including shadow): - ed.setPadding( ShadowedBox::Panel, 15 ); + // boxes: + ed.setPadding( Box::Panel, 8 ); // content in boxes (indoor temperature, humidity etc.): ed.setFontRole( UsageBox::Separator, QskSkin::SmallFont ); @@ -220,9 +219,20 @@ void Skin::initHints( const Palette& palette ) // palette dependent skin hints: ed.setGradient( MenuBar::Panel, palette.menuBar ); ed.setGradient( DashboardPage::Panel, palette.mainContent ); - ed.setGradient( Box::Panel, palette.box ); + + ed.setColor( Box::Panel, palette.box.startColor() ); + QskShadowMetrics shadowMetrics( 0, 10 ); + ed.setShadowMetrics( Box::Panel, shadowMetrics ); + ed.setShadowColor( Box::Panel, palette.shadow ); + ed.setGradient( BoxWithButtons::Panel, palette.box ); + ed.setShadowMetrics( BoxWithButtons::Panel, shadowMetrics ); + ed.setShadowColor( BoxWithButtons::Panel, palette.shadow ); + ed.setGradient( UsageDiagramBox::Panel, palette.box ); + ed.setShadowMetrics( UsageDiagramBox::Panel, shadowMetrics ); + ed.setShadowColor( UsageDiagramBox::Panel, palette.shadow ); + ed.setGradient( LightDisplay::Panel, palette.box ); ed.setGradient( LightDisplay::Knob, palette.box ); ed.setGradient( RoundButton::Panel, palette.roundButton ); diff --git a/examples/iotdashboard/Skin.h b/examples/iotdashboard/Skin.h index e246d5cb..1845fa96 100644 --- a/examples/iotdashboard/Skin.h +++ b/examples/iotdashboard/Skin.h @@ -59,7 +59,7 @@ class DaytimeSkin : public Skin DaytimeSkin( QObject* parent = nullptr ) : Skin( Skin::Palette( {"#6D7BFB"}, {"#fbfbfb"}, {"#ffffff"}, - "#ffffff", {"#f7f7f7"}, {"#f4f4f4"}, Qt::black, Qt::black, + "#ffffff", {"#f7f7f7"}, {"#f4f4f4"}, Qt::black, 0xffe5e5e5, { QskGradient::Vertical, { { 0.0, 0xffc4c4c4 }, { 0.5, 0xfff8f8f8 }, { 1.0, 0xffc4c4c4 } } } ) , parent ) { @@ -72,7 +72,7 @@ class NighttimeSkin : public Skin NighttimeSkin( QObject* parent = nullptr ) : Skin( Skin::Palette( {"#2937A7"}, {"#040404"}, {"#000000"}, - "#000000", {"#0a0a0a"}, {"#0c0c0c"}, Qt::white, Qt::white, + "#000000", {"#0a0a0a"}, {"#0c0c0c"}, Qt::white, 0xff1a1a1a, { QskGradient::Vertical, { { 0.0, 0xff666666 }, { 0.5, 0xff222222 }, { 1.0, 0xff333333 } } } ) , parent ) { diff --git a/examples/iotdashboard/iotdashboard.pro b/examples/iotdashboard/iotdashboard.pro index 82dd7a81..897b38f4 100644 --- a/examples/iotdashboard/iotdashboard.pro +++ b/examples/iotdashboard/iotdashboard.pro @@ -23,7 +23,6 @@ SOURCES += \ PieChartSkinlet.cpp \ RoomsPage.cpp \ RoundedIcon.cpp \ - ShadowedBox.cpp \ Skin.cpp \ TopBar.cpp \ RoundButton.cpp \ @@ -58,7 +57,6 @@ HEADERS += \ PieChartSkinlet.h \ RoomsPage.h \ RoundedIcon.h \ - ShadowedBox.h \ Skin.h \ TopBar.h \ RoundButton.h \ diff --git a/examples/iotdashboard/shaders.qrc b/examples/iotdashboard/shaders.qrc deleted file mode 100644 index fa597692..00000000 --- a/examples/iotdashboard/shaders.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - - shaders/boxshadow.vert - shaders/boxshadow.frag - - diff --git a/examples/iotdashboard/shaders/boxshadow.frag b/examples/iotdashboard/shaders/boxshadow.frag deleted file mode 100644 index b24ff185..00000000 --- a/examples/iotdashboard/shaders/boxshadow.frag +++ /dev/null @@ -1,42 +0,0 @@ -uniform lowp float opacity; -uniform lowp float blurExtent; -uniform lowp vec4 radius; -uniform lowp vec4 color; -uniform lowp vec2 aspect; - -varying lowp vec2 coord; - -lowp float effectiveRadius( in lowp vec4 radii, in lowp vec2 point ) -{ - if ( point.x > 0.0 ) - return ( point.y > 0.0) ? radii.x : radii.y; - else - return ( point.y > 0.0) ? radii.z : radii.w; -} - -void main() -{ - lowp vec4 col = vec4(0.0); - - if ( opacity > 0.0 ) - { - const lowp float minRadius = 0.05; - - lowp float e2 = 0.5 * blurExtent; - lowp float r = 2.0 * effectiveRadius( radius, coord ); - - lowp float f = minRadius / max( r, minRadius ); - - r += e2 * f; - - lowp vec2 d = r + blurExtent - aspect * ( 1.0 - abs( 2.0 * coord ) ); - lowp float l = min( max(d.x, d.y), 0.0) + length( max(d, 0.0) ); - - lowp float shadow = l - r; - - lowp float v = smoothstep( -e2, e2, shadow ); - col = mix( color, vec4(0.0), v ) * opacity; - } - - gl_FragColor = col; -} diff --git a/examples/iotdashboard/shaders/boxshadow.vert b/examples/iotdashboard/shaders/boxshadow.vert deleted file mode 100644 index 5a55b751..00000000 --- a/examples/iotdashboard/shaders/boxshadow.vert +++ /dev/null @@ -1,13 +0,0 @@ -uniform highp mat4 matrix; -uniform lowp vec2 aspect; - -attribute highp vec4 in_vertex; -attribute mediump vec2 in_coord; - -varying mediump vec2 coord; - -void main() -{ - coord = in_coord; - gl_Position = matrix * in_vertex; -}