[ui] Add visibility control to canvases

This commit is contained in:
Bill Currie 2023-07-01 19:53:26 +09:00
parent c1cd81222d
commit 4eef11c329
2 changed files with 15 additions and 1 deletions

View file

@ -57,6 +57,7 @@ enum {
};
typedef struct canvas_s {
bool visible;
uint32_t range[canvas_comp_count];
} canvas_t;
@ -92,6 +93,7 @@ void Canvas_SortComponentPool (canvas_system_t canvas_sys, uint32_t ent,
void Canvas_SetLen (canvas_system_t canvas_sys, view_pos_t len);
CANVASINLINE view_t Canvas_GetRootView (canvas_system_t canvas_sys,
uint32_t ent);
CANVASINLINE bool *Canvas_Visible (canvas_system_t canvas_sys, uint32_t ent);
#undef CANVASINLINE
#ifndef IMPLEMENT_CANVAS_Funcs
@ -108,6 +110,14 @@ Canvas_GetRootView (canvas_system_t canvas_sys, uint32_t ent)
return View_FromEntity (viewsys, ent);
}
CANVASINLINE
bool *
Canvas_Visible (canvas_system_t canvas_sys, uint32_t ent)
{
uint32_t comp = canvas_sys.base + canvas_canvas;
return Ent_GetComponent (ent, comp, canvas_sys.reg);
}
#undef CANVASINLINE
#endif//__QF_scene_canvas_h

View file

@ -457,6 +457,10 @@ Canvas_Draw (canvas_system_t canvas_sys)
canvas_t *canvas = canvases++;
//uint32_t ent = *entities++;
if (!canvas->visible) {
continue;
}
for (int i = 0; i < canvas_comp_count; i++) {
if (draw_func[i]) {
uint32_t c = canvas_sys.base + i;
@ -495,7 +499,7 @@ Canvas_InitSys (canvas_system_t *canvas_sys, ecs_registry_t *reg)
void
Canvas_AddToEntity (canvas_system_t canvas_sys, uint32_t ent)
{
canvas_t canvas = { };
canvas_t canvas = { .visible = true };
for (uint32_t i = 0; i < canvas_comp_count; i++) {
canvas.range[i] = ECS_NewSubpoolRange (canvas_sys.reg,
canvas_sys.base + i);