New left panel mode (auto hide or always visible)

This commit is contained in:
Bruno Herbelin
2023-06-11 16:54:33 +02:00
parent a6b1d09ff1
commit c846a0626f
4 changed files with 141 additions and 19 deletions

View File

@@ -137,6 +137,7 @@ void Settings::Save(uint64_t runtime)
applicationNode->SetAttribute("show_tooptips", application.show_tooptips); applicationNode->SetAttribute("show_tooptips", application.show_tooptips);
applicationNode->SetAttribute("accept_connections", application.accept_connections); applicationNode->SetAttribute("accept_connections", application.accept_connections);
applicationNode->SetAttribute("pannel_history_mode", application.pannel_current_session_mode); applicationNode->SetAttribute("pannel_history_mode", application.pannel_current_session_mode);
applicationNode->SetAttribute("pannel_always_visible", application.pannel_always_visible);
applicationNode->SetAttribute("stream_protocol", application.stream_protocol); applicationNode->SetAttribute("stream_protocol", application.stream_protocol);
applicationNode->SetAttribute("broadcast_port", application.broadcast_port); applicationNode->SetAttribute("broadcast_port", application.broadcast_port);
applicationNode->SetAttribute("loopback_camera", application.loopback_camera); applicationNode->SetAttribute("loopback_camera", application.loopback_camera);
@@ -413,6 +414,7 @@ void Settings::Load()
applicationNode->QueryBoolAttribute("action_history_follow_view", &application.action_history_follow_view); applicationNode->QueryBoolAttribute("action_history_follow_view", &application.action_history_follow_view);
applicationNode->QueryBoolAttribute("show_tooptips", &application.show_tooptips); applicationNode->QueryBoolAttribute("show_tooptips", &application.show_tooptips);
applicationNode->QueryBoolAttribute("accept_connections", &application.accept_connections); applicationNode->QueryBoolAttribute("accept_connections", &application.accept_connections);
applicationNode->QueryBoolAttribute("pannel_always_visible", &application.pannel_always_visible);
applicationNode->QueryIntAttribute("pannel_history_mode", &application.pannel_current_session_mode); applicationNode->QueryIntAttribute("pannel_history_mode", &application.pannel_current_session_mode);
applicationNode->QueryIntAttribute("stream_protocol", &application.stream_protocol); applicationNode->QueryIntAttribute("stream_protocol", &application.stream_protocol);
applicationNode->QueryIntAttribute("broadcast_port", &application.broadcast_port); applicationNode->QueryIntAttribute("broadcast_port", &application.broadcast_port);

View File

@@ -276,6 +276,7 @@ struct Application
bool show_tooptips; bool show_tooptips;
int pannel_current_session_mode; int pannel_current_session_mode;
bool pannel_always_visible;
// connection settings // connection settings
bool accept_connections; bool accept_connections;

View File

