cdbcf4c286
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52960 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
371 lines
14 KiB
Objective-C
371 lines
14 KiB
Objective-C
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: renderer.h
|
|
// Purpose: interface of wxSplitterRenderParams
|
|
// Author: wxWidgets team
|
|
// RCS-ID: $Id$
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
/**
|
|
@class wxSplitterRenderParams
|
|
@wxheader{renderer.h}
|
|
|
|
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 and so can be
|
|
only examined but not modified.
|
|
|
|
@library{wxbase}
|
|
@category{FIXME}
|
|
*/
|
|
class wxSplitterRenderParams
|
|
{
|
|
public:
|
|
/**
|
|
const wxCoord border
|
|
The width of the border drawn by the splitter inside it, may be 0.
|
|
*/
|
|
|
|
|
|
/**
|
|
const bool isHotSensitive
|
|
@true if the sash changes appearance when the mouse passes over it, @false
|
|
otherwise.
|
|
*/
|
|
|
|
|
|
/**
|
|
const wxCoord widthSash
|
|
The width of the splitter sash.
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxDelegateRendererNative
|
|
@wxheader{renderer.h}
|
|
|
|
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{FIXME}
|
|
*/
|
|
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 @e rendererNative.
|
|
In any case, this sets up the delegate renderer object to follow all calls to
|
|
the specified real renderer.
|
|
Note that this object does not take ownership of (i.e. won't delete)
|
|
@e rendererNative.
|
|
*/
|
|
wxDelegateRendererNative();
|
|
wxDelegateRendererNative(wxRendererNative& rendererNative);
|
|
//@}
|
|
|
|
/**
|
|
This class also provides all the virtual methods of
|
|
wxRendererNative, please refer to that class
|
|
documentation for the details.
|
|
*/
|
|
DrawXXX(...);
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxRendererNative
|
|
@wxheader{renderer.h}
|
|
|
|
First, a brief introduction to wxRenderer 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: wxRenderer 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 overview_samplerender "Render sample".
|
|
|
|
All drawing functions take some standard parameters:
|
|
|
|
@e win is 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.
|
|
@e dc is 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.
|
|
@e rect the bounding rectangle for the element to be drawn.
|
|
@e flags the optional flags (none by default) which can be a
|
|
combination of the @c wxCONTROL_XXX constants below.
|
|
|
|
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.
|
|
*/
|
|
~wxRendererNative();
|
|
|
|
/**
|
|
Draw a check box (used by wxDataViewCtrl).
|
|
@a flags may have the @c wxCONTROL_CHECKED, @c wxCONTROL_CURRENT or
|
|
@c wxCONTROL_UNDETERMINED bit set.
|
|
*/
|
|
void DrawCheckBox(wxWindow* win, wxDC& dc, const wxRect& rect,
|
|
int flags);
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
void DrawComboBoxDropButton(wxWindow* win, wxDC& dc,
|
|
const wxRect& rect,
|
|
int flags);
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
void DrawDropArrow(wxWindow* win, wxDC& dc, const wxRect& rect,
|
|
int flags);
|
|
|
|
/**
|
|
Draw a focus rectangle using the specified rectangle.
|
|
wxListCtrl. The only supported flags is
|
|
@c wxCONTROL_SELECTED for items which are selected.
|
|
*/
|
|
void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect,
|
|
int flags = 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.
|
|
The @a sortArrow parameter can be one of
|
|
@c wxHDR_SORT_ICON_NONE, @c wxHDR_SORT_ICON_UP, or
|
|
@c wxHDR_SORT_ICON_DOWN. Additional values controlling the
|
|
drawing of a text or bitmap label can be passed in @e params. The
|
|
value returned is the optimal width to contain the the unabreviated
|
|
label text or bitmap, the sort arrow if present, and internal margins.
|
|
*/
|
|
int DrawHeaderButton(wxWindow* win, wxDC& dc, const wxRect& rect,
|
|
int flags = 0,
|
|
wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,
|
|
wxHeaderButtonParams* params = NULL);
|
|
|
|
/**
|
|
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 @e win.
|
|
*/
|
|
void DrawItemSelectionRect(wxWindow* win, wxDC& dc,
|
|
const wxRect& rect,
|
|
int flags = 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.
|
|
*/
|
|
void DrawPushButton(wxWindow* win, wxDC& dc, const wxRect& rect,
|
|
int flags);
|
|
|
|
/**
|
|
Draw the border for sash window: this border must be such that the sash
|
|
drawn by @ref drawsplittersash() DrawSash blends into it
|
|
well.
|
|
*/
|
|
void DrawSplitterBorder(wxWindow* win, wxDC& dc,
|
|
const wxRect& rect,
|
|
int flags = 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.
|
|
*/
|
|
void DrawSplitterSash(wxWindow* win, wxDC& dc,
|
|
const wxSize& size,
|
|
wxCoord position,
|
|
wxOrientation orient,
|
|
int flags = 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.
|
|
*/
|
|
void DrawTreeItemButton(wxWindow* win, wxDC& dc,
|
|
const wxRect& rect,
|
|
int flags = 0);
|
|
|
|
/**
|
|
Return the currently used renderer.
|
|
*/
|
|
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().
|
|
*/
|
|
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().
|
|
*/
|
|
wxRendererNative GetGeneric();
|
|
|
|
/**
|
|
Returns the height of a header button, either a fixed platform height if
|
|
available, or a
|
|
generic height based on the window's font.
|
|
*/
|
|
int GetHeaderButtonHeight(const wxWindow* win);
|
|
|
|
/**
|
|
Get the splitter parameters, see
|
|
wxSplitterRenderParams.
|
|
*/
|
|
wxSplitterRenderParams GetSplitterParams(const wxWindow* win);
|
|
|
|
/**
|
|
This function is used for version checking: Load()
|
|
refuses to load any shared libraries implementing an older or incompatible
|
|
version.
|
|
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.
|
|
*/
|
|
wxRendererVersion GetVersion() const;
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
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.
|
|
*/
|
|
wxRendererNative* Set(wxRendererNative* renderer);
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxRendererVersion
|
|
@wxheader{renderer.h}
|
|
|
|
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{FIXME}
|
|
*/
|
|
class wxRendererVersion
|
|
{
|
|
public:
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
const int age
|
|
The age component.
|
|
*/
|
|
|
|
|
|
/**
|
|
const int version
|
|
The version component.
|
|
*/
|
|
};
|
|
|