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
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
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 );
}
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)
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);
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);
{
wxCHECK_RET( IsOk(), wxT("invalid window dc") );
-#if wxUSE_NEW_DC
wxDCImpl::DestroyClippingRegion();
-#else
- wxDC::DestroyClippingRegion();
-#endif
m_currentClippingRegion.Clear();
{
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() )
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)
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
// ----------------------------------------------------------------------------