Studio: toolbar cosmetic improvements
- Remove hard-coded button sizes (48×32) from toolbar icons; buttons now use default ImGui sizing, matching the existing copy-camera button. - Remove the Unload button (available via menu). - Add ImGui_ColorButtonEx widget with per-corner rounding via ImDrawFlags, enabling segmented button-group visuals. - Use segmented rounding for the pause/viscous/play triplet: rounded-left, square, rounded-right. - Make pause and play buttons 40% wider than the viscous button for emphasis. - Replace the theme combo dropdown with a cycling button. - Reduce toolbar height from 48px to 34px and vertically center content via WindowPadding. - Zero out table CellPadding in the toolbar for precise vertical centering. - Remove the speed combo's inflated vertical padding. PiperOrigin-RevId: 906853958 Change-Id: I6e4ec7243adb9e0f1f06f8779fa896a6865c46c7
This commit is contained in:
committed by
Copybara-Service
parent
25a9114705
commit
6f275b79c6
@@ -72,13 +72,11 @@ static void SelectParentPerturb(const mjModel* model, mjvPerturb& perturb) {
|
||||
}
|
||||
|
||||
static constexpr const char* ICON_COPY_CAMERA = platform::ICON_FA_COPY;
|
||||
static constexpr const char* ICON_UNLOAD_MODEL = platform::ICON_FA_EJECT;
|
||||
static constexpr const char* ICON_RELOAD_MODEL = platform::ICON_FA_REFRESH;
|
||||
static constexpr const char* ICON_RESET_MODEL = platform::ICON_FA_UNDO;
|
||||
static constexpr const char* ICON_PREV_FRAME = platform::ICON_FA_CARET_LEFT;
|
||||
static constexpr const char* ICON_NEXT_FRAME = platform::ICON_FA_CARET_RIGHT;
|
||||
static constexpr const char* ICON_CURR_FRAME = platform::ICON_FA_FAST_FORWARD;
|
||||
static constexpr const char* ICON_RELOAD_SPEC = platform::ICON_FA_REFRESH;
|
||||
static constexpr const char* ICON_UNDO_SPEC = platform::ICON_FA_UNDO;
|
||||
static constexpr const char* ICON_REDO_SPEC = platform::ICON_FA_REPEAT;
|
||||
|
||||
@@ -1402,13 +1400,12 @@ void App::HelpGui() {
|
||||
}
|
||||
|
||||
void App::ToolBarGui() {
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(0, 0));
|
||||
if (ImGui::BeginTable("##ToolBarTable", 2)) {
|
||||
platform::ScopedStyle style;
|
||||
const ImColor red(220, 40, 40, 255);
|
||||
|
||||
const float scale = ImGui::GetWindowDpiScale();
|
||||
const ImVec2 button_size(48.f * scale, 32.f * scale);
|
||||
const ImVec2 play_button_size(80.f * scale, 32.f * scale);
|
||||
style.Var(ImGuiStyleVar_ItemSpacing,
|
||||
ImVec2(ImGui::GetStyle().ItemSpacing.x * 2.0f,
|
||||
ImGui::GetStyle().ItemSpacing.y));
|
||||
|
||||
const float label_width = GetExpectedLabelWidth();
|
||||
const float copy_btn_width = ImGui::CalcTextSize(ICON_COPY_CAMERA).x +
|
||||
@@ -1420,42 +1417,29 @@ void App::ToolBarGui() {
|
||||
const float right_width = label_width + sp + label_width + sp +
|
||||
label_width + sp + copy_btn_width + sp +
|
||||
theme_width;
|
||||
const float separator_width = .2f * button_size.x;
|
||||
const float separator_width = ImGui::GetFrameHeight() * .6f;
|
||||
|
||||
ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthStretch);
|
||||
ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, right_width);
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetStyle().WindowPadding.x);
|
||||
|
||||
// Combined (Unload, Reload) widget
|
||||
const float btn_size = ImGui::GetFrameHeight();
|
||||
const ImVec2 square_size(btn_size, btn_size);
|
||||
|
||||
// Reload button.
|
||||
{
|
||||
style.Var(ImGuiStyleVar_FrameRounding, 2.0f);
|
||||
|
||||
// Unload button.
|
||||
{
|
||||
const ImColor a = red;
|
||||
const ImColor h(a.Value.x, a.Value.y, a.Value.z, a.Value.w * 0.6f);
|
||||
style.Color(ImGuiCol_ButtonHovered, h);
|
||||
style.Color(ImGuiCol_ButtonActive, a);
|
||||
|
||||
if (ImGui::Button(ICON_UNLOAD_MODEL, button_size)) {
|
||||
InitEmptyModel();
|
||||
}
|
||||
ImGui::SetItemTooltip("%s", "Unload");
|
||||
style.Reset();
|
||||
}
|
||||
|
||||
// Reload button.
|
||||
ImGui::SameLine(0, 0);
|
||||
if (ImGui::Button(ICON_RELOAD_MODEL, button_size)) {
|
||||
if (ImGui::Button(ICON_RELOAD_MODEL, square_size)) {
|
||||
RequestModelReload();
|
||||
}
|
||||
ImGui::SetItemTooltip("%s", "Reload");
|
||||
}
|
||||
|
||||
// Reset button.
|
||||
ImGui::SameLine(0, separator_width);
|
||||
if (ImGui::Button(ICON_RESET_MODEL, button_size)) {
|
||||
ImGui::SameLine(0, 0.5 * separator_width);
|
||||
if (ImGui::Button(ICON_RESET_MODEL, square_size)) {
|
||||
ResetPhysics();
|
||||
}
|
||||
ImGui::SetItemTooltip("%s", "Reset");
|
||||
@@ -1465,10 +1449,8 @@ void App::ToolBarGui() {
|
||||
platform::StepControlGui(model(), &step_control_, tmp_.speed_index);
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() +
|
||||
(button_size.y - ImGui::GetFrameHeight()) * 0.5f);
|
||||
|
||||
if (ImGui::Button(ICON_COPY_CAMERA)) {
|
||||
if (ImGui::Button(ICON_COPY_CAMERA, square_size)) {
|
||||
std::string camera_string = platform::CameraToString(data(), &camera_);
|
||||
platform::MaybeSaveToClipboard(camera_string);
|
||||
}
|
||||
@@ -1488,13 +1470,14 @@ void App::ToolBarGui() {
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(GetExpectedLabelWidth());
|
||||
if (platform::ThemeSelectGui(&ui_.theme)) {
|
||||
if (platform::ThemeSelectGui(&ui_.theme, square_size)) {
|
||||
platform::SetupTheme(ui_.theme);
|
||||
ImGui::GetIO().WantSaveIniSettings = true;
|
||||
}
|
||||
|
||||
ImGui::EndTable();
|
||||
}
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
|
||||
void App::StatusBarGui() {
|
||||
|
||||
Reference in New Issue
Block a user