mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 02:40:00 +01:00
Display preview of source centered in fixed-size preview area.
This commit is contained in:
@@ -393,18 +393,22 @@ void ImGuiVisitor::visit (Source& s)
|
|||||||
|
|
||||||
// preview
|
// preview
|
||||||
float preview_width = ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN;
|
float preview_width = ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN;
|
||||||
float width = preview_width;
|
float preview_height = 4.5f * ImGui::GetFrameHeightWithSpacing();
|
||||||
float height = s.frame()->projectionArea().y * width / ( s.frame()->projectionArea().x * s.frame()->aspectRatio());
|
|
||||||
if (height > 230) {
|
|
||||||
height = 230;
|
|
||||||
width = height * s.frame()->aspectRatio() * ( s.frame()->projectionArea().x / s.frame()->projectionArea().y);
|
|
||||||
}
|
|
||||||
ImGui::Image((void*)(uintptr_t) s.frame()->texture(), ImVec2(width, height));
|
|
||||||
|
|
||||||
ImVec2 pos = ImGui::GetCursorPos(); // remember where we were...
|
ImVec2 pos = ImGui::GetCursorPos(); // remember where we were...
|
||||||
|
|
||||||
|
float space = ImGui::GetStyle().ItemSpacing.y;
|
||||||
|
float width = preview_width;
|
||||||
|
float height = s.frame()->projectionArea().y * width / ( s.frame()->projectionArea().x * s.frame()->aspectRatio());
|
||||||
|
if (height > preview_height - space) {
|
||||||
|
height = preview_height - space;
|
||||||
|
width = height * s.frame()->aspectRatio() * ( s.frame()->projectionArea().x / s.frame()->projectionArea().y);
|
||||||
|
}
|
||||||
|
// centered image
|
||||||
|
ImGui::SetCursorPos( ImVec2(pos.x + 0.5f * (preview_width-width), pos.y + 0.5f * (preview_height-height-space)) );
|
||||||
|
ImGui::Image((void*)(uintptr_t) s.frame()->texture(), ImVec2(width, height));
|
||||||
|
|
||||||
// inform on visibility status
|
// inform on visibility status
|
||||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height ) );
|
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y ) );
|
||||||
if (s.active()) {
|
if (s.active()) {
|
||||||
if (s.blendingShader()->color.a > 0.f)
|
if (s.blendingShader()->color.a > 0.f)
|
||||||
ImGuiToolkit::HelpMarker("Visible", ICON_FA_EYE);
|
ImGuiToolkit::HelpMarker("Visible", ICON_FA_EYE);
|
||||||
@@ -415,7 +419,7 @@ void ImGuiVisitor::visit (Source& s)
|
|||||||
ImGuiToolkit::HelpMarker("Inactive", ICON_FA_SNOWFLAKE);
|
ImGuiToolkit::HelpMarker("Inactive", ICON_FA_SNOWFLAKE);
|
||||||
|
|
||||||
// Inform on workspace
|
// Inform on workspace
|
||||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height + ImGui::GetFrameHeight()) );
|
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y + ImGui::GetFrameHeightWithSpacing()) );
|
||||||
if (s.workspace() == Source::BACKGROUND)
|
if (s.workspace() == Source::BACKGROUND)
|
||||||
ImGuiToolkit::HelpIcon("Background",10, 16);
|
ImGuiToolkit::HelpIcon("Background",10, 16);
|
||||||
else if (s.workspace() == Source::FOREGROUND)
|
else if (s.workspace() == Source::FOREGROUND)
|
||||||
@@ -424,7 +428,7 @@ void ImGuiVisitor::visit (Source& s)
|
|||||||
ImGuiToolkit::HelpIcon("Stage",11, 16);
|
ImGuiToolkit::HelpIcon("Stage",11, 16);
|
||||||
|
|
||||||
// locking
|
// locking
|
||||||
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y -height + 2.f * ImGui::GetFrameHeightWithSpacing()) );
|
ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y + 2.f * ImGui::GetFrameHeightWithSpacing()) );
|
||||||
const char *tooltip[2] = {"Unlocked", "Locked"};
|
const char *tooltip[2] = {"Unlocked", "Locked"};
|
||||||
bool l = s.locked();
|
bool l = s.locked();
|
||||||
if (ImGuiToolkit::IconToggle(15,6,17,6, &l, tooltip ) )
|
if (ImGuiToolkit::IconToggle(15,6,17,6, &l, tooltip ) )
|
||||||
@@ -432,7 +436,7 @@ void ImGuiVisitor::visit (Source& s)
|
|||||||
|
|
||||||
// toggle enable/disable image processing
|
// toggle enable/disable image processing
|
||||||
bool on = s.imageProcessingEnabled();
|
bool on = s.imageProcessingEnabled();
|
||||||
ImGui::SetCursorPos( ImVec2(preview_width + 15, pos.y -ImGui::GetFrameHeight() ) );
|
ImGui::SetCursorPos( ImVec2(preview_width + 15, pos.y + 3.5f * ImGui::GetFrameHeightWithSpacing()) );
|
||||||
if ( ImGuiToolkit::ButtonToggle(ICON_FA_MAGIC, &on) ){
|
if ( ImGuiToolkit::ButtonToggle(ICON_FA_MAGIC, &on) ){
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << s.name() << ": " << ( on ? "Enable Filter" : "Disable Filter");
|
oss << s.name() << ": " << ( on ? "Enable Filter" : "Disable Filter");
|
||||||
@@ -440,7 +444,7 @@ void ImGuiVisitor::visit (Source& s)
|
|||||||
}
|
}
|
||||||
s.setImageProcessingEnabled(on);
|
s.setImageProcessingEnabled(on);
|
||||||
|
|
||||||
ImGui::SetCursorPos(pos); // ...come back
|
ImGui::SetCursorPosY(pos.y + preview_height); // ...come back
|
||||||
|
|
||||||
// image processing pannel
|
// image processing pannel
|
||||||
if (s.imageProcessingEnabled())
|
if (s.imageProcessingEnabled())
|
||||||
|
|||||||
Reference in New Issue
Block a user