summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-05-21 12:51:26 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-05-21 12:51:26 -0400
commit11f1419d080f346574b7a83d528c42a9473d41ec (patch)
tree97dea4b9def4ae26b0a851828babd5b8a6015cca /arm9/src
parent80231d12b10043197be4d01222346fe7f0b72900 (diff)
ListMenuPrint
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/list_menu.c50
-rw-r--r--arm9/src/text.c30
2 files changed, 55 insertions, 25 deletions
diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c
index db0328ef..8dec327d 100644
--- a/arm9/src/list_menu.c
+++ b/arm9/src/list_menu.c
@@ -14,6 +14,15 @@ void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL);
extern void CopyWindowToVram(struct Window *);
extern s32 FUN_02002E4C(u8 fontId, s32 attr);
+static inline u32 MakeFontColor(u32 fgPal, u32 shdwPal, u32 bgPal)
+{
+ return (u32)(
+ ((u32)(fgPal << 24) >> 8)
+ | ((u32)(shdwPal << 24) >> 16)
+ | ((u32)(bgPal << 24) >> 24)
+ );
+}
+
THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id)
{
struct ListMenu * list = AllocFromHeap(heap_id, sizeof(struct ListMenu));
@@ -31,11 +40,12 @@ THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * templa
list->cursorShadowPal = list->template.cursorShadowPal;
list->lettersSpacing = list->template.lettersSpacing;
list->fontId = list->template.fontId;
- list->enabled = 0;
+ list->overrideEnabled = FALSE;
if (list->template.totalItems < list->template.maxShowed)
list->template.maxShowed = list->template.totalItems;
CreateListMenuCursorObj(
list->cursor,
+// MakeFontColor(list->template.cursorPal, list->template.cursorShadowPal, list->fillValue)
(u32)(
((u32)(list->template.cursorPal << 24) >> 8)
| ((u32)(list->template.cursorShadowPal << 24) >> 16)
@@ -154,25 +164,25 @@ THUMB_FUNC s32 FUN_02001354(struct ListMenu * list, const struct ListMenuTemplat
return -1;
}
-s32 FUN_020013C8(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p)
+THUMB_FUNC s32 FUN_020013C8(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *cursorPosDest_p, u16 *itemsAboveDest_p)
{
return FUN_02001354(list, template, cursorPos, itemsAbove, FALSE, input, cursorPosDest_p, itemsAboveDest_p);
}
-void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
+THUMB_FUNC void FUN_020013E8(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
{
list->cursorPal = cursorPal;
list->fillValue = fillValue;
list->cursorShadowPal = cursorShadowPal;
- list->enabled = TRUE;
+ list->overrideEnabled = TRUE;
}
-void FUN_0200143C(struct ListMenu * list, u16 * index_p)
+THUMB_FUNC void FUN_0200143C(struct ListMenu * list, u16 * index_p)
{
*index_p = list->cursorPos + list->itemsAbove;
}
-void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p)
+THUMB_FUNC void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p)
{
if (cursorPos_p != NULL)
*cursorPos_p = list->cursorPos;
@@ -180,17 +190,17 @@ void FUN_02001448(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p)
*itemsAbove_p = list->itemsAbove;
}
-u8 FUN_0200145C(struct ListMenu * list)
+THUMB_FUNC u8 FUN_0200145C(struct ListMenu * list)
{
return list->unk_33;
}
-s32 FUN_02001464(struct ListMenu * list, s32 index)
+THUMB_FUNC s32 FUN_02001464(struct ListMenu * list, s32 index)
{
return list->template.items[index].index;
}
-s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr)
+THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr)
{
switch (attr)
{
@@ -239,7 +249,7 @@ s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr)
return -1;
}
-void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value)
+THUMB_FUNC void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value)
{
switch (attr)
{
@@ -303,3 +313,23 @@ void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value)
break;
}
}
+
+THUMB_FUNC void ListMenuPrint(struct ListMenu * list, struct ListMenuItem * items)
+{
+ list->template.items = items;
+}
+
+THUMB_FUNC void FUN_0200165C(struct ListMenu * list, const u16 * str, u8 x, u8 y)
+{
+ if (str != NULL)
+ {
+ if (list->overrideEnabled)
+ {
+ AddTextPrinterParameterized3(list->template.window, list->fontId, str, x, y, 0xFF, MakeFontColor(list->cursorPal, list->cursorShadowPal, list->fillValue), list->lettersSpacing, 0, NULL);
+ }
+ else
+ {
+ AddTextPrinterParameterized3(list->template.window, list->template.fontId, str, x, y, 0xFF, MakeFontColor(list->template.cursorPal, list->template.cursorShadowPal, list->template.fillValue), list->template.lettersSpacing, 0, NULL);
+ }
+ }
+}
diff --git a/arm9/src/text.c b/arm9/src/text.c
index 3034baab..23e6ca67 100644
--- a/arm9/src/text.c
+++ b/arm9/src/text.c
@@ -18,14 +18,14 @@ extern struct TextPrinter *FUN_0201B6C8(void);
extern void FUN_0200CAB4(u32 param0);
extern void FUN_0201C1A8(struct TextPrinter *printer);
-extern void CopyWindowToVram(u32 windowId);
+extern void CopyWindowToVram(struct Window * window);
extern u32 FontFunc(u8 fontId, struct TextPrinter *printer);
extern void *FUN_02006BB0(u32 param0, u32 param1, u32 param2, struct TextPrinter **param3, u32 param4);
-extern u32 FUN_0201AB0C(u32 windowId);
-extern void FUN_02019658(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8, u32 param9);
+extern u32 FUN_0201AB0C(struct Window * window);
+extern void FUN_02019658(struct Window * param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8, u32 param9);
THUMB_FUNC void SetFontsPointer(const struct FontInfo *fonts)
@@ -99,11 +99,11 @@ THUMB_FUNC void FUN_0201BD7C(u32 param0)
FUN_0201BCFC(param0);
}
-THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
- printerTemplate.windowId = windowId;
+ printerTemplate.window = window;
printerTemplate.currentChar = str;
printerTemplate.fontId = fontId;
printerTemplate.x = (u8)x;
@@ -122,11 +122,11 @@ THUMB_FUNC u16 AddTextPrinterParameterized(u32 windowId, u8 fontId, const u16 *s
return AddTextPrinter(&printerTemplate, speed, callback);
}
-THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
- printerTemplate.windowId = windowId;
+ printerTemplate.window = window;
printerTemplate.currentChar = str;
printerTemplate.fontId = fontId;
printerTemplate.x = (u8)x;
@@ -145,13 +145,13 @@ THUMB_FUNC u16 AddTextPrinterParameterized2(u32 windowId, u8 fontId, const u16 *
return AddTextPrinter(&printerTemplate, speed, callback);
}
-THUMB_FUNC u16 AddTextPrinterParameterized3(u32 windowId, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
- printerTemplate.windowId = windowId;
+ printerTemplate.window = window;
printerTemplate.currentChar = str;
- printerTemplate.fontId = fontId;
+ printerTemplate.fontId = (u8)fontId;
printerTemplate.x = (u8)x;
printerTemplate.y = (u8)y;
printerTemplate.currentX = (u8)x;
@@ -214,7 +214,7 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s
}
if (speed != 0xff)
{
- CopyWindowToVram(printer->printerTemplate.windowId); // CopyWindowToVram?
+ CopyWindowToVram(printer->printerTemplate.window); // CopyWindowToVram?
}
FUN_0201C238(printer);
FreeToHeap((void *)printer);
@@ -235,7 +235,7 @@ THUMB_FUNC void RunTextPrinter(u32 param0, struct TextPrinter *printer)
switch (temp)
{
case 0:
- CopyWindowToVram(printer->printerTemplate.windowId);
+ CopyWindowToVram(printer->printerTemplate.window);
//fallthrough
case 3:
if (printer->callback == NULL)
@@ -343,14 +343,14 @@ THUMB_FUNC void *FUN_0201C1B0(void)
THUMB_FUNC void FUN_0201C1EC(struct TextPrinter *printer, u32 param1, u32 param2, u32 param3)
{
#pragma unused (param1, param2)
- u32 windowId = printer->printerTemplate.windowId;
+ struct Window * window = printer->printerTemplate.window;
if (printer->Unk2C == NULL)
{
printer->Unk2C = FUN_0201C1B0();
}
u32 r6 = (u32)printer->Unk2C + param3 * (sizeof(struct TextPrinter) * 8);
- u32 r2 = ((FUN_0201AB0C(windowId) - 3) << 0x13) >> 0x10;
- FUN_02019658(windowId, r6, 0, 0, 24, 32, r2, 0, 24, 32);
+ u32 r2 = ((FUN_0201AB0C(window) - 3) << 0x13) >> 0x10;
+ FUN_02019658(window, r6, 0, 0, 24, 32, r2, 0, 24, 32);
}
THUMB_FUNC void FUN_0201C238(struct TextPrinter *printer)