1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/dfb/dc.h 3// Purpose: wxDC class 4// Author: Vaclav Slavik 5// Created: 2006-08-07 6// RCS-ID: $Id: dc.h 43550 2006-11-20 20:45:57Z VS $ 7// Copyright: (c) 2006 REA Elektronik GmbH 8// Licence: wxWindows licence 9///////////////////////////////////////////////////////////////////////////// 10 11#ifndef _WX_DFB_DC_H_ 12#define _WX_DFB_DC_H_ 13 14#include "wx/defs.h" 15#include "wx/region.h" 16#include "wx/dfb/dfbptr.h" 17 18wxDFB_DECLARE_INTERFACE(IDirectFBSurface); 19 20//----------------------------------------------------------------------------- 21// wxDC 22//----------------------------------------------------------------------------- 23 24class WXDLLIMPEXP_CORE wxDC : public wxDCBase 25{ 26public: 27 wxDC(); 28 29 // Ctor. 30 wxDC(const wxIDirectFBSurfacePtr& surface); 31 32public: 33 // implement base class pure virtuals 34 // ---------------------------------- 35 36 virtual void Clear(); 37 38 virtual bool StartDoc(const wxString& message); 39 virtual void EndDoc(); 40 41 virtual void StartPage(); 42 virtual void EndPage(); 43 44 virtual void SetFont(const wxFont& font); 45 virtual void SetPen(const wxPen& pen); 46 virtual void SetBrush(const wxBrush& brush); 47 virtual void SetBackground(const wxBrush& brush); 48 virtual void SetBackgroundMode(int mode); 49#if wxUSE_PALETTE 50 virtual void SetPalette(const wxPalette& palette); 51#endif 52 53 virtual void DestroyClippingRegion(); 54 55 virtual wxCoord GetCharHeight() const; 56 virtual wxCoord GetCharWidth() const; 57 virtual void DoGetTextExtent(const wxString& string, 58 wxCoord *x, wxCoord *y, 59 wxCoord *descent = NULL, 60 wxCoord *externalLeading = NULL, 61 wxFont *theFont = NULL) const; 62 63 virtual bool CanDrawBitmap() const { return true; } 64 virtual bool CanGetTextExtent() const { return true; } 65 virtual int GetDepth() const; 66 virtual wxSize GetPPI() const; 67 68 virtual void SetMapMode(int mode); 69 virtual void SetUserScale(double x, double y); 70 virtual void SetLogicalScale(double x, double y); 71 virtual void SetLogicalOrigin(wxCoord x, wxCoord y); 72 virtual void SetDeviceOrigin(wxCoord x, wxCoord y); 73 virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); 74 virtual void SetLogicalFunction(int function); 75 76 // implementation from now on 77 // -------------------------- 78 79 virtual void ComputeScaleAndOrigin(); 80 81 wxCoord XDEV2LOG(wxCoord x) const 82 { 83 return wxRound((double)(x - m_deviceOriginX) / m_scaleX) * m_signX + m_logicalOriginX; 84 } 85 wxCoord XDEV2LOGREL(wxCoord x) const 86 { 87 return wxRound((double)(x) / m_scaleX); 88 } 89 wxCoord YDEV2LOG(wxCoord y) const 90 { 91 return wxRound((double)(y - m_deviceOriginY) / m_scaleY) * m_signY + m_logicalOriginY; 92 } 93 wxCoord YDEV2LOGREL(wxCoord y) const 94 { 95 return wxRound((double)(y) / m_scaleY); 96 } 97 wxCoord XLOG2DEV(wxCoord x) const 98 { 99 return wxRound((double)(x - m_logicalOriginX) * m_scaleX) * m_signX + m_deviceOriginX; 100 } 101 wxCoord XLOG2DEVREL(wxCoord x) const 102 { 103 return wxRound((double)(x) * m_scaleX); 104 } 105 wxCoord YLOG2DEV(wxCoord y) const 106 { 107 return wxRound((double)(y - m_logicalOriginY) * m_scaleY) * m_signY + m_deviceOriginY; 108 } 109 wxCoord YLOG2DEVREL(wxCoord y) const 110 { 111 return wxRound((double)(y) * m_scaleY); 112 } 113 114 // Returns the surface (and increases its ref count) 115 wxIDirectFBSurfacePtr GetDirectFBSurface() const { return m_surface; } 116 117protected: 118 // initializes the DC from a surface, must be called if default ctor 119 // was used 120 void DFBInit(const wxIDirectFBSurfacePtr& surface); 121 122 virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, 123 int style = wxFLOOD_SURFACE); 124 125 virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; 126 127 virtual void DoDrawPoint(wxCoord x, wxCoord y); 128 virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); 129 130 virtual void DoDrawArc(wxCoord x1, wxCoord y1, 131 wxCoord x2, wxCoord y2, 132 wxCoord xc, wxCoord yc); 133 virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, 134 double sa, double ea); 135 136 virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); 137 virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, 138 wxCoord width, wxCoord height, 139 double radius); 140 virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); 141 142 virtual void DoCrossHair(wxCoord x, wxCoord y); 143 144 virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); 145 virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, 146 bool useMask = false); 147 148 virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); 149 virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, 150 double angle); 151 152 virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, 153 wxDC *source, wxCoord xsrc, wxCoord ysrc, 154 int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); 155 156 // this is gnarly - we can't even call this function DoSetClippingRegion() 157 // because of virtual function hiding 158 virtual void DoSetClippingRegionAsRegion(const wxRegion& region); 159 virtual void DoSetClippingRegion(wxCoord x, wxCoord y, 160 wxCoord width, wxCoord height); 161 162 virtual void DoGetSize(int *width, int *height) const; 163 virtual void DoGetSizeMM(int* width, int* height) const; 164 165 virtual void DoDrawLines(int n, wxPoint points[], 166 wxCoord xoffset, wxCoord yoffset); 167 virtual void DoDrawPolygon(int n, wxPoint points[], 168 wxCoord xoffset, wxCoord yoffset, 169 int fillStyle = wxODDEVEN_RULE); 170 171 // implementation from now on: 172protected: 173 wxIDirectFBFontPtr GetCurrentFont() const; 174 175private: 176 // Unified implementation of DrawIcon, DrawBitmap and Blit: 177 void DoDrawSubBitmap(const wxBitmap &bmp, 178 wxCoord x, wxCoord y, wxCoord w, wxCoord h, 179 wxCoord destx, wxCoord desty, int rop, bool useMask); 180 bool DoBlitFromSurface(const wxIDirectFBSurfacePtr& src, 181 wxCoord srcx, wxCoord srcy, 182 wxCoord w, wxCoord h, 183 wxCoord dstx, wxCoord dsty); 184 185 // selects colour into surface's state 186 void SelectColour(const wxColour& clr); 187 188protected: 189 wxIDirectFBSurfacePtr m_surface; 190 191 double m_mm_to_pix_x, m_mm_to_pix_y; 192 193 friend class WXDLLIMPEXP_CORE wxOverlayImpl; // for Init 194 195 DECLARE_DYNAMIC_CLASS(wxDC) 196}; 197 198#endif // _WX_DFB_DC_H_ 199