]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/dcclient.h
refactor WM_COMMAND messages handling in MDI frames to avoid duplicating code unneces...
[wxWidgets.git] / include / wx / os2 / dcclient.h
index 3130147c4fe040432df566927163b24c690928f4..a69cbd7126713093168ed59f10bff232bdd3ec06 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 // Name:        dcclient.h
-// Purpose:     wxClientDC, wxPaintDC and wxWindowDC classes
-// Author:      AUTHOR
+// Purpose:     wxClientDC class
+// Author:      David Webster
 // Modified by:
-// Created:     ??/??/98
+// Created:     09/12/99
 // RCS-ID:      $Id$
-// Copyright:   (c) AUTHOR
-// Licence:    wxWindows licence
+// Copyright:   (c) David Webster
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_DCCLIENT_H_
 #define _WX_DCCLIENT_H_
 
-#ifdef __GNUG__
-#pragma interface "dcclient.h"
-#endif
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
 
 #include "wx/dc.h"
+#include "wx/os2/dc.h"
+#include "wx/dcclient.h"
+#include "wx/dynarray.h"
+
+// ----------------------------------------------------------------------------
+// array types
+// ----------------------------------------------------------------------------
 
-//-----------------------------------------------------------------------------
-// classes
-//-----------------------------------------------------------------------------
+// this one if used by wxPaintDC only
+struct WXDLLIMPEXP_FWD_CORE wxPaintDCInfo;
 
-class WXDLLEXPORT wxPaintDC;
-class WXDLLEXPORT wxWindow;
+WX_DECLARE_EXPORTED_OBJARRAY(wxPaintDCInfo, wxArrayDCInfo);
 
-// Under Windows, wxClientDC, wxPaintDC and wxWindowDC are implemented differently.
-// On many platforms, however, they will be the same.
+// ----------------------------------------------------------------------------
+// DC classes
+// ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxWindowDC: public wxDC
+class WXDLLIMPEXP_CORE wxWindowDCImpl : public wxPMDCImpl
 {
-  DECLARE_DYNAMIC_CLASS(wxWindowDC)
-
-  public:
-
-    wxWindowDC(void);
-    wxWindowDC( wxWindow *win );
-
-    ~wxWindowDC(void);
-
-    virtual void FloodFill( long x1, long y1, const wxColour& col, int style=wxFLOOD_SURFACE );
-    virtual bool GetPixel( long x1, long y1, wxColour *col ) const;
-
-    virtual void DrawLine( long x1, long y1, long x2, long y2 );
-    virtual void CrossHair( long x, long y );
-    virtual void DrawArc( long x1, long y1, long x2, long y2, long xc, long yc );
-    virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea );
-    virtual void DrawPoint( long x, long y );
-
-    virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 );
-    virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 );
-    virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0,
-                              int fillStyle=wxODDEVEN_RULE );
-    virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0,
-                              int fillStyle=wxODDEVEN_RULE );
-
-    virtual void DrawRectangle( long x, long y, long width, long height );
-    virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 );
-    virtual void DrawEllipse( long x, long y, long width, long height );
-
-    virtual bool CanDrawBitmap(void) const;
-    virtual void DrawIcon( const wxIcon &icon, long x, long y, bool useMask=FALSE );
-    virtual bool Blit( long xdest, long ydest, long width, long height,
-       wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE );
-
-    virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE );
-    virtual bool CanGetTextExtent(void) const;
-    virtual void GetTextExtent( const wxString &string, long *width, long *height,
-                     long *descent = NULL, long *externalLeading = NULL,
-                     wxFont *theFont = NULL, bool use16 = FALSE );
-    virtual long GetCharWidth(void);
-    virtual long GetCharHeight(void);
-
-    virtual void Clear(void);
-
-    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 SetLogicalFunction( int function );
-    virtual void SetTextForeground( const wxColour &col );
-    virtual void SetTextBackground( const wxColour &col );
-    virtual void SetBackgroundMode( int mode );
-    virtual void SetPalette( const wxPalette& palette );
-
-    virtual void SetClippingRegion( long x, long y, long width, long height );
-    virtual void SetClippingRegion( const wxRegion& region ) ;
-    virtual void DestroyClippingRegion(void);
-
-    virtual void DrawSpline( wxList *points );
+public:
+    // default ctor
+    wxWindowDCImpl( wxDC *owner );
+
+    // Create a DC corresponding to the whole window
+    wxWindowDCImpl( wxDC *owner, wxWindow *pWin );
+
+    virtual void DoGetSize(int *pWidth, int *pHeight) const;
+
+protected:
+    // initialize the newly created DC
+    void InitDC(void);
+
 private:
