From 8e47e507fd8b9f83bdc0bdab20a1a1a35edc030b Mon Sep 17 00:00:00 2001
From: David Capello <davidcapello@gmail.com>
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<double>(m_num) / static_cast<double>(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<typename T>
+    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<typename T>
+    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(