From 8e47e507fd8b9f83bdc0bdab20a1a1a35edc030b Mon Sep 17 00:00:00 2001 From: David Capello Date: Fri, 14 Aug 2015 14:26:05 -0300 Subject: [PATCH] Fix Editor::screenToEditor() for sprite positions < (0,0) --- src/app/ui/editor/editor.cpp | 3 --- src/render/zoom.h | 15 +++++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp index b23831cf6..0498d5674 100644 --- a/src/app/ui/editor/editor.cpp +++ b/src/app/ui/editor/editor.cpp @@ -1419,9 +1419,6 @@ void Editor::setZoomAndCenterInMouse(Zoom zoom, if (subpixelPos.x >= 0.5-t && subpixelPos.x <= 0.5+t) subpixelPos.x = 0.5; if (subpixelPos.y >= 0.5-t && subpixelPos.y <= 0.5+t) subpixelPos.y = 0.5; } - - ASSERT(subpixelPos.x >= -1.0 && subpixelPos.x <= 1.0); - ASSERT(subpixelPos.y >= -1.0 && subpixelPos.y <= 1.0); } gfx::Point padding = calcExtraPadding(zoom); diff --git a/src/render/zoom.h b/src/render/zoom.h index b64681d22..e62724b33 100644 --- a/src/render/zoom.h +++ b/src/render/zoom.h @@ -22,11 +22,18 @@ namespace render { double scale() const { return static_cast(m_num) / static_cast(m_den); } - int apply(int x) const { return x * m_num / m_den; } - int remove(int x) const { return x * m_den / m_num; } + template + T apply(T x) const { + return x * m_num / m_den; + } - double apply(double x) const { return x * m_num / m_den; } - double remove(double x) const { return x * m_den / m_num; } + template + T remove(T x) const { + if (x < 0) + return (x * m_den / m_num) - 1; + else + return (x * m_den / m_num); + } gfx::Rect apply(const gfx::Rect& r) const { return gfx::Rect(