]> git.saurik.com Git - wxWidgets.git/commitdiff
Made the various logical 2 device transforms consistent with what's drawn on all...
authorRobert Roebling <robert@roebling.de>
Mon, 19 May 2008 12:42:11 +0000 (12:42 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 19 May 2008 12:42:11 +0000 (12:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53648 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/dcbase.cpp
src/common/dcgraph.cpp
src/gtk/dcclient.cpp
src/msw/dc.cpp

index 12eaa1d211ff82ec2a8245e03cb90b4cdbf96dc2..45cb64b5c635b5068326bf723093ddf30f644064 100644 (file)
@@ -368,12 +368,12 @@ wxDCImpl::~wxDCImpl()
 
 wxCoord wxDCImpl::DeviceToLogicalX(wxCoord x) const
 {
-    return wxRound((double)(x - m_deviceOriginX - m_deviceLocalOriginX) / m_scaleX) * m_signX + m_logicalOriginX;
+    return wxRound( (double)((x - m_deviceOriginX - m_deviceLocalOriginX) * m_signX) / m_scaleX ) + m_logicalOriginX ;
 }
 
 wxCoord wxDCImpl::DeviceToLogicalY(wxCoord y) const
 {
-    return wxRound((double)(y - m_deviceOriginY - m_deviceLocalOriginY) / m_scaleY) * m_signY + m_logicalOriginY;
+    return wxRound( (double)((y - m_deviceOriginY - m_deviceLocalOriginY) * m_signY) / m_scaleY ) + m_logicalOriginY ;
 }
 
 wxCoord wxDCImpl::DeviceToLogicalXRel(wxCoord x) const
@@ -388,12 +388,12 @@ wxCoord wxDCImpl::DeviceToLogicalYRel(wxCoord y) const
 
 wxCoord wxDCImpl::LogicalToDeviceX(wxCoord x) const
 {
-    return wxRound((double)(x - m_logicalOriginX) * m_scaleX) * m_signX + m_deviceOriginX * m_signY + m_deviceLocalOriginX;
+    return wxRound( (double)((x - m_logicalOriginX) * m_signX) * m_scaleX) + m_deviceOriginX + m_deviceLocalOriginX;
 }
 
 wxCoord wxDCImpl::LogicalToDeviceY(wxCoord y) const
 {
-    return wxRound((double)(y - m_logicalOriginY) * m_scaleY) * m_signY + m_deviceOriginY * m_signY + m_deviceLocalOriginY;
+    return wxRound( (double)((y - m_logicalOriginY) * m_signY) * m_scaleY) + m_deviceOriginY + m_deviceLocalOriginY;
 }
 
 wxCoord wxDCImpl::LogicalToDeviceXRel(wxCoord x) const
index 48b92bda0df591530ca15bf5c768ff12c8ad93b6..6d70a954c7f15f3f1802cc67dc10919de7749f41 100644 (file)
@@ -363,11 +363,13 @@ void wxGCDCImpl::ComputeScaleAndOrigin()
     if ( m_graphicContext )
     {
         m_matrixCurrent = m_graphicContext->CreateMatrix();
-        m_matrixCurrent.Translate( m_deviceOriginX, m_deviceOriginY );
-        m_matrixCurrent.Scale( m_scaleX, m_scaleY );
+        
         // the logical origin sets the origin to have new coordinates
-        m_matrixCurrent.Translate( -m_logicalOriginX, -m_logicalOriginY );
-
+        m_matrixCurrent.Translate( m_deviceOriginX - m_logicalOriginX * m_signX * m_scaleX, 
+                                   m_deviceOriginY-m_logicalOriginY * m_signY * m_scaleY);
+        
+        m_matrixCurrent.Scale( m_scaleX * m_signX, m_scaleY * m_signY );
+        
         m_graphicContext->SetTransform( m_matrixOriginal );
         m_graphicContext->ConcatTransform( m_matrixCurrent );
     }
index 10abb80eb39f398796cce2e1a3c6ed1a4c31ad64..31995574adb33cad5e864a9c6eb3dd022b610423 100644 (file)
@@ -502,7 +502,7 @@ bool wxWindowDCImpl::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const
 void wxWindowDCImpl::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 )
 {
     wxCHECK_RET( IsOk(), wxT("invalid window dc") );
-
+    
     if (m_pen.GetStyle() != wxPENSTYLE_TRANSPARENT)
     {
         if (m_gdkwindow)
@@ -2106,11 +2106,7 @@ void wxWindowDCImpl::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, w
 
     wxCoord xx, yy, ww, hh;
     m_currentClippingRegion.GetBox( xx, yy, ww, hh );
-#if wxUSE_NEW_DC
     wxGTKDCImpl::DoSetClippingRegion( xx, yy, ww, hh );
-#else
-    wxDC::DoSetClippingRegion( xx, yy, ww, hh );
-#endif
 
     GdkRegion* gdkRegion = m_currentClippingRegion.GetRegion();
     gdk_gc_set_clip_region(m_penGC,   gdkRegion);
@@ -2143,11 +2139,7 @@ void wxWindowDCImpl::DoSetClippingRegionAsRegion( const wxRegion &region  )
 
     wxCoord xx, yy, ww, hh;
     m_currentClippingRegion.GetBox( xx, yy, ww, hh );
-#if wxUSE_NEW_DC
     wxGTKDCImpl::DoSetClippingRegion( xx, yy, ww, hh );
-#else
-    wxDC::DoSetClippingRegion( xx, yy, ww, hh );
-#endif
 
     GdkRegion* gdkRegion = m_currentClippingRegion.GetRegion();
     gdk_gc_set_clip_region(m_penGC,   gdkRegion);
@@ -2160,11 +2152,7 @@ void wxWindowDCImpl::DestroyClippingRegion()
 {
     wxCHECK_RET( IsOk(), wxT("invalid window dc") );
 
-#if wxUSE_NEW_DC
     wxDCImpl::DestroyClippingRegion();
-#else
-    wxDC::DestroyClippingRegion();
-#endif
 
     m_currentClippingRegion.Clear();
 
@@ -2221,11 +2209,7 @@ void wxWindowDCImpl::ComputeScaleAndOrigin()
 {
     const wxRealPoint origScale(m_scaleX, m_scaleY);
 
-#if wxUSE_NEW_DC
     wxDCImpl::ComputeScaleAndOrigin();
-#else
-    wxDC::ComputeScaleAndOrigin();
-#endif
 
     // if scale has changed call SetPen to recalulate the line width
     if ( wxRealPoint(m_scaleX, m_scaleY) != origScale && m_pen.IsOk() )
index e4b14e7c818d5f312583ee7f0c4dc050e903521c..94d50acc0a9cf1aabbb2a27f20c8d513d74ce32a 100644 (file)
@@ -2017,9 +2017,15 @@ void wxMSWDCImpl::SetLogicalOrigin(wxCoord x, wxCoord y)
 
     wxDCImpl::SetLogicalOrigin( x, y );
 
-#ifndef __WXWINCE__
-    ::SetWindowOrgEx(GetHdc(), (int)m_logicalOriginX, (int)m_logicalOriginY, NULL);
-#endif
+    RealizeScaleAndOrigin();
+}
+
+// For use by wxWidgets only, unless custom units are required.
+void wxMSWDCImpl::SetLogicalScale(double x, double y)
+{
+    WXMICROWIN_CHECK_HDC
+
+    wxDCImpl::SetLogicalScale(x,y);
 }
 
 void wxMSWDCImpl::SetDeviceOrigin(wxCoord x, wxCoord y)
@@ -2389,14 +2395,6 @@ wxSize wxMSWDCImpl::GetPPI() const
     return wxSize(x, y);
 }
 
-// For use by wxWidgets only, unless custom units are required.
-void wxMSWDCImpl::SetLogicalScale(double x, double y)
-{
-    WXMICROWIN_CHECK_HDC
-
-    wxDCImpl::SetLogicalScale(x,y);
-}
-
 // ----------------------------------------------------------------------------
 // DC caching
 // ----------------------------------------------------------------------------