mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-23 21:01:13 +00:00
69 lines
2 KiB
C++
69 lines
2 KiB
C++
/*
|
|
** Sample Framework for deko3d Applications
|
|
** CApplication.cpp: Wrapper class containing common application boilerplate
|
|
*/
|
|
#include "CApplication.h"
|
|
|
|
CApplication::CApplication()
|
|
{
|
|
appletLockExit();
|
|
appletSetFocusHandlingMode(AppletFocusHandlingMode_NoSuspend);
|
|
}
|
|
|
|
CApplication::~CApplication()
|
|
{
|
|
appletSetFocusHandlingMode(AppletFocusHandlingMode_SuspendHomeSleep);
|
|
appletUnlockExit();
|
|
}
|
|
|
|
void CApplication::run()
|
|
{
|
|
u64 tick_ref = armGetSystemTick();
|
|
u64 tick_saved = tick_ref;
|
|
bool focused = appletGetFocusState() == AppletFocusState_InFocus;
|
|
|
|
onOperationMode(appletGetOperationMode());
|
|
|
|
for (;;)
|
|
{
|
|
u32 msg = 0;
|
|
Result rc = appletGetMessage(&msg);
|
|
if (R_SUCCEEDED(rc))
|
|
{
|
|
bool should_close = !appletProcessMessage(msg);
|
|
if (should_close)
|
|
return;
|
|
|
|
switch (msg)
|
|
{
|
|
case AppletMessage_FocusStateChanged:
|
|
{
|
|
bool old_focused = focused;
|
|
AppletFocusState state = appletGetFocusState();
|
|
focused = state == AppletFocusState_InFocus;
|
|
|
|
onFocusState(state);
|
|
if (focused == old_focused)
|
|
break;
|
|
if (focused)
|
|
{
|
|
appletSetFocusHandlingMode(AppletFocusHandlingMode_NoSuspend);
|
|
tick_ref += armGetSystemTick() - tick_saved;
|
|
}
|
|
else
|
|
{
|
|
tick_saved = armGetSystemTick();
|
|
appletSetFocusHandlingMode(AppletFocusHandlingMode_SuspendHomeSleepNotify);
|
|
}
|
|
break;
|
|
}
|
|
case AppletMessage_OperationModeChanged:
|
|
onOperationMode(appletGetOperationMode());
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (focused && !onFrame(armTicksToNs(armGetSystemTick() - tick_ref)))
|
|
break;
|
|
}
|
|
}
|