]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/univ/renderer.h
Use Cairo for wxGraphicsContext in wxX11.
[wxWidgets.git] / include / wx / univ / renderer.h
index 60ac8bb934f32ac81ef8d363ab62f1809435632a..c03a245dc31d6912c65fbaa0b9183143b5ff7221 100644 (file)
 
 #include "wx/renderer.h"
 
-class WXDLLEXPORT wxWindow;
-class WXDLLEXPORT wxDC;
-class WXDLLEXPORT wxCheckListBox;
+class WXDLLIMPEXP_FWD_CORE wxWindow;
+class WXDLLIMPEXP_FWD_CORE wxDC;
+class WXDLLIMPEXP_FWD_CORE wxCheckListBox;
 
 #if wxUSE_LISTBOX
-    class WXDLLEXPORT wxListBox;
+    class WXDLLIMPEXP_FWD_CORE wxListBox;
 #endif // wxUSE_LISTBOX
 
 #if wxUSE_MENUS
-   class WXDLLEXPORT wxMenu;
-   class WXDLLEXPORT wxMenuGeometryInfo;
+   class WXDLLIMPEXP_FWD_CORE wxMenu;
+   class WXDLLIMPEXP_FWD_CORE wxMenuGeometryInfo;
 #endif // wxUSE_MENUS
 
-class WXDLLEXPORT wxScrollBar;
+class WXDLLIMPEXP_FWD_CORE wxScrollBar;
 
 #if wxUSE_TEXTCTRL
-    class WXDLLEXPORT wxTextCtrl;
+    class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
 #endif
 
 #if wxUSE_GAUGE
-    class WXDLLEXPORT wxGauge;
+    class WXDLLIMPEXP_FWD_CORE wxGauge;
 #endif // wxUSE_GAUGE
 
 #include "wx/string.h"
 #include "wx/gdicmn.h"
 #include "wx/icon.h"
-#include "wx/scrolbar.h"            // for wxScrollBar::Element
 
 // helper class used by wxMenu-related functions
-class WXDLLEXPORT wxMenuGeometryInfo
+class WXDLLIMPEXP_CORE wxMenuGeometryInfo
 {
 public:
     // get the total size of the menu
@@ -72,7 +71,7 @@ public:
 // wxRenderer: abstract renderers interface
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxRenderer : public wxDelegateRendererNative
+class WXDLLIMPEXP_CORE wxRenderer : public wxDelegateRendererNative
 {
 public:
     // drawing functions
@@ -83,15 +82,13 @@ public:
                                 const wxColour& col,
                                 const wxRect& rect,
                                 int flags,
-                                wxWindow *window = NULL ) = 0;
+                                wxWindow *window = NULL) = 0;
 
     // draw the button surface
     virtual void DrawButtonSurface(wxDC& dc,
-                                const wxColour& col,
-                                const wxRect& rect,
-                                int flags )
-        { DrawBackground( dc, col, rect, flags ); }
-
+                                   const wxColour& col,
+                                   const wxRect& rect,
+                                   int flags) = 0;
 
     // draw the label inside the given rectangle with the specified alignment
     // and optionally emphasize the character with the given index
@@ -113,13 +110,14 @@ public:
                                  int indexAccel = -1,
                                  wxRect *rectBounds = NULL) = 0;
 
+
     // draw the border and optionally return the rectangle containing the
     // region inside the border
     virtual void DrawBorder(wxDC& dc,
                             wxBorder border,
                             const wxRect& rect,
                             int flags = 0,
-                            wxRect *rectIn = (wxRect *)NULL) = 0;
+                            wxRect *rectIn = NULL) = 0;
 
     // draw text control border (I hate to have a separate method for this but
     // it is needed to accommodate GTK+)
@@ -127,13 +125,13 @@ public:
                                 wxBorder border,
                                 const wxRect& rect,
                                 int flags = 0,
