New UI for scaling (zoom) view from view pannel icon.

This commit is contained in:
brunoherbelin
2020-09-27 21:04:40 +02:00
parent d9a205d9ab
commit 1d7e0838fa
5 changed files with 101 additions and 3 deletions

View File

@@ -801,7 +801,7 @@ void ImGuiToolkit::ShowStats(bool *p_open, int* p_corner)
ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background
if (ImGui::Begin("v-mix statistics", NULL, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) if (ImGui::Begin("Metrics", NULL, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{ {
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO); ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO);

View File

@@ -1553,6 +1553,8 @@ Navigator::Navigator()
padding_width_ = 100; padding_width_ = 100;
// clean start // clean start
pannel_visible_ = false;
view_pannel_visible = false;
clearButtonSelection(); clearButtonSelection();
} }
@@ -1574,7 +1576,6 @@ void Navigator::clearButtonSelection()
selected_button[i] = false; selected_button[i] = false;
// clear new source pannel // clear new source pannel
sprintf(file_browser_path_, " ");
new_source_preview_.setSource(); new_source_preview_.setSource();
pattern_type = -1; pattern_type = -1;
} }
@@ -1606,6 +1607,7 @@ void Navigator::hidePannel()
{ {
clearButtonSelection(); clearButtonSelection();
pannel_visible_ = false; pannel_visible_ = false;
view_pannel_visible = false;
} }
void Navigator::Render() void Navigator::Render()
@@ -1699,22 +1701,29 @@ void Navigator::Render()
{ {
bool selected_view[View::INVALID] = { }; bool selected_view[View::INVALID] = { };
selected_view[ Settings::application.current_view ] = true; selected_view[ Settings::application.current_view ] = true;
int previous_view = Settings::application.current_view;
if (ImGui::Selectable( ICON_FA_BULLSEYE, &selected_view[1], 0, iconsize)) if (ImGui::Selectable( ICON_FA_BULLSEYE, &selected_view[1], 0, iconsize))
{ {
Mixer::manager().setView(View::MIXING); Mixer::manager().setView(View::MIXING);
view_pannel_visible = previous_view == Settings::application.current_view;
} }
if (ImGui::Selectable( ICON_FA_OBJECT_UNGROUP , &selected_view[2], 0, iconsize)) if (ImGui::Selectable( ICON_FA_OBJECT_UNGROUP , &selected_view[2], 0, iconsize))
{ {
Mixer::manager().setView(View::GEOMETRY); Mixer::manager().setView(View::GEOMETRY);
view_pannel_visible = previous_view == Settings::application.current_view;
} }
if (ImGui::Selectable( ICON_FA_IMAGES, &selected_view[3], 0, iconsize)) if (ImGui::Selectable( ICON_FA_IMAGES, &selected_view[3], 0, iconsize))
{ {
Mixer::manager().setView(View::LAYER); Mixer::manager().setView(View::LAYER);
view_pannel_visible = previous_view == Settings::application.current_view;
} }
} }
ImGui::End(); ImGui::End();
if ( view_pannel_visible && !pannel_visible_ )
RenderViewPannel( ImVec2(width_, sourcelist_height_), ImVec2(width_, height_ - sourcelist_height_) );
ImGui::PopStyleVar(); ImGui::PopStyleVar();
ImGui::PopFont(); ImGui::PopFont();
@@ -1739,12 +1748,49 @@ void Navigator::Render()
{ {
RenderSourcePannel(Mixer::manager().currentSource()); RenderSourcePannel(Mixer::manager().currentSource());
} }
view_pannel_visible = false;
} }
ImGui::PopStyleColor(2); ImGui::PopStyleColor(2);
ImGui::PopStyleVar(); ImGui::PopStyleVar();
} }
void Navigator::RenderViewPannel(ImVec2 draw_pos , ImVec2 draw_size)
{
ImGui::SetNextWindowPos( draw_pos, ImGuiCond_Always );
ImGui::SetNextWindowSize( draw_size, ImGuiCond_Always );
ImGui::SetNextWindowBgAlpha(0.95f); // Transparent background
if (ImGui::Begin("##ViewPannel", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
{
bool dumm = true;
ImGui::SetCursorPosX(10.f);
ImGui::SetCursorPosY(10.f);
if (ImGuiToolkit::IconToggle(4,7,5,7, &dumm)) {
// reset zoom
Mixer::manager().view((View::Mode)Settings::application.current_view)->recenter();
}
draw_size.x *= 0.5;
ImGui::SetCursorPosX( 10.f);
draw_size.y -= ImGui::GetCursorPosY() + 10.f;
int percent_zoom = Mixer::manager().view((View::Mode)Settings::application.current_view)->size();
ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.14, 0.14, 0.14, 0.95));
ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(0.1, 0.1, 0.1, 0.95));
ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.1, 0.1, 0.1, 0.95));
ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.9, 0.9, 0.9, 0.95));
if (ImGui::VSliderInt("##z", draw_size, &percent_zoom, 0, 100, "") )
{
Mixer::manager().view((View::Mode)Settings::application.current_view)->resize(percent_zoom);
}
ImGui::PopStyleColor(4);
if (ImGui::IsItemActive() || ImGui::IsItemHovered())
ImGui::SetTooltip("Zoom %d %%", percent_zoom);
ImGui::End();
}
}
// Source pannel : *s was checked before // Source pannel : *s was checked before
void Navigator::RenderSourcePannel(Source *s) void Navigator::RenderSourcePannel(Source *s)
{ {

View File

@@ -41,6 +41,7 @@ class Navigator
// behavior pannel // behavior pannel
bool pannel_visible_; bool pannel_visible_;
bool view_pannel_visible;
bool selected_button[NAV_COUNT]; bool selected_button[NAV_COUNT];
int pattern_type; int pattern_type;
void clearButtonSelection(); void clearButtonSelection();
@@ -51,7 +52,7 @@ class Navigator
void RenderMainPannel(); void RenderMainPannel();
void RenderTransitionPannel(); void RenderTransitionPannel();
void RenderNewPannel(); void RenderNewPannel();
char file_browser_path_[2048]; void RenderViewPannel(ImVec2 draw_pos, ImVec2 draw_size);
SourcePreview new_source_preview_; SourcePreview new_source_preview_;

View File

@@ -301,6 +301,21 @@ void MixingView::zoom( float factor )
scene.root()->scale_.y = z; scene.root()->scale_.y = z;
} }
void MixingView::resize ( int scale )
{
float z = 0.01f * (float) scale;
z *= MIXING_MAX_SCALE - MIXING_MIN_SCALE;
z += MIXING_MIN_SCALE;
scene.root()->scale_.x = z;
scene.root()->scale_.y = z;
}
int MixingView::size ()
{
float z = (scene.root()->scale_.x - MIXING_MIN_SCALE) / (MIXING_MAX_SCALE - MIXING_MIN_SCALE);
return (int) (z * 100.f);
}
void MixingView::centerSource(Source *s) void MixingView::centerSource(Source *s)
{ {
// setup view so that the center of the source ends at screen coordinates (650, 150) // setup view so that the center of the source ends at screen coordinates (650, 150)
@@ -728,6 +743,20 @@ void GeometryView::zoom( float factor )
scene.root()->scale_.y = z; scene.root()->scale_.y = z;
} }
void GeometryView::resize ( int scale )
{
float z = 0.01f * (float) scale;
z *= GEOMETRY_MAX_SCALE - GEOMETRY_MIN_SCALE;
z += GEOMETRY_MIN_SCALE;
scene.root()->scale_.x = z;
scene.root()->scale_.y = z;
}
int GeometryView::size ()
{
float z = (scene.root()->scale_.x - GEOMETRY_MIN_SCALE) / (GEOMETRY_MAX_SCALE - GEOMETRY_MIN_SCALE);
return (int) (z * 100.f);
}
void GeometryView::draw() void GeometryView::draw()
{ {
@@ -1202,6 +1231,20 @@ void LayerView::zoom (float factor)
scene.root()->scale_.y = z; scene.root()->scale_.y = z;
} }
void LayerView::resize ( int scale )
{
float z = 0.01f * (float) scale;
z *= LAYER_MAX_SCALE - LAYER_MIN_SCALE;
z += LAYER_MIN_SCALE;
scene.root()->scale_.x = z;
scene.root()->scale_.y = z;
}
int LayerView::size ()
{
float z = (scene.root()->scale_.x - LAYER_MIN_SCALE) / (LAYER_MAX_SCALE - LAYER_MIN_SCALE);
return (int) (z * 100.f);
}
float LayerView::setDepth(Source *s, float d) float LayerView::setDepth(Source *s, float d)
{ {

8
View.h
View File

@@ -24,6 +24,8 @@ public:
virtual void draw (); virtual void draw ();
virtual void zoom (float) {} virtual void zoom (float) {}
virtual void resize (int) {}
virtual int size () { return 0; }
virtual void recenter(); virtual void recenter();
virtual void centerSource(Source *) {} virtual void centerSource(Source *) {}
@@ -91,6 +93,8 @@ public:
void draw () override; void draw () override;
void update (float dt) override; void update (float dt) override;
void zoom (float factor) override; void zoom (float factor) override;
void resize (int) override;
int size () override;
void centerSource(Source *) override; void centerSource(Source *) override;
void selectAll() override; void selectAll() override;
@@ -140,6 +144,8 @@ public:
void draw () override; void draw () override;
void update (float dt) override; void update (float dt) override;
void zoom (float factor) override; void zoom (float factor) override;
void resize (int) override;
int size () override;
std::pair<Node *, glm::vec2> pick(glm::vec2 P) override; std::pair<Node *, glm::vec2> pick(glm::vec2 P) override;
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override; Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
@@ -166,6 +172,8 @@ public:
void update (float dt) override; void update (float dt) override;
void zoom (float factor) override; void zoom (float factor) override;
void resize (int) override;
int size () override;
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override; Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
Cursor drag (glm::vec2, glm::vec2) override; Cursor drag (glm::vec2, glm::vec2) override;