diff --git a/src/frontend/qt_sdl/EmuInstance.cpp b/src/frontend/qt_sdl/EmuInstance.cpp index aab8487b..761bb23c 100644 --- a/src/frontend/qt_sdl/EmuInstance.cpp +++ b/src/frontend/qt_sdl/EmuInstance.cpp @@ -134,6 +134,25 @@ void EmuInstance::createWindow() } +void EmuInstance::osdAddMessage(unsigned int color, const char* fmt, ...) +{ + if (fmt == nullptr) + return; + + char msg[256]; + va_list args; + va_start(args, fmt); + vsnprintf(msg, 256, fmt, args); + va_end(args); + + for (int i = 0; i < kMaxWindows; i++) + { + if (windowList[i]) + windowList[i]->osdAddMessage(color, msg); + } +} + + int EmuInstance::lastSep(const std::string& path) { int i = path.length() - 1; diff --git a/src/frontend/qt_sdl/EmuInstance.h b/src/frontend/qt_sdl/EmuInstance.h index ff78a0f7..b505d992 100644 --- a/src/frontend/qt_sdl/EmuInstance.h +++ b/src/frontend/qt_sdl/EmuInstance.h @@ -86,6 +86,8 @@ public: void createWindow(); + void osdAddMessage(unsigned int color, const char* fmt, ...); + // return: empty string = setup OK, non-empty = error message QString verifySetup(); diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index 7ff58d6a..66129a41 100644 --- a/src/frontend/qt_sdl/EmuThread.cpp +++ b/src/frontend/qt_sdl/EmuThread.cpp @@ -216,7 +216,7 @@ void EmuThread::run() int level = emuInstance->nds->GBACartSlot.SetInput(GBACart::Input_SolarSensorDown, true); if (level != -1) { - //mainWindow->osdAddMessage(0, "Solar sensor level: %d", level); + emuInstance->osdAddMessage(0, "Solar sensor level: %d", level); } } if (emuInstance->hotkeyPressed(HK_SolarSensorIncrease)) @@ -224,7 +224,7 @@ void EmuThread::run() int level = emuInstance->nds->GBACartSlot.SetInput(GBACart::Input_SolarSensorUp, true); if (level != -1) { - //mainWindow->osdAddMessage(0, "Solar sensor level: %d", level); + emuInstance->osdAddMessage(0, "Solar sensor level: %d", level); } } @@ -300,7 +300,7 @@ void EmuThread::run() { bool lid = !emuInstance->nds->IsLidClosed(); emuInstance->nds->SetLidClosed(lid); - //mainWindow->osdAddMessage(0, lid ? "Lid closed" : "Lid opened"); + emuInstance->osdAddMessage(0, lid ? "Lid closed" : "Lid opened"); } // microphone input @@ -648,5 +648,5 @@ void EmuThread::compileShaders() emuInstance->nds->GPU.GetRenderer3D().ShaderCompileStep(currentShader, shadersCount); } while (emuInstance->nds->GPU.GetRenderer3D().NeedsShaderCompile() && (SDL_GetPerformanceCounter() - startTime) * perfCountsSec < 1.0 / 6.0); - mainWindow->osdAddMessage(0, "Compiling shader %d/%d", currentShader+1, shadersCount); + emuInstance->osdAddMessage(0, "Compiling shader %d/%d", currentShader+1, shadersCount); } diff --git a/src/frontend/qt_sdl/Window.cpp b/src/frontend/qt_sdl/Window.cpp index 2c901846..641f096e 100644 --- a/src/frontend/qt_sdl/Window.cpp +++ b/src/frontend/qt_sdl/Window.cpp @@ -709,17 +709,9 @@ void MainWindow::attachEmuThread(EmuThread* thread) emuThread = thread; } -void MainWindow::osdAddMessage(unsigned int color, const char* fmt, ...) +void MainWindow::osdAddMessage(unsigned int color, const char* msg) { - if (fmt == nullptr) - return; - - char msg[256]; - va_list args; - va_start(args, fmt); - vsnprintf(msg, 256, fmt, args); - va_end(args); - + if (!showOSD) return; panel->osdAddMessage(color, msg); } @@ -1454,14 +1446,14 @@ void MainWindow::onSaveState() if (emuInstance->saveState(filename)) { - if (slot > 0) osdAddMessage(0, "State saved to slot %d", slot); - else osdAddMessage(0, "State saved to file"); + if (slot > 0) emuInstance->osdAddMessage(0, "State saved to slot %d", slot); + else emuInstance->osdAddMessage(0, "State saved to file"); actLoadState[slot]->setEnabled(true); } else { - osdAddMessage(0xFFA0A0, "State save failed"); + emuInstance->osdAddMessage(0xFFA0A0, "State save failed"); } emuThread->emuUnpause(); @@ -1496,8 +1488,8 @@ void MainWindow::onLoadState() if (!Platform::FileExists(filename)) { - if (slot > 0) osdAddMessage(0xFFA0A0, "State slot %d is empty", slot); - else osdAddMessage(0xFFA0A0, "State file does not exist"); + if (slot > 0) emuInstance->osdAddMessage(0xFFA0A0, "State slot %d is empty", slot); + else emuInstance->osdAddMessage(0xFFA0A0, "State file does not exist"); emuThread->emuUnpause(); return; @@ -1505,14 +1497,14 @@ void MainWindow::onLoadState() if (emuInstance->loadState(filename)) { - if (slot > 0) osdAddMessage(0, "State loaded from slot %d", slot); - else osdAddMessage(0, "State loaded from file"); + if (slot > 0) emuInstance->osdAddMessage(0, "State loaded from slot %d", slot); + else emuInstance->osdAddMessage(0, "State loaded from file"); actUndoStateLoad->setEnabled(true); } else { - osdAddMessage(0xFFA0A0, "State load failed"); + emuInstance->osdAddMessage(0xFFA0A0, "State load failed"); } emuThread->emuUnpause(); @@ -1524,7 +1516,7 @@ void MainWindow::onUndoStateLoad() emuInstance->undoStateLoad(); emuThread->emuUnpause(); - osdAddMessage(0, "State load undone"); + emuInstance->osdAddMessage(0, "State load undone"); } void MainWindow::onImportSavefile() @@ -1592,13 +1584,13 @@ void MainWindow::onPause(bool checked) if (checked) { emuThread->emuPause(); - osdAddMessage(0, "Paused"); + emuInstance->osdAddMessage(0, "Paused"); pausedManually = true; } else { emuThread->emuUnpause(); - osdAddMessage(0, "Resumed"); + emuInstance->osdAddMessage(0, "Resumed"); pausedManually = false; } } @@ -1613,7 +1605,7 @@ void MainWindow::onReset() emuInstance->reset(); - osdAddMessage(0, "Reset"); + emuInstance->osdAddMessage(0, "Reset"); emuThread->emuRun(); } diff --git a/src/frontend/qt_sdl/Window.h b/src/frontend/qt_sdl/Window.h index 74ee21f6..c965209f 100644 --- a/src/frontend/qt_sdl/Window.h +++ b/src/frontend/qt_sdl/Window.h @@ -124,7 +124,7 @@ public: void onAppStateChanged(Qt::ApplicationState state); - void osdAddMessage(unsigned int color, const char* fmt, ...); + void osdAddMessage(unsigned int color, const char* msg); protected: void resizeEvent(QResizeEvent* event) override;