#pragma once namespace pp::app { struct AppInitialSurfacePlan { float width = 960.0F; float height = 540.0F; }; struct AppFrameUpdatePlan { bool update_frame = false; bool update_layouts = false; bool refresh_canvas_toolbar = false; }; struct AppFrameDrawPlan { bool draw_canvas_stroke = false; bool draw_vr_ui = false; bool draw_main_ui = true; bool reset_redraw = true; }; [[nodiscard]] constexpr AppInitialSurfacePlan plan_app_initial_surface() noexcept { return AppInitialSurfacePlan { .width = 1920.0F / 2.0F, .height = 1080.0F / 2.0F, }; } [[nodiscard]] constexpr AppFrameUpdatePlan plan_app_frame_update(bool redraw, bool animate) noexcept { const bool update_frame = redraw || animate; return AppFrameUpdatePlan { .update_frame = update_frame, .update_layouts = update_frame, .refresh_canvas_toolbar = update_frame, }; } [[nodiscard]] constexpr AppFrameDrawPlan plan_app_frame_draw( bool has_canvas_node, bool has_canvas_document, bool vr_active, bool ui_visible, bool vr_only) noexcept { return AppFrameDrawPlan { .draw_canvas_stroke = has_canvas_node && has_canvas_document, .draw_vr_ui = vr_active && ui_visible, .draw_main_ui = !vr_only, .reset_redraw = true, }; } } // namespace pp::app