From e19a83679fd6fe895b9c22176a0274e9ec4c29c0 Mon Sep 17 00:00:00 2001 From: fourtf Date: Sun, 14 Jan 2018 21:55:36 +0100 Subject: [PATCH] moved window logic from BaseWidget to BaseWindow --- chatterino.pro | 6 ++- src/widgets/accountpopup.cpp | 3 +- src/widgets/accountpopup.hpp | 4 +- src/widgets/basewidget.cpp | 56 -------------------- src/widgets/basewidget.hpp | 13 +---- src/widgets/basewindow.cpp | 83 ++++++++++++++++++++++++++++++ src/widgets/basewindow.hpp | 27 ++++++++++ src/widgets/emotepopup.cpp | 4 +- src/widgets/emotepopup.hpp | 4 +- src/widgets/helper/searchpopup.cpp | 10 ++-- src/widgets/helper/searchpopup.hpp | 8 +-- src/widgets/qualitypopup.cpp | 4 +- src/widgets/qualitypopup.hpp | 4 +- src/widgets/settingsdialog.cpp | 4 +- src/widgets/settingsdialog.hpp | 4 +- src/widgets/window.cpp | 4 +- src/widgets/window.hpp | 4 +- 17 files changed, 138 insertions(+), 104 deletions(-) create mode 100644 src/widgets/basewindow.cpp create mode 100644 src/widgets/basewindow.hpp diff --git a/chatterino.pro b/chatterino.pro index 053d522c4..c34617604 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -126,7 +126,8 @@ SOURCES += \ src/widgets/settingspages/accountspage.cpp \ src/widgets/settingspages/aboutpage.cpp \ src/widgets/settingspages/moderationpage.cpp \ - src/widgets/settingspages/logspage.cpp + src/widgets/settingspages/logspage.cpp \ + src/widgets/basewindow.cpp HEADERS += \ src/precompiled_headers.hpp \ @@ -224,7 +225,8 @@ HEADERS += \ src/widgets/settingspages/accountspage.hpp \ src/widgets/settingspages/aboutpage.hpp \ src/widgets/settingspages/moderationpage.hpp \ - src/widgets/settingspages/logspage.hpp + src/widgets/settingspages/logspage.hpp \ + src/widgets/basewindow.hpp PRECOMPILED_HEADER = diff --git a/src/widgets/accountpopup.cpp b/src/widgets/accountpopup.cpp index 65e172ada..d99fe3955 100644 --- a/src/widgets/accountpopup.cpp +++ b/src/widgets/accountpopup.cpp @@ -19,7 +19,7 @@ namespace chatterino { namespace widgets { AccountPopupWidget::AccountPopupWidget(SharedChannel _channel) - : BaseWidget() + : BaseWindow() , ui(new Ui::AccountPopup) , channel(_channel) { @@ -28,7 +28,6 @@ AccountPopupWidget::AccountPopupWidget(SharedChannel _channel) this->layout()->setSizeConstraint(QLayout::SetFixedSize); this->setWindowFlags(Qt::FramelessWindowHint); - this->initAsWindow(); this->resize(0, 0); diff --git a/src/widgets/accountpopup.hpp b/src/widgets/accountpopup.hpp index 1b5056198..6d53bd3a0 100644 --- a/src/widgets/accountpopup.hpp +++ b/src/widgets/accountpopup.hpp @@ -1,6 +1,6 @@ #pragma once -#include "basewidget.hpp" +#include "basewindow.hpp" #include "twitch/twitchchannel.hpp" #include "util/concurrentmap.hpp" @@ -19,7 +19,7 @@ class Channel; namespace widgets { -class AccountPopupWidget : public BaseWidget +class AccountPopupWidget : public BaseWindow { Q_OBJECT public: diff --git a/src/widgets/basewidget.cpp b/src/widgets/basewidget.cpp index 6ed7535f2..f977086f1 100644 --- a/src/widgets/basewidget.cpp +++ b/src/widgets/basewidget.cpp @@ -1,14 +1,12 @@ #include "widgets/basewidget.hpp" #include "singletons/settingsmanager.hpp" #include "singletons/thememanager.hpp" -#include "widgets/tooltipwidget.hpp" #include #include #include #include #include -#include "util/nativeeventhelper.hpp" namespace chatterino { namespace widgets { @@ -61,64 +59,10 @@ void BaseWidget::init() }); } -void BaseWidget::initAsWindow() -{ - this->setWindowIcon(QIcon(":/images/icon.png")); - - this->isWindow = true; - -#ifdef USEWINSDK - auto dpi = util::getWindowDpi(this->winId()); - - if (dpi) { - this->dpiMultiplier = dpi.value() / 96.f; - } -#endif - - if (singletons::SettingManager::getInstance().windowTopMost.getValue()) { - this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); - } -} - void BaseWidget::refreshTheme() { // Do any color scheme updates here } -#ifdef USEWINSDK -bool BaseWidget::nativeEvent(const QByteArray &eventType, void *message, long *result) -{ - int dpi; - - if (util::tryHandleDpiChangedMessage(message, dpi)) { - qDebug() << "dpi changed"; - - float oldDpiMultiplier = this->dpiMultiplier; - this->dpiMultiplier = dpi / 96.f; - float scale = this->dpiMultiplier / oldDpiMultiplier; - - this->dpiMultiplierChanged(oldDpiMultiplier, this->dpiMultiplier); - - this->resize(static_cast(this->width() * scale), - static_cast(this->height() * scale)); - } - - return QWidget::nativeEvent(eventType, message, result); -} -#endif - -void BaseWidget::changeEvent(QEvent *) -{ - if (this->isWindow) { - TooltipWidget::getInstance()->hide(); - } -} - -void BaseWidget::leaveEvent(QEvent *) -{ - if (this->isWindow) { - TooltipWidget::getInstance()->hide(); - } -} } // namespace widgets } // namespace chatterino diff --git a/src/widgets/basewidget.hpp b/src/widgets/basewidget.hpp index 04ef5eb48..b2e495b3b 100644 --- a/src/widgets/basewidget.hpp +++ b/src/widgets/basewidget.hpp @@ -15,9 +15,7 @@ class BaseWidget : public QWidget public: explicit BaseWidget(singletons::ThemeManager &_themeManager, QWidget *parent); - explicit BaseWidget(BaseWidget *parent); - explicit BaseWidget(QWidget *parent = nullptr); singletons::ThemeManager &themeManager; @@ -25,22 +23,13 @@ public: float getDpiMultiplier(); protected: -#ifdef USEWINSDK - virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result) override; -#endif - - virtual void changeEvent(QEvent *) override; - virtual void leaveEvent(QEvent *) override; - virtual void dpiMultiplierChanged(float /*oldDpi*/, float /*newDpi*/) { } - void initAsWindow(); -private: - bool isWindow = false; float dpiMultiplier = 1.f; +private: void init(); virtual void refreshTheme(); diff --git a/src/widgets/basewindow.cpp b/src/widgets/basewindow.cpp new file mode 100644 index 000000000..f3dcbf47a --- /dev/null +++ b/src/widgets/basewindow.cpp @@ -0,0 +1,83 @@ +#include "basewindow.hpp" + +#include "singletons/settingsmanager.hpp" +#include "util/nativeeventhelper.hpp" +#include "widgets/tooltipwidget.hpp" + +#include +#include + +namespace chatterino { +namespace widgets { + +BaseWindow::BaseWindow(singletons::ThemeManager &_themeManager, QWidget *parent) + : BaseWidget(_themeManager, parent) +{ + this->init(); +} + +BaseWindow::BaseWindow(BaseWidget *parent) + : BaseWidget(parent) +{ + this->init(); +} + +BaseWindow::BaseWindow(QWidget *parent) + : BaseWidget(parent) +{ + this->init(); +} + +void BaseWindow::init() +{ + this->setWindowIcon(QIcon(":/images/icon.png")); + +#ifdef USEWINSDK + auto dpi = util::getWindowDpi(this->winId()); + + if (dpi) { + this->dpiMultiplier = dpi.value() / 96.f; + } + + this->dpiMultiplierChanged(1, this->dpiMultiplier); +#endif + + if (singletons::SettingManager::getInstance().windowTopMost.getValue()) { + this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); + } +} + +void BaseWindow::changeEvent(QEvent *) +{ + TooltipWidget::getInstance()->hide(); +} + +void BaseWindow::leaveEvent(QEvent *) +{ + TooltipWidget::getInstance()->hide(); +} + +#ifdef USEWINSDK +bool BaseWindow::nativeEvent(const QByteArray &eventType, void *message, long *result) +{ + int dpi; + + if (util::tryHandleDpiChangedMessage(message, dpi)) { + qDebug() << "dpi changed"; + + float oldDpiMultiplier = this->dpiMultiplier; + this->dpiMultiplier = dpi / 96.f; + float scale = this->dpiMultiplier / oldDpiMultiplier; + + this->dpiMultiplierChanged(oldDpiMultiplier, this->dpiMultiplier); + + this->resize(static_cast(this->width() * scale), + static_cast(this->height() * scale)); + } + + return QWidget::nativeEvent(eventType, message, result); +} +#endif + +} // namespace widgets +} // namespace chatterino diff --git a/src/widgets/basewindow.hpp b/src/widgets/basewindow.hpp new file mode 100644 index 000000000..fdad9fe65 --- /dev/null +++ b/src/widgets/basewindow.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include "basewidget.hpp" + +namespace chatterino { +namespace widgets { + +class BaseWindow : public BaseWidget +{ +public: + explicit BaseWindow(singletons::ThemeManager &_themeManager, QWidget *parent); + explicit BaseWindow(BaseWidget *parent); + explicit BaseWindow(QWidget *parent = nullptr); + +protected: +#ifdef USEWINSDK + virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result) override; +#endif + + virtual void changeEvent(QEvent *) override; + virtual void leaveEvent(QEvent *) override; + +private: + void init(); +}; +} // namespace widgets +} // namespace chatterino diff --git a/src/widgets/emotepopup.cpp b/src/widgets/emotepopup.cpp index 64cca6319..75fc71577 100644 --- a/src/widgets/emotepopup.cpp +++ b/src/widgets/emotepopup.cpp @@ -13,10 +13,8 @@ namespace chatterino { namespace widgets { EmotePopup::EmotePopup(singletons::ThemeManager &themeManager) - : BaseWidget(themeManager, 0) + : BaseWindow(themeManager, 0) { - this->initAsWindow(); - this->viewEmotes = new ChannelView(); this->viewEmojis = new ChannelView(); diff --git a/src/widgets/emotepopup.hpp b/src/widgets/emotepopup.hpp index 8ea988288..d64f979d6 100644 --- a/src/widgets/emotepopup.hpp +++ b/src/widgets/emotepopup.hpp @@ -1,13 +1,13 @@ #pragma once #include "channel.hpp" -#include "widgets/basewidget.hpp" +#include "widgets/basewindow.hpp" #include "widgets/helper/channelview.hpp" namespace chatterino { namespace widgets { -class EmotePopup : public BaseWidget +class EmotePopup : public BaseWindow { public: explicit EmotePopup(singletons::ThemeManager &); diff --git a/src/widgets/helper/searchpopup.cpp b/src/widgets/helper/searchpopup.cpp index e9b1e51ad..048f00a5a 100644 --- a/src/widgets/helper/searchpopup.cpp +++ b/src/widgets/helper/searchpopup.cpp @@ -11,7 +11,6 @@ namespace chatterino { namespace widgets { SearchPopup::SearchPopup() { - this->initAsWindow(); this->initLayout(); this->resize(400, 600); } @@ -76,14 +75,13 @@ void SearchPopup::performSearch() for (size_t i = 0; i < this->snapshot.getLength(); i++) { messages::MessagePtr message = this->snapshot[i]; - if (text.isEmpty() || - message->getSearchText().indexOf(this->searchInput->text(), 0, Qt::CaseInsensitive) != - -1) { + if (text.isEmpty() || message->getSearchText().indexOf(this->searchInput->text(), 0, + Qt::CaseInsensitive) != -1) { channel->addMessage(message); } } this->channelView->setChannel(channel); } -} -} +} // namespace widgets +} // namespace chatterino diff --git a/src/widgets/helper/searchpopup.hpp b/src/widgets/helper/searchpopup.hpp index 613700bff..28e06f01f 100644 --- a/src/widgets/helper/searchpopup.hpp +++ b/src/widgets/helper/searchpopup.hpp @@ -4,7 +4,7 @@ #include "messages/limitedqueuesnapshot.hpp" #include "messages/message.hpp" -#include "widgets/basewidget.hpp" +#include "widgets/basewindow.hpp" class QLineEdit; namespace chatterino { @@ -12,7 +12,7 @@ class Channel; namespace widgets { class ChannelView; -class SearchPopup : public BaseWidget +class SearchPopup : public BaseWindow { public: SearchPopup(); @@ -27,5 +27,5 @@ private: void initLayout(); void performSearch(); }; -} -} +} // namespace widgets +} // namespace chatterino diff --git a/src/widgets/qualitypopup.cpp b/src/widgets/qualitypopup.cpp index 527baf76e..4a41d4557 100644 --- a/src/widgets/qualitypopup.cpp +++ b/src/widgets/qualitypopup.cpp @@ -6,12 +6,10 @@ namespace chatterino { namespace widgets { QualityPopup::QualityPopup(const QString &channel, const QString &path, QStringList options) - : BaseWidget() + : BaseWindow() , channel(channel) , path(path) { - this->initAsWindow(); - this->ui.okButton.setText("OK"); this->ui.cancelButton.setText("Cancel"); diff --git a/src/widgets/qualitypopup.hpp b/src/widgets/qualitypopup.hpp index 11fd83164..603537f34 100644 --- a/src/widgets/qualitypopup.hpp +++ b/src/widgets/qualitypopup.hpp @@ -8,13 +8,13 @@ #include #include -#include "basewidget.hpp" +#include "basewindow.hpp" namespace chatterino { namespace widgets { -class QualityPopup : public BaseWidget +class QualityPopup : public BaseWindow { public: QualityPopup(const QString &channel, const QString &path, QStringList options); diff --git a/src/widgets/settingsdialog.cpp b/src/widgets/settingsdialog.cpp index a46b671b9..9320e61a1 100644 --- a/src/widgets/settingsdialog.cpp +++ b/src/widgets/settingsdialog.cpp @@ -19,10 +19,8 @@ namespace widgets { SettingsDialog *SettingsDialog::handle = nullptr; SettingsDialog::SettingsDialog() - : BaseWidget() + : BaseWindow() { - this->initAsWindow(); - this->initUi(); this->addTabs(); diff --git a/src/widgets/settingsdialog.hpp b/src/widgets/settingsdialog.hpp index 7bcd196f4..d870e1931 100644 --- a/src/widgets/settingsdialog.hpp +++ b/src/widgets/settingsdialog.hpp @@ -1,6 +1,6 @@ #pragma once -#include "basewidget.hpp" +#include "basewindow.hpp" #include #include @@ -17,7 +17,7 @@ class SettingsPage; class SettingsDialogTab; -class SettingsDialog : public BaseWidget +class SettingsDialog : public BaseWindow { public: SettingsDialog(); diff --git a/src/widgets/window.cpp b/src/widgets/window.cpp index 7b55b9122..805c88c70 100644 --- a/src/widgets/window.cpp +++ b/src/widgets/window.cpp @@ -18,15 +18,13 @@ namespace widgets { Window::Window(const QString &windowName, singletons::ThemeManager &_themeManager, bool _isMainWindow) - : BaseWidget(_themeManager, nullptr) + : BaseWindow(_themeManager, nullptr) , settingRoot(fS("/windows/{}", windowName)) , windowGeometry(this->settingRoot) , dpi(this->getDpiMultiplier()) , themeManager(_themeManager) , notebook(this, _isMainWindow, this->settingRoot) { - this->initAsWindow(); - singletons::AccountManager::getInstance().Twitch.currentUsername.connect( [this](const std::string &newUsername, auto) { if (newUsername.empty()) { diff --git a/src/widgets/window.hpp b/src/widgets/window.hpp index 916d17f56..c8c91cb92 100644 --- a/src/widgets/window.hpp +++ b/src/widgets/window.hpp @@ -1,7 +1,7 @@ #pragma once #include "util/helpers.hpp" -#include "widgets/basewidget.hpp" +#include "widgets/basewindow.hpp" #include "widgets/notebook.hpp" #include "widgets/titlebar.hpp" @@ -35,7 +35,7 @@ struct WindowGeometry { pajlada::Settings::Setting height; }; -class Window : public BaseWidget +class Window : public BaseWindow { Q_OBJECT