Supporting setting panel layout
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
#include "viewport_panel.hpp"
|
||||
|
||||
#include <imgui.h>
|
||||
|
||||
void ViewportPanel::onUpdate(const sophia::FrameInfo&) {
|
||||
const struct {
|
||||
const char* label;
|
||||
GizmoMode mode;
|
||||
} modes[] = {{"Move", GizmoMode::Move},
|
||||
{"Rotate", GizmoMode::Rotate},
|
||||
{"Scale", GizmoMode::Scale}};
|
||||
|
||||
for (const auto& entry : modes) {
|
||||
if (ImGui::RadioButton(entry.label, gizmoMode == entry.mode)) {
|
||||
gizmoMode = entry.mode;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
}
|
||||
ImGui::Checkbox("Grid", &showGrid);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
const ImVec2 origin = ImGui::GetCursorScreenPos();
|
||||
const ImVec2 size = ImGui::GetContentRegionAvail();
|
||||
const ImVec2 end(origin.x + size.x, origin.y + size.y);
|
||||
|
||||
ImDrawList* drawList = ImGui::GetWindowDrawList();
|
||||
drawList->AddRectFilled(origin, end, IM_COL32(24, 26, 32, 255));
|
||||
|
||||
if (showGrid) {
|
||||
constexpr float GRID_STEP = 40.0f;
|
||||
const ImU32 gridColor = IM_COL32(255, 255, 255, 18);
|
||||
for (float x = GRID_STEP; x < size.x; x += GRID_STEP) {
|
||||
drawList->AddLine(ImVec2(origin.x + x, origin.y),
|
||||
ImVec2(origin.x + x, end.y), gridColor);
|
||||
}
|
||||
for (float y = GRID_STEP; y < size.y; y += GRID_STEP) {
|
||||
drawList->AddLine(ImVec2(origin.x, origin.y + y),
|
||||
ImVec2(end.x, origin.y + y), gridColor);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::SetCursorScreenPos(ImVec2(origin.x + 8.0f, origin.y + 8.0f));
|
||||
ImGui::TextDisabled("%.0f x %.0f", size.x, size.y);
|
||||
}
|
||||
Reference in New Issue
Block a user