git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57992 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			523 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			523 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        renderer.h
 | 
						|
// Purpose:     interface of wxRendererNative
 | 
						|
// Author:      wxWidgets team
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Licence:     wxWindows license
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
/**
 | 
						|
    @anchor wxCONTROL_FLAGS
 | 
						|
 | 
						|
    The following rendering flags are defined for wxRendererNative:
 | 
						|
*/
 | 
						|
enum
 | 
						|
{
 | 
						|
    /** Control is disabled. */
 | 
						|
    wxCONTROL_DISABLED   = 0x00000001,
 | 
						|
 | 
						|
    /** Currently has keyboard focus. */
 | 
						|
    wxCONTROL_FOCUSED    = 0x00000002,
 | 
						|
 | 
						|
    /** (Button) is pressed. */
 | 
						|
    wxCONTROL_PRESSED    = 0x00000004,
 | 
						|
 | 
						|
    /** Control-specific bit. */
 | 
						|
    wxCONTROL_SPECIAL    = 0x00000008,
 | 
						|
 | 
						|
    /** Only for the buttons. */
 | 
						|
    wxCONTROL_ISDEFAULT  = wxCONTROL_SPECIAL,
 | 
						|
 | 
						|
    /** Only for the menu items. */
 | 
						|
    wxCONTROL_ISSUBMENU  = wxCONTROL_SPECIAL,
 | 
						|
 | 
						|
    /** Only for the tree items. */
 | 
						|
    wxCONTROL_EXPANDED   = wxCONTROL_SPECIAL,
 | 
						|
 | 
						|
    /** Only for the status bar panes. */
 | 
						|
    wxCONTROL_SIZEGRIP   = wxCONTROL_SPECIAL,
 | 
						|
 | 
						|
    /** Checkboxes only: flat border. */
 | 
						|
    wxCONTROL_FLAT       = wxCONTROL_SPECIAL,
 | 
						|
 | 
						|
    /** Mouse is currently over the control. */
 | 
						|
    wxCONTROL_CURRENT    = 0x00000010,
 | 
						|
 | 
						|
    /** Selected item in e.g. listbox. */
 | 
						|
    wxCONTROL_SELECTED   = 0x00000020,
 | 
						|
 | 
						|
    /** (Check/radio button) is checked. */
 | 
						|
    wxCONTROL_CHECKED    = 0x00000040,
 | 
						|
 | 
						|
    /** (Menu) item can be checked. */
 | 
						|
    wxCONTROL_CHECKABLE  = 0x00000080,
 | 
						|
 | 
						|
    /** (Check) undetermined state. */
 | 
						|
    wxCONTROL_UNDETERMINED = wxCONTROL_CHECKABLE
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
    @struct wxSplitterRenderParams
 | 
						|
 | 
						|
    This is just a simple @c struct used as a return value of
 | 
						|
    wxRendererNative::GetSplitterParams().
 | 
						|
 | 
						|
    It doesn't have any methods and all of its fields are constant, so they can
 | 
						|
    only be examined but not modified.
 | 
						|
 | 
						|
    @library{wxbase}
 | 
						|
    @category{gdi}
 | 
						|
*/
 | 
						|
struct wxSplitterRenderParams
 | 
						|
{
 | 
						|
    /**
 | 
						|
        The only way to initialize this struct is by using this ctor.
 | 
						|
    */
 | 
						|
    wxSplitterRenderParams(wxCoord widthSash_, wxCoord border_, bool isSens_);
 | 
						|
 | 
						|
    /**
 | 
						|
        The width of the border drawn by the splitter inside it, may be 0.
 | 
						|
    */
 | 
						|
    const wxCoord border;
 | 
						|
 | 
						|
    /**
 | 
						|
        @true if the sash changes appearance when the mouse passes over it, @false
 | 
						|
        otherwise.
 | 
						|
    */
 | 
						|
    const bool isHotSensitive;
 | 
						|
 | 
						|
    /**
 | 
						|
        The width of the splitter sash.
 | 
						|
    */
 | 
						|
    const wxCoord widthSash;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
    @struct wxHeaderButtonParams
 | 
						|
 | 
						|
    This @c struct can optionally be used with
 | 
						|
    wxRendererNative::DrawHeaderButton() to specify custom values used to draw
 | 
						|
    the text or bitmap label.
 | 
						|
 | 
						|
    @library{wxbase}
 | 
						|
    @category{gdi}
 | 
						|
*/
 | 
						|
struct wxHeaderButtonParams
 | 
						|
{
 | 
						|
    wxHeaderButtonParams();
 | 
						|
 | 
						|
    wxColour    m_arrowColour;
 | 
						|
    wxColour    m_selectionColour;
 | 
						|
    wxString    m_labelText;
 | 
						|
    wxFont      m_labelFont;
 | 
						|
    wxColour    m_labelColour;
 | 
						|
    wxBitmap    m_labelBitmap;
 | 
						|
    int         m_labelAlignment;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
    Used to specify the type of sort arrow used with
 | 
						|
    wxRendererNative::DrawHeaderButton().
 | 
						|
*/
 | 
						|
enum wxHeaderSortIconType
 | 
						|
{
 | 
						|
    wxHDR_SORT_ICON_NONE,    ///< Don't draw a sort arrow.
 | 
						|
    wxHDR_SORT_ICON_UP,      ///< Draw a sort arrow icon pointing up.
 | 
						|
    wxHDR_SORT_ICON_DOWN     ///< Draw a sort arrow icon pointing down.
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    @class wxDelegateRendererNative
 | 
						|
 | 
						|
    wxDelegateRendererNative allows reuse of renderers code by forwarding all the
 | 
						|
    wxRendererNative methods to the given object and
 | 
						|
    thus allowing you to only modify some of its methods -- without having to
 | 
						|
    reimplement all of them.
 | 
						|
 | 
						|
    Note that the "normal", inheritance-based approach, doesn't work with the
 | 
						|
    renderers as it is impossible to derive from a class unknown at compile-time
 | 
						|
    and the renderer is only chosen at run-time. So suppose that you want to only
 | 
						|
    add something to the drawing of the tree control buttons but leave all the
 | 
						|
    other methods unchanged -- the only way to do it, considering that the renderer
 | 
						|
    class which you want to customize might not even be written yet when you write
 | 
						|
    your code (it could be written later and loaded from a DLL during run-time), is
 | 
						|
    by using this class.
 | 
						|
 | 
						|
    Except for the constructor, it has exactly the same methods as
 | 
						|
    wxRendererNative and their implementation is
 | 
						|
    trivial: they are simply forwarded to the real renderer. Note that the "real"
 | 
						|
    renderer may, in turn, be a wxDelegateRendererNative as well and that there may
 | 
						|
    be arbitrarily many levels like this -- but at the end of the chain there must
 | 
						|
    be a real renderer which does the drawing.
 | 
						|
 | 
						|
    @library{wxcore}
 | 
						|
    @category{gdi}
 | 
						|
 | 
						|
    @see wxRendererNative
 | 
						|
*/
 | 
						|
class wxDelegateRendererNative : public wxRendererNative
 | 
						|
{
 | 
						|
public:
 | 
						|
    /**
 | 
						|
        The default constructor does the same thing as the other one except that it
 | 
						|
        uses the @ref wxRendererNative::GetGeneric() "generic renderer" instead of the
 | 
						|
        user-specified @a rendererNative.
 | 
						|
 | 
						|
        In any case, this sets up the delegate renderer object to follow all calls to
 | 
						|
        the specified real renderer.
 | 
						|
    */
 | 
						|
    wxDelegateRendererNative();
 | 
						|
    /**
 | 
						|
        This constructor uses the user-specified @a rendererNative to set up the delegate
 | 
						|
        renderer object to follow all calls to the specified real renderer.
 | 
						|
 | 
						|
        @note
 | 
						|
        This object does not take ownership of (i.e. won't delete) @a rendererNative.
 | 
						|
    */
 | 
						|
    wxDelegateRendererNative(wxRendererNative& rendererNative);
 | 
						|
 | 
						|
    // The rest of these functions inherit the documentation from wxRendererNative
 | 
						|
 | 
						|
    virtual int DrawHeaderButton(wxWindow *win, wxDC& dc,
 | 
						|
                                 const wxRect& rect, int flags = 0,
 | 
						|
                                 wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,
 | 
						|
                                 wxHeaderButtonParams* params = NULL);
 | 
						|
 | 
						|
    virtual int DrawHeaderButtonContents(wxWindow *win, wxDC& dc,
 | 
						|
                                         const wxRect& rect, int flags = 0,
 | 
						|
                                         wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,
 | 
						|
                                         wxHeaderButtonParams* params = NULL);
 | 
						|
 | 
						|
    virtual int GetHeaderButtonHeight(wxWindow *win);
 | 
						|
 | 
						|
    virtual void DrawTreeItemButton(wxWindow *win, wxDC& dc,
 | 
						|
                                    const wxRect& rect, int flags = 0);
 | 
						|
 | 
						|
    virtual void DrawSplitterBorder(wxWindow *win, wxDC& dc,
 | 
						|
                                    const wxRect& rect, int flags = 0);
 | 
						|
 | 
						|
    virtual void DrawSplitterSash(wxWindow *win, wxDC& dc,
 | 
						|
                                  const wxSize& size, wxCoord position,
 | 
						|
                                  wxOrientation orient, int flags = 0);
 | 
						|
 | 
						|
    virtual void DrawComboBoxDropButton(wxWindow *win, wxDC& dc,
 | 
						|
                                        const wxRect& rect, int flags = 0);
 | 
						|
 | 
						|
    virtual void DrawDropArrow(wxWindow *win, wxDC& dc,
 | 
						|
                               const wxRect& rect, int flags = 0);
 | 
						|
 | 
						|
    virtual void DrawCheckBox(wxWindow *win, wxDC& dc,
 | 
						|
                              const wxRect& rect, int flags = 0 );
 | 
						|
 | 
						|
    virtual wxSize GetCheckBoxSize(wxWindow *win);
 | 
						|
 | 
						|
    virtual void DrawPushButton(wxWindow *win, wxDC& dc,
 | 
						|
                                const wxRect& rect, int flags = 0 );
 | 
						|
 | 
						|
    virtual void DrawItemSelectionRect(wxWindow *win, wxDC& dc,
 | 
						|
                                       const wxRect& rect, int flags = 0 );
 | 
						|
 | 
						|
    virtual void DrawFocusRect(wxWindow* win, wxDC& dc,
 | 
						|
                               const wxRect& rect, int flags = 0);
 | 
						|
 | 
						|
    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
 | 
						|
 | 
						|
    virtual wxRendererVersion GetVersion() const;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    @class wxRendererNative
 | 
						|
 | 
						|
    First, a brief introduction to wxRendererNative and why it is needed.
 | 
						|
 | 
						|
    Usually wxWidgets uses the underlying low level GUI system to draw all the
 | 
						|
    controls - this is what we mean when we say that it is a "native" framework.
 | 
						|
    However not all controls exist under all (or even any) platforms and in this
 | 
						|
    case wxWidgets provides a default, generic, implementation of them written in
 | 
						|
    wxWidgets itself.
 | 
						|
 | 
						|
    These controls don't have the native appearance if only the standard
 | 
						|
    line drawing and other graphics primitives are used, because the native
 | 
						|
    appearance is different under different platforms while the lines are always
 | 
						|
    drawn in the same way.
 | 
						|
 | 
						|
    This is why we have renderers: wxRendererNative is a class which virtualizes the
 | 
						|
    drawing, i.e. it abstracts the drawing operations and allows you to draw say, a
 | 
						|
    button, without caring about exactly how this is done. Of course, as we
 | 
						|
    can draw the button differently in different renderers, this also allows us to
 | 
						|
    emulate the native look and feel.
 | 
						|
 | 
						|
    So the renderers work by exposing a large set of high-level drawing functions
 | 
						|
    which are used by the generic controls. There is always a default global
 | 
						|
    renderer but it may be changed or extended by the user, see
 | 
						|
    @ref page_samples_render.
 | 
						|
 | 
						|
    All drawing functions take some standard parameters:
 | 
						|
 | 
						|
    @li @a win - The window being drawn. It is normally not used and when
 | 
						|
    it is it should only be used as a generic wxWindow
 | 
						|
    (in order to get its low level handle, for example), but you should
 | 
						|
    not assume that it is of some given type as the same renderer
 | 
						|
    function may be reused for drawing different kinds of control.
 | 
						|
    @li @a dc - The wxDC to draw on. Only this device
 | 
						|
    context should be used for drawing. It is not necessary to restore
 | 
						|
    pens and brushes for it on function exit but, on the other hand, you
 | 
						|
    shouldn't assume that it is in any specific state on function entry:
 | 
						|
    the rendering functions should always prepare it.
 | 
						|
    @li @a rect - The bounding rectangle for the element to be drawn.
 | 
						|
    @li @a flags - The optional flags (none by default) which can be a
 | 
						|
    combination of the @ref wxCONTROL_FLAGS.
 | 
						|
 | 
						|
    Note that each drawing function restores the wxDC attributes if
 | 
						|
    it changes them, so it is safe to assume that the same pen, brush and colours
 | 
						|
    that were active before the call to this function are still in effect after it.
 | 
						|
 | 
						|
    @library{wxcore}
 | 
						|
    @category{gdi}
 | 
						|
*/
 | 
						|
class wxRendererNative
 | 
						|
{
 | 
						|
public:
 | 
						|
    /**
 | 
						|
        Virtual destructor as for any base class.
 | 
						|
    */
 | 
						|
    virtual ~wxRendererNative();
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a check box.
 | 
						|
 | 
						|
        @a flags may have the @c wxCONTROL_CHECKED, @c wxCONTROL_CURRENT or
 | 
						|
        @c wxCONTROL_UNDETERMINED bit set, see @ref wxCONTROL_FLAGS.
 | 
						|
    */
 | 
						|
    virtual void DrawCheckBox(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                              int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a button like the one used by wxComboBox to show a
 | 
						|
        drop down window. The usual appearance is a downwards pointing arrow.
 | 
						|
 | 
						|
        @a flags may have the @c wxCONTROL_PRESSED or @c wxCONTROL_CURRENT bit set,
 | 
						|
        see @ref wxCONTROL_FLAGS.
 | 
						|
    */
 | 
						|
    virtual void DrawComboBoxDropButton(wxWindow* win, wxDC& dc,
 | 
						|
                                        const wxRect& rect, int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a drop down arrow that is suitable for use outside a combo box. Arrow will
 | 
						|
        have transparent background.
 | 
						|
 | 
						|
        @a rect is not entirely filled by the arrow. Instead, you should use bounding
 | 
						|
        rectangle of a drop down button which arrow matches the size you need.
 | 
						|
 | 
						|
        @a flags may have the @c wxCONTROL_PRESSED or @c wxCONTROL_CURRENT bit set,
 | 
						|
        see @ref wxCONTROL_FLAGS.
 | 
						|
    */
 | 
						|
    virtual void DrawDropArrow(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                               int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a focus rectangle using the specified rectangle.
 | 
						|
        wxListCtrl.
 | 
						|
 | 
						|
        The only supported flags is @c wxCONTROL_SELECTED for items which are selected.
 | 
						|
        see @ref wxCONTROL_FLAGS.
 | 
						|
    */
 | 
						|
    virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                               int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw the header control button (used, for example, by wxListCtrl).
 | 
						|
 | 
						|
        Depending on platforms the @a flags parameter may support the @c wxCONTROL_SELECTED
 | 
						|
        @c wxCONTROL_DISABLED and @c wxCONTROL_CURRENT bits, see @ref wxCONTROL_FLAGS.
 | 
						|
 | 
						|
        @return
 | 
						|
        The optimal width to contain the the unabreviated label text or
 | 
						|
        bitmap, the sort arrow if present, and internal margins.
 | 
						|
    */
 | 
						|
    virtual int DrawHeaderButton(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                                 int flags = 0,
 | 
						|
                                 wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, wxHeaderButtonParams* params = NULL) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw the contents of a header control button (label, sort arrows,
 | 
						|
        etc.). This function is normally only called by DrawHeaderButton().
 | 
						|
 | 
						|
        Depending on platforms the @a flags parameter may support the @c wxCONTROL_SELECTED
 | 
						|
        @c wxCONTROL_DISABLED and @c wxCONTROL_CURRENT bits, see @ref wxCONTROL_FLAGS.
 | 
						|
 | 
						|
        @return
 | 
						|
        The optimal width to contain the the unabreviated label text or
 | 
						|
        bitmap, the sort arrow if present, and internal margins.
 | 
						|
    */
 | 
						|
    virtual int DrawHeaderButtonContents(wxWindow* win, wxDC& dc,
 | 
						|
                                         const wxRect& rect, int flags = 0,
 | 
						|
                                         wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, wxHeaderButtonParams* params = NULL) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a selection rectangle underneath the text as used e.g. in a
 | 
						|
        wxListCtrl.
 | 
						|
 | 
						|
        The supported @a flags are @c wxCONTROL_SELECTED for items
 | 
						|
        which are selected (e.g. often a blue rectangle) and @c wxCONTROL_CURRENT
 | 
						|
        for the item that has the focus (often a dotted line around the item's text).
 | 
						|
        @c wxCONTROL_FOCUSED may be used to indicate if the control has the focus
 | 
						|
        (othewise the the selection rectangle is e.g. often grey and not blue).
 | 
						|
        This may be ignored by the renderer or deduced by the code directly from
 | 
						|
        the @a win.
 | 
						|
    */
 | 
						|
    virtual void DrawItemSelectionRect(wxWindow* win, wxDC& dc,
 | 
						|
                                       const wxRect& rect, int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a blank push button that looks very similar to wxButton.
 | 
						|
 | 
						|
        @a flags may have the @c wxCONTROL_PRESSED, @c wxCONTROL_CURRENT or
 | 
						|
        @c wxCONTROL_ISDEFAULT bit set, see @ref wxCONTROL_FLAGS.
 | 
						|
    */
 | 
						|
    virtual void DrawPushButton(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                                int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw the border for sash window: this border must be such that the sash
 | 
						|
        drawn by DrawSplitterSash() blends into it well.
 | 
						|
    */
 | 
						|
    virtual void DrawSplitterBorder(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                                    int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw a sash. The @a orient parameter defines whether the sash should be
 | 
						|
        vertical or horizontal and how the @a position should be interpreted.
 | 
						|
    */
 | 
						|
    virtual void DrawSplitterSash(wxWindow* win, wxDC& dc, const wxSize& size,
 | 
						|
                                  wxCoord position, wxOrientation orient,
 | 
						|
                                  int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Draw the expanded/collapsed icon for a tree control item.
 | 
						|
 | 
						|
        To draw an expanded button the @a flags parameter must contain @c wxCONTROL_EXPANDED bit,
 | 
						|
        see @ref wxCONTROL_FLAGS.
 | 
						|
    */
 | 
						|
    virtual void DrawTreeItemButton(wxWindow* win, wxDC& dc, const wxRect& rect,
 | 
						|
                                    int flags = 0) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Return the currently used renderer.
 | 
						|
    */
 | 
						|
    static wxRendererNative& Get();
 | 
						|
 | 
						|
    /**
 | 
						|
        Return the default (native) implementation for this platform -- this is also
 | 
						|
        the one used by default but this may be changed by calling
 | 
						|
        Set() in which case the return value of this
 | 
						|
        method may be different from the return value of Get().
 | 
						|
    */
 | 
						|
    static wxRendererNative& GetDefault();
 | 
						|
 | 
						|
    /**
 | 
						|
        Return the generic implementation of the renderer. Under some platforms, this
 | 
						|
        is the default renderer implementation, others have platform-specific default
 | 
						|
        renderer which can be retrieved by calling GetDefault().
 | 
						|
    */
 | 
						|
    static wxRendererNative& GetGeneric();
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the size of a check box.
 | 
						|
    */
 | 
						|
    virtual wxSize GetCheckBoxSize(wxWindow* win) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Returns the height of a header button, either a fixed platform height if
 | 
						|
        available, or a
 | 
						|
        generic height based on the window's font.
 | 
						|
    */
 | 
						|
    virtual int GetHeaderButtonHeight(wxWindow* win) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Get the splitter parameters, see
 | 
						|
        wxSplitterRenderParams.
 | 
						|
    */
 | 
						|
    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow* win) = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        This function is used for version checking: Load()
 | 
						|
        refuses to load any shared libraries implementing an older or incompatible
 | 
						|
        version.
 | 
						|
 | 
						|
        @remarks
 | 
						|
        The implementation of this method is always the same in all renderers (simply
 | 
						|
        construct wxRendererVersion using the @c wxRendererVersion::Current_XXX values),
 | 
						|
        but it has to be in the derived, not base, class, to detect mismatches between
 | 
						|
        the renderers versions and so you have to implement it anew in all renderers.
 | 
						|
    */
 | 
						|
    virtual wxRendererVersion GetVersion() const = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Load the renderer from the specified DLL, the returned pointer must be
 | 
						|
        deleted by caller if not @NULL when it is not used any more.
 | 
						|
 | 
						|
        The @a name should be just the base name of the renderer and not the full
 | 
						|
        name of the DLL file which is constructed differently (using
 | 
						|
        wxDynamicLibrary::CanonicalizePluginName())
 | 
						|
        on different systems.
 | 
						|
    */
 | 
						|
    static wxRendererNative* Load(const wxString& name);
 | 
						|
 | 
						|
    /**
 | 
						|
        Set the renderer to use, passing @NULL reverts to using the default
 | 
						|
        renderer (the global renderer must always exist).
 | 
						|
 | 
						|
        Return the previous renderer used with Set() or @NULL if none.
 | 
						|
    */
 | 
						|
    static wxRendererNative* Set(wxRendererNative* renderer);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    @struct wxRendererVersion
 | 
						|
 | 
						|
    This simple struct represents the wxRendererNative
 | 
						|
    interface version and is only used as the return value of
 | 
						|
    wxRendererNative::GetVersion().
 | 
						|
 | 
						|
    The version has two components: the version itself and the age. If the main
 | 
						|
    program and the renderer have different versions they are never compatible with
 | 
						|
    each other because the version is only changed when an existing virtual
 | 
						|
    function is modified or removed. The age, on the other hand, is incremented
 | 
						|
    each time a new virtual method is added and so, at least for the compilers
 | 
						|
    using a common C++ object model, the calling program is compatible with any
 | 
						|
    renderer which has the age greater or equal to its age. This verification is
 | 
						|
    done by IsCompatible() method.
 | 
						|
 | 
						|
    @library{wxbase}
 | 
						|
    @category{gdi}
 | 
						|
*/
 | 
						|
struct wxRendererVersion
 | 
						|
{
 | 
						|
    /**
 | 
						|
        Checks if the main program is compatible with the renderer having the version
 | 
						|
        @e ver, returns @true if it is and @false otherwise.
 | 
						|
 | 
						|
        This method is used by wxRendererNative::Load() to determine whether a
 | 
						|
        renderer can be used.
 | 
						|
    */
 | 
						|
    static bool IsCompatible(const wxRendererVersion& ver);
 | 
						|
 | 
						|
    /**
 | 
						|
        The age component.
 | 
						|
    */
 | 
						|
    const int age;
 | 
						|
 | 
						|
    /**
 | 
						|
        The version component.
 | 
						|
    */
 | 
						|
    const int version;
 | 
						|
};
 | 
						|
 |