From fcad6766c3d0912747771c0cb58937382f316f3e Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Fri, 7 Jan 2022 20:08:32 +0100 Subject: [PATCH] Update UI update and TransitionView to match WorkspaceWindows clear Enter Workspace Clear mode when switching to Transition view (instead of specific hack). Do not render all windows when in Clear workspace mode. --- ImGuiVisitor.cpp | 2 +- Settings.cpp | 2 - Settings.h | 2 - UserInterfaceManager.cpp | 84 +++++++++++++++++++++++----------------- UserInterfaceManager.h | 3 +- 5 files changed, 51 insertions(+), 42 deletions(-) diff --git a/ImGuiVisitor.cpp b/ImGuiVisitor.cpp index e4e0881..14086d6 100644 --- a/ImGuiVisitor.cpp +++ b/ImGuiVisitor.cpp @@ -456,7 +456,7 @@ void ImGuiVisitor::visit (Source& s) ImGuiToolkit::Indication("in Workspace",11, 16); // Inform on link - ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y + 2.f * ImGui::GetFrameHeightWithSpacing()) ); + ImGui::SetCursorPos( ImVec2(preview_width + 20, pos.y + 2.1f * ImGui::GetFrameHeightWithSpacing()) ); if (s.mixingGroup() != nullptr) { if (ImGuiToolkit::IconButton(ICON_FA_LINK, "Linked")){ Mixer::selection().clear(); diff --git a/Settings.cpp b/Settings.cpp index 5c7fa81..26814ae 100644 --- a/Settings.cpp +++ b/Settings.cpp @@ -154,7 +154,6 @@ void Settings::Save(uint64_t runtime) // Transition XMLElement *TransitionNode = xmlDoc.NewElement( "Transition" ); - TransitionNode->SetAttribute("hide_windows", application.transition.hide_windows); TransitionNode->SetAttribute("cross_fade", application.transition.cross_fade); TransitionNode->SetAttribute("duration", application.transition.duration); TransitionNode->SetAttribute("profile", application.transition.profile); @@ -416,7 +415,6 @@ void Settings::Load() // Transition XMLElement * transitionnode = pRoot->FirstChildElement("Transition"); if (transitionnode != nullptr) { - transitionnode->QueryBoolAttribute("hide_windows", &application.transition.hide_windows); transitionnode->QueryBoolAttribute("cross_fade", &application.transition.cross_fade); transitionnode->QueryFloatAttribute("duration", &application.transition.duration); transitionnode->QueryIntAttribute("profile", &application.transition.profile); diff --git a/Settings.h b/Settings.h index 22bdeb2..00de78d 100644 --- a/Settings.h +++ b/Settings.h @@ -122,13 +122,11 @@ struct History struct TransitionConfig { bool cross_fade; - bool hide_windows; float duration; int profile; TransitionConfig() { cross_fade = true; - hide_windows = true; duration = 1.f; profile = 0; } diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index ce0d9fa..ea1c059 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -366,7 +366,9 @@ void UserInterface::handleKeyboard() navigator.togglePannelNew(); // button esc else if (ImGui::IsKeyPressed( GLFW_KEY_ESCAPE )) { + // hide pannel navigator.hidePannel(); + // toggle clear workspace WorkspaceWindow::toggleClearRestoreWorkspace(); } else if (ImGui::IsKeyPressed( GLFW_KEY_END )) { @@ -780,40 +782,41 @@ void UserInterface::Render() sourcecontrol.Update(); timercontrol.Update(); - // warning modal dialog + // warnings and notifications Log::Render(&Settings::application.widget.logs); - // clear view mode in Transition view - if ( !Settings::application.transition.hide_windows || Settings::application.current_view < View::TRANSITION) { + // Output controller + if (outputcontrol.Visible()) + outputcontrol.Render(); + // Source controller + if (sourcecontrol.Visible()) + sourcecontrol.Render(); + + // Timer controller + if (timercontrol.Visible()) + timercontrol.Render(); + + // Notes + RenderNotes(); + + // Navigator + if (show_view_navigator > 0) + target_view_navigator = RenderViewNavigator( &show_view_navigator ); + + // All other windows are simply not rendered if workspace is clear + if ( !WorkspaceWindow::clear()) { // windows - if (Settings::application.widget.toolbox) - toolbox.Render(); if (Settings::application.widget.shader_editor) RenderShaderEditor(); + if (Settings::application.widget.help) + helpwindow.Render(); + if (Settings::application.widget.toolbox) + toolbox.Render(); if (Settings::application.widget.logs) Log::ShowLogWindow(&Settings::application.widget.logs); - if (Settings::application.widget.help) - sessiontoolbox.Render(); - // Output controller - if (outputcontrol.Visible()) - outputcontrol.Render(); - - // Source controller - if (sourcecontrol.Visible()) - sourcecontrol.Render(); - - // Timer controller - if (timercontrol.Visible()) - timercontrol.Render(); - - // Notes - RenderNotes(); - - // dialogs - if (show_view_navigator > 0) - target_view_navigator = RenderViewNavigator( &show_view_navigator ); + // About if (show_vimix_about) RenderAbout(&show_vimix_about); if (show_imgui_about) @@ -1392,7 +1395,7 @@ void UserInterface::showPannel(int id) void UserInterface::RenderNotes() { Session *se = Mixer::manager().session(); - if (se!=nullptr) { + if (se!=nullptr && se->beginNotes() != se->endNotes()) { ImVec4 color = ImGui::GetStyle().Colors[ImGuiCol_ResizeGripHovered]; color.w = 0.35f; @@ -5182,6 +5185,8 @@ void Navigator::RenderMainPannelVimix() // open on double clic if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left) /*|| file_selected == it*/) { Mixer::manager().open( *it, Settings::application.smooth_transition ); + if (Settings::application.smooth_transition) + WorkspaceWindow::clearWorkspace(); done = true; } else @@ -5254,6 +5259,8 @@ void Navigator::RenderMainPannelVimix() ImGui::SetCursorPos( ImVec2( pannel_width_ IMGUI_RIGHT_ALIGN, pos_top.y)); if ( ImGuiToolkit::IconButton( ICON_FA_FILE " +" )) { Mixer::manager().close(Settings::application.smooth_transition ); + if (Settings::application.smooth_transition) + WorkspaceWindow::clearWorkspace(); hidePannel(); } if (ImGui::IsItemHovered()) @@ -5880,26 +5887,31 @@ void Navigator::RenderTransitionPannel() ImGui::Text("Transition"); ImGui::PopFont(); - // Session menu - ImGui::SetCursorPosY(width_); - ImGui::Text("Behavior"); - ImGuiToolkit::ButtonSwitch( ICON_FA_RANDOM " Cross fading", &Settings::application.transition.cross_fade); - ImGuiToolkit::ButtonSwitch( ICON_FA_CLOUD_SUN " Clear view", &Settings::application.transition.hide_windows); - // Transition options ImGuiToolkit::Spacing(); - ImGui::Text("Animation"); - if (ImGuiToolkit::ButtonIcon(4, 13)) Settings::application.transition.duration = 1.f; + ImGui::Text("Transition"); + if (ImGuiToolkit::IconButton(0, 8)) Settings::application.transition.cross_fade = true; + ImGui::SameLine(0, IMGUI_SAME_LINE); + ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); + int mode = Settings::application.transition.cross_fade ? 0 : 1; + if (ImGui::Combo("Fading", &mode, "Cross fading\0Fade to black\0") ) + Settings::application.transition.cross_fade = mode < 1; + if (ImGuiToolkit::IconButton(4, 13)) Settings::application.transition.duration = 1.f; ImGui::SameLine(0, IMGUI_SAME_LINE); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGui::SliderFloat("Duration", &Settings::application.transition.duration, TRANSITION_MIN_DURATION, TRANSITION_MAX_DURATION, "%.1f s"); - if (ImGuiToolkit::ButtonIcon(9, 1)) Settings::application.transition.profile = 0; + if (ImGuiToolkit::IconButton(9, 1)) Settings::application.transition.profile = 0; ImGui::SameLine(0, IMGUI_SAME_LINE); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGui::Combo("Curve", &Settings::application.transition.profile, "Linear\0Quadratic\0"); // specific transition actions - ImGui::Text(" "); + ImGuiToolkit::Spacing(); + ImGui::Text("Actions"); + if ( ImGui::Button( ICON_FA_TIMES " Cancel ", ImVec2(IMGUI_RIGHT_ALIGN, 0)) ){ + TransitionView *tv = static_cast(Mixer::manager().view(View::TRANSITION)); + if (tv) tv->cancel(); + } if ( ImGui::Button( ICON_FA_PLAY " Play ", ImVec2(IMGUI_RIGHT_ALIGN, 0)) ){ TransitionView *tv = static_cast(Mixer::manager().view(View::TRANSITION)); if (tv) tv->play(false); diff --git a/UserInterfaceManager.h b/UserInterfaceManager.h index fc2ec82..0a03068 100644 --- a/UserInterfaceManager.h +++ b/UserInterfaceManager.h @@ -213,6 +213,7 @@ public: WorkspaceWindow(const char* name); // global access to Workspace control + static bool clear() { return clear_workspace_enabled; } static void toggleClearRestoreWorkspace(); static void clearWorkspace(); static void restoreWorkspace(bool instantaneous = false); @@ -410,7 +411,7 @@ protected: SourceController sourcecontrol; OutputPreview outputcontrol; TimerMetronome timercontrol; - HelperToolbox sessiontoolbox; + HelperToolbox helpwindow; void showMenuFile(); void showMenuEdit();