mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
improved user popup
This commit is contained in:
parent
73a067f42f
commit
78b20776a8
7 changed files with 72 additions and 10 deletions
|
@ -165,6 +165,8 @@ void BaseWindow::init()
|
||||||
void BaseWindow::setStayInScreenRect(bool value)
|
void BaseWindow::setStayInScreenRect(bool value)
|
||||||
{
|
{
|
||||||
this->stayInScreenRect_ = value;
|
this->stayInScreenRect_ = value;
|
||||||
|
|
||||||
|
this->moveIntoDesktopRect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BaseWindow::getStayInScreenRect() const
|
bool BaseWindow::getStayInScreenRect() const
|
||||||
|
@ -231,6 +233,10 @@ bool BaseWindow::event(QEvent *event)
|
||||||
|
|
||||||
void BaseWindow::wheelEvent(QWheelEvent *event)
|
void BaseWindow::wheelEvent(QWheelEvent *event)
|
||||||
{
|
{
|
||||||
|
if (event->orientation() != Qt::Vertical) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (event->modifiers() & Qt::ControlModifier) {
|
if (event->modifiers() & Qt::ControlModifier) {
|
||||||
if (event->delta() > 0) {
|
if (event->delta() > 0) {
|
||||||
getApp()->settings->uiScale.setValue(singletons::WindowManager::clampUiScale(
|
getApp()->settings->uiScale.setValue(singletons::WindowManager::clampUiScale(
|
||||||
|
@ -316,7 +322,7 @@ void BaseWindow::moveIntoDesktopRect(QWidget *parent)
|
||||||
// move the widget into the screen geometry if it's not already in there
|
// move the widget into the screen geometry if it's not already in there
|
||||||
QDesktopWidget *desktop = QApplication::desktop();
|
QDesktopWidget *desktop = QApplication::desktop();
|
||||||
|
|
||||||
QRect s = desktop->screenGeometry(parent);
|
QRect s = desktop->availableGeometry(parent);
|
||||||
QPoint p = this->pos();
|
QPoint p = this->pos();
|
||||||
|
|
||||||
if (p.x() < s.left()) {
|
if (p.x() < s.left()) {
|
||||||
|
|
|
@ -563,7 +563,8 @@ messages::MessageElement::Flags ChannelView::getFlags() const
|
||||||
|
|
||||||
bool ChannelView::isPaused()
|
bool ChannelView::isPaused()
|
||||||
{
|
{
|
||||||
return this->pausedTemporarily_ || this->pausedBySelection_ || this->pausedByScrollingUp_;
|
return false;
|
||||||
|
// return this->pausedTemporarily_ || this->pausedBySelection_ || this->pausedByScrollingUp_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChannelView::updatePauseStatus()
|
void ChannelView::updatePauseStatus()
|
||||||
|
@ -659,6 +660,10 @@ void ChannelView::drawMessages(QPainter &painter)
|
||||||
|
|
||||||
void ChannelView::wheelEvent(QWheelEvent *event)
|
void ChannelView::wheelEvent(QWheelEvent *event)
|
||||||
{
|
{
|
||||||
|
if (event->orientation() != Qt::Vertical) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this->pausedBySelection_ = false;
|
this->pausedBySelection_ = false;
|
||||||
this->pausedTemporarily_ = false;
|
this->pausedTemporarily_ = false;
|
||||||
this->updatePauseStatus();
|
this->updatePauseStatus();
|
||||||
|
|
|
@ -22,5 +22,26 @@ RippleEffectLabel::RippleEffectLabel(BaseWidget *parent, int spacing)
|
||||||
this->hbox.addSpacing(spacing);
|
this->hbox.addSpacing(spacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RippleEffectLabel2::RippleEffectLabel2(BaseWidget *parent, int padding)
|
||||||
|
: RippleEffectButton(parent)
|
||||||
|
, label_(this)
|
||||||
|
{
|
||||||
|
auto *hbox = new QHBoxLayout(this);
|
||||||
|
this->setLayout(hbox);
|
||||||
|
|
||||||
|
// this->label_.setAlignment(Qt::AlignCenter);
|
||||||
|
this->label_.setCentered(true);
|
||||||
|
|
||||||
|
hbox->setMargin(0);
|
||||||
|
// hbox.addSpacing(spacing);
|
||||||
|
hbox->addWidget(&this->label_);
|
||||||
|
// hbox.addSpacing(spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
Label &RippleEffectLabel2::getLabel()
|
||||||
|
{
|
||||||
|
return this->label_;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace widgets
|
} // namespace widgets
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "widgets/basewidget.hpp"
|
#include "widgets/basewidget.hpp"
|
||||||
#include "widgets/helper/rippleeffectbutton.hpp"
|
#include "widgets/helper/rippleeffectbutton.hpp"
|
||||||
#include "widgets/helper/signallabel.hpp"
|
#include "widgets/helper/signallabel.hpp"
|
||||||
|
#include "widgets/label.hpp"
|
||||||
|
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
@ -27,5 +28,16 @@ private:
|
||||||
SignalLabel label;
|
SignalLabel label;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RippleEffectLabel2 : public RippleEffectButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit RippleEffectLabel2(BaseWidget *parent = nullptr, int padding = 6);
|
||||||
|
|
||||||
|
Label &getLabel();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Label label_;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace widgets
|
} // namespace widgets
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -104,6 +104,11 @@ void Label::paintEvent(QPaintEvent *)
|
||||||
QTextOption option(alignment);
|
QTextOption option(alignment);
|
||||||
option.setWrapMode(QTextOption::NoWrap);
|
option.setWrapMode(QTextOption::NoWrap);
|
||||||
painter.drawText(textRect, this->text_, option);
|
painter.drawText(textRect, this->text_, option);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
painter.setPen(QColor(255, 0, 0));
|
||||||
|
painter.drawRect(0, 0, this->width() - 1, this->height() - 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Label::updateSize()
|
void Label::updateSize()
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
void setCentered(bool centered);
|
void setCentered(bool centered);
|
||||||
|
|
||||||
bool getHasOffset() const;
|
bool getHasOffset() const;
|
||||||
void setHasOffset(bool centered);
|
void setHasOffset(bool hasOffset);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void scaleChangedEvent(float scale) override;
|
virtual void scaleChangedEvent(float scale) override;
|
||||||
|
|
|
@ -25,6 +25,8 @@ UserInfoPopup::UserInfoPopup()
|
||||||
: BaseWindow(nullptr, BaseWindow::Flags(BaseWindow::Frameless | BaseWindow::DeleteOnFocusOut))
|
: BaseWindow(nullptr, BaseWindow::Flags(BaseWindow::Frameless | BaseWindow::DeleteOnFocusOut))
|
||||||
, hack_(new bool)
|
, hack_(new bool)
|
||||||
{
|
{
|
||||||
|
this->setStayInScreenRect(true);
|
||||||
|
|
||||||
auto app = getApp();
|
auto app = getApp();
|
||||||
|
|
||||||
auto layout = util::LayoutCreator<UserInfoPopup>(this).setLayoutType<QVBoxLayout>();
|
auto layout = util::LayoutCreator<UserInfoPopup>(this).setLayoutType<QVBoxLayout>();
|
||||||
|
@ -67,12 +69,17 @@ UserInfoPopup::UserInfoPopup()
|
||||||
auto mod = user.emplace<RippleEffectButton>(this);
|
auto mod = user.emplace<RippleEffectButton>(this);
|
||||||
mod->setPixmap(app->resources->buttons.mod);
|
mod->setPixmap(app->resources->buttons.mod);
|
||||||
mod->setScaleIndependantSize(30, 30);
|
mod->setScaleIndependantSize(30, 30);
|
||||||
auto unmod = user.emplace<RippleEffectLabel>();
|
auto unmod = user.emplace<RippleEffectButton>(this);
|
||||||
unmod->setPixmap(app->resources->buttons.unmod);
|
unmod->setPixmap(app->resources->buttons.unmod);
|
||||||
unmod->setScaleIndependantSize(30, 30);
|
unmod->setScaleIndependantSize(30, 30);
|
||||||
|
|
||||||
user->addStretch(1);
|
user->addStretch(1);
|
||||||
|
|
||||||
|
QObject::connect(mod.getElement(), &RippleEffectButton::clicked,
|
||||||
|
[this] { this->channel_->sendMessage("/mod " + this->userName_); });
|
||||||
|
QObject::connect(unmod.getElement(), &RippleEffectButton::clicked,
|
||||||
|
[this] { this->channel_->sendMessage("/unmod " + this->userName_); });
|
||||||
|
|
||||||
// userstate
|
// userstate
|
||||||
this->userStateChanged.connect([this, mod, unmod]() mutable {
|
this->userStateChanged.connect([this, mod, unmod]() mutable {
|
||||||
providers::twitch::TwitchChannel *twitchChannel =
|
providers::twitch::TwitchChannel *twitchChannel =
|
||||||
|
@ -301,7 +308,8 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget()
|
||||||
QColor color1(255, 255, 255, 80);
|
QColor color1(255, 255, 255, 80);
|
||||||
QColor color2(255, 255, 255, 0);
|
QColor color2(255, 255, 255, 0);
|
||||||
|
|
||||||
int buttonWidth = 32;
|
int buttonWidth = 24;
|
||||||
|
int buttonWidth2 = 32;
|
||||||
int buttonHeight = 32;
|
int buttonHeight = 32;
|
||||||
|
|
||||||
layout->setSpacing(16);
|
layout->setSpacing(16);
|
||||||
|
@ -312,6 +320,7 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget()
|
||||||
auto title = vbox.emplace<QHBoxLayout>().withoutMargin();
|
auto title = vbox.emplace<QHBoxLayout>().withoutMargin();
|
||||||
title->addStretch(1);
|
title->addStretch(1);
|
||||||
auto label = title.emplace<Label>(text);
|
auto label = title.emplace<Label>(text);
|
||||||
|
label->setHasOffset(false);
|
||||||
label->setStyleSheet("color: #BBB");
|
label->setStyleSheet("color: #BBB");
|
||||||
title->addStretch(1);
|
title->addStretch(1);
|
||||||
|
|
||||||
|
@ -338,21 +347,25 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget()
|
||||||
title->addStretch(1);
|
title->addStretch(1);
|
||||||
auto label = title.emplace<Label>(title_);
|
auto label = title.emplace<Label>(title_);
|
||||||
label->setStyleSheet("color: #BBB");
|
label->setStyleSheet("color: #BBB");
|
||||||
|
label->setHasOffset(false);
|
||||||
title->addStretch(1);
|
title->addStretch(1);
|
||||||
|
|
||||||
auto hbox = vbox.emplace<QHBoxLayout>().withoutMargin();
|
auto hbox = vbox.emplace<QHBoxLayout>().withoutMargin();
|
||||||
hbox->setSpacing(0);
|
hbox->setSpacing(0);
|
||||||
|
|
||||||
for (const auto &item : items) {
|
for (const auto &item : items) {
|
||||||
auto a = hbox.emplace<RippleEffectLabel>();
|
auto a = hbox.emplace<RippleEffectLabel2>();
|
||||||
a->getLabel().setText(std::get<0>(item));
|
a->getLabel().setText(std::get<0>(item));
|
||||||
a->setScaleIndependantSize(buttonWidth, buttonHeight);
|
|
||||||
|
if (std::get<0>(item).length() > 1) {
|
||||||
|
a->setScaleIndependantSize(buttonWidth2, buttonHeight);
|
||||||
|
} else {
|
||||||
|
a->setScaleIndependantSize(buttonWidth, buttonHeight);
|
||||||
|
}
|
||||||
a->setBorderColor(color1);
|
a->setBorderColor(color1);
|
||||||
|
|
||||||
// connect
|
|
||||||
|
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
*a, &RippleEffectLabel::clicked, [ this, timeout = std::get<1>(item) ] {
|
*a, &RippleEffectLabel2::clicked, [ this, timeout = std::get<1>(item) ] {
|
||||||
this->buttonClicked.invoke(std::make_pair(Action::Timeout, timeout));
|
this->buttonClicked.invoke(std::make_pair(Action::Timeout, timeout));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue