| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        renderer.h
 
- // Purpose:     interface of wxRendererNative
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     @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
 
- };
 
- /**
 
-     Title bar buttons supported by wxRendererNative::DrawTitleBarBitmap().
 
-  */
 
- enum wxTitleBarButton
 
- {
 
-     wxTITLEBAR_BUTTON_CLOSE    = 0x01000000,
 
-     wxTITLEBAR_BUTTON_MAXIMIZE = 0x02000000,
 
-     wxTITLEBAR_BUTTON_ICONIZE  = 0x04000000,
 
-     wxTITLEBAR_BUTTON_RESTORE  = 0x08000000,
 
-     wxTITLEBAR_BUTTON_HELP     = 0x10000000
 
- };
 
- /**
 
-     @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{wxcore}
 
-     @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{wxcore}
 
-     @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 int GetHeaderButtonMargin(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 unabbreviated 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 unabbreviated 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
 
-         (otherwise 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;
 
-     /**
 
-         Draw a native wxChoice
 
-     */
 
-     virtual void DrawChoice(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
 
-     /**
 
-         Draw a native wxComboBox
 
-     */
 
-     virtual void DrawComboBox(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
 
-     /**
 
-         Draw a native wxTextCtrl frame
 
-     */
 
-     virtual void DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
 
-     /**
 
-         Draw a native wxRadioButton bitmap.
 
-     */
 
-     virtual void DrawRadioBitmap(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0) = 0;
 
-     /**
 
-         Draw a title bar button in the given state.
 
-         This function is currently only available under MSW and OS X (and only
 
-         for wxTITLEBAR_BUTTON_CLOSE under the latter), its best replacement for
 
-         the other platforms is to use wxArtProvider to retrieve the bitmaps for
 
-         @c wxART_HELP and @c wxART_CLOSE (but not any other title bar buttons
 
-         and not for any state but normal, i.e. not pressed and not current one).
 
-         The presence of this function is indicated by @c
 
-         wxHAS_DRAW_TITLE_BAR_BITMAP symbol being defined.
 
-         Also notice that PNG handler must be enabled using wxImage::AddHandler()
 
-         to use this function under OS X currently as the bitmaps are embedded
 
-         in the library itself in PNG format.
 
-         @since 2.9.1
 
-      */
 
-     virtual void DrawTitleBarBitmap(wxWindow *win,
 
-                                     wxDC& dc,
 
-                                     const wxRect& rect,
 
-                                     wxTitleBarButton button,
 
-                                     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.
 
-         The @a win parameter is not used currently and can be @NULL.
 
-     */
 
-     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 @a win window's font.
 
-     */
 
-     virtual int GetHeaderButtonHeight(wxWindow* win) = 0;
 
-     /**
 
-         Returns the horizontal margin on the left and right sides of header
 
-         button's label.
 
-         @since 2.9.2
 
-      */
 
-     virtual int GetHeaderButtonMargin(wxWindow *win) = 0;
 
-     /**
 
-         Get the splitter parameters, see wxSplitterRenderParams.
 
-         The @a win parameter should be a wxSplitterWindow.
 
-     */
 
-     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{wxcore}
 
-     @category{gdi}
 
- */
 
- struct wxRendererVersion
 
- {
 
-     wxRendererVersion(int version_, int age_);
 
-     
 
-     /**
 
-         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;
 
- };
 
 
  |