From d966c24bc38aa04cad80c2adb35af7376b6e9260 Mon Sep 17 00:00:00 2001 From: fourtf Date: Mon, 22 Jan 2018 15:06:36 +0100 Subject: [PATCH] fixed #250 tooltips don't stay in window geometry --- src/widgets/helper/channelview.cpp | 2 +- src/widgets/helper/splitheader.cpp | 2 +- src/widgets/tooltipwidget.cpp | 45 ++++++++++++++++++++++++------ src/widgets/tooltipwidget.hpp | 11 ++++++-- 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/widgets/helper/channelview.cpp b/src/widgets/helper/channelview.cpp index d3c1b6845..586415d86 100644 --- a/src/widgets/helper/channelview.cpp +++ b/src/widgets/helper/channelview.cpp @@ -652,7 +652,7 @@ void ChannelView::mouseMoveEvent(QMouseEvent *event) if (tooltip.isEmpty()) { tooltipWidget->hide(); } else { - tooltipWidget->moveTo(event->globalPos()); + tooltipWidget->moveTo(this, event->globalPos()); tooltipWidget->setText(tooltip); tooltipWidget->show(); } diff --git a/src/widgets/helper/splitheader.cpp b/src/widgets/helper/splitheader.cpp index e43cea068..67c0ee355 100644 --- a/src/widgets/helper/splitheader.cpp +++ b/src/widgets/helper/splitheader.cpp @@ -211,7 +211,7 @@ void SplitHeader::mouseMoveEvent(QMouseEvent *event) { if (!this->dragging && this->isLive) { auto tooltipWidget = TooltipWidget::getInstance(); - tooltipWidget->moveTo(event->globalPos()); + tooltipWidget->moveTo(this, event->globalPos()); tooltipWidget->setText(tooltip); tooltipWidget->show(); } diff --git a/src/widgets/tooltipwidget.cpp b/src/widgets/tooltipwidget.cpp index f038827eb..99ea114b1 100644 --- a/src/widgets/tooltipwidget.cpp +++ b/src/widgets/tooltipwidget.cpp @@ -1,7 +1,8 @@ #include "tooltipwidget.hpp" -#include "singletons/thememanager.hpp" #include "singletons/fontmanager.hpp" +#include "singletons/thememanager.hpp" +#include #include #include @@ -9,7 +10,7 @@ namespace chatterino { namespace widgets { TooltipWidget::TooltipWidget(BaseWidget *parent) - : BaseWidget(parent) + : BaseWindow(parent) , displayText(new QLabel()) { QColor black(0, 0, 0); @@ -21,11 +22,12 @@ TooltipWidget::TooltipWidget(BaseWidget *parent) this->setPalette(palette); this->displayText->setStyleSheet("color: #ffffff"); this->setWindowOpacity(0.8); - this->setFont(singletons::FontManager::getInstance().getFont(singletons::FontManager::Type::MediumSmall, - this->getDpiMultiplier())); + this->setFont(singletons::FontManager::getInstance().getFont( + singletons::FontManager::Type::MediumSmall, this->getDpiMultiplier())); this->setAttribute(Qt::WA_ShowWithoutActivating); - this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); + this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | + Qt::X11BypassWindowManagerHint); displayText->setAlignment(Qt::AlignHCenter); displayText->setText("lmao xD"); @@ -35,8 +37,8 @@ TooltipWidget::TooltipWidget(BaseWidget *parent) this->setLayout(layout); singletons::FontManager::getInstance().fontChanged.connect([this] { - this->setFont(singletons::FontManager::getInstance().getFont(singletons::FontManager::Type::MediumSmall, - this->getDpiMultiplier())); + this->setFont(singletons::FontManager::getInstance().getFont( + singletons::FontManager::Type::MediumSmall, this->getDpiMultiplier())); }); } @@ -45,12 +47,39 @@ void TooltipWidget::setText(QString text) this->displayText->setText(text); } -void TooltipWidget::moveTo(QPoint point) +void TooltipWidget::moveTo(QWidget *parent, QPoint point) { point.rx() += 16; point.ry() += 16; this->move(point); } +void TooltipWidget::resizeEvent(QResizeEvent *) +{ + this->moveIntoDesktopRect(this); +} + +void TooltipWidget::moveIntoDesktopRect(QWidget *parent) +{ + QDesktopWidget *desktop = QApplication::desktop(); + + QRect s = desktop->screenGeometry(parent); + QRect w = this->geometry(); + + if (w.left() < s.left()) { + w.moveLeft(s.left()); + } + if (w.right() < s.right()) { + w.moveRight(s.right()); + } + if (w.top() < s.top()) { + w.moveTop(s.top()); + } + if (w.bottom() < s.bottom()) { + w.moveBottom(s.bottom()); + } + + this->setGeometry(w); +} } // namespace widgets } // namespace chatterino diff --git a/src/widgets/tooltipwidget.hpp b/src/widgets/tooltipwidget.hpp index 561f0f354..5c1ede8cc 100644 --- a/src/widgets/tooltipwidget.hpp +++ b/src/widgets/tooltipwidget.hpp @@ -1,5 +1,5 @@ #pragma once -#include "widgets/basewidget.hpp" +#include "widgets/basewindow.hpp" #include #include @@ -7,14 +7,14 @@ namespace chatterino { namespace widgets { -class TooltipWidget : public BaseWidget +class TooltipWidget : public BaseWindow { Q_OBJECT public: TooltipWidget(BaseWidget *parent = nullptr); void setText(QString text); - void moveTo(QPoint point); + void moveTo(QWidget *widget, QPoint point); static TooltipWidget *getInstance() { @@ -25,8 +25,13 @@ public: return tooltipWidget; } +protected: + virtual void resizeEvent(QResizeEvent *) override; + private: QLabel *displayText; + + void moveIntoDesktopRect(QWidget *parent); }; } // namespace widgets