]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/dc.h
apply complete transforms (scroll window PrepareDC was not functioning properly)
[wxWidgets.git] / include / wx / msw / dc.h
index 1a2e82afbbc318040a333abf1754389ff8d90dee..895aa8c50c27a857586b8d294474a120d9cbc1cb 100644 (file)
@@ -30,7 +30,7 @@ class wxDCCacheEntry: public wxObject
 public:
     wxDCCacheEntry(WXHBITMAP hBitmap, int w, int h, int depth);
     wxDCCacheEntry(WXHDC hDC, int depth);
-    ~wxDCCacheEntry();
+    virtual ~wxDCCacheEntry();
 
     WXHBITMAP   m_bitmap;
     WXHDC       m_dc;
@@ -46,7 +46,7 @@ class WXDLLEXPORT wxDC : public wxDCBase
 {
 public:
     wxDC(WXHDC hDC) { Init(); m_hDC = hDC; }
-    ~wxDC();
+    virtual ~wxDC();
 
     // implement base class pure virtuals
     // ----------------------------------
@@ -72,12 +72,6 @@ public:
 
     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 DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
 
     virtual bool CanDrawBitmap() const;
     virtual bool CanGetTextExtent() const;
@@ -139,6 +133,14 @@ public:
     static void ClearCache();
 #endif
 
+    // RTL related functions
+    // ---------------------
+
+    // get or change the layout direction (LTR or RTL) for this dc,
+    // wxLayout_Default is returned if layout direction is not supported
+    virtual wxLayoutDirection GetLayoutDirection() const;
+    virtual void SetLayoutDirection(wxLayoutDirection dir);
+
 protected:
     void Init()
     {
@@ -160,9 +162,21 @@ protected:
     // classes
     wxDC() { Init(); }
 
+    virtual void DoGetTextExtent(const wxString& string,
+                                 wxCoord *x, wxCoord *y,
+                                 wxCoord *descent = NULL,
+                                 wxCoord *externalLeading = NULL,
+                                 wxFont *theFont = NULL) const;
+    virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
+
     virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
                              int style = wxFLOOD_SURFACE);
 
+    virtual void DoGradientFillLinear(const wxRect& rect,
+                                      const wxColour& initialColour,
+                                      const wxColour& destColour,
+                                      wxDirection nDirection = wxEAST);
+
     virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
 
     virtual void DoDrawPoint(wxCoord x, wxCoord y);
@@ -291,7 +305,11 @@ protected:
 class WXDLLEXPORT wxDCTemp : public wxDC
 {
 public:
-    wxDCTemp(WXHDC hdc) : wxDC(hdc)
+    // 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),
+          m_size(size)
     {
     }
 
@@ -301,17 +319,23 @@ public:
         SetHDC((WXHDC)NULL);
     }
 
+protected:
     virtual void DoGetSize(int *w, int *h) const
     {
-        wxFAIL_MSG( _T("no way to retrieve the size of generic DC") );
+        wxASSERT_MSG( m_size.IsFullySpecified(),
+                      _T("size of this DC hadn't been set and is unknown") );
 
         if ( w )
-            *w = 0;
+            *w = m_size.x;
         if ( h )
-            *h = 0;
+            *h = m_size.y;
     }
 
 private:
+    // size of this DC must be explicitly set by SetSize() as we have no way to
+    // find it ourselves
+    const wxSize m_size;
+
     DECLARE_NO_COPY_CLASS(wxDCTemp)
 };