mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-19 14:19:57 +01:00
Magnifying glass for Player and Output windows
Replace the 'inspector' menu in favor of a magnifying glass button at top right corner of imgui window for Player and Output preview. Disable the magnifying glass upon window unfocus.
This commit is contained in:
@@ -2169,7 +2169,8 @@ SourceController::SourceController() : WorkspaceWindow("SourceController"),
|
|||||||
play_toggle_request_(false), replay_request_(false), pending_(false),
|
play_toggle_request_(false), replay_request_(false), pending_(false),
|
||||||
active_label_(LABEL_AUTO_MEDIA_PLAYER), active_selection_(-1),
|
active_label_(LABEL_AUTO_MEDIA_PLAYER), active_selection_(-1),
|
||||||
selection_context_menu_(false), selection_mediaplayer_(nullptr), selection_target_slower_(0), selection_target_faster_(0),
|
selection_context_menu_(false), selection_mediaplayer_(nullptr), selection_target_slower_(0), selection_target_faster_(0),
|
||||||
mediaplayer_active_(nullptr), mediaplayer_edit_fading_(false), mediaplayer_mode_(false), mediaplayer_slider_pressed_(false), mediaplayer_timeline_zoom_(1.f)
|
mediaplayer_active_(nullptr), mediaplayer_edit_fading_(false), mediaplayer_mode_(false), mediaplayer_slider_pressed_(false), mediaplayer_timeline_zoom_(1.f),
|
||||||
|
magnifying_glass(false)
|
||||||
{
|
{
|
||||||
info_.setExtendedStringMode();
|
info_.setExtendedStringMode();
|
||||||
|
|
||||||
@@ -2189,6 +2190,8 @@ void SourceController::resetActiveSelection()
|
|||||||
|
|
||||||
void SourceController::setVisible(bool on)
|
void SourceController::setVisible(bool on)
|
||||||
{
|
{
|
||||||
|
magnifying_glass = false;
|
||||||
|
|
||||||
// restore workspace to show the window
|
// restore workspace to show the window
|
||||||
if (WorkspaceWindow::clear_workspace_enabled) {
|
if (WorkspaceWindow::clear_workspace_enabled) {
|
||||||
WorkspaceWindow::restoreWorkspace(on);
|
WorkspaceWindow::restoreWorkspace(on);
|
||||||
@@ -2324,6 +2327,7 @@ void SourceController::Render()
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// menu (no title bar)
|
// menu (no title bar)
|
||||||
if (ImGui::BeginMenuBar())
|
if (ImGui::BeginMenuBar())
|
||||||
{
|
{
|
||||||
@@ -2427,10 +2431,6 @@ void SourceController::Render()
|
|||||||
//
|
//
|
||||||
if ( ImGui::BeginMenu(ICON_FA_PHOTO_VIDEO " Frame", selection_.size() == 1 ) )
|
if ( ImGui::BeginMenu(ICON_FA_PHOTO_VIDEO " Frame", selection_.size() == 1 ) )
|
||||||
{
|
{
|
||||||
bool inspect = Settings::application.source.inspector_zoom > 0.f;
|
|
||||||
if (ImGui::MenuItem( ICON_FA_SEARCH " Inspector", NULL, &inspect ))
|
|
||||||
Settings::application.source.inspector_zoom = inspect ? 8.f : 0.f;
|
|
||||||
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_CAPTURE, 0.8f));
|
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(IMGUI_COLOR_CAPTURE, 0.8f));
|
||||||
if (ImGui::MenuItem( MENU_CAPTUREFRAME, "F10" ))
|
if (ImGui::MenuItem( MENU_CAPTUREFRAME, "F10" ))
|
||||||
capture_request_ = true;
|
capture_request_ = true;
|
||||||
@@ -2544,9 +2544,25 @@ void SourceController::Render()
|
|||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// button to activate the magnifying glass at top right corner
|
||||||
|
ImVec2 p = g.CurrentWindow->Pos;
|
||||||
|
p.x += g.CurrentWindow->Size.x - 2.f * g.FontSize;
|
||||||
|
ImGui::SetCursorScreenPos(p);
|
||||||
|
if (selection_.size() == 1) {
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f));
|
||||||
|
ImGuiToolkit::ButtonToggle( ICON_FA_SEARCH, &magnifying_glass);
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ImGui::TextDisabled(" " ICON_FA_SEARCH);
|
||||||
|
|
||||||
ImGui::EndMenuBar();
|
ImGui::EndMenuBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// disable magnifying glass if window is deactivated
|
||||||
|
if ( g.NavWindow != g.CurrentWindow )
|
||||||
|
magnifying_glass = false;
|
||||||
|
|
||||||
// reset mediaplayer ptr
|
// reset mediaplayer ptr
|
||||||
mediaplayer_active_ = nullptr;
|
mediaplayer_active_ = nullptr;
|
||||||
|
|
||||||
@@ -3322,7 +3338,7 @@ void SourceController::RenderSingleSource(Source *s)
|
|||||||
ImVec2 rendersize = ImGui::GetContentRegionAvail() - ImVec2(0, buttons_height_ + scrollbar_ + v_space_);
|
ImVec2 rendersize = ImGui::GetContentRegionAvail() - ImVec2(0, buttons_height_ + scrollbar_ + v_space_);
|
||||||
ImVec2 bottom = ImVec2(top.x, top.y + rendersize.y + v_space_);
|
ImVec2 bottom = ImVec2(top.x, top.y + rendersize.y + v_space_);
|
||||||
|
|
||||||
ImRect imgarea = DrawSourceWithSlider(s, top, rendersize, !show_overlay_info);
|
ImRect imgarea = DrawSourceWithSlider(s, top, rendersize, magnifying_glass & !show_overlay_info);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Info overlays
|
/// Info overlays
|
||||||
@@ -3388,7 +3404,7 @@ void SourceController::RenderMediaPlayer(MediaSource *ms)
|
|||||||
const ImVec2 rendersize = ImGui::GetContentRegionAvail() - ImVec2(0, mediaplayer_height_);
|
const ImVec2 rendersize = ImGui::GetContentRegionAvail() - ImVec2(0, mediaplayer_height_);
|
||||||
ImVec2 bottom = ImVec2(top.x, top.y + rendersize.y + v_space_);
|
ImVec2 bottom = ImVec2(top.x, top.y + rendersize.y + v_space_);
|
||||||
|
|
||||||
ImRect imgarea = DrawSourceWithSlider(ms, top, rendersize, !show_overlay_info);
|
ImRect imgarea = DrawSourceWithSlider(ms, top, rendersize, magnifying_glass & !show_overlay_info);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Info overlays
|
/// Info overlays
|
||||||
@@ -3837,7 +3853,8 @@ void SourceController::DrawButtonBar(ImVec2 bottom, float width)
|
|||||||
///
|
///
|
||||||
|
|
||||||
OutputPreview::OutputPreview() : WorkspaceWindow("OutputPreview"),
|
OutputPreview::OutputPreview() : WorkspaceWindow("OutputPreview"),
|
||||||
video_recorder_(nullptr), video_broadcaster_(nullptr), loopback_broadcaster_(nullptr)
|
video_recorder_(nullptr), video_broadcaster_(nullptr), loopback_broadcaster_(nullptr),
|
||||||
|
magnifying_glass(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
recordFolderDialog = new DialogToolkit::OpenFolderDialog("Recording Location");
|
recordFolderDialog = new DialogToolkit::OpenFolderDialog("Recording Location");
|
||||||
@@ -3845,6 +3862,8 @@ OutputPreview::OutputPreview() : WorkspaceWindow("OutputPreview"),
|
|||||||
|
|
||||||
void OutputPreview::setVisible(bool on)
|
void OutputPreview::setVisible(bool on)
|
||||||
{
|
{
|
||||||
|
magnifying_glass = false;
|
||||||
|
|
||||||
// restore workspace to show the window
|
// restore workspace to show the window
|
||||||
if (WorkspaceWindow::clear_workspace_enabled) {
|
if (WorkspaceWindow::clear_workspace_enabled) {
|
||||||
WorkspaceWindow::restoreWorkspace(on);
|
WorkspaceWindow::restoreWorkspace(on);
|
||||||
@@ -3974,6 +3993,7 @@ bool OutputPreview::ToggleLoopbackCamera()
|
|||||||
|
|
||||||
void OutputPreview::Render()
|
void OutputPreview::Render()
|
||||||
{
|
{
|
||||||
|
const ImGuiContext& g = *GImGui;
|
||||||
bool openInitializeSystemLoopback = false;
|
bool openInitializeSystemLoopback = false;
|
||||||
|
|
||||||
FrameBuffer *output = Mixer::manager().session()->frame();
|
FrameBuffer *output = Mixer::manager().session()->frame();
|
||||||
@@ -4003,6 +4023,7 @@ void OutputPreview::Render()
|
|||||||
{
|
{
|
||||||
if (ImGuiToolkit::IconButton(4,16))
|
if (ImGuiToolkit::IconButton(4,16))
|
||||||
Settings::application.widget.preview = false;
|
Settings::application.widget.preview = false;
|
||||||
|
|
||||||
if (ImGui::BeginMenu(IMGUI_TITLE_PREVIEW))
|
if (ImGui::BeginMenu(IMGUI_TITLE_PREVIEW))
|
||||||
{
|
{
|
||||||
// Output window menu
|
// Output window menu
|
||||||
@@ -4207,6 +4228,15 @@ void OutputPreview::Render()
|
|||||||
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// button to activate the magnifying glass at top right corner
|
||||||
|
ImVec2 p = g.CurrentWindow->Pos;
|
||||||
|
p.x += g.CurrentWindow->Size.x - 2.f * g.FontSize;
|
||||||
|
ImGui::SetCursorScreenPos(p);
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f));
|
||||||
|
ImGuiToolkit::ButtonToggle( ICON_FA_SEARCH, &magnifying_glass);
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
|
||||||
ImGui::EndMenuBar();
|
ImGui::EndMenuBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4221,9 +4251,19 @@ void OutputPreview::Render()
|
|||||||
ImVec2 draw_pos = ImGui::GetCursorScreenPos();
|
ImVec2 draw_pos = ImGui::GetCursorScreenPos();
|
||||||
// preview image
|
// preview image
|
||||||
ImGui::Image((void*)(intptr_t)output->texture(), imagesize);
|
ImGui::Image((void*)(intptr_t)output->texture(), imagesize);
|
||||||
// raise window on double clic
|
// mouse over the image
|
||||||
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left) )
|
if ( ImGui::IsItemHovered() ) {
|
||||||
Rendering::manager().outputWindow().show();
|
// raise window on double clic
|
||||||
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left) )
|
||||||
|
Rendering::manager().outputWindow().show();
|
||||||
|
// show magnifying glass if active
|
||||||
|
if (magnifying_glass)
|
||||||
|
DrawInspector(output->texture(), imagesize, imagesize, draw_pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable magnifying glass if window is deactivated
|
||||||
|
if ( g.NavWindow != g.CurrentWindow )
|
||||||
|
magnifying_glass = false;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Icons overlays
|
/// Icons overlays
|
||||||
@@ -6413,7 +6453,7 @@ void Navigator::RenderViewPannel(ImVec2 draw_pos , ImVec2 draw_size)
|
|||||||
{
|
{
|
||||||
ImGui::SetCursorPosX(10.f);
|
ImGui::SetCursorPosX(10.f);
|
||||||
ImGui::SetCursorPosY(10.f);
|
ImGui::SetCursorPosY(10.f);
|
||||||
if (ImGuiToolkit::IconButton(5,7)) {
|
if (ImGuiToolkit::IconButton(8,7)) {
|
||||||
// reset zoom
|
// reset zoom
|
||||||
Mixer::manager().view((View::Mode)Settings::application.current_view)->recenter();
|
Mixer::manager().view((View::Mode)Settings::application.current_view)->recenter();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -305,6 +305,9 @@ class SourceController : public WorkspaceWindow
|
|||||||
float mediaplayer_timeline_zoom_;
|
float mediaplayer_timeline_zoom_;
|
||||||
void RenderMediaPlayer(MediaSource *ms);
|
void RenderMediaPlayer(MediaSource *ms);
|
||||||
|
|
||||||
|
// magnifying glass
|
||||||
|
bool magnifying_glass;
|
||||||
|
|
||||||
// dialog to select frame capture location
|
// dialog to select frame capture location
|
||||||
DialogToolkit::OpenFolderDialog *captureFolderDialog;
|
DialogToolkit::OpenFolderDialog *captureFolderDialog;
|
||||||
Screenshot capture;
|
Screenshot capture;
|
||||||
@@ -339,6 +342,9 @@ class OutputPreview : public WorkspaceWindow
|
|||||||
// dialog to select record location
|
// dialog to select record location
|
||||||
DialogToolkit::OpenFolderDialog *recordFolderDialog;
|
DialogToolkit::OpenFolderDialog *recordFolderDialog;
|
||||||
|
|
||||||
|
// magnifying glass
|
||||||
|
bool magnifying_glass;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OutputPreview();
|
OutputPreview();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user