diff --git a/include/arm11/menu/menu.h b/include/arm11/menu/menu.h index cc5c303..080c69d 100644 --- a/include/arm11/menu/menu.h +++ b/include/arm11/menu/menu.h @@ -31,6 +31,7 @@ #define MENU_OFFSET_BUTTONS 18 #define MENU_WIDTH 28 #define WORDWRAP_WIDTH 58 +#define BORDER_WIDTH 2 #define MENU_FLAG_SLOTS (1<<0) #define MENU_FLAG_SLOT(x) (1< #include #include "types.h" +#include "arm11/hardware/hid.h" +#include "arm11/hardware/mcu.h" #include "arm11/menu/battery.h" #include "arm11/menu/bootinfo.h" #include "arm11/menu/bootslot.h" #include "arm11/menu/menu.h" #include "arm11/menu/menu_util.h" #include "arm11/menu/menu_color.h" -#include "arm11/hardware/hid.h" #include "arm11/config.h" #include "arm11/console.h" #include "arm11/debug.h" @@ -38,6 +39,27 @@ static BatteryState battery; +void menuClearTop(void) +{ + memset((void*) RENDERBUF_TOP, 0, SCREEN_SIZE_TOP); +} + +void menuDrawBorder(u16 color) +{ + u16 *fb = (u16*)RENDERBUF_TOP; + + for(u32 x = 0; x < SCREEN_WIDTH_TOP; x++) + { + for(u32 y = 0; y < SCREEN_HEIGHT_TOP; y++) + { + if((x < BORDER_WIDTH) || (x >= (SCREEN_WIDTH_TOP - BORDER_WIDTH)) || + (y < BORDER_WIDTH) || (y >= (SCREEN_HEIGHT_TOP - BORDER_WIDTH))) + *fb = color; + fb++; + } + } +} + void menuBuildDescString(char* desc, u32 flags, u32 index, const char* desc_raw) { char* desc_ptr = desc; @@ -302,8 +324,14 @@ u32 last_index = (u32) -1; u64 n_vblanks = 0; + u16 borderColor = 0; getBatteryState(&battery); + // get color for topscreen border + u8 rtc[8]; + MCU_readRTC(rtc); + borderColor = consoleGetRGB565Color((rtc[0] % 6) + 1); + // main menu processing loop while (!g_startFirmLaunch) { @@ -319,6 +347,7 @@ if ((index != last_index) || (curr_menu != last_menu) || (n_vblanks % 250 == 0)) { menuDraw(curr_menu, menu_con, index); menuShowDesc(curr_menu, desc_con, index); + menuDrawBorder(borderColor); last_index = index; last_menu = curr_menu; @@ -359,6 +388,7 @@ { // call menu entry function MenuEntry* entry = &(curr_menu->entries[index]); + menuClearTop(); // clear top screen for the function that follows (*(entry->function))(desc_con, menu_con, entry->param); // force redraw (somewhat hacky) last_menu = NULL; @@ -389,5 +419,6 @@ } } + menuClearTop(); return 0; }