diff options
Diffstat (limited to 'arm9/src')
| -rw-r--r-- | arm9/src/list_menu.c | 33 | 
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); +} | 
