diff --git a/applications/gui2/src/widgets/imageview.cpp b/applications/gui2/src/widgets/imageview.cpp index b8531d562cba0bca4a3601297894d41ea584e951..46be78929d74db9ef23847c7e140fb5f721f420e 100644 --- a/applications/gui2/src/widgets/imageview.cpp +++ b/applications/gui2/src/widgets/imageview.cpp @@ -552,35 +552,46 @@ bool StereoImageView::mouseMotionEvent(const nanogui::Vector2i &p, const nanogui } return false; } - +#include <loguru.hpp> bool StereoImageView::scrollEvent(const nanogui::Vector2i& p, const nanogui::Vector2f& rel) { // synchronized zoom float v = rel.y(); + nanogui::Vector2f pos = position().cast<float>(); + nanogui::Vector2f posl = pos + left_->position().cast<float>(); + nanogui::Vector2f posr = pos + right_->position().cast<float>(); + nanogui::Vector2f pf = p.cast<float>(); + // zooming on right image? bool zoom_right = - ((p.x() >= left_->absolutePosition().x()) && (orientation_ == nanogui::Orientation::Horizontal)) || - ((p.y() >= left_->absolutePosition().y()) && (orientation_ == nanogui::Orientation::Vertical)); + ((p.x() >= posr.x()) && (orientation_ == nanogui::Orientation::Horizontal)) || + ((p.y() >= posr.y()) && (orientation_ == nanogui::Orientation::Vertical)); + + LOG(INFO) << "zoom_right: " << zoom_right; + LOG(INFO) << "pos: " << pos.x() << ", " << pos.y(); + LOG(INFO) << "posl: " << posl.x() << ", " << posl.y(); + LOG(INFO) << "posr: " << posr.x() << ", " << posr.y(); + LOG(INFO) << "p: " << p.x() << ", " << p.y(); if (orientation_ == nanogui::Orientation::Horizontal) { if (zoom_right) { - left_->zoom(v, (p - nanogui::Vector2i{left_->width(), 0} - left_->position()).cast<float>()); - right_->zoom(v, (p - right_->position()).cast<float>()); + left_->zoom(v, pf - nanogui::Vector2f{float(left_->width()), 0.0f} - posl); + right_->zoom(v, pf - posr); } else { - left_->zoom(v, (p - left_->position()).cast<float>()); - right_->zoom(v, (nanogui::Vector2i{right_->width(), 0} + p - right_->position()).cast<float>()); + left_->zoom(v, pf - posl); + right_->zoom(v, nanogui::Vector2f{float(right_->width()), 0.0f} + pf - posr); } } else { // same as above, flip x/y if (zoom_right) { - left_->zoom(v, (p - nanogui::Vector2i{0, left_->height()} - left_->position()).cast<float>()); - right_->zoom(v, (p - right_->position()).cast<float>()); + left_->zoom(v, pf - nanogui::Vector2f{0.0f, float(left_->height())} - posl); + right_->zoom(v, pf - posr); } else { - left_->zoom(v, (p - left_->position()).cast<float>()); - right_->zoom(v, (nanogui::Vector2i{0, right_->height()} + p - right_->position()).cast<float>()); + left_->zoom(v, pf - posl); + right_->zoom(v, nanogui::Vector2f{0.0f, float(right_->height())} + pf - posr); } } return true;