From 1d023bd98b89bd1a891b63febbb915ab08c8f79d Mon Sep 17 00:00:00 2001 From: Skarn Date: Wed, 4 Nov 2020 20:08:27 +0300 Subject: [PATCH] improve frameless window support --- resources/resources.qrc | 8 +++ .../examples/QMainWindow/TitleBar.ui | 20 +++++--- src/noggit/MapView.cpp | 10 ++-- src/noggit/ui/main_window.cpp | 50 ++++++++++++++++++- src/noggit/ui/main_window.hpp | 1 + 5 files changed, 75 insertions(+), 14 deletions(-) diff --git a/resources/resources.qrc b/resources/resources.qrc index 0b1cfbfc..db784903 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -7,6 +7,14 @@ ../media/noggit_icon.png ../media/splash.png + ../media/button_minimize_black.svg + ../media/button_minimize_white.svg + ../media/button_maximize_black.svg + ../media/button_maximize_white.svg + ../media/button_restore_black.svg + ../media/button_restore_white.svg + ../media/button_close_black.svg + ../media/button_close_white.svg ../src/glsl/m2_vert.glsl diff --git a/src/external/framelesshelper/examples/QMainWindow/TitleBar.ui b/src/external/framelesshelper/examples/QMainWindow/TitleBar.ui index a763cecc..7ca1775b 100644 --- a/src/external/framelesshelper/examples/QMainWindow/TitleBar.ui +++ b/src/external/framelesshelper/examples/QMainWindow/TitleBar.ui @@ -75,6 +75,10 @@ Qt::NoFocus + + + :icon:icon + 24 @@ -146,8 +150,8 @@ Minimize - - :/images/button_minimize_black.svg:/images/button_minimize_black.svg + + :./media/button_minimize_black.svg:./media/button_minimize_black.svg @@ -187,9 +191,9 @@ Maximize - - :/images/button_maximize_black.svg - :/images/button_restore_black.svg:/images/button_maximize_black.svg + + :./media/button_maximize_black.svg + :./media/button_restore_black.svg:./media/button_maximize_black.svg @@ -232,8 +236,8 @@ Close - - :/images/button_close_black.svg:/images/button_close_black.svg + + :./media/button_close_black.svg:./media/button_close_black.svg @@ -247,7 +251,7 @@ - + diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 1885fb39..28156f2c 100644 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -470,19 +470,19 @@ void MapView::createGUI() _main_window->addToolBar(Qt::TopToolBarArea, _view_toolbar); connect (this, &QObject::destroyed, _view_toolbar, &QObject::deleteLater); - auto file_menu (_main_window->menuBar()->addMenu ("Editor")); + auto file_menu (_main_window->_menuBar->addMenu ("Editor")); connect (this, &QObject::destroyed, file_menu, &QObject::deleteLater); - auto edit_menu (_main_window->menuBar()->addMenu ("Edit")); + auto edit_menu (_main_window->_menuBar->addMenu ("Edit")); connect (this, &QObject::destroyed, edit_menu, &QObject::deleteLater); - auto assist_menu (_main_window->menuBar()->addMenu ("Assist")); + auto assist_menu (_main_window->_menuBar->addMenu ("Assist")); connect (this, &QObject::destroyed, assist_menu, &QObject::deleteLater); - auto view_menu (_main_window->menuBar()->addMenu ("View")); + auto view_menu (_main_window->_menuBar->addMenu ("View")); connect (this, &QObject::destroyed, view_menu, &QObject::deleteLater); - auto help_menu (_main_window->menuBar()->addMenu ("Help")); + auto help_menu (_main_window->_menuBar->addMenu ("Help")); connect (this, &QObject::destroyed, help_menu, &QObject::deleteLater); #define ADD_ACTION(menu, name, shortcut, on_action) \ diff --git a/src/noggit/ui/main_window.cpp b/src/noggit/ui/main_window.cpp index 1b82fbf6..02247b41 100644 --- a/src/noggit/ui/main_window.cpp +++ b/src/noggit/ui/main_window.cpp @@ -32,6 +32,8 @@ #include "revision.h" +#include "ui_TitleBar.h" +#include namespace noggit { @@ -53,7 +55,45 @@ namespace noggit _settings = new settings(this); _about = new about(this); - auto file_menu (menuBar()->addMenu ("&Noggit")); + QWidget *widget = new QWidget(this); + Ui::TitleBar titleBarWidget; + titleBarWidget.setupUi(widget); + + _menuBar = new QMenuBar(nullptr); + _menuBar->setNativeMenuBar(false); + titleBarWidget.horizontalLayout->insertWidget(1, _menuBar); + _menuBar->setMaximumHeight(20); + + setMenuWidget(widget); + + QObject::connect(this, + &QMainWindow::windowTitleChanged, + titleBarWidget.titleLabel, + &QLabel::setText); + + QObject::connect(titleBarWidget.closeButton, + &QPushButton::clicked, + this, + &QMainWindow::close); + + QObject::connect(titleBarWidget.minimizeButton, + &QPushButton::clicked, + this, + &QMainWindow::showMinimized); + + QObject::connect(titleBarWidget.maximizeButton, + &QPushButton::clicked, + [this, titleBarWidget]() { + if (this->isMaximized()) { + this->showNormal(); + titleBarWidget.maximizeButton->setToolTip(QObject::tr("Maximize")); + } else { + this->showMaximized(); + titleBarWidget.maximizeButton->setToolTip(QObject::tr("Restore")); + } + }); + + auto file_menu (_menuBar->addMenu ("&Noggit")); auto settings_action (file_menu->addAction ("Settings")); QObject::connect ( settings_action, &QAction::triggered @@ -79,6 +119,14 @@ namespace noggit } ); + FramelessWindowsManager::addIgnoreObject(this, _menuBar); + FramelessWindowsManager::addIgnoreObject(this, titleBarWidget.minimizeButton); + FramelessWindowsManager::addIgnoreObject(this, titleBarWidget.maximizeButton); + FramelessWindowsManager::addIgnoreObject(this, titleBarWidget.closeButton); + + FramelessWindowsManager::setResizable(this, true); + FramelessWindowsManager::setMinimumSize(this, {1280, 720}); + build_menu(); } diff --git a/src/noggit/ui/main_window.hpp b/src/noggit/ui/main_window.hpp index 9ab49e64..d853f2c2 100644 --- a/src/noggit/ui/main_window.hpp +++ b/src/noggit/ui/main_window.hpp @@ -28,6 +28,7 @@ namespace noggit void prompt_exit(QCloseEvent* event); void prompt_uid_fix_failure(); + QMenuBar* _menuBar; std::unordered_set displayed_widgets;