X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/83df96d63a52ebb08b9e32549dc255354b4a18d0..8e77fd8bca165aab9709649d79a7cbc6a172d4e1:/include/wx/x11/dcclient.h diff --git a/include/wx/x11/dcclient.h b/include/wx/x11/dcclient.h index ec974c1bb3..1110046197 100644 --- a/include/wx/x11/dcclient.h +++ b/include/wx/x11/dcclient.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dcclient.h +// Name: wx/x11/dcclient.h // Purpose: wxClientDC, wxPaintDC and wxWindowDC classes // Author: Julian Smart // Modified by: @@ -12,165 +12,167 @@ #ifndef _WX_DCCLIENT_H_ #define _WX_DCCLIENT_H_ -#ifdef __GNUG__ -#pragma interface "dcclient.h" -#endif - #include "wx/dc.h" +#include "wx/dcclient.h" +#include "wx/x11/dc.h" +#include "wx/region.h" // ----------------------------------------------------------------------------- // fwd declarations // ----------------------------------------------------------------------------- -class WXDLLEXPORT wxWindowDC; -class WXDLLEXPORT wxWindow; - -// Under Windows, wxClientDC, wxPaintDC and wxWindowDC are implemented -// differently. On many platforms, however, they will be the same. +class WXDLLIMPEXP_FWD_CORE wxWindow; //----------------------------------------------------------------------------- -// wxWindowDC +// wxWindowDCImpl //----------------------------------------------------------------------------- -class WXDLLEXPORT wxWindowDC : public wxDC +class WXDLLIMPEXP_CORE wxWindowDCImpl : public wxX11DCImpl { - DECLARE_DYNAMIC_CLASS(wxWindowDC) - public: - wxWindowDC(); - wxWindowDC( wxWindow *win ); - - ~wxWindowDC(); - - // TODO this function is Motif-only for now - should it go into base class? - void Clear(const wxRect& rect); - - // implement base class pure virtuals - // ---------------------------------- - - virtual void Clear(); - - virtual void SetFont(const wxFont& font); - virtual void SetPen(const wxPen& pen); - virtual void SetBrush(const wxBrush& brush); - virtual void SetBackground(const wxBrush& brush); - virtual void SetBackgroundMode(int mode); - virtual void SetPalette(const wxPalette& palette); - virtual void SetLogicalFunction( int function ); - - virtual void SetTextForeground(const wxColour& colour); - virtual void SetTextBackground(const wxColour& colour); - - virtual wxCoord GetCharHeight() const; - virtual wxCoord GetCharWidth() const; - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; - - virtual bool CanDrawBitmap() const; - virtual bool CanGetTextExtent() const; - - virtual int GetDepth() const; - virtual wxSize GetPPI() const; - - virtual void DestroyClippingRegion(); - - // Helper function for setting clipping - void SetDCClipping(); - - // implementation from now on - // -------------------------- - - WXGC GetGC() const { return m_gc; } - WXGC GetBackingGC() const { return m_gcBacking; } - WXDisplay* GetDisplay() const { return m_display; } - bool GetAutoSetting() const { return m_autoSetting; } - void SetAutoSetting(bool flag) { m_autoSetting = flag; } - + wxWindowDCImpl( wxDC *owner ); + wxWindowDCImpl( wxDC *owner, wxWindow *win ); + + virtual ~wxWindowDCImpl(); + + virtual bool CanDrawBitmap() const { return true; } + virtual bool CanGetTextExtent() const { return true; } + protected: - virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE); - - virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; - + virtual void DoGetSize(int *width, int *height) const; + virtual bool DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, + wxFloodFillStyle style = wxFLOOD_SURFACE ); + virtual bool DoGetPixel( wxCoord x, wxCoord y, wxColour *col ) const; + virtual void DoDrawPoint(wxCoord x, wxCoord y); virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - + + virtual void DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y ); + virtual void DoDrawBitmap( const wxBitmap &bitmap, wxCoord x, wxCoord y, + bool useMask = false ); + virtual void DoDrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoord xc, wxCoord yc); virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, double sa, double ea); - + virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius); virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - + virtual void DoCrossHair(wxCoord x, wxCoord y); - + virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); virtual void DoDrawRotatedText(const wxString &text, wxCoord x, wxCoord y, double angle); - + virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); - - virtual void DoSetClippingRegionAsRegion(const wxRegion& region); + wxRasterOperationMode rop = wxCOPY, bool useMask = false, + wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); + virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - - virtual void DoDrawLines(int n, wxPoint points[], + virtual void DoSetDeviceClippingRegion(const wxRegion& region); + + virtual void DoDrawLines(int n, const wxPoint points[], wxCoord xoffset, wxCoord yoffset); - virtual void DoDrawPolygon(int n, wxPoint points[], + virtual void DoDrawPolygon(int n, const wxPoint points[], wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE); - - WXGC m_gc; - WXGC m_gcBacking; - WXDisplay* m_display; - wxWindow* m_window; - WXRegion m_currentRegion; // Current clipping region (incl. paint clip region) - WXRegion m_userRegion; // User-defined clipping region - WXPixmap m_pixmap; // Pixmap for drawing on - - // Not sure if we'll need all of these - int m_backgroundPixel; - wxColour m_currentColour; - // int m_currentBkMode; - int m_currentPenWidth ; - int m_currentPenJoin ; - int m_currentPenCap ; - int m_currentPenDashCount ; - wxMOTIFDash* m_currentPenDash ; - wxBitmap m_currentStipple ; - int m_currentStyle ; - int m_currentFill ; - int m_autoSetting ; // See comment in dcclient.cpp - WXFont m_oldFont; + wxPolygonFillMode fillStyle = wxODDEVEN_RULE); + + +public: + virtual void Clear(); + + virtual void SetFont(const wxFont& font); + virtual void SetPen(const wxPen& pen); + virtual void SetBrush(const wxBrush& brush); + virtual void SetBackground(const wxBrush& brush); + virtual void SetBackgroundMode(int mode); + virtual void SetPalette(const wxPalette& palette); + virtual void SetLogicalFunction( wxRasterOperationMode function ); + + virtual void SetTextForeground(const wxColour& colour); + virtual void SetTextBackground(const wxColour& colour); + + virtual wxCoord GetCharHeight() const; + virtual wxCoord GetCharWidth() const; + + virtual int GetDepth() const; + virtual wxSize GetPPI() const; + + virtual void DestroyClippingRegion(); + WXWindow GetX11Window() const { return m_x11window; } + + virtual void ComputeScaleAndOrigin(); + +protected: + // implementation + // -------------- + virtual void DoGetTextExtent(const wxString& string, + wxCoord *x, wxCoord *y, + wxCoord *descent = NULL, + wxCoord *externalLeading = NULL, + const wxFont *theFont = NULL) const; + + void Init(); + + WXDisplay *m_display; + WXWindow m_x11window; + WXGC m_penGC; + WXGC m_brushGC; + WXGC m_textGC; + WXGC m_bgGC; + WXColormap m_cmap; + bool m_isMemDC; + bool m_isScreenDC; + wxRegion m_currentClippingRegion; + wxRegion m_paintClippingRegion; + +#if wxUSE_UNICODE + PangoContext *m_context; + PangoFontDescription *m_fontdesc; +#endif + + void SetUpDC(); + void Destroy(); + +private: + DECLARE_CLASS(wxWindowDCImpl) }; -class WXDLLEXPORT wxPaintDC: public wxWindowDC +//----------------------------------------------------------------------------- +// wxClientDC +//----------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl { - DECLARE_DYNAMIC_CLASS(wxPaintDC) - public: - wxPaintDC() { } - wxPaintDC(wxWindow* win); - - ~wxPaintDC(); + wxClientDCImpl( wxDC *owner ) : wxWindowDCImpl( owner ) { } + wxClientDCImpl( wxDC *owner, wxWindow *win ); + +protected: + virtual void DoGetSize(int *width, int *height) const; + +private: + DECLARE_CLASS(wxClientDCImpl) }; -class WXDLLEXPORT wxClientDC: public wxWindowDC +//----------------------------------------------------------------------------- +// wxPaintDC +//----------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl { - DECLARE_DYNAMIC_CLASS(wxClientDC) - public: - wxClientDC() { } - wxClientDC(wxWindow* win) : wxWindowDC(win) { } + wxPaintDCImpl( wxDC *owner ) : wxClientDCImpl( owner ) { } + wxPaintDCImpl( wxDC *owner, wxWindow *win ); + +private: + DECLARE_CLASS(wxPaintDCImpl) }; #endif