simplify coordinate transformation code
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40682 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -10,12 +10,6 @@
|
|||||||
#ifndef __GTKDCH__
|
#ifndef __GTKDCH__
|
||||||
#define __GTKDCH__
|
#define __GTKDCH__
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// classes
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class WXDLLIMPEXP_CORE wxDC;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// constants
|
// constants
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -31,6 +25,43 @@ class WXDLLIMPEXP_CORE wxDC;
|
|||||||
#define MM_METRIC 7
|
#define MM_METRIC 7
|
||||||
#endif
|
#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
|
// wxDC
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -61,6 +92,7 @@ public:
|
|||||||
|
|
||||||
virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
|
virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
|
||||||
|
|
||||||
|
protected:
|
||||||
// implementation
|
// implementation
|
||||||
// --------------
|
// --------------
|
||||||
|
|
||||||
@@ -68,66 +100,37 @@ public:
|
|||||||
|
|
||||||
wxCoord XDEV2LOG(wxCoord x) const
|
wxCoord XDEV2LOG(wxCoord x) const
|
||||||
{
|
{
|
||||||
wxCoord new_x = x - m_deviceOriginX;
|
return DeviceToLogicalX(x);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
wxCoord XDEV2LOGREL(wxCoord x) const
|
wxCoord XDEV2LOGREL(wxCoord x) const
|
||||||
{
|
{
|
||||||
if (x > 0)
|
return DeviceToLogicalXRel(x);
|
||||||
return (wxCoord)((double)(x) / m_scaleX + 0.5);
|
|
||||||
else
|
|
||||||
return (wxCoord)((double)(x) / m_scaleX - 0.5);
|
|
||||||
}
|
}
|
||||||
wxCoord YDEV2LOG(wxCoord y) const
|
wxCoord YDEV2LOG(wxCoord y) const
|
||||||
{
|
{
|
||||||
wxCoord new_y = y - m_deviceOriginY;
|
return DeviceToLogicalY(y);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
wxCoord YDEV2LOGREL(wxCoord y) const
|
wxCoord YDEV2LOGREL(wxCoord y) const
|
||||||
{
|
{
|
||||||
if (y > 0)
|
return DeviceToLogicalYRel(y);
|
||||||
return (wxCoord)((double)(y) / m_scaleY + 0.5);
|
|
||||||
else
|
|
||||||
return (wxCoord)((double)(y) / m_scaleY - 0.5);
|
|
||||||
}
|
}
|
||||||
wxCoord XLOG2DEV(wxCoord x) const
|
wxCoord XLOG2DEV(wxCoord x) const
|
||||||
{
|
{
|
||||||
wxCoord new_x = x - m_logicalOriginX;
|
return LogicalToDeviceX(x);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
wxCoord XLOG2DEVREL(wxCoord x) const
|
wxCoord XLOG2DEVREL(wxCoord x) const
|
||||||
{
|
{
|
||||||
if (x > 0)
|
return LogicalToDeviceXRel(x);
|
||||||
return (wxCoord)((double)(x) * m_scaleX + 0.5);
|
|
||||||
else
|
|
||||||
return (wxCoord)((double)(x) * m_scaleX - 0.5);
|
|
||||||
}
|
}
|
||||||
wxCoord YLOG2DEV(wxCoord y) const
|
wxCoord YLOG2DEV(wxCoord y) const
|
||||||
{
|
{
|
||||||
wxCoord new_y = y - m_logicalOriginY;
|
return LogicalToDeviceY(y);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
wxCoord YLOG2DEVREL(wxCoord y) const
|
wxCoord YLOG2DEVREL(wxCoord y) const
|
||||||
{
|
{
|
||||||
if (y > 0)
|
return LogicalToDeviceYRel(y);
|
||||||
return (wxCoord)((double)(y) * m_scaleY + 0.5);
|
|
||||||
else
|
|
||||||
return (wxCoord)((double)(y) * m_scaleY - 0.5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
// base class pure virtuals implemented here
|
// base class pure virtuals implemented here
|
||||||
virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
|
virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
|
||||||
virtual void DoGetSizeMM(int* width, int* height) const;
|
virtual void DoGetSizeMM(int* width, int* height) const;
|
||||||
|
@@ -11,15 +11,9 @@
|
|||||||
#define __GTKDCCLIENTH__
|
#define __GTKDCCLIENTH__
|
||||||
|
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
#include "wx/window.h"
|
#include "wx/region.h"
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
class WXDLLIMPEXP_CORE wxWindow;
|
||||||
// classes
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class WXDLLIMPEXP_CORE wxWindowDC;
|
|
||||||
class WXDLLIMPEXP_CORE wxPaintDC;
|
|
||||||
class WXDLLIMPEXP_CORE wxClientDC;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxWindowDC
|
// wxWindowDC
|
||||||
@@ -120,6 +114,7 @@ public:
|
|||||||
PangoLayout *m_layout;
|
PangoLayout *m_layout;
|
||||||
PangoFontDescription *m_fontdesc;
|
PangoFontDescription *m_fontdesc;
|
||||||
|
|
||||||
|
protected:
|
||||||
void SetUpDC();
|
void SetUpDC();
|
||||||
void Destroy();
|
void Destroy();
|
||||||
virtual void ComputeScaleAndOrigin();
|
virtual void ComputeScaleAndOrigin();
|
||||||
|
@@ -12,9 +12,6 @@
|
|||||||
|
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
|
|
||||||
#include <gdk/gdk.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDC
|
// wxDC
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -149,48 +146,3 @@ void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
|
|||||||
m_signY = (yBottomUp ? -1 : 1);
|
m_signY = (yBottomUp ? -1 : 1);
|
||||||
ComputeScaleAndOrigin();
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include "wx/dcclient.h"
|
#include "wx/dcclient.h"
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/window.h"
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/dcmemory.h"
|
#include "wx/dcmemory.h"
|
||||||
#include "wx/math.h" // for floating-point functions
|
#include "wx/math.h" // for floating-point functions
|
||||||
@@ -1166,8 +1167,8 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
|
|||||||
if (!m_window) return false;
|
if (!m_window) return false;
|
||||||
|
|
||||||
// transform the source DC coords to the device ones
|
// transform the source DC coords to the device ones
|
||||||
xsrc = source->XLOG2DEV(xsrc);
|
xsrc = source->LogicalToDeviceX(xsrc);
|
||||||
ysrc = source->YLOG2DEV(ysrc);
|
ysrc = source->LogicalToDeviceY(ysrc);
|
||||||
|
|
||||||
wxClientDC *srcDC = (wxClientDC*)source;
|
wxClientDC *srcDC = (wxClientDC*)source;
|
||||||
wxMemoryDC *memDC = (wxMemoryDC*)source;
|
wxMemoryDC *memDC = (wxMemoryDC*)source;
|
||||||
|
@@ -28,7 +28,6 @@
|
|||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/window.h"
|
#include "wx/window.h"
|
||||||
#include "wx/dc.h"
|
|
||||||
#include "wx/dcclient.h"
|
#include "wx/dcclient.h"
|
||||||
#include "wx/settings.h"
|
#include "wx/settings.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -205,7 +204,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win,
|
|||||||
NULL,
|
NULL,
|
||||||
button,
|
button,
|
||||||
"button",
|
"button",
|
||||||
dc.XLOG2DEV(rect.x), rect.y, rect.width, rect.height
|
dc.LogicalToDeviceX(rect.x), rect.y, rect.width, rect.height
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user