-                                wxRect *rectIn = (wxRect *)NULL) = 0;
+                                wxRect *rectIn = NULL) = 0;
 
     // draw push button border and return the rectangle left for the label
     virtual void DrawButtonBorder(wxDC& dc,
                                   const wxRect& rect,
                                   int flags = 0,
-                                  wxRect *rectIn = (wxRect *)NULL) = 0;
+                                  wxRect *rectIn = NULL) = 0;
 
     // draw a horizontal line
     virtual void DrawHorizontalLine(wxDC& dc,
@@ -222,6 +220,7 @@ public:
                                    int tbarStyle = 0) = 0;
 #endif // wxUSE_TOOLBAR
 
+#if wxUSE_TEXTCTRL
     // draw a (part of) line in the text control
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
@@ -232,7 +231,9 @@ public:
 
     // draw a line wrap indicator
     virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect) = 0;
+#endif // wxUSE_TEXTCTRL
 
+#if wxUSE_NOTEBOOK
     // draw a notebook tab
     virtual void DrawTab(wxDC& dc,
                          const wxRect& rect,
@@ -241,6 +242,7 @@ public:
                          const wxBitmap& bitmap = wxNullBitmap,
                          int flags = 0,
                          int indexAccel = -1) = 0;
+#endif // wxUSE_NOTEBOOK
 
 #if wxUSE_SLIDER
 
@@ -347,11 +349,13 @@ public:
     // misc functions
     // --------------
 
+#if wxUSE_COMBOBOX
     // return the bitmaps to use for combobox button
     virtual void GetComboBitmaps(wxBitmap *bmpNormal,
                                  wxBitmap *bmpFocus,
                                  wxBitmap *bmpPressed,
                                  wxBitmap *bmpDisabled) = 0;
+#endif // wxUSE_COMBOBOX
 
     // geometry functions
     // ------------------
@@ -371,30 +375,8 @@ public:
     virtual void AdjustSize(wxSize *size, const wxWindow *window) = 0;
 
 #if wxUSE_SCROLLBAR
-
     // get the size of a scrollbar arrow
     virtual wxSize GetScrollbarArrowSize() const = 0;
-
-    // gets the bounding box for a scrollbar element for the given (by default
-    // - current) thumb position
-    virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar,
-                                    wxScrollBar::Element elem,
-                                    int thumbPos = -1) const = 0;
-
-    // returns the size of the scrollbar shaft excluding the arrows
-    virtual wxCoord GetScrollbarSize(const wxScrollBar *scrollbar) = 0;
-
-    // returns one of wxHT_SCROLLBAR_XXX constants
-    virtual wxHitTest HitTestScrollbar(const wxScrollBar *scrollbar,
-                                       const wxPoint& pt) const = 0;
-
-    // translate the scrollbar position (in logical units) into physical
-    // coordinate (in pixels) and the other way round
-    virtual wxCoord ScrollbarToPixel(const wxScrollBar *scrollbar,
-                                     int thumbPos = -1) = 0;
-    virtual int PixelToScrollbar(const wxScrollBar *scrollbar,
-                                 wxCoord coord) = 0;
-
 #endif // wxUSE_SCROLLBAR
 
     // get the height of a listbox item from the base font height
@@ -405,12 +387,14 @@ public:
     virtual wxSize GetRadioBitmapSize() const = 0;
     virtual wxCoord GetCheckItemMargin() const = 0;
 
+#if wxUSE_TOOLBAR
     // get the standard size of a toolbar button and also return the size of
     // a toolbar separator in the provided pointer
     virtual wxSize GetToolBarButtonSize(wxCoord *separator) const = 0;
 
     // get the margins between/around the toolbar buttons
     virtual wxSize GetToolBarMargin() const = 0;
+#endif // wxUSE_TOOLBAR
 
 #if wxUSE_TEXTCTRL
     // convert between text rectangle and client rectangle for text controls:
@@ -424,11 +408,13 @@ public:
                                      wxCoord *extraSpaceBeyond) const = 0;
 #endif // wxUSE_TEXTCTRL
 
