diff --git a/Dockerfile b/Dockerfile index 47768ed..a03191a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM ghcr.io/wiiu-env/devkitppc:20240704 -COPY --from=wiiuenv/libgui:20220109 /artifacts $DEVKITPRO +COPY --from=wiiuenv/libgui:2022020513505562e265 /artifacts $DEVKITPRO WORKDIR project diff --git a/src/Application.cpp b/src/Application.cpp index 995ab87..a2e2a1d 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -154,11 +154,12 @@ void initExternalStorage() { nn::spm::Finalize(); } -Application * Application::applicationInstance = nullptr; -bool Application::exitApplication = false; -bool Application::quitRequest = false; +Application *Application::applicationInstance = nullptr; +bool Application::exitApplication = false; +bool Application::quitRequest = false; -Application::Application(): CThread(CThread::eAttributeAffCore1 | CThread::eAttributePinnedAff, 0, 0x800000), bgMusic(nullptr), video(nullptr), mainWindow(nullptr), fontSystem(nullptr), exitCode(0) { +Application::Application() + : CThread(CThread::eAttributeAffCore1 | CThread::eAttributePinnedAff, 0, 0x800000), bgMusic(nullptr), video(nullptr), mainWindow(nullptr), fontSystem(nullptr), exitCode(0) { controller[0] = new VPadController(GuiTrigger::CHANNEL_1); controller[1] = new WPadController(GuiTrigger::CHANNEL_2); controller[2] = new WPadController(GuiTrigger::CHANNEL_3); @@ -167,13 +168,11 @@ Application::Application(): CThread(CThread::eAttributeAffCore1 | CThread::eAttr //! create bgMusic bgMusic = new GuiSound(Resources::GetFile("bgMusic.ogg"), Resources::GetFileSize("bgMusic.ogg")); - bgMusic -> SetLoop(true); - bgMusic -> Play(); - bgMusic -> SetVolume(50); + bgMusic->SetLoop(true); + bgMusic->Play(); + bgMusic->SetVolume(50); - AsyncExecutor::execute([] { - DEBUG_FUNCTION_LINE("Hello"); - }); + AsyncExecutor::execute([] { DEBUG_FUNCTION_LINE("Hello"); }); exitApplication = false; @@ -186,7 +185,7 @@ Application::~Application() { DEBUG_FUNCTION_LINE("Destroy controller"); - for (auto & i: controller) { + for (auto &i : controller) { delete i; } @@ -212,20 +211,13 @@ int32_t Application::exec() { } void Application::quit(int32_t code) { - exitCode = code; + exitCode = code; exitApplication = true; - quitRequest = true; + quitRequest = true; } void Application::fadeOut() { - GuiImage fadeOut(video->getTvWidth(), video->getTvHeight(), (GX2Color) { - 0, - 0, - 0, - 255 - }); - -glm::mat4 identityMatrix(1.0f); + GuiImage fadeOut(video->getTvWidth(), video->getTvHeight(), (GX2Color){0, 0, 0, 255}); for (int32_t i = 0; i < 255; i += 10) { if (i > 255) @@ -234,30 +226,30 @@ glm::mat4 identityMatrix(1.0f); fadeOut.setAlpha(i / 255.0f); //! start rendering DRC - video -> prepareDrcRendering(); - mainWindow -> drawDrc(video); + video->prepareDrcRendering(); + mainWindow->drawDrc(video); GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_FUNC_ALWAYS); - fadeOut.draw(video, identityMatrix); + fadeOut.draw(video); GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_FUNC_LEQUAL); - video -> drcDrawDone(); + video->drcDrawDone(); //! start rendering TV - video -> prepareTvRendering(); + video->prepareTvRendering(); - mainWindow -> drawTv(video); + mainWindow->drawTv(video); GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_FUNC_ALWAYS); - fadeOut.draw(video, identityMatrix); + fadeOut.draw(video); GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_FUNC_LEQUAL); - video -> tvDrawDone(); + video->tvDrawDone(); //! as last point update the effects as it can drop elements - mainWindow -> updateEffects(); + mainWindow->updateEffects(); - video -> waitForVSync(); + video->waitForVSync(); } } @@ -265,63 +257,63 @@ bool Application::procUI() { bool executeProcess = false; switch (ProcUIProcessMessages(true)) { - case PROCUI_STATUS_EXITING: { - DEBUG_FUNCTION_LINE("PROCUI_STATUS_EXITING"); - exitCode = EXIT_SUCCESS; - exitApplication = true; - break; - } - case PROCUI_STATUS_RELEASE_FOREGROUND: { - DEBUG_FUNCTION_LINE("PROCUI_STATUS_RELEASE_FOREGROUND"); - if (video != nullptr) { - // we can turn ofF the screen but we don't need to and it will display the last image - video -> tvEnable(true); - video -> drcEnable(true); - - DEBUG_FUNCTION_LINE("delete fontSystem"); - delete fontSystem; - fontSystem = nullptr; - - DEBUG_FUNCTION_LINE("delete video"); - delete video; - video = nullptr; - - DEBUG_FUNCTION_LINE("deinitialze memory"); - libgui_memoryRelease(); - ProcUIDrawDoneRelease(); - } else { - ProcUIDrawDoneRelease(); + case PROCUI_STATUS_EXITING: { + DEBUG_FUNCTION_LINE("PROCUI_STATUS_EXITING"); + exitCode = EXIT_SUCCESS; + exitApplication = true; + break; } - break; - } - case PROCUI_STATUS_IN_FOREGROUND: { - if (!quitRequest) { - if (video == nullptr) { - DEBUG_FUNCTION_LINE("PROCUI_STATUS_IN_FOREGROUND"); - DEBUG_FUNCTION_LINE("initialze memory"); - libgui_memoryInitialize(); + case PROCUI_STATUS_RELEASE_FOREGROUND: { + DEBUG_FUNCTION_LINE("PROCUI_STATUS_RELEASE_FOREGROUND"); + if (video != nullptr) { + // we can turn ofF the screen but we don't need to and it will display the last image + video->tvEnable(true); + video->drcEnable(true); - DEBUG_FUNCTION_LINE("Initialize video"); - video = new CVideo(GX2_TV_SCAN_MODE_720P, GX2_DRC_RENDER_MODE_SINGLE); - DEBUG_FUNCTION_LINE("Video size %i x %i", video -> getTvWidth(), video -> getTvHeight()); + DEBUG_FUNCTION_LINE("delete fontSystem"); + delete fontSystem; + fontSystem = nullptr; - //! setup default Font - DEBUG_FUNCTION_LINE("Initialize main font system"); - auto * fontSystem = new FreeTypeGX(Resources::GetFile("font.ttf"), Resources::GetFileSize("font.ttf"), true); - GuiText::setPresetFont(fontSystem); + DEBUG_FUNCTION_LINE("delete video"); + delete video; + video = nullptr; - if (mainWindow == nullptr) { - DEBUG_FUNCTION_LINE("Initialize main window"); - mainWindow = new MainWindow(video -> getTvWidth(), video -> getTvHeight()); - } + DEBUG_FUNCTION_LINE("deinitialze memory"); + libgui_memoryRelease(); + ProcUIDrawDoneRelease(); + } else { + ProcUIDrawDoneRelease(); } - executeProcess = true; + break; } - break; - } - case PROCUI_STATUS_IN_BACKGROUND: - default: - break; + case PROCUI_STATUS_IN_FOREGROUND: { + if (!quitRequest) { + if (video == nullptr) { + DEBUG_FUNCTION_LINE("PROCUI_STATUS_IN_FOREGROUND"); + DEBUG_FUNCTION_LINE("initialze memory"); + libgui_memoryInitialize(); + + DEBUG_FUNCTION_LINE("Initialize video"); + video = new CVideo(GX2_TV_SCAN_MODE_720P, GX2_DRC_RENDER_MODE_SINGLE); + DEBUG_FUNCTION_LINE("Video size %i x %i", video->getTvWidth(), video->getTvHeight()); + + //! setup default Font + DEBUG_FUNCTION_LINE("Initialize main font system"); + auto *fontSystem = new FreeTypeGX(Resources::GetFile("font.ttf"), Resources::GetFileSize("font.ttf"), true); + GuiText::setPresetFont(fontSystem); + + if (mainWindow == nullptr) { + DEBUG_FUNCTION_LINE("Initialize main window"); + mainWindow = new MainWindow(video->getTvWidth(), video->getTvHeight()); + } + } + executeProcess = true; + } + break; + } + case PROCUI_STATUS_IN_BACKGROUND: + default: + break; } return executeProcess; @@ -336,43 +328,43 @@ void Application::executeThread() { continue; } - mainWindow -> lockGUI(); - mainWindow -> process(); + mainWindow->lockGUI(); + mainWindow->process(); //! Read out inputs - for (auto & i: controller) { - if (!i -> update(video -> getTvWidth(), video -> getTvHeight())) + for (auto &i : controller) { + if (!i->update(video->getTvWidth(), video->getTvHeight())) continue; //! update controller states - mainWindow -> update(i); + mainWindow->update(i); } //! start rendering DRC - video -> prepareDrcRendering(); - mainWindow -> drawDrc(video); - video -> drcDrawDone(); + video->prepareDrcRendering(); + mainWindow->drawDrc(video); + video->drcDrawDone(); //! start rendering TV - video -> prepareTvRendering(); - mainWindow -> drawTv(video); - video -> tvDrawDone(); + video->prepareTvRendering(); + mainWindow->drawTv(video); + video->tvDrawDone(); //! enable screen after first frame render - if (video -> getFrameCount() == 0) { - video -> tvEnable(true); - video -> drcEnable(true); + if (video->getFrameCount() == 0) { + video->tvEnable(true); + video->drcEnable(true); } //! as last point update the effects as it can drop elements - mainWindow -> updateEffects(); - mainWindow -> unlockGUI(); + mainWindow->updateEffects(); + mainWindow->unlockGUI(); - video -> waitForVSync(); + video->waitForVSync(); } if (bgMusic) { - bgMusic -> SetVolume(0); + bgMusic->SetVolume(0); } DEBUG_FUNCTION_LINE("delete mainWindow"); @@ -389,5 +381,4 @@ void Application::executeThread() { DEBUG_FUNCTION_LINE("deinitialize memory"); libgui_memoryRelease(); - -} +} \ No newline at end of file diff --git a/src/Application.h b/src/Application.h index e2e587f..206e4a4 100644 --- a/src/Application.h +++ b/src/Application.h @@ -1,31 +1,23 @@ -/**************************************************************************** - * Copyright (C) 2015 Dimok - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - ****************************************************************************/ #ifndef _APPLICATION_H #define _APPLICATION_H #include "menu/MainWindow.h" #include "system/CThread.h" -#include +#include "gui/video/CVideo.h" // forward declaration class FreeTypeGX; class Application : public CThread { public: + Application(); + + virtual ~Application(); + + static Application *applicationInstance; + static bool exitApplication; + static bool quitRequest; + static Application *instance() { if (!applicationInstance) applicationInstance = new Application(); @@ -58,16 +50,9 @@ public: void quit(int code); private: - Application(); - - virtual ~Application(); bool procUI(void); - static Application *applicationInstance; - static bool exitApplication; - static bool quitRequest; - void executeThread(void); GuiSound *bgMusic; @@ -79,4 +64,4 @@ private: BOOL sFromHBL = FALSE; }; -#endif //_APPLICATION_H +#endif //_APPLICATION_H \ No newline at end of file diff --git a/src/menu/MainWindow.cpp b/src/menu/MainWindow.cpp index 33d3a01..36b18ee 100644 --- a/src/menu/MainWindow.cpp +++ b/src/menu/MainWindow.cpp @@ -1,24 +1,7 @@ -/**************************************************************************** - * Copyright (C) 2015 Dimok - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - ****************************************************************************/ #include "MainWindow.h" #include "Application.h" #include "utils/StringTools.h" #include "utils/logger.h" - #include "GameSplashScreen.h" #include "gui/GuiIconGrid.h" #include "gui/GuiTitleBrowser.h" @@ -27,7 +10,9 @@ #include #include #include +#include #include +#include MainWindow::MainWindow(int32_t w, int32_t h) : width(w), height(h), gameClickSound(Resources::GetSound("game_click.mp3")), mainSwitchButtonFrame(nullptr), currentTvFrame(nullptr), currentDrcFrame(nullptr) { @@ -401,9 +386,6 @@ void MainWindow::OnGameLaunchSplashScreenFinished(GuiElement *element, gameInfo } } -extern "C" int32_t SYSSwitchToBrowser(void *); -extern "C" int32_t SYSSwitchToEShop(void *); -extern "C" int32_t _SYSSwitchTo(uint32_t pfid); void MainWindow::OnGameLaunch(uint64_t titleId) { DEBUG_FUNCTION_LINE("Launch GAME!!"); @@ -434,28 +416,28 @@ void MainWindow::OnGameLaunch(uint64_t titleId) { titleId == 0x000500301001810AL || titleId == 0x000500301001820AL) { DEBUG_FUNCTION_LINE("Launching the Download Management"); - _SYSSwitchTo(12); + _SYSSwitchTo(SYSAPP_PFID_DOWNLOAD_MANAGEMENT); return; } if (titleId == 0x000500301001600AL || titleId == 0x000500301001610AL || titleId == 0x000500301001620AL) { DEBUG_FUNCTION_LINE("Launching Miiverse"); - _SYSSwitchTo(9); + _SYSSwitchTo(SYSAPP_PFID_MIIVERSE); return; } if (titleId == 0x000500301001500AL || titleId == 0x000500301001510AL || titleId == 0x000500301001520AL) { DEBUG_FUNCTION_LINE("Launching Friendlist"); - _SYSSwitchTo(11); + _SYSSwitchTo(SYSAPP_PFID_FRIENDLIST); return; } if (titleId == 0x000500301001300AL || titleId == 0x000500301001310AL || titleId == 0x000500301001320AL) { DEBUG_FUNCTION_LINE("Launching TVii"); - _SYSSwitchTo(3); + _SYSSwitchTo(SYSAPP_PFID_TVII); return; } diff --git a/src/menu/MainWindow.h b/src/menu/MainWindow.h index 0a53422..ccd0285 100644 --- a/src/menu/MainWindow.h +++ b/src/menu/MainWindow.h @@ -21,7 +21,7 @@ #include "MainDrcButtonsFrame.h" #include "game/GameList.h" #include "gui/GuiTitleBrowser.h" -#include +#include "gui/Gui.h" #include #include