use some gradients

all of this is very hackish still
This commit is contained in:
Peter Hartmann 2020-06-26 16:40:16 +02:00
parent a56ced89c8
commit c904da0625
6 changed files with 35 additions and 26 deletions

View File

@ -2,9 +2,9 @@
#include <QPainter> #include <QPainter>
CircularProgressBar::CircularProgressBar(const QColor &color, int progress, QQuickItem *parent) CircularProgressBar::CircularProgressBar(const QGradient &gradient, int progress, QQuickItem *parent)
: QQuickPaintedItem(parent) : QQuickPaintedItem(parent)
, m_color(color) , m_gradient(gradient)
, m_progress(progress) , m_progress(progress)
{ {
} }
@ -12,21 +12,24 @@ CircularProgressBar::CircularProgressBar(const QColor &color, int progress, QQui
void CircularProgressBar::paint(QPainter *painter) void CircularProgressBar::paint(QPainter *painter)
{ {
auto size = contentsSize(); auto size = contentsSize();
qDebug() << Q_FUNC_INFO << size;
QRectF outerRect({0, 0}, size); QRectF outerRect({0, 0}, size);
painter->setRenderHint(QPainter::Antialiasing, true); painter->setRenderHint(QPainter::Antialiasing, true);
// ### chose a different color here due to the lack of inner shadow: QRadialGradient gradient(size.width() / 2, size.height() / 2, 45);
painter->setBrush({"#e8e8e8"}); QGradientStop stop1(0.0, "#c0c0c0");
QGradientStop stop2(0.5, "#f0f0f0");
QGradientStop stop3(1.0, "#c0c0c0");
gradient.setStops({stop1, stop2, stop3});
painter->setBrush(gradient);
painter->setPen(Qt::white); painter->setPen(Qt::white);
painter->drawEllipse(outerRect); painter->drawEllipse(outerRect);
int startAngle = 1440; int startAngle = 1440;
int endAngle = -16 * (m_progress / 100.0) * 360; int endAngle = -16 * (m_progress / 100.0) * 360;
painter->setBrush(color()); painter->setBrush(m_gradient);
painter->setPen(color());
painter->drawPie(outerRect, startAngle, endAngle); painter->drawPie(outerRect, startAngle, endAngle);
painter->setBrush(Qt::white); painter->setBrush(Qt::white);

View File

@ -1,24 +1,16 @@
#ifndef CIRCULARPROGRESSBAR_H #ifndef CIRCULARPROGRESSBAR_H
#define CIRCULARPROGRESSBAR_H #define CIRCULARPROGRESSBAR_H
#include <QColor> #include <QGradient>
#include <QQuickPaintedItem> #include <QQuickPaintedItem>
class CircularProgressBar : public QQuickPaintedItem class CircularProgressBar : public QQuickPaintedItem
{ {
public: public:
CircularProgressBar(const QColor& color, int progress, QQuickItem* parent = nullptr); CircularProgressBar(const QGradient& gradient, int progress, QQuickItem* parent = nullptr);
virtual void paint(QPainter *painter) override; virtual void paint(QPainter *painter) override;
QColor color() const {
return m_color;
}
void setColor(const QColor& color) {
m_color = color;
}
double width() const { double width() const {
return m_width; return m_width;
} }
@ -28,7 +20,7 @@ public:
} }
private: private:
QColor m_color; QGradient m_gradient;
double m_width = 20; double m_width = 20;
int m_progress; int m_progress;
}; };

View File

@ -6,10 +6,11 @@
#include <QFontMetricsF> #include <QFontMetricsF>
#include <QQuickPaintedItem> #include <QQuickPaintedItem>
PieChartPainted::PieChartPainted(const QColor &color, int progress, int value, QQuickItem *parent) PieChartPainted::PieChartPainted(const QColor& color, const QGradient& gradient, int progress, int value, QQuickItem *parent)
: QskControl(parent) : QskControl(parent)
, m_color(color) , m_color(color)
, m_progressBar(new CircularProgressBar(color, progress, this)) , m_gradient(gradient)
, m_progressBar(new CircularProgressBar(gradient, progress, this))
, m_progressLabel(new QskTextLabel(this)) , m_progressLabel(new QskTextLabel(this))
// , m_numberLabel(new QskTextLabel(QString::number(value), this)) // , m_numberLabel(new QskTextLabel(QString::number(value), this))
// , m_unitLabel(new QskTextLabel("kwH", this)) // , m_unitLabel(new QskTextLabel("kwH", this))

View File

@ -11,13 +11,14 @@ class QQuickPaintedItem;
class PieChartPainted : public QskControl class PieChartPainted : public QskControl
{ {
public: public:
PieChartPainted(const QColor& color, int progress, int value, QQuickItem* parent = nullptr); PieChartPainted(const QColor& color, const QGradient& gradient, int progress, int value, QQuickItem* parent = nullptr);
virtual QSizeF contentsSizeHint( Qt::SizeHint, const QSizeF& ) const override; virtual QSizeF contentsSizeHint( Qt::SizeHint, const QSizeF& ) const override;
void updateLayout() override; void updateLayout() override;
private: private:
QColor m_color; QColor m_color;
QGradient m_gradient;
CircularProgressBar* m_progressBar; CircularProgressBar* m_progressBar;
QskTextLabel* m_progressLabel; QskTextLabel* m_progressLabel;
// QskTextLabel* m_numberLabel; // QskTextLabel* m_numberLabel;

View File

@ -6,7 +6,7 @@
#include <QTime> #include <QTime>
TopBarItem::TopBarItem(const QString& name, const QColor &color, int progress, int value, QQuickItem* parent ) : QskLinearBox( Qt::Vertical, parent ), TopBarItem::TopBarItem(const QString& name, const QColor &textColor, const QGradient& gradient, int progress, int value, QQuickItem* parent ) : QskLinearBox( Qt::Vertical, parent ),
m_name( name ) m_name( name )
{ {
setAutoLayoutChildren( true ); setAutoLayoutChildren( true );
@ -19,7 +19,7 @@ TopBarItem::TopBarItem(const QString& name, const QColor &color, int progress, i
auto* textLabel = new QskTextLabel( name, this ); auto* textLabel = new QskTextLabel( name, this );
textLabel->setFontRole(QskSkin::SmallFont); // ### style textLabel->setFontRole(QskSkin::SmallFont); // ### style
auto* pieChart = new PieChartPainted(color, progress, value, this); auto* pieChart = new PieChartPainted(textColor, gradient, progress, value, this);
} }
TopBar::TopBar(QQuickItem *parent) : QskLinearBox(Qt::Horizontal, parent) TopBar::TopBar(QQuickItem *parent) : QskLinearBox(Qt::Horizontal, parent)
@ -30,13 +30,24 @@ TopBar::TopBar(QQuickItem *parent) : QskLinearBox(Qt::Horizontal, parent)
setFixedHeight(100); setFixedHeight(100);
QStringList itemStrings = { "Living Room", "Bedroom", "Bathroom", "Kitchen" }; QStringList itemStrings = { "Living Room", "Bedroom", "Bathroom", "Kitchen" };
QColor colors[] = {"#ff3122", "#6776ff", "#f99055", "#6776ff"}; QColor textColors[] = {"#ff3122", "#6776ff", "#f99055", "#6776ff"};
QColor gradientColors[] = {"#FF5C00", "#FF3122",
"#6776FF", "#6100FF",
"#FFCE50", "#FF3122",
// "#00ff00", "#ffffff", // ### remove
"#6776FF", "#6100FF"};
int progressValues[] = {25, 45, 15, 86}; int progressValues[] = {25, 45, 15, 86};
int values[] = {175, 205, 115, 289}; int values[] = {175, 205, 115, 289};
for(int a = 0; a < itemStrings.count(); a++) for(int a = 0; a < itemStrings.count(); a++)
{ {
auto* item = new TopBarItem( itemStrings.at(a), colors[a], progressValues[a], values[a], this ); QLinearGradient gradient(0, 0, 30, 0); // ### do this properly and dependent on the size
QGradientStop stop1(0.0, gradientColors[2 * a]);
QGradientStop stop2(1.0, gradientColors[2 * a + 1]);
gradient.setStops({stop1, stop2});
auto* item = new TopBarItem( itemStrings.at(a), textColors[a], gradient, progressValues[a], values[a], this );
m_entries.append(item); m_entries.append(item);
} }

View File

@ -1,13 +1,14 @@
#pragma once #pragma once
#include <QskLinearBox.h> #include <QskLinearBox.h>
#include <QGradient>
class TopBarItem : public QskLinearBox class TopBarItem : public QskLinearBox
{ {
Q_OBJECT Q_OBJECT
public: public:
TopBarItem(const QString& name, const QColor& color, int progress, int value, QQuickItem* parent ); TopBarItem(const QString& name, const QColor& textColor, const QGradient &gradient, int progress, int value, QQuickItem* parent );
private: private:
QString m_name; QString m_name;