From fd668c23e60690e65ab2869b9b927a6b2270e405 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Fri, 22 May 2020 15:46:17 +0200 Subject: [PATCH] Add skin factories etc. --- examples/iot-dashboard/DaytimeSkin.cpp | 20 ++++++++++ examples/iot-dashboard/DaytimeSkin.h | 16 ++++++++ examples/iot-dashboard/MainWindow.cpp | 2 +- examples/iot-dashboard/PieChartSkinlet.cpp | 1 + examples/iot-dashboard/iot-dashboard.pro | 2 + examples/iot-dashboard/main.cpp | 44 +++++++++++++++++++++- 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 examples/iot-dashboard/DaytimeSkin.cpp create mode 100644 examples/iot-dashboard/DaytimeSkin.h diff --git a/examples/iot-dashboard/DaytimeSkin.cpp b/examples/iot-dashboard/DaytimeSkin.cpp new file mode 100644 index 00000000..ce9f6175 --- /dev/null +++ b/examples/iot-dashboard/DaytimeSkin.cpp @@ -0,0 +1,20 @@ +#include "DaytimeSkin.h" + +#include "PieChart.h" +#include "PieChartSkinlet.h" + +#include +#include + +DaytimeSkin::DaytimeSkin( QObject* parent ) : QskSkin( parent ) +{ + declareSkinlet< PieChart, PieChartSkinlet >(); + initHints(); +} + +void DaytimeSkin::initHints() +{ + setBoxBorderMetrics( PieChart::Panel, 2 ); + setGradient( PieChart::Panel, Qt::blue ); + setBoxBorderColors( PieChart::Panel, Qt::green ); +} diff --git a/examples/iot-dashboard/DaytimeSkin.h b/examples/iot-dashboard/DaytimeSkin.h new file mode 100644 index 00000000..daa50d10 --- /dev/null +++ b/examples/iot-dashboard/DaytimeSkin.h @@ -0,0 +1,16 @@ +#ifndef DAYTIMESKIN_H +#define DAYTIMESKIN_H + +#include + +class DaytimeSkin : public QskSkin +{ +public: + DaytimeSkin( QObject* parent = nullptr ); + +private: + void initHints(); + +}; + +#endif // DAYTIMESKIN_H diff --git a/examples/iot-dashboard/MainWindow.cpp b/examples/iot-dashboard/MainWindow.cpp index c764f392..527a5110 100644 --- a/examples/iot-dashboard/MainWindow.cpp +++ b/examples/iot-dashboard/MainWindow.cpp @@ -7,7 +7,7 @@ MainWindow::MainWindow() : QskWindow() { - setFixedSize( { 1024, 600 } ); + setPreferredSize( { 1024, 600 } ); setTitle( "IOT dashboard" ); m_mainLayout = new QskLinearBox( Qt::Horizontal, contentItem() ); diff --git a/examples/iot-dashboard/PieChartSkinlet.cpp b/examples/iot-dashboard/PieChartSkinlet.cpp index 77e9a8f4..140e0c57 100644 --- a/examples/iot-dashboard/PieChartSkinlet.cpp +++ b/examples/iot-dashboard/PieChartSkinlet.cpp @@ -45,6 +45,7 @@ QSGNode* PieChartSkinlet::updatePanelNode( const PieChart* pieChart, QSGNode* no const auto panelRect = subControlRect( pieChart, pieChart->contentsRect(), PieChart::Panel ); const qreal radius = panelRect.width() / 2; + qDebug() << "radius:" << radius << panelRect; QskBoxShapeMetrics shapeMetrics( radius, radius, radius, radius ); QskBoxBorderMetrics borderMetrics = pieChart->boxBorderMetricsHint( PieChart::Panel ); diff --git a/examples/iot-dashboard/iot-dashboard.pro b/examples/iot-dashboard/iot-dashboard.pro index 0a02d7d2..58d79f4f 100644 --- a/examples/iot-dashboard/iot-dashboard.pro +++ b/examples/iot-dashboard/iot-dashboard.pro @@ -2,6 +2,7 @@ CONFIG += qskexample SOURCES += \ Card.cpp \ + DaytimeSkin.cpp \ MainContent.cpp \ MenuBar.cpp \ PieChart.cpp \ @@ -11,6 +12,7 @@ SOURCES += \ HEADERS += \ Card.h \ + DaytimeSkin.h \ MainContent.h \ MainWindow.h \ MenuBar.h \ diff --git a/examples/iot-dashboard/main.cpp b/examples/iot-dashboard/main.cpp index 3d0f63d1..83d41738 100644 --- a/examples/iot-dashboard/main.cpp +++ b/examples/iot-dashboard/main.cpp @@ -1,27 +1,67 @@ #include "MainWindow.h" +#include "DaytimeSkin.h" + #include #include #include -#include #include +#include +#include +#include +#include #include #include + +namespace { + class SkinFactory : public QskSkinFactory + { + Q_OBJECT + + public: + SkinFactory( QObject* parent = nullptr ) : QskSkinFactory( parent ) + { + } + + QStringList skinNames() const override + { + return { "DaytimeSkin" }; + } + QskSkin* createSkin( const QString& skinName ) override + { + if( skinName == "DaytimeSkin" ) + { + return new DaytimeSkin; + } + + return nullptr; + } + }; +} + int main( int argc, char* argv[] ) { QGuiApplication app( argc, argv ); SkinnyFont::init( &app ); + SkinFactory skinFactory; + + qskSkinManager->setPluginPaths( QStringList() ); // no plugins + qskSkinManager->registerFactory( + QStringLiteral( "SampleSkinFactory" ), &skinFactory ); + // QskShortcutMap::addShortcut( QKeySequence( Qt::CTRL + Qt::Key_T ), // false, skinFactory, SLOT(toggleScheme()) ); // QskShortcutMap::addShortcut( QKeySequence( Qt::CTRL + Qt::Key_S ), // false, skinFactory, SLOT(rotateSkin()) ); + qskSetup->setSkin( "DaytimeSkin" ); + // With CTRL-B you can rotate a couple of visual debug modes SkinnyShortcut::enable( SkinnyShortcut::DebugBackground | SkinnyShortcut::DebugStatistics | SkinnyShortcut::Quit ); @@ -31,3 +71,5 @@ int main( int argc, char* argv[] ) return app.exec(); } + +#include "main.moc"