1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/gtk1/dc.h
3// Purpose:
4// Author:      Robert Roebling
5// Id:          $Id: dc.h 42763 2006-10-30 20:34:25Z VZ $
6// Copyright:   (c) 1998 Robert Roebling
7// Licence:     wxWindows licence
8/////////////////////////////////////////////////////////////////////////////
9
10#ifndef __GTKDCH__
11#define __GTKDCH__
12
13//-----------------------------------------------------------------------------
14// classes
15//-----------------------------------------------------------------------------
16
17class WXDLLIMPEXP_CORE wxDC;
18
19//-----------------------------------------------------------------------------
20// constants
21//-----------------------------------------------------------------------------
22
23#ifndef MM_TEXT
24#define MM_TEXT         0
25#define MM_ISOTROPIC    1
26#define MM_ANISOTROPIC  2
27#define MM_LOMETRIC     3
28#define MM_HIMETRIC     4
29#define MM_TWIPS        5
30#define MM_POINTS       6
31#define MM_METRIC       7
32#endif
33
34//-----------------------------------------------------------------------------
35// wxDC
36//-----------------------------------------------------------------------------
37
38class WXDLLIMPEXP_CORE wxDC : public wxDCBase
39{
40public:
41    wxDC();
42    virtual ~wxDC() { }
43
44#if wxUSE_PALETTE
45    void SetColourMap( const wxPalette& palette ) { SetPalette(palette); };
46#endif // wxUSE_PALETTE
47
48    // Resolution in pixels per logical inch
49    virtual wxSize GetPPI() const;
50
51    virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; }
52    virtual void EndDoc() { }
53    virtual void StartPage() { }
54    virtual void EndPage() { }
55
56    virtual void SetMapMode( int mode );
57    virtual void SetUserScale( double x, double y );
58    virtual void SetLogicalScale( double x, double y );
59    virtual void SetLogicalOrigin( wxCoord x, wxCoord y );
60    virtual void SetDeviceOrigin( wxCoord x, wxCoord y );
61
62    virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
63
64    // implementation
65    // --------------
66
67    virtual void ComputeScaleAndOrigin();
68
69    virtual GdkWindow* GetGDKWindow() const { return NULL; }
70
71    wxCoord XDEV2LOG(wxCoord x) const
72    {
73        return wxRound((double)(x - m_deviceOriginX) / m_scaleX) * m_signX + m_logicalOriginX;
74    }
75    wxCoord XDEV2LOGREL(wxCoord x) const
76    {
77        return wxRound((double)(x) / m_scaleX);
78    }
79    wxCoord YDEV2LOG(wxCoord y) const
80    {
81        return wxRound((double)(y - m_deviceOriginY) / m_scaleY) * m_signY + m_logicalOriginY;
82    }
83    wxCoord YDEV2LOGREL(wxCoord y) const
84    {
85        return wxRound((double)(y) / m_scaleY);
86    }
87    wxCoord XLOG2DEV(wxCoord x) const
88    {
89        return wxRound((double)(x - m_logicalOriginX) * m_scaleX) * m_signX + m_deviceOriginX;
90    }
91    wxCoord XLOG2DEVREL(wxCoord x) const
92    {
93        return wxRound((double)(x) * m_scaleX);
94    }
95    wxCoord YLOG2DEV(wxCoord y) const
96    {
97        return wxRound((double)(y - m_logicalOriginY) * m_scaleY) * m_signY + m_deviceOriginY;
98    }
99    wxCoord YLOG2DEVREL(wxCoord y) const
100    {
101        return wxRound((double)(y) * m_scaleY);
102    }
103
104protected:
105    // base class pure virtuals implemented here
106    virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
107    virtual void DoGetSizeMM(int* width, int* height) const;
108
109public:
110    // GTK-specific member variables
111
112    // not sure what for, but what is a mm on a screen you don't know the size
113    // of?
114    double       m_mm_to_pix_x,
115                 m_mm_to_pix_y;
116
117    bool         m_needComputeScaleX,
118                 m_needComputeScaleY; // not yet used
119
120
121private:
122    DECLARE_ABSTRACT_CLASS(wxDC)
123};
124
125// this must be defined when wxDC::Blit() honours the DC origian and needed to
126// allow wxUniv code in univ/winuniv.cpp to work with versions of wxGTK
127// 2.3.[23]
128#ifndef wxHAS_WORKING_GTK_DC_BLIT
129    #define wxHAS_WORKING_GTK_DC_BLIT
130#endif
131
132#endif // __GTKDCH__
133