-    // VisualAge function hiding warning supression
-    void DrawEllipticArc (const wxPoint& pt, const wxSize& sz, double sa, double ea)
-    { wxDC::DrawEllipticArc(pt, sz, sa, ea); }
-    void DrawPoint( wxPoint& point )
-    { wxDC::DrawPoint(point); }
-    void DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 )
-    { DrawSpline(x1, y1, x2, y2, x3, y3); }
-    void DrawSpline( int n, wxPoint points[] )
-    { DrawSpline(n, points); }
-    void GetTextExtent( const wxString &string, long *width, long *height,
-                     long *descent = NULL, long *externalLeading = NULL,
-                     wxFont *theFont = NULL ) const
-     { GetTextExtent( string, width, height, descent, externalLeading, theFont); };
-     // these next two are ridiculous! the only difference is the const
-    long GetCharWidth(void) const {return(GetCharWidth());};
-    long GetCharHeight(void) const {return(GetCharHeight());};
-};
-
-//-----------------------------------------------------------------------------
-// wxPaintDC
-//-----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxPaintDC: public wxWindowDC
+    SIZEL                   m_PageSize;
+    DECLARE_CLASS(wxWindowDCImpl)
+    DECLARE_NO_COPY_CLASS(wxWindowDCImpl)
+}; // end of CLASS wxWindowDC
+
+class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl
 {
-  DECLARE_DYNAMIC_CLASS(wxPaintDC)
+public:
+    // default ctor
+    wxClientDCImpl( wxDC *owner );
+
+    // Create a DC corresponding to the client area of the window
+    wxClientDCImpl( wxDC *owner, wxWindow *pWin );
 
-  public:
+    virtual ~wxClientDCImpl();
 
-    wxPaintDC(void):wxWindowDC() {};
-    wxPaintDC( wxWindow *win ): wxWindowDC(win) {};
+    virtual void DoGetSize(int *pWidth, int *pHeight) const;
 
-};
+protected:
+    void InitDC(void);
 
-//-----------------------------------------------------------------------------
-// wxClientDC
-//-----------------------------------------------------------------------------
+private:
+    DECLARE_CLASS(wxClientDCImpl)
+    DECLARE_NO_COPY_CLASS(wxClientDCImpl)
+}; // end of CLASS wxClientDC
 
-class WXDLLEXPORT wxClientDC: public wxWindowDC
+class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl
 {
-  DECLARE_DYNAMIC_CLASS(wxClientDC)
+public:
+    wxPaintDCImpl( wxDC *owner );
 
-  public:
+    // Create a DC corresponding for painting the window in OnPaint()
+    wxPaintDCImpl( wxDC *owner, wxWindow *pWin );
 
-    wxClientDC(void):wxWindowDC() {};
-    wxClientDC( wxWindow *win ): wxWindowDC(win) {};
+    virtual ~wxPaintDCImpl();
 
-};
+    // find the entry for this DC in the cache (keyed by the window)
+    static WXHDC FindDCInCache(wxWindow* pWin);
+
+protected:
+    static wxArrayDCInfo ms_cache;
+
+    // find the entry for this DC in the cache (keyed by the window)
+    wxPaintDCInfo* FindInCache(size_t* pIndex = NULL) const;
+private:
+    DECLARE_CLASS(wxPaintDCImpl)
+    DECLARE_NO_COPY_CLASS(wxPaintDCImpl)
+}; // end of wxPaintDC
 
 #endif
     // _WX_DCCLIENT_H_