diff --git a/include/QF/ui/canvas.h b/include/QF/ui/canvas.h index 92c5570fd..c72637da2 100644 --- a/include/QF/ui/canvas.h +++ b/include/QF/ui/canvas.h @@ -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 diff --git a/libs/ui/canvas.c b/libs/ui/canvas.c index dc7bc7929..6bc69aba8 100644 --- a/libs/ui/canvas.c +++ b/libs/ui/canvas.c @@ -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);