Cosmetics. Fixed orientation of mouse cursor for resize

This commit is contained in:
brunoherbelin
2020-09-06 19:19:25 +02:00
parent 4e1611aa07
commit 90715173f7
3 changed files with 14 additions and 12 deletions

View File

@@ -252,7 +252,7 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection)
// 2. ..from the top right corner (1,1) // 2. ..from the top right corner (1,1)
vec = ( modelview * glm::vec4(1.f, 1.f, 0.f, 1.f) ) + pos; vec = ( modelview * glm::vec4(1.f, 1.f, 0.f, 1.f) ) + pos;
ctm = GlmToolkit::transform(vec, rot, glm::vec3(1.f)); ctm = GlmToolkit::transform(vec, rot, glm::vec3(1.f));
// 3. draw
handle_->draw( ctm, projection ); handle_->draw( ctm, projection );
} }
else if ( type_ == Handles::SCALE ){ else if ( type_ == Handles::SCALE ){

View File

@@ -222,7 +222,7 @@ void UserInterface::handleKeyboard()
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
alt_modifier_active = io.KeyAlt; alt_modifier_active = io.KeyAlt;
shift_modifier_active = io.KeyShift; shift_modifier_active = io.KeyShift;
auto ctrl = io.ConfigMacOSXBehaviors ? io.KeySuper : io.KeyCtrl; bool ctrl = io.ConfigMacOSXBehaviors ? io.KeySuper : io.KeyCtrl;
// Application "CTRL +"" Shortcuts // Application "CTRL +"" Shortcuts
if ( ctrl ) { if ( ctrl ) {

View File

@@ -746,7 +746,6 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
glm::vec4 source_to = glm::inverse(s->stored_status_->transform_) * glm::vec4( scene_to, 1.f ); glm::vec4 source_to = glm::inverse(s->stored_status_->transform_) * glm::vec4( scene_to, 1.f );
glm::vec3 source_scaling = glm::vec3(source_to) / glm::vec3(source_from); glm::vec3 source_scaling = glm::vec3(source_to) / glm::vec3(source_from);
// which manipulation to perform? // which manipulation to perform?
std::ostringstream info; std::ostringstream info;
if (pick.first) { if (pick.first) {
@@ -806,8 +805,10 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
center = corner_to_scene_transform * center; center = corner_to_scene_transform * center;
// apply to node // apply to node
sourceNode->translation_ = glm::vec3(center); sourceNode->translation_ = glm::vec3(center);
// show cursor depending on diagonal (corner picked) // show cursor depending on diagonal (corner picked)
T = glm::rotate(glm::identity<glm::mat4>(), s->stored_status_->rotation_.z, glm::vec3(0.f, 0.f, 1.f));
T = glm::scale(T, s->stored_status_->scale_);
corner = T * glm::vec4( corner, 0.f, 0.f );
ret.type = corner.x * corner.y > 0.f ? Cursor_ResizeNESW : Cursor_ResizeNWSE; ret.type = corner.x * corner.y > 0.f ? Cursor_ResizeNESW : Cursor_ResizeNWSE;
info << "Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
@@ -838,8 +839,9 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
center = corner_to_scene_transform * center; center = corner_to_scene_transform * center;
// apply to node // apply to node
sourceNode->translation_ = glm::vec3(center); sourceNode->translation_ = glm::vec3(center);
// show cursor depending on angle
ret.type = Cursor_ResizeEW; float c = tan(sourceNode->rotation_.z);
ret.type = ABS(c) > 1.f ? Cursor_ResizeNS : Cursor_ResizeEW;
info << "Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
} }
@@ -869,8 +871,9 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
center = corner_to_scene_transform * center; center = corner_to_scene_transform * center;
// apply to node // apply to node
sourceNode->translation_ = glm::vec3(center); sourceNode->translation_ = glm::vec3(center);
// show cursor depending on angle
ret.type = Cursor_ResizeNS; float c = tan(sourceNode->rotation_.z);
ret.type = ABS(c) > 1.f ? Cursor_ResizeEW : Cursor_ResizeNS;
info << "Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
} }
@@ -925,18 +928,17 @@ View::Cursor GeometryView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::p
info << std::endl << " Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << std::endl << " Size " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y ; info << " x " << sourceNode->scale_.y ;
} }
} }
// picking anywhere but on a handle: user wants to move the source // picking anywhere but on a handle: user wants to move the source
else { else {
sourceNode->translation_ = s->stored_status_->translation_ + scene_translation; sourceNode->translation_ = s->stored_status_->translation_ + scene_translation;
// discretized translation with SHIFT // discretized translation with ALT
if (UserInterface::manager().shiftModifier()) { if (UserInterface::manager().altModifier()) {
sourceNode->translation_.x = ROUND(sourceNode->translation_.x, 10.f); sourceNode->translation_.x = ROUND(sourceNode->translation_.x, 10.f);
sourceNode->translation_.y = ROUND(sourceNode->translation_.y, 10.f); sourceNode->translation_.y = ROUND(sourceNode->translation_.y, 10.f);
} }
// ALT: single axis movement // ALT: single axis movement
if (UserInterface::manager().altModifier()) { if (UserInterface::manager().shiftModifier()) {
glm::vec3 dif = s->stored_status_->translation_ - sourceNode->translation_; glm::vec3 dif = s->stored_status_->translation_ - sourceNode->translation_;
if (ABS(dif.x) > ABS(dif.y) ) if (ABS(dif.x) > ABS(dif.y) )
sourceNode->translation_.y = s->stored_status_->translation_.y; sourceNode->translation_.y = s->stored_status_->translation_.y;