diff --git a/src/app/gui/editor_layout.cc b/src/app/gui/editor_layout.cc index d3beb095..241c3ad8 100644 --- a/src/app/gui/editor_layout.cc +++ b/src/app/gui/editor_layout.cc @@ -6,7 +6,7 @@ #include "app/gui/icons.h" #include "app/gui/input.h" #include "app/gui/ui_helpers.h" -#include "app/gui/widget_measurement.h" +#include "app/gui/widgets/widget_measurement.h" #include "app/gui/widgets/widget_id_registry.h" #include "imgui/imgui.h" #include "imgui/imgui_internal.h" @@ -19,10 +19,10 @@ namespace gui { // ============================================================================ void Toolset::Begin() { - // Ultra-compact toolbar with no padding waste - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 3)); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4, 4)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(8, 6)); + // Ultra-compact toolbar with minimal padding + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4, 2)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(3, 3)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(6, 4)); // Don't use BeginGroup - it causes stretching. Just use direct layout. in_toolbar_ = true; @@ -62,10 +62,26 @@ void Toolset::End() { } void Toolset::BeginModeGroup() { - // Visual grouping with subtle background - taller for better button visibility + // Compact inline mode buttons without child window to avoid scroll issues + // Just use a simple colored background rect ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.15f, 0.15f, 0.17f, 0.5f)); - ImGui::BeginChild("##ModeGroup", ImVec2(0, 40), true, + + // Use a frameless child with exact button height to avoid scrolling + const float button_size = 28.0f; // Smaller buttons to match toolbar height + const float padding = 4.0f; + const int num_buttons = 8; + const float item_spacing = ImGui::GetStyle().ItemSpacing.x; + + float total_width = (num_buttons * button_size) + + ((num_buttons - 1) * item_spacing) + + (padding * 2); + + ImGui::BeginChild("##ModeGroup", ImVec2(total_width, button_size + padding), + ImGuiChildFlags_AlwaysUseWindowPadding, ImGuiWindowFlags_NoScrollbar); + + // Store for button sizing + mode_group_button_size_ = button_size; } bool Toolset::ModeButton(const char* icon, bool selected, const char* tooltip) { @@ -73,23 +89,18 @@ bool Toolset::ModeButton(const char* icon, bool selected, const char* tooltip) { ImGui::PushStyleColor(ImGuiCol_Button, GetAccentColor()); } - bool clicked = ImGui::Button(icon, ImVec2(32, 32)); // Larger buttons for better usability + // Use smaller buttons that fit the toolbar height + float size = mode_group_button_size_ > 0 ? mode_group_button_size_ : 28.0f; + bool clicked = ImGui::Button(icon, ImVec2(size, size)); if (selected) { ImGui::PopStyleColor(); } - // Measure this widget + // Measure this widget (without ID scope to avoid PopID issues) std::string widget_id = tooltip ? tooltip : absl::StrFormat("Button_%d", button_count_); WidgetMeasurement::Instance().MeasureLastItem(widget_id, "mode_button"); - // Register for test automation - if (ImGui::GetItemID() != 0 && tooltip) { - std::string button_path = absl::StrFormat("ModeButton:%s", tooltip); - WidgetIdRegistry::Instance().RegisterWidget( - button_path, "button", ImGui::GetItemID(), tooltip); - } - if (tooltip && ImGui::IsItemHovered()) { ImGui::SetTooltip("%s", tooltip); } diff --git a/src/app/gui/editor_layout.h b/src/app/gui/editor_layout.h index 50051944..44c2df63 100644 --- a/src/app/gui/editor_layout.h +++ b/src/app/gui/editor_layout.h @@ -77,6 +77,7 @@ class Toolset { bool in_section_ = false; int button_count_ = 0; float current_line_width_ = 0.0f; + float mode_group_button_size_ = 0.0f; }; /** diff --git a/src/app/gui/gui_library.cmake b/src/app/gui/gui_library.cmake index d25e1f61..7b10c472 100644 --- a/src/app/gui/gui_library.cmake +++ b/src/app/gui/gui_library.cmake @@ -17,7 +17,7 @@ set( app/gui/widgets/widget_state_capture.cc app/gui/ui_helpers.cc app/gui/editor_layout.cc - app/gui/widget_measurement.cc + app/gui/widgets/widget_measurement.cc # Canvas system components app/gui/canvas/canvas_modals.cc app/gui/canvas/canvas_context_menu.cc diff --git a/src/app/gui/widget_measurement.cc b/src/app/gui/widgets/widget_measurement.cc similarity index 98% rename from src/app/gui/widget_measurement.cc rename to src/app/gui/widgets/widget_measurement.cc index 55300869..5e934ee4 100644 --- a/src/app/gui/widget_measurement.cc +++ b/src/app/gui/widgets/widget_measurement.cc @@ -1,4 +1,4 @@ -#include "app/gui/widget_measurement.h" +#include "app/gui/widgets/widget_measurement.h" #include "absl/strings/str_format.h" #include "imgui/imgui.h" diff --git a/src/app/gui/widget_measurement.h b/src/app/gui/widgets/widget_measurement.h similarity index 100% rename from src/app/gui/widget_measurement.h rename to src/app/gui/widgets/widget_measurement.h