summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/list_menu.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c
index a0069e32..6d440ad1 100644
--- a/arm9/src/list_menu.c
+++ b/arm9/src/list_menu.c
@@ -1,12 +1,11 @@
-#pragma thumb on
-
#include "global.h"
#include "heap.h"
#include "main.h"
#include "list_menu.h"
extern void * FUN_02013690(u32 heap_id);
-extern void FUN_020136E0(void *, u32);
+extern void CreateListMenuCursorObj(void *, u32);
+extern void DestroyListMenuCursorObj(void *);
extern void FillWindowPixelBuffer(struct Window *, u32);
void ListMenuPrintEntries(struct ListMenu *, u16, u16, u16);
void ListMenuDrawCursor(struct ListMenu *);
@@ -14,11 +13,11 @@ BOOL ListMenuChangeSelection(struct ListMenu *, s32, u8, s32);
void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL);
extern void CopyWindowToVram(struct Window *);
-struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id)
+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));
list->template = *template;
- list->unk_28 = FUN_02013690(heap_id);
+ list->cursor = FUN_02013690(heap_id);
list->cursorPos = cursorPos;
list->itemsAbove = itemsAbove;
list->unk_30 = 0;
@@ -34,8 +33,8 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur
list->enabled = 0;
if (list->template.totalItems < list->template.maxShowed)
list->template.maxShowed = list->template.totalItems;
- FUN_020136E0(
- list->unk_28,
+ CreateListMenuCursorObj(
+ list->cursor,
(u32)(
((u32)(list->template.cursorPal << 24) >> 8)
| ((u32)(list->template.cursorShadowPal << 24) >> 16)
@@ -50,7 +49,7 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur
return list;
}
-s32 ListMenu_ProcessInput(struct ListMenu * list)
+THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list)
{
list->unk_33 = 0;
@@ -107,3 +106,21 @@ s32 ListMenu_ProcessInput(struct ListMenu * list)
}
}
}
+
+THUMB_FUNC void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove)
+{
+ if (cursorPos != NULL)
+ *cursorPos = list->cursorPos;
+ if (itemsAbove != NULL)
+ *itemsAbove = list->itemsAbove;
+ DestroyListMenuCursorObj(list->cursor);
+ FUN_02016A8C(list->heap_id, list);
+}
+
+THUMB_FUNC void RedrawListMenu(struct ListMenu * list)
+{
+ FillWindowPixelBuffer(list->template.window, list->template.fillValue);
+ ListMenuPrintEntries(list, list->cursorPos, 0, list->template.maxShowed);
+ ListMenuDrawCursor(list);
+ CopyWindowToVram(list->template.window);
+}