mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
Improve the style of snackbar a bit
This commit is contained in:
parent
8386dd73ce
commit
1f47a6af3a
6 changed files with 63 additions and 54 deletions
|
@ -233,3 +233,8 @@ Toggle {
|
||||||
qproperty-inactiveColor: gray;
|
qproperty-inactiveColor: gray;
|
||||||
qproperty-trackColor: rgb(240, 240, 240);
|
qproperty-trackColor: rgb(240, 240, 240);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SnackBar {
|
||||||
|
qproperty-textColor: #caccd1;
|
||||||
|
qproperty-bgColor: #202228;
|
||||||
|
}
|
||||||
|
|
|
@ -221,3 +221,8 @@ Toggle {
|
||||||
qproperty-inactiveColor: gray;
|
qproperty-inactiveColor: gray;
|
||||||
qproperty-trackColor: rgb(240, 240, 240);
|
qproperty-trackColor: rgb(240, 240, 240);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SnackBar {
|
||||||
|
qproperty-textColor: white;
|
||||||
|
qproperty-bgColor: #495057;
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,11 @@ OverlayWidget > * {
|
||||||
border-left: 1px solid palette(text);
|
border-left: 1px solid palette(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TopRoomBar {
|
||||||
|
qproperty-borderColor: palette(text);
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
TimelineView,
|
TimelineView,
|
||||||
TimelineView > *,
|
TimelineView > *,
|
||||||
TimelineItem,
|
TimelineItem,
|
||||||
|
@ -150,3 +155,8 @@ QListWidget {
|
||||||
background-color: palette(window);
|
background-color: palette(window);
|
||||||
color: palette(text);
|
color: palette(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SnackBar {
|
||||||
|
qproperty-textColor: palette(text);
|
||||||
|
qproperty-bgColor: palette(base);
|
||||||
|
}
|
||||||
|
|
|
@ -79,8 +79,7 @@ protected:
|
||||||
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
||||||
|
|
||||||
p.setPen(QPen(borderColor()));
|
p.setPen(QPen(borderColor()));
|
||||||
p.drawLine(QPointF(0, height() - p.pen().widthF()),
|
p.drawLine(QPointF(0, height()), QPointF(width(), height()));
|
||||||
QPointF(width(), height() - p.pen().widthF()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -1,40 +1,37 @@
|
||||||
#include <QDebug>
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
#include <tweeny/tweeny.h>
|
#include <tweeny/tweeny.h>
|
||||||
|
|
||||||
#include "SnackBar.h"
|
#include "SnackBar.h"
|
||||||
|
|
||||||
constexpr int STARTING_OFFSET = 1;
|
constexpr int STARTING_OFFSET = 1;
|
||||||
|
constexpr int ANIMATION_DURATION = 6'000;
|
||||||
|
constexpr int BOX_PADDING = 10;
|
||||||
|
constexpr double MIN_WIDTH = 400.0;
|
||||||
|
constexpr double MIN_WIDTH_PERCENTAGE = 0.3;
|
||||||
|
|
||||||
SnackBar::SnackBar(QWidget *parent)
|
SnackBar::SnackBar(QWidget *parent)
|
||||||
: OverlayWidget(parent)
|
: OverlayWidget(parent)
|
||||||
{
|
{
|
||||||
bgOpacity_ = 0.9;
|
QFont font;
|
||||||
duration_ = 6000;
|
font.setPointSizeF(font.pointSizeF() * 1.2);
|
||||||
boxWidth_ = 400;
|
|
||||||
boxHeight_ = 40;
|
|
||||||
boxPadding_ = 10;
|
|
||||||
textColor_ = QColor("white");
|
|
||||||
bgColor_ = QColor("#333");
|
|
||||||
offset_ = STARTING_OFFSET;
|
|
||||||
position_ = SnackBarPosition::Top;
|
|
||||||
|
|
||||||
QFont font("Open Sans");
|
|
||||||
font.setPixelSize(14);
|
|
||||||
font.setWeight(50);
|
font.setWeight(50);
|
||||||
setFont(font);
|
setFont(font);
|
||||||
|
|
||||||
|
boxHeight_ = QFontMetrics(font).height() * 2;
|
||||||
|
offset_ = STARTING_OFFSET;
|
||||||
|
position_ = SnackBarPosition::Top;
|
||||||
|
|
||||||
hideTimer_.setSingleShot(true);
|
hideTimer_.setSingleShot(true);
|
||||||
|
|
||||||
auto offset_anim = tweeny::from(1.0f).to(0.0f).during(100).via(tweeny::easing::cubicOut);
|
auto offset_anim = tweeny::from(1.0f).to(0.0f).during(100).via(tweeny::easing::cubicOut);
|
||||||
connect(&showTimer_, &QTimer::timeout, this, [this, offset_anim]() mutable {
|
connect(&showTimer_, &QTimer::timeout, this, [this, offset_anim]() mutable {
|
||||||
if (offset_anim.progress() < 1.0f) {
|
if (offset_anim.progress() < 1.0f) {
|
||||||
offset_ = offset_anim.step(0.07f);
|
offset_ = offset_anim.step(0.07f);
|
||||||
update();
|
repaint();
|
||||||
} else {
|
} else {
|
||||||
showTimer_.stop();
|
showTimer_.stop();
|
||||||
hideTimer_.start(duration_);
|
hideTimer_.start(ANIMATION_DURATION);
|
||||||
offset_anim.seek(0.0f);
|
offset_anim.seek(0.0f);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -115,27 +112,26 @@ SnackBar::paintEvent(QPaintEvent *event)
|
||||||
brush.setStyle(Qt::SolidPattern);
|
brush.setStyle(Qt::SolidPattern);
|
||||||
brush.setColor(bgColor_);
|
brush.setColor(bgColor_);
|
||||||
p.setBrush(brush);
|
p.setBrush(brush);
|
||||||
p.setOpacity(bgOpacity_);
|
|
||||||
|
|
||||||
QRect r(0, 0, boxWidth_, boxHeight_);
|
QRect r(0, 0, std::max(MIN_WIDTH, width() * MIN_WIDTH_PERCENTAGE), boxHeight_);
|
||||||
|
|
||||||
p.setPen(Qt::white);
|
p.setPen(Qt::white);
|
||||||
QRect br = p.boundingRect(r, Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, message_);
|
QRect br = p.boundingRect(r, Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, message_);
|
||||||
|
|
||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
r = br.united(r).adjusted(-boxPadding_, -boxPadding_, boxPadding_, boxPadding_);
|
r = br.united(r).adjusted(-BOX_PADDING, -BOX_PADDING, BOX_PADDING, BOX_PADDING);
|
||||||
|
|
||||||
const qreal s = 1 - offset_;
|
const qreal s = 1 - offset_;
|
||||||
|
|
||||||
if (position_ == SnackBarPosition::Bottom)
|
if (position_ == SnackBarPosition::Bottom)
|
||||||
p.translate((width() - (r.width() - 2 * boxPadding_)) / 2,
|
p.translate((width() - (r.width() - 2 * BOX_PADDING)) / 2,
|
||||||
height() - boxPadding_ - s * (r.height()));
|
height() - BOX_PADDING - s * (r.height()));
|
||||||
else
|
else
|
||||||
p.translate((width() - (r.width() - 2 * boxPadding_)) / 2,
|
p.translate((width() - (r.width() - 2 * BOX_PADDING)) / 2,
|
||||||
s * (r.height()) - 2 * boxPadding_);
|
s * (r.height()) - 2 * BOX_PADDING);
|
||||||
|
|
||||||
br.moveCenter(r.center());
|
br.moveCenter(r.center());
|
||||||
p.drawRoundedRect(r.adjusted(0, 0, 0, 3), 3, 3);
|
p.drawRoundedRect(r.adjusted(0, 0, 0, 4), 4, 4);
|
||||||
p.setPen(textColor_);
|
p.setPen(textColor_);
|
||||||
p.drawText(br, Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, message_);
|
p.drawText(br, Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, message_);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,12 +17,30 @@ class SnackBar : public OverlayWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QColor bgColor READ backgroundColor WRITE setBackgroundColor)
|
||||||
|
Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit SnackBar(QWidget *parent);
|
explicit SnackBar(QWidget *parent);
|
||||||
|
|
||||||
inline void setBackgroundColor(const QColor &color);
|
QColor backgroundColor() const { return bgColor_; }
|
||||||
inline void setTextColor(const QColor &color);
|
void setBackgroundColor(const QColor &color)
|
||||||
inline void setPosition(SnackBarPosition pos);
|
{
|
||||||
|
bgColor_ = color;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
QColor textColor() const { return textColor_; }
|
||||||
|
void setTextColor(const QColor &color)
|
||||||
|
{
|
||||||
|
textColor_ = color;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
void setPosition(SnackBarPosition pos)
|
||||||
|
{
|
||||||
|
position_ = pos;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void showMessage(const QString &msg);
|
void showMessage(const QString &msg);
|
||||||
|
@ -49,31 +67,7 @@ private:
|
||||||
QTimer showTimer_;
|
QTimer showTimer_;
|
||||||
QTimer hideTimer_;
|
QTimer hideTimer_;
|
||||||
|
|
||||||
int duration_;
|
double boxHeight_;
|
||||||
int boxWidth_;
|
|
||||||
int boxHeight_;
|
|
||||||
int boxPadding_;
|
|
||||||
|
|
||||||
SnackBarPosition position_;
|
SnackBarPosition position_;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void
|
|
||||||
SnackBar::setPosition(SnackBarPosition pos)
|
|
||||||
{
|
|
||||||
position_ = pos;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void
|
|
||||||
SnackBar::setBackgroundColor(const QColor &color)
|
|
||||||
{
|
|
||||||
bgColor_ = color;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void
|
|
||||||
SnackBar::setTextColor(const QColor &color)
|
|
||||||
{
|
|
||||||
textColor_ = color;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue