improve frameless window support

This commit is contained in:
Skarn
2020-11-04 20:08:27 +03:00
parent 7b47b62fbd
commit 1d023bd98b
5 changed files with 75 additions and 14 deletions

View File

@@ -7,6 +7,14 @@
<qresource prefix="/"> <qresource prefix="/">
<file alias="icon">../media/noggit_icon.png</file> <file alias="icon">../media/noggit_icon.png</file>
<file alias="splash">../media/splash.png</file> <file alias="splash">../media/splash.png</file>
<file>../media/button_minimize_black.svg</file>
<file>../media/button_minimize_white.svg</file>
<file>../media/button_maximize_black.svg</file>
<file>../media/button_maximize_white.svg</file>
<file>../media/button_restore_black.svg</file>
<file>../media/button_restore_white.svg</file>
<file>../media/button_close_black.svg</file>
<file>../media/button_close_white.svg</file>
</qresource> </qresource>
<qresource prefix="/shader"> <qresource prefix="/shader">
<file alias="m2_vs">../src/glsl/m2_vert.glsl</file> <file alias="m2_vs">../src/glsl/m2_vert.glsl</file>

View File

@@ -75,6 +75,10 @@
<property name="focusPolicy"> <property name="focusPolicy">
<enum>Qt::NoFocus</enum> <enum>Qt::NoFocus</enum>
</property> </property>
<property name="icon">
<iconset resource="./resources/resources.qrc">
<normaloff>:icon</normaloff>:icon</iconset>
</property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>24</width> <width>24</width>
@@ -146,8 +150,8 @@
<string>Minimize</string> <string>Minimize</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../images.qrc"> <iconset resource="./resources/resources.qrc">
<normaloff>:/images/button_minimize_black.svg</normaloff>:/images/button_minimize_black.svg</iconset> <normaloff>:./media/button_minimize_black.svg</normaloff>:./media/button_minimize_black.svg</iconset>
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
@@ -187,9 +191,9 @@
<string>Maximize</string> <string>Maximize</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../images.qrc"> <iconset resource="./resources/resources.qrc">
<normaloff>:/images/button_maximize_black.svg</normaloff> <normaloff>:./media/button_maximize_black.svg</normaloff>
<normalon>:/images/button_restore_black.svg</normalon>:/images/button_maximize_black.svg</iconset> <normalon>:./media/button_restore_black.svg</normalon>:./media/button_maximize_black.svg</iconset>
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
@@ -232,8 +236,8 @@
<string>Close</string> <string>Close</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../images.qrc"> <iconset resource="./resources/resources.qrc">
<normaloff>:/images/button_close_black.svg</normaloff>:/images/button_close_black.svg</iconset> <normaloff>:./media/button_close_black.svg</normaloff>:./media/button_close_black.svg</iconset>
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
@@ -247,7 +251,7 @@
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources> <resources>
<include location="../images.qrc"/> <include location="./resources/resources.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View File

@@ -470,19 +470,19 @@ void MapView::createGUI()
_main_window->addToolBar(Qt::TopToolBarArea, _view_toolbar); _main_window->addToolBar(Qt::TopToolBarArea, _view_toolbar);
connect (this, &QObject::destroyed, _view_toolbar, &QObject::deleteLater); 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); 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); 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); 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); 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); connect (this, &QObject::destroyed, help_menu, &QObject::deleteLater);
#define ADD_ACTION(menu, name, shortcut, on_action) \ #define ADD_ACTION(menu, name, shortcut, on_action) \

View File

@@ -32,6 +32,8 @@
#include "revision.h" #include "revision.h"
#include "ui_TitleBar.h"
#include <external/framelesshelper/framelesswindowsmanager.h>
namespace noggit namespace noggit
{ {
@@ -53,7 +55,45 @@ namespace noggit
_settings = new settings(this); _settings = new settings(this);
_about = new about(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")); auto settings_action (file_menu->addAction ("Settings"));
QObject::connect ( settings_action, &QAction::triggered 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(); build_menu();
} }

View File

@@ -28,6 +28,7 @@ namespace noggit
void prompt_exit(QCloseEvent* event); void prompt_exit(QCloseEvent* event);
void prompt_uid_fix_failure(); void prompt_uid_fix_failure();
QMenuBar* _menuBar;
std::unordered_set<QWidget*> displayed_widgets; std::unordered_set<QWidget*> displayed_widgets;