+#if wxUSE_NOTEBOOK
     // get the overhang of a selected tab
     virtual wxSize GetTabIndent() const = 0;
 
     // get the padding around the text in a tab
     virtual wxSize GetTabPadding() const = 0;
+#endif // wxUSE_NOTEBOOK
 
 #if wxUSE_SLIDER
     // get the default size of the slider in lesser dimension (i.e. height of a
@@ -468,8 +454,14 @@ public:
 
 #if wxUSE_STATUSBAR
     // get the borders around the status bar fields (x and y fields of the
-    // return value) and also, optionally, the border between the fields
-    virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const = 0;
+    // return value)
+    virtual wxSize GetStatusBarBorders() const = 0;
+
+    // get the border between the status bar fields
+    virtual wxCoord GetStatusBarBorderBetweenFields() const = 0;
+
+    // get the mergin between a field and its border
+    virtual wxSize GetStatusBarFieldMargins() const = 0;
 #endif // wxUSE_STATUSBAR
 
     // get client area rectangle of top level window (i.e. subtract
@@ -492,50 +484,6 @@ public:
 
     // virtual dtor for any base class
     virtual ~wxRenderer();
-
-
-protected:
-    // draw a frame around rectFrame rectangle but not touching the rectLabel
-    // one: this is used by DrawFrame()
-    void StandardDrawFrame(wxDC& dc,
-                           const wxRect& rectFrame,
-                           const wxRect& rectLabel);
-
-    // standard text line drawing: just use DrawText() and highlight the
-    // selected part
-    static void StandardDrawTextLine(wxDC& dc,
-                                     const wxString& text,
-                                     const wxRect& rect,
-                                     int selStart, int selEnd,
-                                     int flags);
-
-#if wxUSE_SCROLLBAR
-    // standard scrollbar hit testing: this assumes that it only has 2 arrows
-    // and a thumb, so the themes which have more complicated scrollbars (e.g.
-    // BeOS) can't use this method
-    static wxRect StandardGetScrollbarRect(const wxScrollBar *scrollbar,
-                                           wxScrollBar::Element elem,
-                                           int thumbPos,
-                                           const wxSize& sizeArrow);
-    static wxHitTest StandardHitTestScrollbar(const wxScrollBar *scrollbar,
-                                              const wxPoint& pt,
-                                              const wxSize& sizeArrow);
-    static wxCoord StandardScrollbarToPixel(const wxScrollBar *scrollbar,
-                                            int thumbPos,
-                                            const wxSize& sizeArrow);
-    static int StandardPixelToScrollbar(const wxScrollBar *scrollbar,
-                                        wxCoord coord,
-                                        const wxSize& sizeArrow);
-    static wxCoord StandardScrollBarSize(const wxScrollBar *scrollbar,
-                                         const wxSize& sizeArrow);
-    static void StandardScrollBarThumbSize(wxCoord lenBar,
-                                           int thumbPos,
-                                           int thumbSize,
-                                           int range,
-                                           wxCoord *thumbStart,
-                                           wxCoord *thumbEnd);
-#endif // wxUSE_SCROLLBAR
-
 };
 
 // ----------------------------------------------------------------------------
@@ -545,7 +493,7 @@ protected:
 // will be left to the original renderer
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxDelegateRenderer : public wxRenderer
+class WXDLLIMPEXP_CORE wxDelegateRenderer : public wxRenderer
 {
 public:
     wxDelegateRenderer(wxRenderer *renderer) : m_renderer(renderer) { }
@@ -556,6 +504,13 @@ public:
                                 int flags,
                                 wxWindow *window = NULL )
         { m_renderer->DrawBackground(dc, col, rect, flags, window ); }
