mirror of
https://github.com/wiiu-env/AutobootModule.git
synced 2024-11-22 10:59:15 +01:00
Only write the selected autoboot option at the end
This commit is contained in:
parent
f7f38999cf
commit
466b42674c
@ -253,13 +253,13 @@ void bootHomebrewChannel() {
|
|||||||
launchvWiiTitle(0x00010001, 0x4f484243); // 'OHBC'
|
launchvWiiTitle(0x00010001, 0x4f484243); // 'OHBC'
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t handleMenuScreen(int32_t autobootOption) {
|
int32_t handleMenuScreen(int32_t autobootOptionInput) {
|
||||||
OSScreenInit();
|
OSScreenInit();
|
||||||
|
|
||||||
uint32_t tvBufferSize = OSScreenGetBufferSizeEx(SCREEN_TV);
|
uint32_t tvBufferSize = OSScreenGetBufferSizeEx(SCREEN_TV);
|
||||||
uint32_t drcBufferSize = OSScreenGetBufferSizeEx(SCREEN_DRC);
|
uint32_t drcBufferSize = OSScreenGetBufferSizeEx(SCREEN_DRC);
|
||||||
|
|
||||||
uint8_t *screenBuffer = (uint8_t *) memalign(0x100, tvBufferSize + drcBufferSize);
|
auto *screenBuffer = (uint8_t *) memalign(0x100, tvBufferSize + drcBufferSize);
|
||||||
|
|
||||||
OSScreenSetBufferEx(SCREEN_TV, screenBuffer);
|
OSScreenSetBufferEx(SCREEN_TV, screenBuffer);
|
||||||
OSScreenSetBufferEx(SCREEN_DRC, screenBuffer + tvBufferSize);
|
OSScreenSetBufferEx(SCREEN_DRC, screenBuffer + tvBufferSize);
|
||||||
@ -271,6 +271,7 @@ int32_t handleMenuScreen(int32_t autobootOption) {
|
|||||||
DrawUtils::initFont();
|
DrawUtils::initFont();
|
||||||
|
|
||||||
uint32_t selected = 0;
|
uint32_t selected = 0;
|
||||||
|
int autoboot = autobootOptionInput;
|
||||||
bool redraw = true;
|
bool redraw = true;
|
||||||
while (true) {
|
while (true) {
|
||||||
VPADStatus vpad{};
|
VPADStatus vpad{};
|
||||||
@ -289,12 +290,10 @@ int32_t handleMenuScreen(int32_t autobootOption) {
|
|||||||
} else if (vpad.trigger & VPAD_BUTTON_A) {
|
} else if (vpad.trigger & VPAD_BUTTON_A) {
|
||||||
break;
|
break;
|
||||||
} else if (vpad.trigger & VPAD_BUTTON_X) {
|
} else if (vpad.trigger & VPAD_BUTTON_X) {
|
||||||
autobootOption = -1;
|
autoboot = -1;
|
||||||
writeAutobootOption(autobootOption);
|
|
||||||
redraw = true;
|
redraw = true;
|
||||||
} else if (vpad.trigger & VPAD_BUTTON_Y) {
|
} else if (vpad.trigger & VPAD_BUTTON_Y) {
|
||||||
autobootOption = selected;
|
autoboot = selected;
|
||||||
writeAutobootOption(autobootOption);
|
|
||||||
redraw = true;
|
redraw = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,11 +307,11 @@ int32_t handleMenuScreen(int32_t autobootOption) {
|
|||||||
if (i == selected) {
|
if (i == selected) {
|
||||||
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16 * 2, 44, 4, COLOR_BORDER_HIGHLIGHTED);
|
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16 * 2, 44, 4, COLOR_BORDER_HIGHLIGHTED);
|
||||||
} else {
|
} else {
|
||||||
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16 * 2, 44, 2, (i == (uint32_t) autobootOption) ? COLOR_AUTOBOOT : COLOR_BORDER);
|
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16 * 2, 44, 2, (i == (uint32_t) autoboot) ? COLOR_AUTOBOOT : COLOR_BORDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawUtils::setFontSize(24);
|
DrawUtils::setFontSize(24);
|
||||||
DrawUtils::setFontColor((i == (uint32_t) autobootOption) ? COLOR_AUTOBOOT : COLOR_TEXT);
|
DrawUtils::setFontColor((i == (uint32_t) autoboot) ? COLOR_AUTOBOOT : COLOR_TEXT);
|
||||||
DrawUtils::print(16 * 2, index + 8 + 24, menu_options[i]);
|
DrawUtils::print(16 * 2, index + 8 + 24, menu_options[i]);
|
||||||
index += 42 + 8;
|
index += 42 + 8;
|
||||||
}
|
}
|
||||||
@ -338,6 +337,13 @@ int32_t handleMenuScreen(int32_t autobootOption) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DrawUtils::clear(COLOR_BLACK);
|
||||||
|
DrawUtils::endDraw();
|
||||||
|
|
||||||
|
if (autoboot != autobootOptionInput) {
|
||||||
|
writeAutobootOption(autoboot);
|
||||||
|
}
|
||||||
|
|
||||||
DrawUtils::deinitFont();
|
DrawUtils::deinitFont();
|
||||||
|
|
||||||
free(screenBuffer);
|
free(screenBuffer);
|
||||||
@ -367,7 +373,7 @@ int32_t main(int32_t argc, char **argv) {
|
|||||||
int32_t bootSelection = readAutobootOption();
|
int32_t bootSelection = readAutobootOption();
|
||||||
|
|
||||||
VPADStatus vpad{};
|
VPADStatus vpad{};
|
||||||
VPADRead(VPAD_CHAN_0, &vpad, 1, NULL);
|
VPADRead(VPAD_CHAN_0, &vpad, 1, nullptr);
|
||||||
|
|
||||||
if ((bootSelection == -1) || (vpad.hold & VPAD_BUTTON_PLUS)) {
|
if ((bootSelection == -1) || (vpad.hold & VPAD_BUTTON_PLUS)) {
|
||||||
bootSelection = handleMenuScreen(bootSelection);
|
bootSelection = handleMenuScreen(bootSelection);
|
||||||
|
Loading…
Reference in New Issue
Block a user