mirror-chatterino2/src/widgets/tooltipwidget.cpp

108 lines
2.5 KiB
C++
Raw Normal View History

#include "tooltipwidget.hpp"
2017-12-31 00:50:07 +01:00
#include "singletons/fontmanager.hpp"
#include "singletons/thememanager.hpp"
2018-01-22 20:14:43 +01:00
#include <QDebug>
#include <QDesktopWidget>
#include <QStyle>
#include <QVBoxLayout>
namespace chatterino {
namespace widgets {
TooltipWidget::TooltipWidget(BaseWidget *parent)
: BaseWindow(parent)
, displayText(new QLabel())
{
2018-01-22 20:14:43 +01:00
this->setStyleSheet("color: #fff; background: #000");
this->setWindowOpacity(0.8);
2018-01-22 20:14:43 +01:00
this->updateFont();
this->setAttribute(Qt::WA_ShowWithoutActivating);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint |
2018-01-22 20:14:43 +01:00
Qt::X11BypassWindowManagerHint | Qt::BypassWindowManagerHint |
Qt::SubWindow);
displayText->setAlignment(Qt::AlignHCenter);
2018-01-22 20:14:43 +01:00
displayText->setText("tooltip text");
auto layout = new QVBoxLayout();
layout->setContentsMargins(10, 5, 10, 5);
layout->addWidget(displayText);
this->setLayout(layout);
2018-01-22 20:14:43 +01:00
this->fontChangedConnection =
singletons::FontManager::getInstance().fontChanged.connect([this] { this->updateFont(); });
}
TooltipWidget::~TooltipWidget()
{
this->fontChangedConnection.disconnect();
}
void TooltipWidget::dpiMultiplierChanged(float, float)
{
this->updateFont();
}
void TooltipWidget::updateFont()
{
this->setFont(singletons::FontManager::getInstance().getFont(
singletons::FontManager::Type::MediumSmall, this->getDpiMultiplier()));
}
void TooltipWidget::setText(QString text)
{
this->displayText->setText(text);
}
void TooltipWidget::moveTo(QWidget *parent, QPoint point)
{
point.rx() += 16;
point.ry() += 16;
2018-01-22 20:14:43 +01:00
this->move(point);
2018-01-22 20:14:43 +01:00
this->moveIntoDesktopRect(parent);
}
void TooltipWidget::resizeEvent(QResizeEvent *)
{
this->moveIntoDesktopRect(this);
}
void TooltipWidget::moveIntoDesktopRect(QWidget *parent)
{
QDesktopWidget *desktop = QApplication::desktop();
QRect s = desktop->screenGeometry(parent);
2018-01-22 20:14:43 +01:00
QPoint p = this->pos();
2018-01-22 20:14:43 +01:00
if (p.x() < s.left()) {
p.setX(s.left());
}
2018-01-22 20:14:43 +01:00
if (p.y() < s.top()) {
p.setY(s.top());
}
2018-01-22 20:14:43 +01:00
if (p.x() + this->width() > s.right()) {
p.setX(s.right() - this->width());
}
2018-01-22 20:14:43 +01:00
if (p.y() + this->height() > s.bottom()) {
p.setY(s.bottom() - this->height());
}
if (p != this->pos()) {
this->move(p);
}
2018-01-22 20:14:43 +01:00
}
2018-01-22 20:14:43 +01:00
void TooltipWidget::changeEvent(QEvent *)
{
// clear parents event
}
void TooltipWidget::leaveEvent(QEvent *)
{
// clear parents event
}
} // namespace widgets
} // namespace chatterino