+    virtual void DrawButtonSurface(wxDC& dc,
+                                   const wxColour& col,
+                                   const wxRect& rect,
+                                   int flags)
+        { m_renderer->DrawButtonSurface(dc, col, rect, flags); }
+    virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0)
+        { m_renderer->DrawFocusRect(win, dc, rect, flags); }
     virtual void DrawLabel(wxDC& dc,
                            const wxString& label,
                            const wxRect& rect,
@@ -579,18 +534,18 @@ public:
                             wxBorder border,
                             const wxRect& rect,
                             int flags = 0,
-                            wxRect *rectIn = (wxRect *)NULL)
+                            wxRect *rectIn = NULL)
         { m_renderer->DrawBorder(dc, border, rect, flags, rectIn); }
     virtual void DrawTextBorder(wxDC& dc,
                                 wxBorder border,
                                 const wxRect& rect,
                                 int flags = 0,
-                                wxRect *rectIn = (wxRect *)NULL)
+                                wxRect *rectIn = NULL)
         { m_renderer->DrawTextBorder(dc, border, rect, flags, rectIn); }
     virtual void DrawButtonBorder(wxDC& dc,
                                   const wxRect& rect,
                                   int flags = 0,
-                                  wxRect *rectIn = (wxRect *)NULL)
+                                  wxRect *rectIn = NULL)
         { m_renderer->DrawButtonBorder(dc, rect, flags, rectIn); }
     virtual void DrawFrame(wxDC& dc,
                            const wxString& label,
@@ -667,6 +622,8 @@ public:
                                    int tbarStyle = 0)
         { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style, tbarStyle); }
 #endif // wxUSE_TOOLBAR
+
+#if wxUSE_TEXTCTRL
     virtual void DrawTextLine(wxDC& dc,
                               const wxString& text,
                               const wxRect& rect,
@@ -676,7 +633,9 @@ public:
         { m_renderer->DrawTextLine(dc, text, rect, selStart, selEnd, flags); }
     virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect)
         { m_renderer->DrawLineWrapMark(dc, rect); }
+#endif // wxUSE_TEXTCTRL
 
+#if wxUSE_NOTEBOOK
     virtual void DrawTab(wxDC& dc,
                          const wxRect& rect,
                          wxDirection dir,
@@ -685,6 +644,7 @@ public:
                          int flags = 0,
                          int accel = -1)
         { m_renderer->DrawTab(dc, rect, dir, label, bitmap, flags, accel); }
+#endif // wxUSE_NOTEBOOK
 
 #if wxUSE_SLIDER
 
@@ -779,12 +739,14 @@ public:
                                  int flags = 0)
         { m_renderer->DrawFrameButton(dc, x, y, button, flags); }
 
+#if wxUSE_COMBOBOX
     virtual void GetComboBitmaps(wxBitmap *bmpNormal,
                                  wxBitmap *bmpFocus,
                                  wxBitmap *bmpPressed,
                                  wxBitmap *bmpDisabled)
         { m_renderer->GetComboBitmaps(bmpNormal, bmpFocus,
                                       bmpPressed, bmpDisabled); }
+#endif // wxUSE_COMBOBOX
 
     virtual void AdjustSize(wxSize *size, const wxWindow *window)
         { m_renderer->AdjustSize(size, window); }
@@ -796,21 +758,6 @@ public:
 #if wxUSE_SCROLLBAR
     virtual wxSize GetScrollbarArrowSize() const
         { return m_renderer->GetScrollbarArrowSize(); }
-    virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar,
-                                    wxScrollBar::Element elem,
-                                    int thumbPos = -1) const
-        { return m_renderer->GetScrollbarRect(scrollbar, elem, thumbPos); }
-    virtual wxCoord GetScrollbarSize(const wxScrollBar *scrollbar)
-        { return m_renderer->GetScrollbarSize(scrollbar); }
-    virtual wxHitTest HitTestScrollbar(const wxScrollBar *scrollbar,
-                                       const wxPoint& pt) const
-        { return m_renderer->HitTestScrollbar(scrollbar, pt); }
-    virtual wxCoord ScrollbarToPixel(const wxScrollBar *scrollbar,
-                                     int thumbPos = -1)
-        { return m_renderer->ScrollbarToPixel(scrollbar, thumbPos); }
-    virtual int PixelToScrollbar(const wxScrollBar *scrollbar,
-                                 wxCoord coord)
-        { return m_renderer->PixelToScrollbar(scrollbar, coord); }
 #endif // wxUSE_SCROLLBAR
 
     virtual wxCoord GetListboxItemHeight(wxCoord fontHeight)
