studio: finish UI polish pass and document themes + nav gizmo

Viewport shading toolbar: a thin divider now separates the world-layer
overlay toggle from the Wireframe/Solid/Material shading buttons, so the
two groups read as distinct sets of controls rather than a run of icons.

Properties tab column: the open tab gets a blue accent bar on its left
edge, and the tab icons are theme-aware (the active and hovered icons use
the theme's text colour, the rest its muted colour) instead of hardcoded
greys that washed out on light themes.

README and the Studio guide now cover the navigation gizmo (drag to orbit,
click an axis to snap to that view) and the Window > Theme palette.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ToastconcernandClaude Opus 4.8 committed 2026-10-21 23:05:31 -05:00
1 parent 97cc91c222
commit a0804df866
3 files changed
+19 -6

No files matched your search

+12 -5
View File
@@ -4907,10 +4907,12 @@ struct Studio {
const ImVec2 p = ImGui::GetCursorScreenPos();
if (ImGui::InvisibleButton("##tab", ImVec2(side, side))) inspectorTab = t.tab;
const bool on = inspectorTab == t.tab, hot = ImGui::IsItemHovered();
if (on) dl->AddRectFilled(ImVec2(p.x - 3 * scale, p.y), ImVec2(p.x + side + (colW - side) * 0.5f + 1, p.y + side), col(kPanel), 5 * scale,
ImDrawFlags_RoundCornersLeft);
else if (hot) dl->AddRectFilled(p, ImVec2(p.x + side, p.y + side), col(kWidget), 5 * scale);
drawToolIcon(dl, t.icon, ImVec2(p.x + side * 0.5f, p.y + side * 0.5f), side * 0.6f, col(on ? 0xffffff : 0xb0b0b0));
if (on) {
dl->AddRectFilled(ImVec2(p.x - 3 * scale, p.y), ImVec2(p.x + side + (colW - side) * 0.5f + 1, p.y + side), col(kPanel), 5 * scale,
ImDrawFlags_RoundCornersLeft);
dl->AddRectFilled(ImVec2(p.x - 3 * scale, p.y + 3 * scale), ImVec2(p.x - 3 * scale + 2.5f * scale, p.y + side - 3 * scale), col(kBlue), 1); // accent: which tab is open
} else if (hot) dl->AddRectFilled(p, ImVec2(p.x + side, p.y + side), col(kWidget), 5 * scale);
drawToolIcon(dl, t.icon, ImVec2(p.x + side * 0.5f, p.y + side * 0.5f), side * 0.6f, col(on ? kText : hot ? kText : kDim));
if (hot) ImGui::SetTooltip("%s", t.tip);
ImGui::PopID();
ImGui::SetCursorPosX((colW - side) * 0.5f);
@@ -6777,7 +6779,12 @@ struct Studio {
if (ImGui::MenuItem("The Home's Meshes", nullptr, showMeshes)) { showMeshes = !showMeshes; refreshVisibility(); }
ImGui::EndPopup();
}
ImGui::SameLine(0, 8 * scale);
{ // a divider: the overlay toggle is one thing, the shading modes another
ImGui::SameLine(0, 7 * scale);
const ImVec2 p = ImGui::GetCursorScreenPos();
ImGui::GetWindowDrawList()->AddLine(ImVec2(p.x, p.y + 4 * scale), ImVec2(p.x, p.y + fh - 4 * scale), col(kLine));
ImGui::SameLine(0, 7 * scale);
}
// Blender's shading spheres: wire, solid, material
auto sphere = [&](ImDrawList* d, ImVec2 c, float r, int kind) {
if (kind == 0) {