Implementation of arrow keys to move objects in views layer and

transition
This commit is contained in:
brunoherbelin
2021-01-13 21:19:48 +01:00
parent a3e121d6a0
commit aaf700baba
3 changed files with 73 additions and 18 deletions

View File

@@ -532,10 +532,14 @@ void MixingView::arrow (glm::vec2 movement)
glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, 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; glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().shiftModifier()) Group *sourceNode = s->group(mode_);
gl_delta *= 10.f; if (UserInterface::manager().altModifier()) {
sourceNode->translation_ += glm::vec3(movement.x, -movement.y, 0.f) * 0.1f;
s->group(mode_)->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR; sourceNode->translation_.x = ROUND(sourceNode->translation_.x, 10.f);
sourceNode->translation_.y = ROUND(sourceNode->translation_.y, 10.f);
}
else
sourceNode->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR;
// request update // request update
s->touch(); s->touch();
@@ -1385,10 +1389,14 @@ void GeometryView::arrow (glm::vec2 movement)
glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, 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; glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().shiftModifier()) Group *sourceNode = s->group(mode_);
gl_delta *= 10.f; if (UserInterface::manager().altModifier()) {
sourceNode->translation_ += glm::vec3(movement.x, -movement.y, 0.f) * 0.1f;
s->group(mode_)->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR; sourceNode->translation_.x = ROUND(sourceNode->translation_.x, 10.f);
sourceNode->translation_.y = ROUND(sourceNode->translation_.y, 10.f);
}
else
sourceNode->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR;
// request update // request update
s->touch(); s->touch();
@@ -1527,6 +1535,26 @@ View::Cursor LayerView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair
return Cursor(Cursor_ResizeNESW, info.str() ); return Cursor(Cursor_ResizeNESW, info.str() );
} }
void LayerView::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(glm::vec2(movement.x-movement.y, 0.f), scene.root()->transform_);
glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().altModifier())
gl_delta *= 10.f;
Group *sourceNode = s->group(mode_);
glm::vec3 dest_translation = sourceNode->translation_ + gl_delta * ARROWS_MOVEMENT_FACTOR;
setDepth( s, MAX( -dest_translation.x, 0.f) );
// request update
s->touch();
}
}
// TRANSITION // TRANSITION
@@ -1821,17 +1849,34 @@ View::Cursor TransitionView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
float d = s->stored_status_->translation_.x + gl_Position_to.x - gl_Position_from.x; float d = s->stored_status_->translation_.x + gl_Position_to.x - gl_Position_from.x;
std::ostringstream info; std::ostringstream info;
if (d > 0.2) { if (d > 0.2) {
s->group(View::TRANSITION)->translation_.x = 0.4; s->group(mode_)->translation_.x = 0.4;
info << "Open session"; info << "Open session";
} }
else { else {
s->group(View::TRANSITION)->translation_.x = CLAMP(d, -1.f, 0.f); s->group(mode_)->translation_.x = CLAMP(d, -1.f, 0.f);
info << "Transition " << int( 100.f * (1.f + s->group(View::TRANSITION)->translation_.x)) << "%"; info << "Transition " << int( 100.f * (1.f + s->group(View::TRANSITION)->translation_.x)) << "%";
} }
return Cursor(Cursor_ResizeEW, info.str() ); return Cursor(Cursor_ResizeEW, info.str() );
} }
void TransitionView::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;
float d = s->group(mode_)->translation_.x + gl_delta.x * ARROWS_MOVEMENT_FACTOR;
s->group(mode_)->translation_.x = CLAMP(d, -1.f, 0.f);
// request update
s->touch();
}
}
View::Cursor TransitionView::drag (glm::vec2 from, glm::vec2 to) View::Cursor TransitionView::drag (glm::vec2 from, glm::vec2 to)
{ {
Cursor ret = View::drag(from, to); Cursor ret = View::drag(from, to);
@@ -2129,10 +2174,13 @@ View::Cursor AppearanceView::over (glm::vec2 pos)
mask_cursor_circle_->visible_ = edit_source_->maskShader()->brush.z < 1.0; mask_cursor_circle_->visible_ = edit_source_->maskShader()->brush.z < 1.0;
mask_cursor_square_->visible_ = edit_source_->maskShader()->brush.z > 0.0; mask_cursor_square_->visible_ = edit_source_->maskShader()->brush.z > 0.0;
edit_source_->maskShader()->option = mask_cursor_paint_; edit_source_->maskShader()->option = mask_cursor_paint_;
if (mask_cursor_paint_ > 1) if (mask_cursor_paint_ > 1) {
mask_cursor_circle_->shader()->color = glm::vec4( 0.3f, 0.6f, 0.6f, 0.9f ); mask_cursor_circle_->shader()->color = glm::vec4(COLOR_APPEARANCE_MASK_DISABLE, 0.9f );
else mask_cursor_square_->shader()->color = glm::vec4(COLOR_APPEARANCE_MASK_DISABLE, 0.9f );
} else {
mask_cursor_circle_->shader()->color = glm::vec4(COLOR_APPEARANCE_MASK, 0.9f ); mask_cursor_circle_->shader()->color = glm::vec4(COLOR_APPEARANCE_MASK, 0.9f );
mask_cursor_square_->shader()->color = glm::vec4(COLOR_APPEARANCE_MASK, 0.9f );
}
} }
else { else {
edit_source_->maskShader()->option = 0; edit_source_->maskShader()->option = 0;
@@ -2449,7 +2497,7 @@ void AppearanceView::draw()
// make sure the visual brush is up to date // make sure the visual brush is up to date
glm::vec2 s = glm::vec2(edit_source_->maskShader()->brush.x); glm::vec2 s = glm::vec2(edit_source_->maskShader()->brush.x);
mask_cursor_circle_->scale_ = glm::vec3(s * 1.16f, 1.f); mask_cursor_circle_->scale_ = glm::vec3(s * 1.16f, 1.f);
mask_cursor_square_->scale_ = glm::vec3(s * 1.72f, 1.f); mask_cursor_square_->scale_ = glm::vec3(s * 1.75f, 1.f);
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(ICON_FA_FEATHER_ALT)) if (ImGui::Button(ICON_FA_FEATHER_ALT))
@@ -3078,10 +3126,14 @@ void AppearanceView::arrow (glm::vec2 movement)
glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, 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; glm::vec3 gl_delta = gl_Position_to - gl_Position_from;
if (UserInterface::manager().shiftModifier()) Group *sourceNode = s->group(mode_);
gl_delta *= 10.f; if (UserInterface::manager().altModifier()) {
sourceNode->translation_ += glm::vec3(movement.x, -movement.y, 0.f) * 0.1f;
s->group(mode_)->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR; sourceNode->translation_.x = ROUND(sourceNode->translation_.x, 10.f);
sourceNode->translation_.y = ROUND(sourceNode->translation_.y, 10.f);
}
else
sourceNode->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR;
// request update // request update
s->touch(); s->touch();

2
View.h
View File

@@ -187,6 +187,7 @@ public:
int size () 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;
void arrow (glm::vec2) override;
float setDepth (Source *, float d = -1.f); float setDepth (Source *, float d = -1.f);
@@ -206,6 +207,7 @@ public:
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;
void arrow (glm::vec2) override;
Cursor drag (glm::vec2, glm::vec2) override; Cursor drag (glm::vec2, glm::vec2) override;
void attach(SessionSource *ts); void attach(SessionSource *ts);

View File

@@ -80,6 +80,7 @@
#define COLOR_TRANSITION_LINES 0.9f, 0.9f, 0.9f #define COLOR_TRANSITION_LINES 0.9f, 0.9f, 0.9f
#define COLOR_APPEARANCE_SOURCE 0.9f, 0.9f, 0.1f #define COLOR_APPEARANCE_SOURCE 0.9f, 0.9f, 0.1f
#define COLOR_APPEARANCE_MASK 0.1f, 0.9f, 0.9f #define COLOR_APPEARANCE_MASK 0.1f, 0.9f, 0.9f
#define COLOR_APPEARANCE_MASK_DISABLE 0.3f, 0.6f, 0.6f
#define COLOR_FRAME 0.8f, 0.f, 0.8f #define COLOR_FRAME 0.8f, 0.f, 0.8f
#define COLOR_LIMBO_CIRCLE 0.16f, 0.16f, 0.16f #define COLOR_LIMBO_CIRCLE 0.16f, 0.16f, 0.16f
#define COLOR_SLIDER_CIRCLE 0.11f, 0.11f, 0.11f #define COLOR_SLIDER_CIRCLE 0.11f, 0.11f, 0.11f