From f4622d5bff2d80cabb1f6f16f924005b59215036 Mon Sep 17 00:00:00 2001 From: d0k3 Date: Wed, 18 May 2016 23:46:22 +0200 Subject: [PATCH] Get rid of unnecessary second framebuffer --- source/fs.c | 4 +-- source/godmode.c | 70 +++++++++++++++++++++++------------------------ source/ui.c | 71 ++++++++++++++++-------------------------------- source/ui.h | 18 ++++-------- 4 files changed, 66 insertions(+), 97 deletions(-) diff --git a/source/fs.c b/source/fs.c index af535ed..f49954e 100644 --- a/source/fs.c +++ b/source/fs.c @@ -666,10 +666,10 @@ void CreateScreenshot() { memset(buffer, 0x1F, 400 * 240 * 3 * 2); for (u32 x = 0; x < 400; x++) for (u32 y = 0; y < 240; y++) - memcpy(buffer_t + (y*400 + x) * 3, TOP_SCREEN0 + (x*240 + y) * 3, 3); + memcpy(buffer_t + (y*400 + x) * 3, TOP_SCREEN + (x*240 + y) * 3, 3); for (u32 x = 0; x < 320; x++) for (u32 y = 0; y < 240; y++) - memcpy(buffer + (y*400 + x + 40) * 3, BOT_SCREEN0 + (x*240 + y) * 3, 3); + memcpy(buffer + (y*400 + x + 40) * 3, BOT_SCREEN + (x*240 + y) * 3, 3); FileCreateData(filename, MAIN_BUFFER, 54 + (400 * 240 * 3 * 2)); } diff --git a/source/godmode.c b/source/godmode.c index aca0c38..2421f8a 100644 --- a/source/godmode.c +++ b/source/godmode.c @@ -52,30 +52,30 @@ void DrawUserInterface(const char* curr_path, DirEntry* curr_entry, DirStruct* c } // top bar - current path & free/total storage - DrawRectangleF(true, 0, 0, SCREEN_WIDTH_TOP, 12, COLOR_TOP_BAR); + DrawRectangle(TOP_SCREEN, 0, 0, SCREEN_WIDTH_TOP, 12, COLOR_TOP_BAR); if (strncmp(curr_path, "", 256) != 0) { char bytestr0[32]; char bytestr1[32]; TruncateString(tempstr, curr_path, 30, 8); - DrawStringF(true, 2, 2, COLOR_STD_BG, COLOR_TOP_BAR, tempstr); - DrawStringF(true, 30 * 8 + 4, 2, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", "LOADING..."); + DrawStringF(TOP_SCREEN, 2, 2, COLOR_STD_BG, COLOR_TOP_BAR, tempstr); + DrawStringF(TOP_SCREEN, 30 * 8 + 4, 2, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", "LOADING..."); FormatBytes(bytestr0, GetFreeSpace(curr_path)); FormatBytes(bytestr1, GetTotalSpace(curr_path)); snprintf(tempstr, 64, "%s/%s", bytestr0, bytestr1); - DrawStringF(true, 30 * 8 + 4, 2, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", tempstr); + DrawStringF(TOP_SCREEN, 30 * 8 + 4, 2, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", tempstr); } else { - DrawStringF(true, 2, 2, COLOR_STD_BG, COLOR_TOP_BAR, "[root]"); - DrawStringF(true, 30 * 8 + 6, 2, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", "GodMode9"); + DrawStringF(TOP_SCREEN, 2, 2, COLOR_STD_BG, COLOR_TOP_BAR, "[root]"); + DrawStringF(TOP_SCREEN, 30 * 8 + 6, 2, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", "GodMode9"); } // left top - current file info if (curr_pane) snprintf(tempstr, 63, "PANE #%lu", curr_pane); else snprintf(tempstr, 63, "CURRENT"); - DrawStringF(true, 2, info_start, COLOR_STD_FONT, COLOR_STD_BG, "[%s]", tempstr); + DrawStringF(TOP_SCREEN, 2, info_start, COLOR_STD_FONT, COLOR_STD_BG, "[%s]", tempstr); // file / entry name ResizeString(tempstr, curr_entry->name, 20, 8, false); u32 color_current = COLOR_ENTRY(curr_entry); - DrawStringF(true, 4, info_start + 12, color_current, COLOR_STD_BG, "%s", tempstr); + DrawStringF(TOP_SCREEN, 4, info_start + 12, color_current, COLOR_STD_BG, "%s", tempstr); // size (in Byte) or type desc if (curr_entry->type == T_DIR) { ResizeString(tempstr, "(dir)", 20, 8, false); @@ -88,18 +88,18 @@ void DrawUserInterface(const char* curr_path, DirEntry* curr_entry, DirStruct* c snprintf(bytestr, 31, "%s Byte", numstr); ResizeString(tempstr, bytestr, 20, 8, false); } - DrawStringF(true, 4, info_start + 12 + 10, color_current, COLOR_STD_BG, tempstr); + DrawStringF(TOP_SCREEN, 4, info_start + 12 + 10, color_current, COLOR_STD_BG, tempstr); // right top - clipboard - DrawStringF(true, SCREEN_WIDTH_TOP - (20*8), info_start, COLOR_STD_FONT, COLOR_STD_BG, "%20s", (clipboard->n_entries) ? "[CLIPBOARD]" : ""); + DrawStringF(TOP_SCREEN, SCREEN_WIDTH_TOP - (20*8), info_start, COLOR_STD_FONT, COLOR_STD_BG, "%20s", (clipboard->n_entries) ? "[CLIPBOARD]" : ""); for (u32 c = 0; c < n_cb_show; c++) { u32 color_cb = COLOR_ENTRY(&(clipboard->entry[c])); ResizeString(tempstr, (clipboard->n_entries > c) ? clipboard->entry[c].name : "", 20, 8, true); - DrawStringF(true, SCREEN_WIDTH_TOP - (20*8) - 4, info_start + 12 + (c*10), color_cb, COLOR_STD_BG, tempstr); + DrawStringF(TOP_SCREEN, SCREEN_WIDTH_TOP - (20*8) - 4, info_start + 12 + (c*10), color_cb, COLOR_STD_BG, tempstr); } *tempstr = '\0'; if (clipboard->n_entries > n_cb_show) snprintf(tempstr, 60, "+ %lu more", clipboard->n_entries - n_cb_show); - DrawStringF(true, SCREEN_WIDTH_TOP - (20*8) - 4, info_start + 12 + (n_cb_show*10), COLOR_DARKGREY, COLOR_STD_BG, "%20s", tempstr); + DrawStringF(TOP_SCREEN, SCREEN_WIDTH_TOP - (20*8) - 4, info_start + 12 + (n_cb_show*10), COLOR_DARKGREY, COLOR_STD_BG, "%20s", tempstr); // bottom: inctruction block char instr[256]; @@ -116,7 +116,7 @@ void DrawUserInterface(const char* curr_path, DirEntry* curr_entry, DirStruct* c "R+\x1B\x1A - Switch to prev/next pane\n", (clipboard->n_entries) ? "SELECT - Clear Clipboard\n" : "SELECT - Restore Clipboard\n", // only if clipboard is full "START - Reboot / [+R] Poweroff"); // generic end part - DrawStringF(true, instr_x, SCREEN_HEIGHT - 4 - GetDrawStringHeight(instr), COLOR_STD_FONT, COLOR_STD_BG, instr); + DrawStringF(TOP_SCREEN, instr_x, SCREEN_HEIGHT - 4 - GetDrawStringHeight(instr), COLOR_STD_FONT, COLOR_STD_BG, instr); } void DrawDirContents(DirStruct* contents, u32 cursor, u32* scroll) { @@ -146,7 +146,7 @@ void DrawDirContents(DirStruct* contents, u32 cursor, u32* scroll) { snprintf(tempstr, str_width + 1, "%s%10.10s", namestr, (curr_entry->type == T_DIR) ? "(dir)" : (curr_entry->type == T_DOTDOT) ? "(..)" : bytestr); } else snprintf(tempstr, str_width + 1, "%-*.*s", str_width, str_width, ""); - DrawStringF(false, pos_x, pos_y, color_font, COLOR_STD_BG, tempstr); + DrawStringF(BOT_SCREEN, pos_x, pos_y, color_font, COLOR_STD_BG, tempstr); pos_y += stp_y; } @@ -155,10 +155,10 @@ void DrawDirContents(DirStruct* contents, u32 cursor, u32* scroll) { if (bar_height < bar_height_min) bar_height = bar_height_min; u32 bar_pos = ((u64) *scroll * (SCREEN_HEIGHT - bar_height)) / (contents->n_entries - lines); - DrawRectangleF(false, SCREEN_WIDTH_BOT - bar_width, 0, bar_width, bar_pos, COLOR_STD_BG); - DrawRectangleF(false, SCREEN_WIDTH_BOT - bar_width, bar_pos + bar_height, bar_width, SCREEN_WIDTH_BOT - (bar_pos + bar_height), COLOR_STD_BG); - DrawRectangleF(false, SCREEN_WIDTH_BOT - bar_width, bar_pos, bar_width, bar_height, COLOR_SIDE_BAR); - } else DrawRectangleF(false, SCREEN_WIDTH_BOT - bar_width, 0, bar_width, SCREEN_HEIGHT, COLOR_STD_BG); + DrawRectangle(BOT_SCREEN, SCREEN_WIDTH_BOT - bar_width, 0, bar_width, bar_pos, COLOR_STD_BG); + DrawRectangle(BOT_SCREEN, SCREEN_WIDTH_BOT - bar_width, bar_pos + bar_height, bar_width, SCREEN_WIDTH_BOT - (bar_pos + bar_height), COLOR_STD_BG); + DrawRectangle(BOT_SCREEN, SCREEN_WIDTH_BOT - bar_width, bar_pos, bar_width, bar_height, COLOR_SIDE_BAR); + } else DrawRectangle(BOT_SCREEN, SCREEN_WIDTH_BOT - bar_width, 0, bar_width, SCREEN_HEIGHT, COLOR_STD_BG); } u32 HexViewer(const char* path) { @@ -175,9 +175,10 @@ u32 HexViewer(const char* path) { u32 total_data; u32 last_mode = 0xFF; + u32 last_offset = (u32) -1; u32 offset = 0; - memcpy(bottom_cpy, BOT_SCREEN0, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); + memcpy(bottom_cpy, BOT_SCREEN, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); while (true) { if (mode != last_mode) { @@ -222,10 +223,7 @@ u32 HexViewer(const char* path) { if (offset % cols) offset -= (offset % cols); // fix offset (align to cols) last_mode = mode; ClearScreenF(true, dual_screen, COLOR_STD_BG); - if (!dual_screen) { - memcpy(BOT_SCREEN0, bottom_cpy, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); - memcpy(BOT_SCREEN1, bottom_cpy, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); - } + if (!dual_screen) memcpy(BOT_SCREEN, bottom_cpy, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); } // fix offset (if required) if (offset + total_shown > fsize + cols) @@ -238,28 +236,31 @@ u32 HexViewer(const char* path) { u32 y = row * (8 + (2*vpad)) + vpad; u32 curr_pos = row * cols; u32 cutoff = (curr_pos >= total_data) ? 0 : (total_data >= curr_pos + cols) ? cols : total_data - curr_pos; - bool top = (y < SCREEN_HEIGHT); - u32 x0 = (top ? 0 : 40); - if (!top) y -= SCREEN_HEIGHT; + u8* screen = TOP_SCREEN; + u32 x0 = 0; + + if (y >= SCREEN_HEIGHT) { // switch to bottom screen + y -= SCREEN_HEIGHT; + screen = BOT_SCREEN; + x0 = 40; + } memcpy(ascii, data + curr_pos, cols); for (u32 col = 0; col < cols; col++) if ((col >= cutoff) || (ascii[col] == 0x00)) ascii[col] = ' '; // draw offset / ASCII representation - if (x_off >= 0) DrawStringF(top, x_off - x0, y, cutoff ? COLOR_HVOFFS : COLOR_HVOFFSI, + if (x_off >= 0) DrawStringF(screen, x_off - x0, y, cutoff ? COLOR_HVOFFS : COLOR_HVOFFSI, COLOR_STD_BG, "%08X", (unsigned int) offset + curr_pos); - if (x_ascii >= 0) { - DrawString(top ? TOP_SCREEN0 : BOT_SCREEN0, ascii, x_ascii - x0, y, COLOR_HVASCII, COLOR_STD_BG); - DrawString(top ? TOP_SCREEN1 : BOT_SCREEN1, ascii, x_ascii - x0, y, COLOR_HVASCII, COLOR_STD_BG); - } + if (x_ascii >= 0) + DrawString(screen, ascii, x_ascii - x0, y, COLOR_HVASCII, COLOR_STD_BG); // draw HEX values for (u32 col = 0; (col < cols) && (x_hex >= 0); col++) { u32 x = (x_hex + hlpad) + ((16 + hrpad + hlpad) * col) - x0; if (col < cutoff) - DrawStringF(top, x, y, COLOR_HVHEX(col), COLOR_STD_BG, "%02X", (unsigned int) data[curr_pos + col]); - else DrawStringF(top, x, y, COLOR_HVHEX(col), COLOR_STD_BG, " "); + DrawStringF(screen, x, y, COLOR_HVHEX(col), COLOR_STD_BG, "%02X", (unsigned int) data[curr_pos + col]); + else DrawStringF(screen, x, y, COLOR_HVHEX(col), COLOR_STD_BG, " "); } } @@ -277,8 +278,7 @@ u32 HexViewer(const char* path) { } ClearScreenF(true, false, COLOR_STD_BG); - memcpy(BOT_SCREEN0, bottom_cpy, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); - memcpy(BOT_SCREEN1, bottom_cpy, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); + memcpy(BOT_SCREEN, bottom_cpy, (SCREEN_HEIGHT * SCREEN_WIDTH_BOT * 3)); return 0; } diff --git a/source/ui.c b/source/ui.c index dd0909e..c4a025f 100644 --- a/source/ui.c +++ b/source/ui.c @@ -11,8 +11,9 @@ #include "ui.h" #include "hid.h" -void ClearScreen(u8* screen, int width, int color) +void ClearScreen(u8* screen, int color) { + int width = (screen == TOP_SCREEN) ? SCREEN_WIDTH_TOP : SCREEN_WIDTH_BOT; if (color == COLOR_TRANSPARENT) color = COLOR_BLACK; for (int i = 0; i < (width * SCREEN_HEIGHT); i++) { *(screen++) = color >> 16; // B @@ -23,14 +24,8 @@ void ClearScreen(u8* screen, int width, int color) void ClearScreenF(bool clear_top, bool clear_bottom, int color) { - if (clear_top) { - ClearScreen(TOP_SCREEN0, SCREEN_WIDTH_TOP, color); - ClearScreen(TOP_SCREEN1, SCREEN_WIDTH_TOP, color); - } - if (clear_bottom) { - ClearScreen(BOT_SCREEN0, SCREEN_WIDTH_BOT, color); - ClearScreen(BOT_SCREEN1, SCREEN_WIDTH_BOT, color); - } + if (clear_top) ClearScreen(TOP_SCREEN, color); + if (clear_bottom) ClearScreen(BOT_SCREEN, color); } void DrawRectangle(u8* screen, int x, int y, int width, int height, int color) @@ -48,17 +43,6 @@ void DrawRectangle(u8* screen, int x, int y, int width, int height, int color) } } -void DrawRectangleF(bool use_top, int x, int y, int width, int height, int color) -{ - if (use_top) { - DrawRectangle(TOP_SCREEN0, x, y, width, height, color); - DrawRectangle(TOP_SCREEN1, x, y, width, height, color); - } else { - DrawRectangle(BOT_SCREEN0, x, y, width, height, color); - DrawRectangle(BOT_SCREEN1, x, y, width, height, color); - } -} - void DrawCharacter(u8* screen, int character, int x, int y, int color, int bgcolor) { for (int yy = 0; yy < 8; yy++) { @@ -88,7 +72,7 @@ void DrawString(u8* screen, const char *str, int x, int y, int color, int bgcolo DrawCharacter(screen, str[i], x + i * 8, y, color, bgcolor); } -void DrawStringF(bool use_top, int x, int y, int color, int bgcolor, const char *format, ...) +void DrawStringF(u8* screen, int x, int y, int color, int bgcolor, const char *format, ...) { char str[512] = { 0 }; // 512 should be more than enough va_list va; @@ -97,15 +81,8 @@ void DrawStringF(bool use_top, int x, int y, int color, int bgcolor, const char vsnprintf(str, 512, format, va); va_end(va); - for (char* text = strtok(str, "\n"); text != NULL; text = strtok(NULL, "\n"), y += 10) { - if (use_top) { - DrawString(TOP_SCREEN0, text, x, y, color, bgcolor); - DrawString(TOP_SCREEN1, text, x, y, color, bgcolor); - } else { - DrawString(BOT_SCREEN0, text, x, y, color, bgcolor); - DrawString(BOT_SCREEN1, text, x, y, color, bgcolor); - } - } + for (char* text = strtok(str, "\n"); text != NULL; text = strtok(NULL, "\n"), y += 10) + DrawString(screen, text, x, y, color, bgcolor); } u32 GetDrawStringHeight(const char* str) { @@ -197,8 +174,8 @@ bool ShowPrompt(bool ask, const char *format, ...) y = (str_height >= SCREEN_HEIGHT) ? 0 : (SCREEN_HEIGHT - str_height) / 2; ClearScreenF(true, false, COLOR_STD_BG); - DrawStringF(true, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); - DrawStringF(true, x, y + str_height - (1*10), COLOR_STD_FONT, COLOR_STD_BG, (ask) ? "( yes, no)" : "( to continue)"); + DrawStringF(TOP_SCREEN, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); + DrawStringF(TOP_SCREEN, x, y + str_height - (1*10), COLOR_STD_FONT, COLOR_STD_BG, (ask) ? "( yes, no)" : "( to continue)"); while (true) { u32 pad_state = InputWait(); @@ -248,12 +225,12 @@ bool ShowUnlockSequence(u32 seqlvl, const char *format, ...) { y = (str_height >= SCREEN_HEIGHT) ? 0 : (SCREEN_HEIGHT - str_height) / 2; ClearScreenF(true, false, COLOR_STD_BG); - DrawStringF(true, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); - DrawStringF(true, x, y + str_height - 28, COLOR_STD_FONT, COLOR_STD_BG, "To proceed, enter this:"); + DrawStringF(TOP_SCREEN, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); + DrawStringF(TOP_SCREEN, x, y + str_height - 28, COLOR_STD_FONT, COLOR_STD_BG, "To proceed, enter this:"); while (true) { for (u32 n = 0; n < len; n++) { - DrawStringF(true, x + (n*4*8), y + str_height - 18, + DrawStringF(TOP_SCREEN, x + (n*4*8), y + str_height - 18, (lvl > n) ? seqcolors[seqlvl] : COLOR_GREY, COLOR_STD_BG, "<%c>", seqsymbols[seqlvl][n]); } if (lvl == len) @@ -297,11 +274,11 @@ u32 ShowSelectPrompt(u32 n, const char** options, const char *format, ...) { yopt = y + GetDrawStringHeight(str) + 8; ClearScreenF(true, false, COLOR_STD_BG); - DrawStringF(true, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); - DrawStringF(true, x, yopt + (n*12) + 10, COLOR_STD_FONT, COLOR_STD_BG, "( select, cancel)"); + DrawStringF(TOP_SCREEN, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); + DrawStringF(TOP_SCREEN, x, yopt + (n*12) + 10, COLOR_STD_FONT, COLOR_STD_BG, "( select, cancel)"); while (true) { for (u32 i = 0; i < n; i++) { - DrawStringF(true, x, yopt + (12*i), (sel == i) ? COLOR_STD_FONT : COLOR_LIGHTGREY, COLOR_STD_BG, "%2.2s %s", + DrawStringF(TOP_SCREEN, x, yopt + (12*i), (sel == i) ? COLOR_STD_FONT : COLOR_LIGHTGREY, COLOR_STD_BG, "%2.2s %s", (sel == i) ? "->" : "", options[i]); } u32 pad_state = InputWait(); @@ -346,8 +323,8 @@ bool ShowInputPrompt(char* inputstr, u32 max_size, const char *format, ...) { y = (str_height >= SCREEN_HEIGHT) ? 0 : (SCREEN_HEIGHT - str_height) / 2; ClearScreenF(true, false, COLOR_STD_BG); - DrawStringF(true, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); - DrawStringF(true, x + 8, y + str_height - 38, COLOR_STD_FONT, COLOR_STD_BG, "R - (\x18\x19) fast scroll\nL - clear string\nX - remove char\nY - insert char"); + DrawStringF(TOP_SCREEN, x, y, COLOR_STD_FONT, COLOR_STD_BG, str); + DrawStringF(TOP_SCREEN, x + 8, y + str_height - 38, COLOR_STD_FONT, COLOR_STD_BG, "R - (\x18\x19) fast scroll\nL - clear string\nX - remove char\nY - insert char"); int cursor_a = -1; u32 cursor_s = 0; @@ -359,7 +336,7 @@ bool ShowInputPrompt(char* inputstr, u32 max_size, const char *format, ...) { if (cursor_s < scroll) scroll = cursor_s; else if (cursor_s - scroll >= input_shown) scroll = cursor_s - input_shown + 1; while (scroll && (inputstr_size - scroll < input_shown)) scroll--; - DrawStringF(true, x, y + str_height - 68, COLOR_STD_FONT, COLOR_STD_BG, "%c%-*.*s%c%-*.*s\n%-*.*s^%-*.*s", + DrawStringF(TOP_SCREEN, x, y + str_height - 68, COLOR_STD_FONT, COLOR_STD_BG, "%c%-*.*s%c%-*.*s\n%-*.*s^%-*.*s", (scroll) ? '<' : '|', (inputstr_size > input_shown) ? input_shown : inputstr_size, (inputstr_size > input_shown) ? input_shown : inputstr_size, @@ -446,16 +423,14 @@ bool ShowProgress(u64 current, u64 total, const char* opstr) if (!current || last_prog_width > prog_width) { ClearScreenF(true, false, COLOR_STD_BG); - DrawRectangleF(true, bar_pos_x, bar_pos_y, bar_width, bar_height, COLOR_STD_FONT); - DrawRectangleF(true, bar_pos_x + 1, bar_pos_y + 1, bar_width - 2, bar_height - 2, COLOR_STD_BG); + DrawRectangle(TOP_SCREEN, bar_pos_x, bar_pos_y, bar_width, bar_height, COLOR_STD_FONT); + DrawRectangle(TOP_SCREEN, bar_pos_x + 1, bar_pos_y + 1, bar_width - 2, bar_height - 2, COLOR_STD_BG); } - DrawRectangleF(true, bar_pos_x + 2, bar_pos_y + 2, prog_width, bar_height - 4, COLOR_STD_FONT); + DrawRectangle(TOP_SCREEN, bar_pos_x + 2, bar_pos_y + 2, prog_width, bar_height - 4, COLOR_STD_FONT); ResizeString(tempstr, opstr, 28, 8, false); - DrawString(TOP_SCREEN0, tempstr, bar_pos_x, text_pos_y, COLOR_STD_FONT, COLOR_STD_BG); - DrawString(TOP_SCREEN1, tempstr, bar_pos_x, text_pos_y, COLOR_STD_FONT, COLOR_STD_BG); - DrawString(TOP_SCREEN0, "(hold B to cancel)", bar_pos_x + 2, text_pos_y + 14, COLOR_STD_FONT, COLOR_STD_BG); - DrawString(TOP_SCREEN1, "(hold B to cancel)", bar_pos_x + 2, text_pos_y + 14, COLOR_STD_FONT, COLOR_STD_BG); + DrawString(TOP_SCREEN, tempstr, bar_pos_x, text_pos_y, COLOR_STD_FONT, COLOR_STD_BG); + DrawString(TOP_SCREEN, "(hold B to cancel)", bar_pos_x + 2, text_pos_y + 14, COLOR_STD_FONT, COLOR_STD_BG); last_prog_width = prog_width; diff --git a/source/ui.h b/source/ui.h index 83e40be..d93e531 100644 --- a/source/ui.h +++ b/source/ui.h @@ -40,28 +40,22 @@ #define COLOR_STD_FONT COLOR_WHITE #ifdef EXEC_GATEWAY - #define TOP_SCREEN0 (u8*)(*(u32*)((uint32_t)0x080FFFC0 + 4 * (*(u32*)0x080FFFD8 & 1))) - #define BOT_SCREEN0 (u8*)(*(u32*)((uint32_t)0x080FFFD0 + 4 * (*(u32*)0x080FFFDC & 1))) - #define TOP_SCREEN1 TOP_SCREEN0 - #define BOT_SCREEN1 BOT_SCREEN0 + #define TOP_SCREEN (u8*)(*(u32*)((uint32_t)0x080FFFC0 + 4 * (*(u32*)0x080FFFD8 & 1))) + #define BOT_SCREEN (u8*)(*(u32*)((uint32_t)0x080FFFD0 + 4 * (*(u32*)0x080FFFDC & 1))) #elif defined(EXEC_A9LH) - #define TOP_SCREEN0 (u8*)(*(u32*)0x23FFFE00) - #define TOP_SCREEN1 (u8*)(*(u32*)0x23FFFE00) - #define BOT_SCREEN0 (u8*)(*(u32*)0x23FFFE08) - #define BOT_SCREEN1 (u8*)(*(u32*)0x23FFFE08) + #define TOP_SCREEN (u8*)(*(u32*)0x23FFFE00) + #define BOT_SCREEN (u8*)(*(u32*)0x23FFFE08) #else #error "Unknown execution method" #endif -void ClearScreen(unsigned char *screen, int width, int color); +void ClearScreen(unsigned char *screen, int color); void ClearScreenF(bool clear_top, bool clear_bottom, int color); - void DrawRectangle(u8* screen, int x, int y, int width, int height, int color); -void DrawRectangleF(bool use_top, int x, int y, int width, int height, int color); void DrawCharacter(unsigned char *screen, int character, int x, int y, int color, int bgcolor); void DrawString(unsigned char *screen, const char *str, int x, int y, int color, int bgcolor); -void DrawStringF(bool use_top, int x, int y, int color, int bgcolor, const char *format, ...); +void DrawStringF(unsigned char *screen, int x, int y, int color, int bgcolor, const char *format, ...); u32 GetDrawStringHeight(const char* str); u32 GetDrawStringWidth(char* str);