]> git.saurik.com Git - wxWidgets.git/commitdiff
simplify coordinate transformation code
authorPaul Cornett <paulcor@bullseye.com>
Sat, 19 Aug 2006 21:30:06 +0000 (21:30 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Sat, 19 Aug 2006 21:30:06 +0000 (21:30 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40682 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/dc.h
include/wx/gtk/dcclient.h
src/gtk/dc.cpp
src/gtk/dcclient.cpp
src/gtk/renderer.cpp

index daf2bdc1ecbbd0adb59c935492d6982bb34eb716..a2b62b262ebbd6da7d9d0ba04c1a86c96b35da59 100644 (file)
 #ifndef __GTKDCH__
 #define __GTKDCH__
 
-//-----------------------------------------------------------------------------
-// classes
-//-----------------------------------------------------------------------------
-
-class WXDLLIMPEXP_CORE wxDC;
-
 //-----------------------------------------------------------------------------
 // constants
 //-----------------------------------------------------------------------------
@@ -31,6 +25,43 @@ class WXDLLIMPEXP_CORE wxDC;
 #define MM_METRIC       7
 #endif
 
+//-----------------------------------------------------------------------------
+// coordinates transformations
+//-----------------------------------------------------------------------------
+
+inline wxCoord wxDCBase::DeviceToLogicalX(wxCoord x) const
+{
+    return wxRound((x - m_deviceOriginX) / m_scaleX) * m_signX + m_logicalOriginX;
+}
+inline wxCoord wxDCBase::DeviceToLogicalY(wxCoord y) const
+{
+    return wxRound((y - m_deviceOriginY) / m_scaleY) * m_signY + m_logicalOriginY;
+}
+inline wxCoord wxDCBase::DeviceToLogicalXRel(wxCoord x) const
+{
+    return wxRound(x / m_scaleX);
+}
+inline wxCoord wxDCBase::DeviceToLogicalYRel(wxCoord y) const
+{
+    return wxRound(y / m_scaleY);
+}
+inline wxCoord wxDCBase::LogicalToDeviceX(wxCoord x) const
+{
+    return wxRound((x - m_logicalOriginX) * m_scaleX) * m_signX + m_deviceOriginX;
+}
+inline wxCoord wxDCBase::LogicalToDeviceY(wxCoord y) const
+{
+    return wxRound((y - m_logicalOriginY) * m_scaleY) * m_signY + m_deviceOriginY;
+}
+inline wxCoord wxDCBase::LogicalToDeviceXRel(wxCoord x) const
+{
+    return wxRound(x * m_scaleX);
+}
+inline wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
+{
+    return wxRound(y * m_scaleY);
+}
+
 //-----------------------------------------------------------------------------
 // wxDC
 //-----------------------------------------------------------------------------
@@ -61,6 +92,7 @@ public:
 
     virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
 
+protected:
     // implementation
     // --------------
 
@@ -68,66 +100,37 @@ public:
 
     wxCoord XDEV2LOG(wxCoord x) const
     {
-        wxCoord new_x = x - m_deviceOriginX;
-        if (new_x > 0)
-            return (wxCoord)((double)(new_x) / m_scaleX + 0.5) * m_signX + m_logicalOriginX;
-        else
-            return (wxCoord)((double)(new_x) / m_scaleX - 0.5) * m_signX + m_logicalOriginX;
+        return DeviceToLogicalX(x);
     }
     wxCoord XDEV2LOGREL(wxCoord x) const
     {
-        if (x > 0)
-            return (wxCoord)((double)(x) / m_scaleX + 0.5);
-        else
-            return (wxCoord)((double)(x) / m_scaleX - 0.5);
+        return DeviceToLogicalXRel(x);
     }
     wxCoord YDEV2LOG(wxCoord y) const
     {
-        wxCoord new_y = y - m_deviceOriginY;
-        if (new_y > 0)
-            return (wxCoord)((double)(new_y) / m_scaleY + 0.5) * m_signY + m_logicalOriginY;
-        else
-            return (wxCoord)((double)(new_y) / m_scaleY - 0.5) * m_signY + m_logicalOriginY;
+        return DeviceToLogicalY(y);
     }
     wxCoord YDEV2LOGREL(wxCoord y) const
     {
-        if (y > 0)
-            return (wxCoord)((double)(y) / m_scaleY + 0.5);
-        else
-            return (wxCoord)((double)(y) / m_scaleY - 0.5);
+        return DeviceToLogicalYRel(y);
     }
     wxCoord XLOG2DEV(wxCoord x) const
     {
-        wxCoord new_x = x - m_logicalOriginX;
-        if (new_x > 0)
-            return (wxCoord)((double)(new_x) * m_scaleX + 0.5) * m_signX + m_deviceOriginX;
-        else
-            return (wxCoord)((double)(new_x) * m_scaleX - 0.5) * m_signX + m_deviceOriginX;
+        return LogicalToDeviceX(x);
     }
     wxCoord XLOG2DEVREL(wxCoord x) const
     {
-        if (x > 0)
-            return (wxCoord)((double)(x) * m_scaleX + 0.5);
-        else
-            return (wxCoord)((double)(x) * m_scaleX - 0.5);
+        return LogicalToDeviceXRel(x);
     }
     wxCoord YLOG2DEV(wxCoord y) const
     {
-        wxCoord new_y = y - m_logicalOriginY;
-        if (new_y > 0)
-            return (wxCoord)((double)(new_y) * m_scaleY + 0.5) * m_signY + m_deviceOriginY;
-        else
-            return (wxCoord)((double)(new_y) * m_scaleY - 0.5) * m_signY + m_deviceOriginY;
+        return LogicalToDeviceY(y);
     }
     wxCoord YLOG2DEVREL(wxCoord y) const
     {
-        if (y > 0)
-            return (wxCoord)((double)(y) * m_scaleY + 0.5);
-        else
-            return (wxCoord)((double)(y) * m_scaleY - 0.5);
+        return LogicalToDeviceYRel(y);
     }
 
-protected:
     // base class pure virtuals implemented here
     virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
     virtual void DoGetSizeMM(int* width, int* height) const;
index 2555d5b38836a0b34c2227518c6385b63d2df864..38a639311afce61cc244b355a234226e59503291 100644 (file)
 #define __GTKDCCLIENTH__
 
 #include "wx/dc.h"
-#include "wx/window.h"
+#include "wx/region.h"
 
-//-----------------------------------------------------------------------------
-// classes
-//-----------------------------------------------------------------------------
-
-class WXDLLIMPEXP_CORE wxWindowDC;
-class WXDLLIMPEXP_CORE wxPaintDC;
-class WXDLLIMPEXP_CORE wxClientDC;
+class WXDLLIMPEXP_CORE wxWindow;
 
 //-----------------------------------------------------------------------------
 // wxWindowDC
@@ -120,6 +114,7 @@ public:
     PangoLayout *m_layout;
     PangoFontDescription *m_fontdesc;
 
+protected:
     void SetUpDC();
     void Destroy();
     virtual void ComputeScaleAndOrigin();
index 80d08c5b01de62f90b486fd830bbef949f7deb6d..a89dcbabf664479150a6b58f28642955bb2380e5 100644 (file)
@@ -12,9 +12,6 @@
 
 #include "wx/dc.h"
 
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-
 //-----------------------------------------------------------------------------
 // wxDC
 //-----------------------------------------------------------------------------
@@ -149,48 +146,3 @@ void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
     m_signY = (yBottomUp  ? -1 :  1);
     ComputeScaleAndOrigin();
 }
-
-// ---------------------------------------------------------------------------
-// coordinates transformations
-// ---------------------------------------------------------------------------
-
-wxCoord wxDCBase::DeviceToLogicalX(wxCoord x) const
-{
-    return ((wxDC *)this)->XDEV2LOG(x);
-}
-
-wxCoord wxDCBase::DeviceToLogicalY(wxCoord y) const
-{
-    return ((wxDC *)this)->YDEV2LOG(y);
-}
-
-wxCoord wxDCBase::DeviceToLogicalXRel(wxCoord x) const
-{
-    return ((wxDC *)this)->XDEV2LOGREL(x);
-}
-
-wxCoord wxDCBase::DeviceToLogicalYRel(wxCoord y) const
-{
-    return ((wxDC *)this)->YDEV2LOGREL(y);
-}
-
-wxCoord wxDCBase::LogicalToDeviceX(wxCoord x) const
-{
-    return ((wxDC *)this)->XLOG2DEV(x);
-}
-
-wxCoord wxDCBase::LogicalToDeviceY(wxCoord y) const
-{
-    return ((wxDC *)this)->YLOG2DEV(y);
-}
-
-wxCoord wxDCBase::LogicalToDeviceXRel(wxCoord x) const
-{
-    return ((wxDC *)this)->XLOG2DEVREL(x);
-}
-
-wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
-{
-    return ((wxDC *)this)->YLOG2DEVREL(y);
-}
-
index 7c724b05ae07f3add04d2a7d985e2367a820b788..c5ce2eea4411da461df69047852a19f6768174ad 100644 (file)
@@ -17,6 +17,7 @@
 #include "wx/dcclient.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/window.h"
     #include "wx/log.h"
     #include "wx/dcmemory.h"
     #include "wx/math.h" // for floating-point functions
@@ -1166,8 +1167,8 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
     if (!m_window) return false;
 
     // transform the source DC coords to the device ones
-    xsrc = source->XLOG2DEV(xsrc);
-    ysrc = source->YLOG2DEV(ysrc);
+    xsrc = source->LogicalToDeviceX(xsrc);
+    ysrc = source->LogicalToDeviceY(ysrc);
 
     wxClientDC *srcDC = (wxClientDC*)source;
     wxMemoryDC *memDC = (wxMemoryDC*)source;
index a16251eaf7450be0260e3c6a65efd02358b483a2..a477a1ea395978d838f8206012aa463343ba0f2a 100644 (file)
@@ -28,7 +28,6 @@
 
 #ifndef WX_PRECOMP
     #include "wx/window.h"
-    #include "wx/dc.h"
     #include "wx/dcclient.h"
     #include "wx/settings.h"
 #endif
@@ -205,7 +204,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win,
         NULL,
         button,
         "button",
-        dc.XLOG2DEV(rect.x), rect.y, rect.width, rect.height
+        dc.LogicalToDeviceX(rect.x), rect.y, rect.width, rect.height
     );
 }