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