diff --git a/src/experimental/platform/ux/picture_gui.cc b/src/experimental/platform/ux/picture_gui.cc index 7281c3d7..fdf1fa3b 100644 --- a/src/experimental/platform/ux/picture_gui.cc +++ b/src/experimental/platform/ux/picture_gui.cc @@ -20,16 +20,14 @@ #include #include #include "experimental/platform/hal/renderer.h" -#include "experimental/platform/hal/window.h" #include "experimental/platform/ux/imgui_widgets.h" namespace mujoco::platform { // Returns false if the user requests that this picture-in-picture widget be // removed from the GUI. -static bool PipGuiImpl(const mjModel* model, mjData* data, - platform::Window* window, platform::Renderer* renderer, - PipState* pip) { +static bool PipGuiImpl(const mjModel* model, mjData* data, float aspect_ratio, + platform::Renderer* renderer, PipState* pip) { bool result = true; auto get_camera_name = [model](int i) -> const char* { @@ -41,7 +39,7 @@ static bool PipGuiImpl(const mjModel* model, mjData* data, }; const int width = ImGui::GetContentRegionAvail().x; - const int height = width / window->GetAspectRatio(); + const int height = aspect_ratio != 0.f ? width / aspect_ratio : width; std::vector output(width * height * 3); const int combo_width = (width - 30) / 2; @@ -97,7 +95,7 @@ static bool PipGuiImpl(const mjModel* model, mjData* data, return result; } -void PipGui(const mjModel* model, mjData* data, platform::Window* window, +void PipGui(const mjModel* model, mjData* data, float aspect_ratio, platform::Renderer* renderer, std::vector* pips) { if (pips->empty()) { pips->emplace_back(); @@ -106,7 +104,7 @@ void PipGui(const mjModel* model, mjData* data, platform::Window* window, std::vector to_delete; for (int i = 0; i < pips->size(); ++i) { PipState& pip = pips->at(i); - if (PipGuiImpl(model, data, window, renderer, &pip) == false) { + if (PipGuiImpl(model, data, aspect_ratio, renderer, &pip) == false) { to_delete.push_back(i); }; ImGui::Separator(); diff --git a/src/experimental/platform/ux/picture_gui.h b/src/experimental/platform/ux/picture_gui.h index ef80d1f4..ab4f9146 100644 --- a/src/experimental/platform/ux/picture_gui.h +++ b/src/experimental/platform/ux/picture_gui.h @@ -19,7 +19,6 @@ #include #include "experimental/platform/hal/renderer.h" -#include "experimental/platform/hal/window.h" namespace mujoco::platform { @@ -32,7 +31,7 @@ struct PipState { }; // Renders the GUI for a set of picture-in-picture widgets. -void PipGui(const mjModel* model, mjData* data, platform::Window* window, +void PipGui(const mjModel* model, mjData* data, float aspect_ratio, platform::Renderer* renderer, std::vector* pips); } // namespace mujoco::platform diff --git a/src/experimental/studio/app.cc b/src/experimental/studio/app.cc index 9937e8ab..e7ad6c89 100644 --- a/src/experimental/studio/app.cc +++ b/src/experimental/studio/app.cc @@ -902,7 +902,8 @@ void App::BuildGui() { if (tmp_.picture_in_picture) { if (ImGui::Begin("Picture-in-Picture", &tmp_.picture_in_picture)) { - PipGui(model(), data(), window_.get(), renderer_.get(), &tmp_.pips); + platform::PipGui(model(), data(), window_->GetAspectRatio(), + renderer_.get(), &tmp_.pips); } ImGui::End(); }