From 34082479edf6ac33b900b4a59b2b54150cf3f33e Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sun, 10 Dec 2023 07:29:51 -0500 Subject: [PATCH] Hide FMV by default, toggle with a menu action --- armoury/include/fullmodelviewer.h | 5 +++++ armoury/src/fullmodelviewer.cpp | 21 +++++++++++++++++++++ armoury/src/mainwindow.cpp | 14 +++++++++++++- parts/mdl/vulkanwindow.cpp | 9 +++++++-- 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/armoury/include/fullmodelviewer.h b/armoury/include/fullmodelviewer.h index 2c10eb8..9a12699 100644 --- a/armoury/include/fullmodelviewer.h +++ b/armoury/include/fullmodelviewer.h @@ -18,9 +18,14 @@ class FullModelViewer : public QMainWindow public: explicit FullModelViewer(GameData *data, FileCache &cache, QWidget *parent = nullptr); + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent *event) override; + void closeEvent(QCloseEvent *event) override; + Q_SIGNALS: void gearChanged(); void loadingChanged(bool loading); + void visibleChanged(); public Q_SLOTS: void clear(); diff --git a/armoury/src/fullmodelviewer.cpp b/armoury/src/fullmodelviewer.cpp index 0e17979..7e440c9 100644 --- a/armoury/src/fullmodelviewer.cpp +++ b/armoury/src/fullmodelviewer.cpp @@ -5,6 +5,7 @@ #include "boneeditor.h" #include "magic_enum.hpp" +#include #include #include #include @@ -19,6 +20,7 @@ FullModelViewer::FullModelViewer(GameData *data, FileCache &cache, QWidget *pare setWindowTitle(QStringLiteral("Full Model Viewer")); setMinimumWidth(1280); setMinimumHeight(720); + setAttribute(Qt::WA_DeleteOnClose, false); auto dummyWidget = new QWidget(); setCentralWidget(dummyWidget); @@ -136,6 +138,25 @@ FullModelViewer::FullModelViewer(GameData *data, FileCache &cache, QWidget *pare reloadGear(); } +void FullModelViewer::showEvent(QShowEvent *event) +{ + Q_EMIT visibleChanged(); + QWidget::showEvent(event); +} + +void FullModelViewer::hideEvent(QHideEvent *event) +{ + Q_EMIT visibleChanged(); + QWidget::hideEvent(event); +} + +void FullModelViewer::closeEvent(QCloseEvent *event) +{ + event->setAccepted(true); + hide(); + QWidget::closeEvent(event); +} + void FullModelViewer::clear() { topSlot.reset(); diff --git a/armoury/src/mainwindow.cpp b/armoury/src/mainwindow.cpp index 763708a..8ce4dc5 100644 --- a/armoury/src/mainwindow.cpp +++ b/armoury/src/mainwindow.cpp @@ -54,13 +54,25 @@ MainWindow::MainWindow(GameData *in_data) connect(fullModelViewer, &FullModelViewer::loadingChanged, this, [this](const bool loading) { gearView->setFMVAvailable(!loading); }); - fullModelViewer->show(); } void MainWindow::setupAdditionalMenus(QMenuBar *menuBar) { auto toolsMenu = menuBar->addMenu(QStringLiteral("Tools")); + auto fmvMenu = toolsMenu->addAction(QStringLiteral("Full Model viewer")); + fmvMenu->setCheckable(true); + connect(fmvMenu, &QAction::toggled, [this](bool toggled) { + if (toggled) { + fullModelViewer->show(); + } else { + fullModelViewer->hide(); + } + }); + connect(fullModelViewer, &FullModelViewer::visibleChanged, this, [this, fmvMenu] { + fmvMenu->setChecked(fullModelViewer->isVisible()); + }); + auto cmpEditorMenu = toolsMenu->addAction(QStringLiteral("CMP Editor")); cmpEditorMenu->setIcon(QIcon::fromTheme(QStringLiteral("document-edit"))); connect(cmpEditorMenu, &QAction::triggered, [this] { diff --git a/parts/mdl/vulkanwindow.cpp b/parts/mdl/vulkanwindow.cpp index 3887f03..790b62c 100644 --- a/parts/mdl/vulkanwindow.cpp +++ b/parts/mdl/vulkanwindow.cpp @@ -24,10 +24,11 @@ void VulkanWindow::exposeEvent(QExposeEvent *) m_initialized = true; auto surface = m_instance->surfaceForWindow(this); - if (!m_renderer->initSwapchain(surface, width() * screen()->devicePixelRatio(), height() * screen()->devicePixelRatio())) + if (!m_renderer->initSwapchain(surface, width() * screen()->devicePixelRatio(), height() * screen()->devicePixelRatio())) { m_initialized = false; - else + } else { render(); + } } if (!isExposed() && m_initialized) { @@ -113,6 +114,10 @@ bool VulkanWindow::event(QEvent *e) void VulkanWindow::render() { + if (!m_initialized) { + return; + } + ImGui::SetCurrentContext(m_renderer->ctx); auto &io = ImGui::GetIO();