@@ -381,9 +381,9 @@ void UserInterface::handleKeyboard()
else if (ImGui::IsKeyPressed( GLFW_KEY_F12, false )) { else if (ImGui::IsKeyPressed( GLFW_KEY_F12, false )) {
Settings::application.render.disabled = !Settings::application.render.disabled; Settings::application.render.disabled = !Settings::application.render.disabled;
} }
// button home to toggle menu // button home to toggle panel
else if (ImGui::IsKeyPressed( GLFW_KEY_HOME, false )) else if (ImGui::IsKeyPressed( GLFW_KEY_HOME, false ))
navigator.togglePannelMenu(); navigator.togglePannelAutoHide();
// button home to toggle menu // button home to toggle menu
else if (ImGui::IsKeyPressed( GLFW_KEY_INSERT, false )) else if (ImGui::IsKeyPressed( GLFW_KEY_INSERT, false ))
navigator.togglePannelNew(); navigator.togglePannelNew();
@@ -2488,7 +2488,7 @@ void HelperToolbox::Render()
ImGui::SetColumnWidth(0, width_column0); ImGui::SetColumnWidth(0, width_column0);
ImGui::Text("HOME"); ImGui::NextColumn(); ImGui::Text("HOME"); ImGui::NextColumn();
ImGui::Text(ICON_FA_BARS " Main menu"); ImGui::NextColumn(); ImGui::Text(ICON_FA_BARS " Toggle left panel"); ImGui::NextColumn();
ImGui::Text("INS"); ImGui::NextColumn(); ImGui::Text("INS"); ImGui::NextColumn();
ImGui::Text(ICON_FA_PLUS " New source"); ImGui::NextColumn(); ImGui::Text(ICON_FA_PLUS " New source"); ImGui::NextColumn();
ImGui::Text("DEL"); ImGui::NextColumn(); ImGui::Text("DEL"); ImGui::NextColumn();
@@ -2523,7 +2523,7 @@ void HelperToolbox::Render()
ImGui::Text(SHORTCUT_SHADEREDITOR); ImGui::NextColumn(); ImGui::Text(SHORTCUT_SHADEREDITOR); ImGui::NextColumn();
ImGui::Text(ICON_FA_CODE " " TOOLTIP_SHADEREDITOR "window"); ImGui::NextColumn(); ImGui::Text(ICON_FA_CODE " " TOOLTIP_SHADEREDITOR "window"); ImGui::NextColumn();
ImGui::Text("ESC"); ImGui::NextColumn(); ImGui::Text("ESC"); ImGui::NextColumn();
ImGui::Text(ICON_FA_TOGGLE_OFF " Hide / " ICON_FA_TOGGLE_ON " Show windows"); ImGui::NextColumn(); ImGui::Text(" Hide / Show all windows"); ImGui::NextColumn();
ImGui::Separator(); ImGui::Separator();
ImGui::Text(SHORTCUT_NEW_FILE); ImGui::NextColumn(); ImGui::Text(SHORTCUT_NEW_FILE); ImGui::NextColumn();
ImGui::Text(MENU_NEW_FILE " session"); ImGui::NextColumn(); ImGui::Text(MENU_NEW_FILE " session"); ImGui::NextColumn();
@@ -2799,7 +2799,7 @@ 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_edit_pipeline_(false), mediaplayer_mode_(false), mediaplayer_slider_pressed_(false), mediaplayer_timeline_zoom_(1.f),
magnifying_glass(false) magnifying_glass(false)
{ {
info_.setExtendedStringMode(); info_.setExtendedStringMode();
@@ -3148,6 +3148,7 @@ void SourceController::Render()
ImGui::EndMenu(); ImGui::EndMenu();
} }
ImGui::Separator();
if (ImGui::BeginMenu(ICON_FA_SNOWFLAKE " Deactivation")) if (ImGui::BeginMenu(ICON_FA_SNOWFLAKE " Deactivation"))
{ {
bool option = !mediaplayer_active_->rewindOnDisabled(); bool option = !mediaplayer_active_->rewindOnDisabled();
@@ -3159,7 +3160,6 @@ void SourceController::Render()
ImGui::EndMenu(); ImGui::EndMenu();
} }
// always allow for hardware decoding to be disabled // always allow for hardware decoding to be disabled
ImGui::Separator();
if (ImGui::BeginMenu(ICON_FA_MICROCHIP " Hardware decoding")) if (ImGui::BeginMenu(ICON_FA_MICROCHIP " Hardware decoding"))
{ {
bool hwdec = !mediaplayer_active_->softwareDecodingForced(); bool hwdec = !mediaplayer_active_->softwareDecodingForced();
@@ -4539,6 +4539,78 @@ void SourceController::RenderMediaPlayer(MediaSource *ms)
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
ImGui::EndPopup(); ImGui::EndPopup();
} }
if (mediaplayer_edit_pipeline_) {
ImGui::OpenPopup("Edit gstreamer pipeline");
mediaplayer_edit_pipeline_ = false;
}
const ImVec2 mpp_dialog_size(buttons_width_ * 3.f, buttons_height_ * 6);
ImGui::SetNextWindowSize(mpp_dialog_size, ImGuiCond_Always);
const ImVec2 mpp_dialog_pos = top + rendersize * 0.5f - mpp_dialog_size * 0.5f;
ImGui::SetNextWindowPos(mpp_dialog_pos, ImGuiCond_Always);
if (ImGui::BeginPopupModal("Edit gstreamer pipeline", NULL, ImGuiWindowFlags_NoResize))
{
bool update_new_source = false;
const ImVec2 pos = ImGui::GetCursorPos();
const ImVec2 area = ImGui::GetContentRegionAvail();
static std::vector< std::pair< std::string, std::string> > _examples = { {"Primary color", "frei0r-filter-primaries" },
{"Histogram", "frei0r-filter-rgb-parade"},
{"Emboss", "frei0r-filter-emboss"},
{"B&W", "frei0r-filter-bw0r"},
{"Gamma", "frei0r-filter-gamma gamma=0.5"},
{"Broken tv", "frei0r-filter-nosync0r "}
};
static std::string _description = _examples[0].second;
static ImVec2 fieldsize(ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN, 100);
static int numlines = 0;
const ImGuiContext& g = *GImGui;
fieldsize.y = MAX(3, numlines) * g.FontSize + g.Style.ItemSpacing.y + g.Style.FramePadding.y;
ImGui::Spacing();
ImGui::Text("Enter pipeline element and apply:");
ImGui::Spacing();
// Editor
if ( ImGuiToolkit::InputCodeMultiline("Filter", &_description, fieldsize, &numlines) )
update_new_source = true;
// Local menu for list of examples
ImVec2 pos_bot = ImGui::GetCursorPos();
ImGui::SetCursorPos( pos_bot + ImVec2(fieldsize.x + IMGUI_SAME_LINE, -ImGui::GetFrameHeightWithSpacing()));
if (ImGui::BeginCombo("##Examples", "Examples", ImGuiComboFlags_NoPreview)) {
ImGui::TextDisabled("Gstreamer examples");
ImGui::Separator();
for (auto it = _examples.begin(); it != _examples.end(); ++it) {
if (ImGui::Selectable( it->first.c_str() ) ) {
_description = it->second;
update_new_source = true;
}
}
ImGui::EndCombo();
}
bool close = false;
ImGui::SetCursorPos(pos + ImVec2(0.f, area.y - buttons_height_));
if (ImGui::Button(ICON_FA_TIMES " Cancel", ImVec2(area.x * 0.3f, 0)))
close = true;
ImGui::SetCursorPos(pos + ImVec2(area.x * 0.7f, area.y - buttons_height_));
ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyleColorVec4(ImGuiCol_Tab));
if (ImGui::Button(ICON_FA_CHECK " Apply", ImVec2(area.x * 0.3f, 0))
|| ImGui::IsKeyPressed(GLFW_KEY_ENTER) || ImGui::IsKeyPressed(GLFW_KEY_KP_ENTER) ) {
close = true;
// apply to pipeline
mediaplayer_active_->setEffect(_description);
}
ImGui::PopStyleColor(1);
if (close)
ImGui::CloseCurrentPopup();
ImGui::EndPopup();
}
} }
void SourceController::DrawButtonBar(ImVec2 bottom, float width) void SourceController::DrawButtonBar(ImVec2 bottom, float width)
@@ -7119,6 +7191,7 @@ Navigator::Navigator()
// clean start // clean start
show_config_ = false; show_config_ = false;
pannel_visible_ = false; pannel_visible_ = false;
pannel_alpha_ = 0.85f;
view_pannel_visible = false; view_pannel_visible = false;
clearButtonSelection(); clearButtonSelection();
@@ -7172,7 +7245,7 @@ void Navigator::clearButtonSelection()
void Navigator::showPannelSource(int index) void Navigator::showPannelSource(int index)
{ {
// invalid index given // invalid index given
if ( index < 0) if ( index < 0 )
hidePannel(); hidePannel();
else { else {
selected_button[index] = true; selected_button[index] = true;
@@ -7200,11 +7273,38 @@ void Navigator::togglePannelNew()
new_media_mode_changed = true; new_media_mode_changed = true;
} }
void Navigator::togglePannelAutoHide()
{
// toggle variable
Settings::application.pannel_always_visible = !Settings::application.pannel_always_visible;
// initiate change
if (Settings::application.pannel_always_visible) {
int current = Mixer::manager().indexCurrentSource();
if ( current < 0 ) {
if (!selected_button[NAV_MENU] && !selected_button[NAV_TRANS] && !selected_button[NAV_NEW] )
showPannelSource(NAV_MENU);
}
else
showPannelSource( current );
}
else
hidePannel();
}
bool Navigator::pannelVisible()
{
return pannel_visible_;
}
void Navigator::hidePannel() void Navigator::hidePannel()
{ {
clearButtonSelection(); if ( Settings::application.pannel_always_visible )
pannel_visible_ = false; showPannelSource(NAV_MENU);
view_pannel_visible = false; else if ( pannel_visible_) {
clearButtonSelection();
pannel_visible_ = false;
}
view_pannel_visible = false;
show_config_ = false; show_config_ = false;
} }
@@ -7388,16 +7488,18 @@ void Navigator::Render()
ImVec2 pos = ImGui::GetCursorPos(); ImVec2 pos = ImGui::GetCursorPos();
ImGui::SetCursorPos(pos + ImVec2(0.f, style.WindowPadding.y)); ImGui::SetCursorPos(pos + ImVec2(0.f, style.WindowPadding.y));
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO); ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO);
// icon for Fullscreen
if ( ImGuiToolkit::IconButton( Rendering::manager().mainWindow().isFullscreen() ? ICON_FA_COMPRESS_ALT : ICON_FA_EXPAND_ALT ) ) if ( ImGuiToolkit::IconButton( Rendering::manager().mainWindow().isFullscreen() ? ICON_FA_COMPRESS_ALT : ICON_FA_EXPAND_ALT ) )
Rendering::manager().mainWindow().toggleFullscreen(); Rendering::manager().mainWindow().toggleFullscreen();
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip = {TOOLTIP_FULLSCREEN, SHORTCUT_FULLSCREEN}; tooltip = {TOOLTIP_FULLSCREEN, SHORTCUT_FULLSCREEN};
// icon for toggle always visible / auto hide pannel
ImGui::SetCursorPos(pos + ImVec2(width_ * 0.5f, style.WindowPadding.y)); ImGui::SetCursorPos(pos + ImVec2(width_ * 0.5f, style.WindowPadding.y));
if ( ImGuiToolkit::IconButton( WorkspaceWindow::clear() ? ICON_FA_TOGGLE_OFF : ICON_FA_TOGGLE_ON ) ) if ( ImGuiToolkit::IconButton( Settings::application.pannel_always_visible ? ICON_FA_TOGGLE_ON : ICON_FA_TOGGLE_OFF ) )
WorkspaceWindow::toggleClearRestoreWorkspace(); togglePannelAutoHide();
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
tooltip = { WorkspaceWindow::clear() ? TOOLTIP_SHOW : TOOLTIP_HIDE, SHORTCUT_HIDE}; tooltip = { Settings::application.pannel_always_visible ? TOOLTIP_PANEL_VISIBLE : TOOLTIP_PANEL_AUTO, SHORTCUT_PANEL_MODE };
ImGui::PopFont(); ImGui::PopFont();
@@ -7415,13 +7517,18 @@ void Navigator::Render()
else else
_timeout_tooltip = 0; _timeout_tooltip = 0;
// Rendering of special side pannel for view zoom
if ( view_pannel_visible && !pannel_visible_ ) if ( view_pannel_visible && !pannel_visible_ )
RenderViewPannel( ImVec2(width_, sourcelist_height), ImVec2(width_*0.8f, height_ - sourcelist_height) ); RenderViewPannel( ImVec2(width_, sourcelist_height), ImVec2(width_*0.8f, height_ - sourcelist_height) );
ImGui::PopStyleVar(); ImGui::PopStyleVar();
ImGui::PopFont(); ImGui::PopFont();
if ( pannel_visible_){ // Rendering of the side pannel
if ( pannel_visible_ || Settings::application.pannel_always_visible ){
pannel_alpha_ = Settings::application.pannel_always_visible ? 0.95f : 0.85f;
// pannel menu // pannel menu
if (selected_button[NAV_MENU]) if (selected_button[NAV_MENU])
{ {
@@ -7492,7 +7599,7 @@ void Navigator::RenderSourcePannel(Source *s)
// Next window is a side pannel // Next window is a side pannel
ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always ); ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always );
ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always ); ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always );
ImGui::SetNextWindowBgAlpha(0.85f); // Transparent background ImGui::SetNextWindowBgAlpha( pannel_alpha_ ); // Transparent background
if (ImGui::Begin("##navigatorSource", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) if (ImGui::Begin("##navigatorSource", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{ {
// TITLE // TITLE
@@ -7601,10 +7708,13 @@ void Navigator::setNewMedia(MediaCreateMode mode, std::string path)
void Navigator::RenderNewPannel() void Navigator::RenderNewPannel()
{ {
if (Settings::application.current_view == View::TRANSITION)
return;
// Next window is a side pannel // Next window is a side pannel
ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always ); ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always );
ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always ); ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always );
ImGui::SetNextWindowBgAlpha(0.85f); // Transparent background ImGui::SetNextWindowBgAlpha( pannel_alpha_ ); // Transparent background
if (ImGui::Begin("##navigatorNewSource", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) if (ImGui::Begin("##navigatorNewSource", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{ {
// TITLE // TITLE
@@ -9221,7 +9331,7 @@ void Navigator::RenderTransitionPannel()
// Next window is a side pannel // Next window is a side pannel
ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always ); ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always );
ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always ); ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always );
ImGui::SetNextWindowBgAlpha(0.85f); // Transparent background ImGui::SetNextWindowBgAlpha( pannel_alpha_ ); // Transparent background
if (ImGui::Begin("##navigatorTrans", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) if (ImGui::Begin("##navigatorTrans", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{ {
// TITLE // TITLE
@@ -9283,10 +9393,13 @@ void Navigator::RenderTransitionPannel()
void Navigator::RenderMainPannel() void Navigator::RenderMainPannel()
{ {
if (Settings::application.current_view == View::TRANSITION)
return;
// Next window is a side pannel // Next window is a side pannel
ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always ); ImGui::SetNextWindowPos( ImVec2(width_, 0), ImGuiCond_Always );
ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always ); ImGui::SetNextWindowSize( ImVec2(pannel_width_, height_), ImGuiCond_Always );
ImGui::SetNextWindowBgAlpha(0.85f); // Transparent background ImGui::SetNextWindowBgAlpha( pannel_alpha_ ); // Transparent background
if (ImGui::Begin("##navigatorMain", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) if (ImGui::Begin("##navigatorMain", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{ {
// Temporary fix for preventing horizontal scrolling (https://github.com/ocornut/imgui/issues/2915) // Temporary fix for preventing horizontal scrolling (https://github.com/ocornut/imgui/issues/2915)

View File

@@ -101,6 +101,9 @@
#define TOOLTIP_HIDE "Hide windows " #define TOOLTIP_HIDE "Hide windows "
#define TOOLTIP_SHOW "Show windows " #define TOOLTIP_SHOW "Show windows "
#define SHORTCUT_HIDE "ESC" #define SHORTCUT_HIDE "ESC"
#define TOOLTIP_PANEL_VISIBLE "Panel always visible "
#define TOOLTIP_PANEL_AUTO "Panel auto hide "
#define SHORTCUT_PANEL_MODE "HOME"
#define LABEL_AUTO_MEDIA_PLAYER ICON_FA_USER_CIRCLE " User selection" #define LABEL_AUTO_MEDIA_PLAYER ICON_FA_USER_CIRCLE " User selection"
#define LABEL_STORE_SELECTION " Create batch" #define LABEL_STORE_SELECTION " Create batch"
@@ -167,6 +170,7 @@ class Navigator
// behavior pannel // behavior pannel
bool show_config_; bool show_config_;
bool pannel_visible_; bool pannel_visible_;
float pannel_alpha_;
bool view_pannel_visible; bool view_pannel_visible;
bool selected_button[NAV_COUNT]; bool selected_button[NAV_COUNT];
int pattern_type; int pattern_type;
@@ -199,12 +203,13 @@ public:
Navigator(); Navigator();
void Render(); void Render();
bool pannelVisible() { return pannel_visible_; } bool pannelVisible();
void hidePannel(); void hidePannel();
void showPannelSource(int index); void showPannelSource(int index);
void togglePannelMenu(); void togglePannelMenu();
void togglePannelNew(); void togglePannelNew();
void showConfig(); void showConfig();
void togglePannelAutoHide();
typedef enum { typedef enum {
MEDIA_RECENT = 0, MEDIA_RECENT = 0,
@@ -313,6 +318,7 @@ class SourceController : public WorkspaceWindow
// Render a single media player // Render a single media player
MediaPlayer *mediaplayer_active_; MediaPlayer *mediaplayer_active_;
bool mediaplayer_edit_fading_; bool mediaplayer_edit_fading_;
bool mediaplayer_edit_pipeline_;
bool mediaplayer_mode_; bool mediaplayer_mode_;
bool mediaplayer_slider_pressed_; bool mediaplayer_slider_pressed_;
float mediaplayer_timeline_zoom_; float mediaplayer_timeline_zoom_;