]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dc.h
show the item for which the context menu is shown correctly
[wxWidgets.git] / include / wx / dc.h
index 0fc5689f3964380ccb678f8f8a7d9ef319adba7c..a5784f471ccc4528f8c8b64f90846762d4e42198 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "wx/object.h"          // the base class
 
+#include "wx/intl.h"            // for wxLayoutDirection
 #include "wx/cursor.h"          // we have member variables of these classes
 #include "wx/font.h"            // so we can't do without them
 #include "wx/colour.h"
@@ -651,6 +652,16 @@ public:
         if (h) *h = hh;
     }
 
+    // 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
+        { return wxLayout_Default; }
+    virtual void SetLayoutDirection(wxLayoutDirection WXUNUSED(dir))
+        { }
+
 protected:
     // the pure virtual functions which should be implemented by wxDC
     virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
@@ -845,6 +856,10 @@ private:
     #include "wx/os2/dc.h"
 #endif
 
+#if wxUSE_GRAPHICS_CONTEXT
+    #include "wx/dcgraph.h"
+#endif
+
 // ----------------------------------------------------------------------------
 // helper class: you can use it to temporarily change the DC text colour and
 // restore it automatically when the object goes out of scope
@@ -953,5 +968,72 @@ private:
     DECLARE_NO_COPY_CLASS(wxDCClipper)
 };
 
-#endif
-    // _WX_DC_H_BASE_
+// ----------------------------------------------------------------------------
+// creates an overlay over an existing window, allowing for manipulations like
+// rubberbanding etc. this API is not stable yet, not to be used outside wx
+// internal code
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxOverlayImpl;
+class WXDLLEXPORT wxWindowDC;
+
+class WXDLLEXPORT wxOverlay
+{
+public:
+    wxOverlay();
+    ~wxOverlay();
+
+    // clears the overlay without restoring the former state
+    // to be done eg when the window content has been changed and repainted
+    void Reset();
+
+private:
+    friend class WXDLLEXPORT wxDCOverlay;
+
+    // returns true if it has been setup
+    bool IsOk();
+
+    void Init(wxWindowDC* dc, int x , int y , int width , int height);
+
+    void BeginDrawing(wxWindowDC* dc);
+
+    void EndDrawing(wxWindowDC* dc);
+
+    void Clear(wxWindowDC* dc);
+
+    wxOverlayImpl* m_impl;
+
+    bool m_inDrawing;
+
+
+    DECLARE_NO_COPY_CLASS(wxOverlay)
+};
+
+class WXDLLEXPORT wxDCOverlay
+{
+public:
+    // connects this overlay to the corresponding drawing dc, if the overlay is not initialized yet
+    // this call will do so
+    wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc, int x , int y , int width , int height);
+
+    // convenience wrapper that behaves the same using the entire area of the dc
+    wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc);
+
+    // removes the connection between the overlay and the dc
+    virtual ~wxDCOverlay();
+
+    // clears the layer, restoring the state at the last init
+    void Clear();
+
+private:
+    void Init(wxWindowDC *dc, int x , int y , int width , int height);
+
+    wxOverlay& m_overlay;
+
+    wxWindowDC* m_dc;
+
+
+    DECLARE_NO_COPY_CLASS(wxDCOverlay)
+};
+
+#endif // _WX_DC_H_BASE_