Merge commit

This commit is contained in:
brunoherbelin
2021-01-13 18:38:08 +01:00
parent b9104df26e
commit d3269e8aaa
4 changed files with 99 additions and 3 deletions

View File

@@ -388,6 +388,15 @@ void UserInterface::handleKeyboard()
else
Mixer::manager().setCurrentNext();
}
// arrow keys to act on current view
else if (ImGui::IsKeyPressed( GLFW_KEY_LEFT ))
Mixer::manager().view()->arrow( glm::vec2(-1.f, 0.f) );
else if (ImGui::IsKeyPressed( GLFW_KEY_RIGHT ))
Mixer::manager().view()->arrow( glm::vec2(+1.f, 0.f) );
else if (ImGui::IsKeyPressed( GLFW_KEY_UP ))
Mixer::manager().view()->arrow( glm::vec2(0.f, -1.f) );
else if (ImGui::IsKeyPressed( GLFW_KEY_DOWN ))
Mixer::manager().view()->arrow( glm::vec2(0.f, 1.f) );
}
}

View File

@@ -523,6 +523,25 @@ View::Cursor MixingView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pai
return Cursor(Cursor_ResizeAll, info.str() );
}
void MixingView::arrow (glm::vec2 movement)
{
Source *s = Mixer::manager().currentSource();
if (s) {
glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_);
glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_);
glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().shiftModifier())
gl_delta *= 10.f;
s->group(mode_)->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR;
// request update
s->touch();
}
}
void MixingView::setAlpha(Source *s)
{
if (!s)
@@ -1357,6 +1376,25 @@ void GeometryView::terminate()
}
void GeometryView::arrow (glm::vec2 movement)
{
Source *s = Mixer::manager().currentSource();
if (s) {
glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_);
glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_);
glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().shiftModifier())
gl_delta *= 10.f;
s->group(mode_)->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR;
// request update
s->touch();
}
}
LayerView::LayerView() : View(LAYER), aspect_ratio(1.f)
{
// read default settings
@@ -2086,7 +2124,8 @@ View::Cursor AppearanceView::over (glm::vec2 pos)
// show paint brush cursor
if (edit_source_->maskShader()->mode == MaskShader::PAINT) {
if (mask_cursor_paint_ > 0) {
if ( ABS(P.x) < S.x && ABS(P.y) < S.y ) {
S += glm::vec2(edit_source_->maskShader()->brush.x);
if ( ABS(P.x) < S.x && ABS(P.y) < S.y ) {
mask_cursor_circle_->visible_ = edit_source_->maskShader()->brush.z < 1.0;
mask_cursor_square_->visible_ = edit_source_->maskShader()->brush.z > 0.0;
edit_source_->maskShader()->option = mask_cursor_paint_;
@@ -2396,7 +2435,7 @@ void AppearanceView::draw()
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
ImGuiToolkit::Icon(16,1);
if (ImGui::VSliderInt("##BrushSize", ImVec2(30,260), &pixel_size, pixel_size_min, pixel_size_max, "") ){
edit_source_->maskShader()->brush.x = CLAMP(float(pixel_size) / edit_source_->frame()->height(), 0.05, 2.0);
edit_source_->maskShader()->brush.x = CLAMP(float(pixel_size) / edit_source_->frame()->height(), BRUSH_MIN_SIZE, BRUSH_MAX_SIZE);
}
if (ImGui::IsItemHovered()) {
ImGui::BeginTooltip();
@@ -2419,7 +2458,7 @@ void AppearanceView::draw()
{
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT);
ImGui::Text(ICON_FA_FEATHER_ALT);
ImGui::VSliderFloat("##BrushPressure", ImVec2(30,260), &edit_source_->maskShader()->brush.y, 1.0, 0.01, "", 0.3f);
ImGui::VSliderFloat("##BrushPressure", ImVec2(30,260), &edit_source_->maskShader()->brush.y, BRUSH_MAX_PRESS, BRUSH_MIN_PRESS, "", 0.3f);
if (ImGui::IsItemHovered()) {
ImGui::BeginTooltip();
ImGui::Text("Pressure %.1f%%", edit_source_->maskShader()->brush.y * 100.0);
@@ -3029,3 +3068,38 @@ void AppearanceView::terminate()
}
}
void AppearanceView::arrow (glm::vec2 movement)
{
Source *s = Mixer::manager().currentSource();
if (s) {
glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_);
glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_);
glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().shiftModifier())
gl_delta *= 10.f;
s->group(mode_)->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR;
// request update
s->touch();
}
else if (edit_source_) {
if (edit_source_->maskShader()->mode == MaskShader::PAINT) {
if (mask_cursor_paint_ > 0) {
glm::vec2 b = 0.05f * movement;
edit_source_->maskShader()->brush.x = CLAMP(edit_source_->maskShader()->brush.x+b.x, BRUSH_MIN_SIZE, BRUSH_MAX_SIZE);
edit_source_->maskShader()->brush.y = CLAMP(edit_source_->maskShader()->brush.y+b.y, BRUSH_MIN_PRESS, BRUSH_MAX_PRESS);
}
}
else if (edit_source_->maskShader()->mode == MaskShader::SHAPE) {
if (mask_cursor_shape_ > 0) {
float b = -0.05 * movement.y;
edit_source_->maskShader()->blur = CLAMP(edit_source_->maskShader()->blur+b, SHAPE_MIN_BLUR, SHAPE_MAX_BLUR);
edit_source_->touch();
}
}
}
}

6
View.h
View File

@@ -76,6 +76,9 @@ public:
return Cursor();
}
// left-right [-1 1] and up-down [1 -1] action from arrow keys
virtual void arrow (glm::vec2) {}
// accessible scene
Scene scene;
@@ -107,6 +110,7 @@ public:
std::pair<Node *, glm::vec2> pick(glm::vec2) override;
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2>) override;
void arrow (glm::vec2) override;
void setAlpha (Source *s);
inline float limboScale() { return limbo_scale_; }
@@ -157,6 +161,7 @@ public:
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;
void terminate() override;
void arrow (glm::vec2) override;
private:
Node *overlay_position_;
@@ -232,6 +237,7 @@ public:
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 over (glm::vec2) override;
void arrow (glm::vec2) override;
void initiate() override;
void terminate() override;

View File

@@ -42,9 +42,16 @@
#define APPEARANCE_DEFAULT_SCALE 2.f
#define APPEARANCE_MIN_SCALE 0.4f
#define APPEARANCE_MAX_SCALE 7.0f
#define BRUSH_MIN_SIZE 0.05f
#define BRUSH_MAX_SIZE 2.f
#define BRUSH_MIN_PRESS 0.005f
#define BRUSH_MAX_PRESS 1.f
#define SHAPE_MIN_BLUR 0.f
#define SHAPE_MAX_BLUR 1.f
#define TRANSITION_DEFAULT_SCALE 5.0f
#define TRANSITION_MIN_DURATION 0.2f
#define TRANSITION_MAX_DURATION 10.f
#define ARROWS_MOVEMENT_FACTOR 5.f
#define IMGUI_TITLE_MAINWINDOW ICON_FA_CIRCLE_NOTCH " vimix"
#define IMGUI_TITLE_MEDIAPLAYER ICON_FA_FILM " Player"