Settings widget mostly works

This commit is contained in:
irisz64
2025-05-23 10:15:25 +02:00
parent 1de29dd76d
commit 9fd6c585d6
9 changed files with 32 additions and 27 deletions

View File

@@ -7,6 +7,7 @@
#include <resources/frag.spv.h>
#include <KaizenGui.hpp>
#include <imgui_impl_vulkan.h>
#include <mutex>
using namespace Vulkan;
using namespace RDP;
@@ -158,7 +159,10 @@ void ParallelRDP::DrawFullscreenTexturedQuad(Util::IntrusivePtr<Image> image,
cmd->draw(3, 1);
}
std::mutex coreM;
void ParallelRDP::UpdateScreen(Util::IntrusivePtr<Image> image) const {
std::lock_guard<std::mutex> coreLock(coreM);
wsi->begin_frame();
if (!image) {

View File

@@ -20,4 +20,6 @@ bool CPUSettings::render() {
modified = true;
}
return modified;
}

View File

@@ -5,7 +5,7 @@
namespace gui {
struct ComboItem {
ComboItem(std::string label, bool enabled = true) : enabled(enabled) {}
ComboItem(const std::string& label, bool enabled = true) : enabled(enabled), label(label) {}
bool render(bool is_selected) {
ImGui::BeginDisabled(!enabled);
@@ -22,7 +22,7 @@ private:
};
struct Combobox {
Combobox(std::string label, std::vector<ComboItem> items, std::string preview = "", bool enabled = true) : label(label), items(items), preview(preview), enabled(enabled) {}
Combobox(const std::string& label, const std::vector<ComboItem>& items, const std::string& preview = "", bool enabled = true) : label(label), items(items), preview(preview), enabled(enabled) {}
void addItem(const ComboItem& item) {
if(std::find_if(items.begin(), items.end(),

View File

@@ -7,7 +7,7 @@
namespace gui {
struct TabItem {
TabItem(std::string label, std::function<void()>&& func, bool enabled = true) : exec(std::move(func)), enabled(enabled) {}
TabItem(const std::string& label, std::function<void()>&& func, bool enabled = true) : exec(std::move(func)), enabled(enabled), label(label) {}
bool render() {
bool ret = false;
@@ -28,7 +28,7 @@ private:
};
struct TabBar {
TabBar(std::string label, const std::vector<TabItem>& items = {}) : label(label), tabs(items) {}
TabBar(const std::string& label, const std::vector<TabItem>& items = {}) : label(label), tabs(items) {}
void addTab(TabItem tabItem) { tabs.push_back(tabItem); }
bool render() {

View File

@@ -3,8 +3,10 @@
#include <SDL3/SDL.h>
InputSettings::InputSettings(nlohmann::json &settings) : settings(settings) {
int i = 0;
for(auto& kb : kbButtons) {
kb.setLabel(JSONGetField<std::string>(settings, "input", kb.getName()));
auto field = JSONGetField<std::string>(settings, "input", kb.getName());
kb.setLabel(field != "" ? field : "##unsetButton" + std::to_string(i++));
}
devices.addItem({"Keyboard/Mouse"});
@@ -33,13 +35,13 @@ bool InputSettings::render() {
QueryDevices();
PollGamepad();
if(i % 2 != 0) // only go down every 2 buttons... just... i like it this way
if((i % 2 == 0) || i == 0) // only go down every 2 buttons... just... i like it this way
ImGui::SameLine();
i++;
}
return true;
return modified;
}
std::array<SDL_Keycode, 18> InputSettings::GetMappedKeys() {

View File

@@ -4,10 +4,15 @@
#include <ImGuiImpl/StatusBar.hpp>
#include <ImGuiImpl/GUI.hpp>
KaizenGui::KaizenGui() noexcept : window("Kaizen", 1280, 720), core(std::make_shared<n64::Core>()), vulkanWidget(core, window.getHandle()), emuThread(core, fpsCounter, vulkanWidget, settingsWindow) {
KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), core(std::make_shared<n64::Core>()), vulkanWidget(core, window.getHandle()), emuThread(core, fpsCounter, vulkanWidget, settingsWindow) {
gui::Initialize(core->parallel.wsi, window.getHandle());
emuExitFunc = [&]() {
quit = true;
if (emuThread.isRunning) {
emuThread.requestInterruption();
while (emuThread.isRunning) {}
}
};
about.setFunc([&]() {
@@ -17,6 +22,7 @@ KaizenGui::KaizenGui() noexcept : window("Kaizen", 1280, 720), core(std::make_sh
ImGui::Text("Nintendo 64 is a registered trademark of Nintendo Co., Ltd.");
if(ImGui::Button("OK")) {
about.setOpened(false);
ImGui::CloseCurrentPopup();
}
});
@@ -49,7 +55,6 @@ KaizenGui::KaizenGui() noexcept : window("Kaizen", 1280, 720), core(std::make_sh
actionReset,
{"Settings", [&]() {
settingsWindow.popup.setOpened(true);
settingsWindow.render();
}},
}});
@@ -66,6 +71,7 @@ void KaizenGui::RenderUI() {
menuBar.render();
about.render();
statusBar.render();
settingsWindow.render();
gui::EndFrame();
if (core->render) {
@@ -85,25 +91,10 @@ void KaizenGui::LoadROM(const std::string &path) noexcept {
Util::RPC::GetInstance().Update(Util::RPC::Playing, gameNameDB);
}
void KaizenGui::handleEvents() {
SDL_Event e;
while(SDL_PollEvent(&e)) {
switch(e.type) {
case SDL_EVENT_QUIT:
emuExitFunc();
break;
}
}
}
int KaizenGui::run() {
while(!quit) {
if(vulkanWidget.wsiPlatform->quitRequested) {
quit = true;
if (emuThread.isRunning) {
emuThread.requestInterruption();
while (emuThread.isRunning) {}
}
emuExitFunc();
}
RenderUI();

View File

@@ -65,6 +65,12 @@ SettingsWindow::SettingsWindow() : settings{JSONOpenOrCreate("resources/settings
file << settings;
file.close();
}
ImGui::SameLine();
if(cancel.render()) {
ImGui::CloseCurrentPopup();
}
});
}

View File

@@ -14,7 +14,7 @@ class SettingsWindow final {
AudioSettings audioSettings{settings};
InputSettings inputSettings{settings};
public:
gui::PopupWindow popup{"Settings"};
gui::PopupWindow popup{"Emulator Settings"};
bool render();
SettingsWindow();
[[nodiscard]] float getVolumeL() const { return audioSettings.volumeL.getValue() / 100.f; }