@@ -822,10 +769,12 @@ public:
     virtual wxCoord GetCheckItemMargin() const
         { return m_renderer->GetCheckItemMargin(); }
 
+#if wxUSE_TOOLBAR
     virtual wxSize GetToolBarButtonSize(wxCoord *separator) const
         { return m_renderer->GetToolBarButtonSize(separator); }
     virtual wxSize GetToolBarMargin() const
         { return m_renderer->GetToolBarMargin(); }
+#endif // wxUSE_TOOLBAR
 
 #if wxUSE_TEXTCTRL
     virtual wxRect GetTextTotalArea(const wxTextCtrl *text,
@@ -837,8 +786,10 @@ public:
         { return m_renderer->GetTextClientArea(text, rect, extraSpaceBeyond); }
 #endif // wxUSE_TEXTCTRL
 
+#if wxUSE_NOTEBOOK
     virtual wxSize GetTabIndent() const { return m_renderer->GetTabIndent(); }
     virtual wxSize GetTabPadding() const { return m_renderer->GetTabPadding(); }
+#endif // wxUSE_NOTEBOOK
 
 #if wxUSE_SLIDER
     virtual wxCoord GetSliderDim() const
@@ -869,9 +820,14 @@ public:
 #endif // wxUSE_MENUS
 
 #if wxUSE_STATUSBAR
-    virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const
-        { return m_renderer->GetStatusBarBorders(borderBetweenFields); }
+    virtual wxSize GetStatusBarBorders() const
+        { return m_renderer->GetStatusBarBorders(); }
+    virtual wxCoord GetStatusBarBorderBetweenFields() const
+        { return m_renderer->GetStatusBarBorderBetweenFields(); }
+    virtual wxSize GetStatusBarFieldMargins() const
+        { return m_renderer->GetStatusBarFieldMargins(); }
 #endif // wxUSE_STATUSBAR
+
     virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const
         { return m_renderer->GetFrameClientArea(rect, flags); }
     virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const
@@ -885,13 +841,13 @@ public:
                              int flags) const
         { return m_renderer->HitTestFrame(rect, pt, flags); }
 
-    virtual void DrawHeaderButton(wxWindow *win,
+    virtual int  DrawHeaderButton(wxWindow *win,
                                   wxDC& dc,
                                   const wxRect& rect,
                                   int flags = 0,
-                                  wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,
-                                  wxHeaderButtonParams* params=NULL)
-        { m_renderer->DrawHeaderButton(win, dc, rect, flags, sortArrow, params); }
+                                  wxHeaderSortIconType sortIcon = wxHDR_SORT_ICON_NONE,
+                                  wxHeaderButtonParams* params = NULL)
+        { return m_renderer->DrawHeaderButton(win, dc, rect, flags, sortIcon, params); }
     virtual void DrawTreeItemButton(wxWindow *win,
                                     wxDC& dc,
                                     const wxRect& rect,
@@ -907,15 +863,16 @@ protected:
 // OnPaint()
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxControlRenderer
+class WXDLLIMPEXP_CORE wxControlRenderer
 {
 public:
     // create a renderer for this dc with this "fundamental" renderer
     wxControlRenderer(wxWindow *control, wxDC& dc, wxRenderer *renderer);
 
     // operations
-    void DrawLabel(const wxBitmap& bitmap = wxNullBitmap,
-                   wxCoord marginX = 0, wxCoord marginY = 0);
+    void DrawLabel();
+    void DrawButtonLabel(const wxBitmap& bitmap = wxNullBitmap,
+                         wxCoord marginX = 0, wxCoord marginY = 0);
 #if wxUSE_LISTBOX
     void DrawItems(const wxListBox *listbox,
                    size_t itemFirst, size_t itemLast);