mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-13 03:09:57 +01:00
Merge commit
This commit is contained in:
@@ -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) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
78
View.cpp
78
View.cpp
@@ -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,6 +2124,7 @@ View::Cursor AppearanceView::over (glm::vec2 pos)
|
||||
// show paint brush cursor
|
||||
if (edit_source_->maskShader()->mode == MaskShader::PAINT) {
|
||||
if (mask_cursor_paint_ > 0) {
|
||||
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;
|
||||
@@ -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
6
View.h
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user