#define _WX_MSW_DC_H_
#include "wx/defs.h"
+#include "wx/dc.h"
// ---------------------------------------------------------------------------
// macros
// this is an ABC: use one of the derived classes to create a DC associated
// with a window, screen, printer and so on
-class WXDLLEXPORT wxDC : public wxDCBase
+class WXDLLEXPORT wxMSWDCImpl: public wxDCImpl
{
public:
- wxDC(WXHDC hDC) { Init(); m_hDC = hDC; }
- virtual ~wxDC();
+ wxMSWDCImpl(wxDC *owner, WXHDC hDC);
+ virtual ~wxMSWDCImpl();
// implement base class pure virtuals
// ----------------------------------
virtual int GetDepth() const;
virtual wxSize GetPPI() const;
- virtual wxCoord DeviceToLogicalX(wxCoord x) const;
- virtual wxCoord DeviceToLogicalY(wxCoord y) const;
- virtual wxCoord DeviceToLogicalXRel(wxCoord x) const;
- virtual wxCoord DeviceToLogicalYRel(wxCoord y) const;
- virtual wxCoord LogicalToDeviceX(wxCoord x) const;
- virtual wxCoord LogicalToDeviceY(wxCoord y) const;
- virtual wxCoord LogicalToDeviceXRel(wxCoord x) const;
- virtual wxCoord LogicalToDeviceYRel(wxCoord y) const ;
virtual void SetMapMode(int mode);
virtual void SetUserScale(double x, double y);
- virtual void SetSystemScale(double x, double y);
virtual void SetLogicalScale(double x, double y);
virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
+
virtual void SetLogicalFunction(int function);
// implementation from now on
virtual void SetRop(WXHDC cdc);
virtual void SelectOldObjects(WXHDC dc);
- wxWindow *GetWindow() const { return m_canvas; }
void SetWindow(wxWindow *win)
{
- m_canvas = win;
+ m_window = win;
#if wxUSE_PALETTE
// if we have palettes use the correct one for this window
protected:
void Init()
{
- m_canvas = NULL;
m_bOwnsDC = false;
m_hDC = NULL;
// create an uninitialized DC: this should be only used by the derived
// classes
- wxDC() { Init(); }
+ wxMSWDCImpl( wxDC *owner ) : wxDCImpl( owner ) { Init(); }
+
+ void RealizeScaleAndOrigin();
+public:
virtual void DoGetTextExtent(const wxString& string,
wxCoord *x, wxCoord *y,
wxCoord *descent = NULL,
virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
#if wxUSE_SPLINES
- virtual void DoDrawSpline(wxList *points);
+ virtual void DoDrawSpline(const wxPointList *points);
#endif
virtual void DoCrossHair(wxCoord x, wxCoord y);
virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
int fillStyle = wxODDEVEN_RULE);
- virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const
- { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmap(*subrect); }
+ virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const
+ {
+ return subrect == NULL ? GetSelectedBitmap()
+ : GetSelectedBitmap().GetSubBitmap(*subrect);
+ }
#if wxUSE_PALETTE
void InitializePalette();
#endif // wxUSE_PALETTE
+protected:
// common part of DoDrawText() and DoDrawRotatedText()
void DrawAnyText(const wxString& text, wxCoord x, wxCoord y);
#endif // wxUSE_PALETTE
#if wxUSE_DC_CACHEING
- static wxList sm_bitmapCache;
- static wxList sm_dcCache;
+ static wxObjectList sm_bitmapCache;
+ static wxObjectList sm_dcCache;
#endif
- DECLARE_DYNAMIC_CLASS(wxDC)
- DECLARE_NO_COPY_CLASS(wxDC)
+ DECLARE_CLASS(wxMSWDCImpl)
+ DECLARE_NO_COPY_CLASS(wxMSWDCImpl)
};
// ----------------------------------------------------------------------------
// only/mainly)
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxDCTemp : public wxDC
+class WXDLLEXPORT wxDCTempImpl : public wxMSWDCImpl
{
public:
// construct a temporary DC with the specified HDC and size (it should be
// specified whenever we know it for this HDC)
- wxDCTemp(WXHDC hdc, const wxSize& size = wxDefaultSize)
- : wxDC(hdc),
+ wxDCTempImpl(wxDC *owner, WXHDC hdc, const wxSize& size )
+ : wxMSWDCImpl( owner, hdc ),
m_size(size)
{
}
- virtual ~wxDCTemp()
+ virtual ~wxDCTempImpl()
{
// prevent base class dtor from freeing it
SetHDC((WXHDC)NULL);
}
-protected:
virtual void DoGetSize(int *w, int *h) const
{
wxASSERT_MSG( m_size.IsFullySpecified(),
// find it ourselves
const wxSize m_size;
- DECLARE_NO_COPY_CLASS(wxDCTemp)
+ DECLARE_NO_COPY_CLASS(wxDCTempImpl)
+};
+
+class WXDLLEXPORT wxDCTemp : public wxDC
+{
+public:
+ wxDCTemp(WXHDC hdc, const wxSize& size = wxDefaultSize)
+ : wxDC(new wxDCTempImpl(this, hdc, size))
+ {
+ }
};
#endif // _WX_MSW_DC_H_