mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 10:19:59 +01:00
Fixed picking of handles
This commit is contained in:
@@ -145,11 +145,11 @@ void ImGuiVisitor::visit(Shader &n)
|
||||
{
|
||||
ImGui::PushID(n.id());
|
||||
|
||||
if (ImGuiToolkit::ButtonIcon(10, 2)) {
|
||||
n.blending = Shader::BLEND_OPACITY;
|
||||
n.color = glm::vec4(1.f, 1.f, 1.f, 1.f);
|
||||
}
|
||||
ImGui::SameLine(0, 10);
|
||||
// if (ImGuiToolkit::ButtonIcon(10, 2)) {
|
||||
// n.blending = Shader::BLEND_OPACITY;
|
||||
// n.color = glm::vec4(1.f, 1.f, 1.f, 1.f);
|
||||
// }
|
||||
// ImGui::SameLine(0, 10);
|
||||
// ImGui::ColorEdit3("Color", glm::value_ptr(n.color), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel ) ;
|
||||
// ImGui::SameLine(0, 5);
|
||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||
@@ -167,8 +167,8 @@ void ImGuiVisitor::visit(ImageShader &n)
|
||||
// get index of the mask used in this ImageShader
|
||||
int item_current = n.mask;
|
||||
|
||||
if (ImGuiToolkit::ButtonIcon(10, 3)) n.mask = 0;
|
||||
ImGui::SameLine(0, 10);
|
||||
// if (ImGuiToolkit::ButtonIcon(10, 3)) n.mask = 0;
|
||||
// ImGui::SameLine(0, 10);
|
||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||
// combo list of masks
|
||||
if ( ImGui::Combo("Mask", &item_current, ImageShader::mask_names, IM_ARRAYSIZE(ImageShader::mask_names) ) )
|
||||
@@ -187,7 +187,14 @@ void ImGuiVisitor::visit(ImageProcessingShader &n)
|
||||
{
|
||||
ImGui::PushID(n.id());
|
||||
|
||||
if (ImGuiToolkit::ButtonIcon(6, 2)) n.gamma = glm::vec4(1.f, 1.f, 1.f, 1.f);
|
||||
if (ImGuiToolkit::ButtonIcon(6, 2)) {
|
||||
ImageProcessingShader defaultvalues;
|
||||
n = defaultvalues;
|
||||
}
|
||||
ImGui::SameLine(0, 10);
|
||||
ImGui::Text("Filters");
|
||||
|
||||
if (ImGuiToolkit::ButtonIcon(6, 4)) n.gamma = glm::vec4(1.f, 1.f, 1.f, 1.f);
|
||||
ImGui::SameLine(0, 10);
|
||||
ImGui::ColorEdit3("GammaColor", glm::value_ptr(n.gamma), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel) ;
|
||||
ImGui::SameLine(0, 5);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <glm/gtc/matrix_access.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/string_cast.hpp>
|
||||
#include <glm/gtx/vector_angle.hpp>
|
||||
|
||||
|
||||
PickingVisitor::PickingVisitor(glm::vec2 coordinates) : Visitor(), point_(coordinates)
|
||||
@@ -77,27 +78,33 @@ void PickingVisitor::visit(Handles &n)
|
||||
// apply inverse transform to the point of interest
|
||||
glm::vec4 P = glm::inverse(modelview_) * glm::vec4( point_, 0.f, 1.f );
|
||||
|
||||
// inverse transform to check the scale
|
||||
glm::vec4 S = glm::inverse(modelview_) * glm::vec4( 0.05f, 0.05f, 0.f, 0.f );
|
||||
float scale = glm::length( glm::vec2(S) );
|
||||
|
||||
bool picked = false;
|
||||
// test by distance to the corners (more tolerant than bbox)
|
||||
if ( n.type() == Handles::RESIZE ) {
|
||||
// 4 corners
|
||||
picked = ( glm::length(glm::vec2(+1.f, +1.f)-glm::vec2(P)) < 0.05f ||
|
||||
glm::length(glm::vec2(+1.f, -1.f)- glm::vec2(P)) < 0.05f ||
|
||||
glm::length(glm::vec2(-1.f, +1.f)- glm::vec2(P)) < 0.05f ||
|
||||
glm::length(glm::vec2(-1.f, -1.f)- glm::vec2(P)) < 0.05f );
|
||||
picked = ( glm::length(glm::vec2(+1.f, +1.f)- glm::vec2(P)) < scale ||
|
||||
glm::length(glm::vec2(+1.f, -1.f)- glm::vec2(P)) < scale ||
|
||||
glm::length(glm::vec2(-1.f, +1.f)- glm::vec2(P)) < scale ||
|
||||
glm::length(glm::vec2(-1.f, -1.f)- glm::vec2(P)) < scale );
|
||||
}
|
||||
else if ( n.type() == Handles::RESIZE_H ){
|
||||
// left & right
|
||||
picked = ( glm::length(glm::vec2(+1.f, 0.f)- glm::vec2(P)) < 0.05f ||
|
||||
glm::length(glm::vec2(-1.f, 0.f)- glm::vec2(P)) < 0.05f );
|
||||
picked = ( glm::length(glm::vec2(+1.f, 0.f)- glm::vec2(P)) < scale ||
|
||||
glm::length(glm::vec2(-1.f, 0.f)- glm::vec2(P)) < scale );
|
||||
}
|
||||
else if ( n.type() == Handles::RESIZE_V ){
|
||||
// top & bottom
|
||||
picked = ( glm::length(glm::vec2(0.f, +1.f)- glm::vec2(P)) < 0.05f ||
|
||||
glm::length(glm::vec2(0.f, -1.f)- glm::vec2(P)) < 0.05f );
|
||||
picked = ( glm::length(glm::vec2(0.f, +1.f)- glm::vec2(P)) < scale ||
|
||||
glm::length(glm::vec2(0.f, -1.f)- glm::vec2(P)) < scale );
|
||||
}
|
||||
else if ( n.type() == Handles::ROTATE ){
|
||||
picked = glm::length(glm::vec2(+1.1f, +1.1f)- glm::vec2(P)) < 0.1f;
|
||||
// the icon for rotation is on the right top corner at (0.12, 0.12) in screen coordinates
|
||||
glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.12f, 0.12f, 0.f, 0.f );
|
||||
vec += glm::vec4(+1.f, +1.f, 0.f, 0.f);
|
||||
picked = glm::length( glm::vec2(vec) - glm::vec2(P) ) < scale;
|
||||
}
|
||||
|
||||
if ( picked )
|
||||
|
||||
@@ -397,6 +397,9 @@ void UserInterface::handleMouse()
|
||||
{
|
||||
// display source in left pannel
|
||||
navigator.showPannelSource( Mixer::manager().indexCurrentSource() );
|
||||
// discard current to select front most source
|
||||
// (because single clic maintains same source active)
|
||||
Mixer::manager().unsetCurrentSource();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1111,7 +1114,7 @@ void Navigator::RenderSourcePannel(Source *s)
|
||||
ImGui::PopFont();
|
||||
|
||||
ImGui::SetCursorPos(ImVec2(pannel_width_ - 35.f, 10.f));
|
||||
ImGuiToolkit::IconToggle(13,11,11,11,&pannel_stick_);
|
||||
ImGuiToolkit::IconToggle(13,11,11,11, &pannel_stick_);
|
||||
|
||||
static char buf5[128];
|
||||
sprintf ( buf5, "%s", s->name().c_str() );
|
||||
|
||||
Reference in New Issue
Block a user