From 9afed4371ff84c50b79ac2670b6fd8861bb97adc Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 24 Aug 2025 13:58:19 -0400 Subject: [PATCH] xo-imgui: ex2: refactor + floating divider --- xo-imgui/example/ex2/imgui_ex2.cpp | 67 ++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/xo-imgui/example/ex2/imgui_ex2.cpp b/xo-imgui/example/ex2/imgui_ex2.cpp index faf1465c..cbd3c759 100644 --- a/xo-imgui/example/ex2/imgui_ex2.cpp +++ b/xo-imgui/example/ex2/imgui_ex2.cpp @@ -34,6 +34,10 @@ using xo::gc::generation; +ImVec2 operator+(const ImVec2 & p1, const ImVec2 & p2) { + return ImVec2(p1.x + p2.x, p1.y + p2.y); +} + struct ImRect { ImRect() = default; ImRect(const ImVec2 & tl, const ImVec2 & br) : top_left_{tl}, bottom_right_{br} {} @@ -904,12 +908,11 @@ draw_gc_history(const GcStateDescription & gcstate, } void -draw_gc_state(const AppState & app_state, - const GcStateDescription & gcstate, - const ImRect & canvas_rect, - ImDrawList * draw_list, - ImRect * p_nursery_alloc_rect, - ImRect * p_tenured_alloc_rect) +draw_gc_alloc_state(const GcStateDescription & gcstate, + const ImRect & canvas_rect, + ImDrawList * draw_list, + ImRect * p_nursery_alloc_rect, + ImRect * p_tenured_alloc_rect) { float lm = 50; float rm = 70; @@ -917,11 +920,6 @@ draw_gc_state(const AppState & app_state, float est_chart_text_height = 14; float h = 20; // chart bar height - // draw stuff - draw_list->AddRect(canvas_rect.top_left(), - canvas_rect.bottom_right(), - IM_COL32(255, 255, 255, 255)); - /* bounding rectange for nursery display */ ImRect N_space_rect(ImVec2(canvas_rect.x_lo() + lm, canvas_rect.y_lo() + tm), @@ -1010,6 +1008,51 @@ draw_gc_state(const AppState & app_state, if (p_tenured_alloc_rect) *p_tenured_alloc_rect = T_alloc_rect; +} /*draw_gc_alloc_state*/ + +void +draw_gc_state(const AppState & app_state, + const GcStateDescription & gcstate, + const ImRect & canvas_rect, + ImDrawList * draw_list, + ImRect * p_nursery_alloc_rect, + ImRect * p_tenured_alloc_rect) +{ + // draw stuff + draw_list->AddRect(canvas_rect.top_left(), + canvas_rect.bottom_right(), + IM_COL32(255, 255, 255, 255)); + + /* TODO: does this reset coord space? */ + ImGui::BeginChild("top pane", ImVec2(0, 105), ImGuiChildFlags_Border | ImGuiChildFlags_ResizeY); + + ImRect alloc_rect(canvas_rect.top_left() + ImGui::GetWindowContentRegionMin(), + canvas_rect.top_left() + ImGui::GetWindowContentRegionMax()); + + draw_list->PushClipRect(alloc_rect.top_left(), alloc_rect.bottom_right()); + + draw_gc_alloc_state(gcstate, + alloc_rect, + draw_list, + p_nursery_alloc_rect, + p_tenured_alloc_rect); + + draw_list->PopClipRect(); + + ImGui::EndChild(); + + /* BeginChild() again ? */ + + ImRect history_rect(alloc_rect.bottom_left() + ImGui::GetWindowContentRegionMin(), + alloc_rect.bottom_left() + ImGui::GetWindowContentRegionMax()); + + float lm = 50; + float rm = 70; + float tm = 10; + std::size_t x0 = history_rect.x_lo() + lm; + std::size_t x1 = history_rect.x_hi() - rm; + std::size_t h_y0 = history_rect.y_lo() + tm; + /* just incremental (nursery) collections */ draw_gc_history(gcstate, generation::nursery, @@ -1217,7 +1260,7 @@ int main(int, char **) SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor); - std::cerr << "Requested OpenGL version: " << major << "." << minor << std::endl; + std::cerr << "Requested OpenGL vtersion: " << major << "." << minor << std::endl; if (gl_context) { std::cerr << "SDL_GL_CreateContext done" << std::endl;