summaryrefslogtreecommitdiff
path: root/src/f_pc/f_pc_draw.cpp
diff options
context:
space:
mode:
authorlepelog <lepelog@users.noreply.github.com>2021-04-01 12:06:29 +0200
committerlepelog <lepelog@users.noreply.github.com>2021-04-01 12:06:29 +0200
commit53c6aa6c8b50d95e89f64db70d0cc08fb4111a93 (patch)
tree20ce5067caef7892c2c9bb043b10918c15dd7868 /src/f_pc/f_pc_draw.cpp
parent87bc0e711b4fb2f990f3c37ca681be1fc027d554 (diff)
ported over f_pc
Diffstat (limited to 'src/f_pc/f_pc_draw.cpp')
-rw-r--r--src/f_pc/f_pc_draw.cpp80
1 files changed, 27 insertions, 53 deletions
diff --git a/src/f_pc/f_pc_draw.cpp b/src/f_pc/f_pc_draw.cpp
index e4c12d6e90..2ce62954e9 100644
--- a/src/f_pc/f_pc_draw.cpp
+++ b/src/f_pc/f_pc_draw.cpp
@@ -6,66 +6,40 @@
#include "f_pc/f_pc_draw.h"
#include "dol2asm.h"
#include "dolphin/types.h"
-
-//
-// Types:
-//
-
-struct layer_class {};
-
-struct base_process_class {};
-
-//
-// Forward References:
-//
-
-void fpcDw_Execute(base_process_class*);
-void fpcDw_Handler(int (*)(int (*)(void*, void*)), int (*)(void*, void*));
-
-extern "C" void fpcDw_Execute__FP18base_process_class();
-extern "C" void fpcDw_Handler__FPFPFPvPv_i_iPFPvPv_i();
-
-//
-// External References:
-//
-
-void fpcBs_Is_JustOfType(int, int);
-void fpcLy_SetCurrentLayer(layer_class*);
-void fpcLy_CurrentLayer();
-void fpcPause_IsEnable(void*, u8);
-void cAPIGph_BeforeOfDraw();
-void cAPIGph_AfterOfDraw();
-
-extern "C" void fpcBs_Is_JustOfType__Fii();
-extern "C" void fpcLy_SetCurrentLayer__FP11layer_class();
-extern "C" void fpcLy_CurrentLayer__Fv();
-extern "C" void fpcPause_IsEnable__FPvUc();
-extern "C" void cAPIGph_BeforeOfDraw__Fv();
-extern "C" void cAPIGph_AfterOfDraw__Fv();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_29();
-extern "C" extern u8 g_fpcLf_type[4 + 4 /* padding */];
+#include "SSystem/SComponent/c_API_graphic.h"
+#include "f_pc/f_pc_pause.h"
+#include "f_pc/f_pc_leaf.h"
//
// Declarations:
//
/* 80023954-800239F4 00A0+00 s=0 e=1 z=0 None .text fpcDw_Execute__FP18base_process_class */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcDw_Execute(base_process_class* param_0) {
- nofralloc
-#include "asm/f_pc/f_pc_draw/fpcDw_Execute__FP18base_process_class.s"
+s32 fpcDw_Execute(base_process_class* pProc) {
+ if (!fpcPause_IsEnable(pProc, 2)) {
+ layer_class* curLay;
+ s32 ret;
+ process_method_func func;
+ curLay = fpcLy_CurrentLayer();
+ if (fpcBs_Is_JustOfType(g_fpcLf_type, pProc->mSubType)) {
+ func = ((nodedraw_method_class*)pProc->mpPcMtd)->mNodedrawFunc;
+ } else {
+ func = ((nodedraw_method_class*)pProc->mpPcMtd)->mNodedrawFunc;
+ }
+ fpcLy_SetCurrentLayer(pProc->mLyTg.mpLayer);
+ ret = func(pProc);
+ fpcLy_SetCurrentLayer(curLay);
+ return ret;
+ } else {
+ return 0;
+ }
}
-#pragma pop
/* 800239F4-80023A48 0054+00 s=0 e=2 z=10 None .text fpcDw_Handler__FPFPFPvPv_i_iPFPvPv_i */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void fpcDw_Handler(int (*)(int (*)(void*, void*)), int (*)(void*, void*)) {
- nofralloc
-#include "asm/f_pc/f_pc_draw/fpcDw_Handler__FPFPFPvPv_i_iPFPvPv_i.s"
+s32 fpcDw_Handler(fpcDw_HandlerFuncFunc param_1, fpcDw_HandlerFunc param_2) {
+ s32 ret;
+ cAPIGph_BeforeOfDraw();
+ ret = param_1(param_2);
+ cAPIGph_AfterOfDraw();
+ return ret;
}
-#pragma pop