From c95499b9be0bfecc1f5e33f0297fb1b6cc9ee3c0 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Thu, 9 Jun 2005 20:11:14 +0000 Subject: [PATCH] Added wx.RendererNative class git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34616 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/docs/CHANGES.txt | 17 +++ wxPython/setup.py | 1 + wxPython/src/__gdi_rename.i | 16 +++ wxPython/src/_renderer.i | 237 ++++++++++++++++++++++++++++++++++++ wxPython/src/gdi.i | 1 + wxPython/wxPython/_gdi.py | 24 ++++ 6 files changed, 296 insertions(+) create mode 100644 wxPython/src/_renderer.i diff --git a/wxPython/docs/CHANGES.txt b/wxPython/docs/CHANGES.txt index a0ce033079..96c295af80 100644 --- a/wxPython/docs/CHANGES.txt +++ b/wxPython/docs/CHANGES.txt @@ -1,6 +1,22 @@ Recent Changes for wxPython ===================================================================== +2.6.1.1 +------- + +wxMSW: Fix for bug #1211907, popup menu indenting inconsistent with +bitmaps. + +wxMac: Don't send an event for wx.RadioButton deselections, just the +selections. This was done to make it consistent with the other +platforms. + +Added wx.RendererNative class. + + + + + 2.6.1.0 ------- * 4-June-2005 @@ -41,6 +57,7 @@ change will get written at the next flush. + 2.6.0.1 ------- * 30-May-2005 diff --git a/wxPython/setup.py b/wxPython/setup.py index 4c231fa4e2..76b3aa4557 100755 --- a/wxPython/setup.py +++ b/wxPython/setup.py @@ -186,6 +186,7 @@ swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR, 'src/_icon.i', 'src/_pen.i', 'src/_palette.i', + 'src/_renderer.i', ], True) ext = Extension('_gdi_', ['src/drawlist.cpp'] + swig_sources, diff --git a/wxPython/src/__gdi_rename.i b/wxPython/src/__gdi_rename.i index f94804e820..3137461942 100644 --- a/wxPython/src/__gdi_rename.i +++ b/wxPython/src/__gdi_rename.i @@ -475,5 +475,21 @@ %rename(TheBrushList) wxTheBrushList; %rename(TheColourDatabase) wxTheColourDatabase; %rename(Effects) wxEffects; +%rename(CONTROL_DISABLED) wxCONTROL_DISABLED; +%rename(CONTROL_FOCUSED) wxCONTROL_FOCUSED; +%rename(CONTROL_PRESSED) wxCONTROL_PRESSED; +%rename(CONTROL_ISDEFAULT) wxCONTROL_ISDEFAULT; +%rename(CONTROL_ISSUBMENU) wxCONTROL_ISSUBMENU; +%rename(CONTROL_EXPANDED) wxCONTROL_EXPANDED; +%rename(CONTROL_CURRENT) wxCONTROL_CURRENT; +%rename(CONTROL_SELECTED) wxCONTROL_SELECTED; +%rename(CONTROL_CHECKED) wxCONTROL_CHECKED; +%rename(CONTROL_CHECKABLE) wxCONTROL_CHECKABLE; +%rename(CONTROL_UNDETERMINED) wxCONTROL_UNDETERMINED; +%rename(CONTROL_FLAGS_MASK) wxCONTROL_FLAGS_MASK; +%rename(CONTROL_DIRTY) wxCONTROL_DIRTY; +%rename(SplitterRenderParams) wxSplitterRenderParams; +%rename(RendererVersion) wxRendererVersion; +%rename(RendererNative) wxRendererNative; #endif diff --git a/wxPython/src/_renderer.i b/wxPython/src/_renderer.i new file mode 100644 index 0000000000..938575e629 --- /dev/null +++ b/wxPython/src/_renderer.i @@ -0,0 +1,237 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: _renderer.i +// Purpose: SWIG interface for wxRendererNative +// +// Author: Robin Dunn +// +// Created: 9-June-2005 +// RCS-ID: $Id$ +// Copyright: (c) 2005 by Total Control Software +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +// Not a %module + +//--------------------------------------------------------------------------- +%newgroup + +%{ +#include "wx/renderer.h" +%} + + +// control state flags used in wxRenderer and wxColourScheme +enum +{ + wxCONTROL_DISABLED = 0x00000001, // control is disabled + wxCONTROL_FOCUSED = 0x00000002, // currently has keyboard focus + wxCONTROL_PRESSED = 0x00000004, // (button) is pressed + wxCONTROL_ISDEFAULT = 0x00000008, // only applies to the buttons + wxCONTROL_ISSUBMENU = wxCONTROL_ISDEFAULT, // only for menu items + wxCONTROL_EXPANDED = wxCONTROL_ISDEFAULT, // only for the tree items + wxCONTROL_CURRENT = 0x00000010, // mouse is currently over the control + wxCONTROL_SELECTED = 0x00000020, // selected item in e.g. listbox + wxCONTROL_CHECKED = 0x00000040, // (check/radio button) is checked + wxCONTROL_CHECKABLE = 0x00000080, // (menu) item can be checked + wxCONTROL_UNDETERMINED = wxCONTROL_CHECKABLE, // (check) undetermined state + + wxCONTROL_FLAGS_MASK = 0x000000ff, + + // this is a pseudo flag not used directly by wxRenderer but rather by some + // controls internally + wxCONTROL_DIRTY = 0x80000000 +}; + + + +DocStr(wxSplitterRenderParams, +"This is just a simple struct used as a return value of +`wx.RendererNative.GetSplitterParams` and contains some platform +specific metrics about splitters. + + * widthSash: the width of the splitter sash. + * border: the width of the border of the splitter window. + * isHotSensitive: ``True`` if the splitter changes its + appearance when the mouse is over it. + +", ""); + +struct wxSplitterRenderParams +{ + wxSplitterRenderParams(wxCoord widthSash_, wxCoord border_, bool isSens_); + ~wxSplitterRenderParams(); + + // the width of the splitter sash + const wxCoord widthSash; + + // the width of the border of the splitter window + const wxCoord border; + + // true if the splitter changes its appearance when the mouse is over it + const bool isHotSensitive; +}; + + + + +DocStr(wxRendererVersion, +"This simple struct represents the `wx.RendererNative` interface +version and is only used as the return value of +`wx.RendererNative.GetVersion`.", ""); + +struct wxRendererVersion +{ + wxRendererVersion(int version_, int age_); + ~wxRendererVersion(); + + enum + { + Current_Version, + Current_Age + }; + + + // check if the given version is compatible with the current one + static bool IsCompatible(const wxRendererVersion& ver); + + const int version; + const int age; +}; + +//--------------------------------------------------------------------------- + + +DocStr(wxRendererNative, +"One of the design principles of wxWidgets is to use the native widgets +on every platform in order to be as close to the native look and feel +on every platform. However there are still cases when some generic +widgets are needed for various reasons, but it can sometimes take a +lot of messy work to make them conform to the native LnF. + +The wx.RendererNative class is a collection of functions that have +platform-specific implementations for drawing certain parts of +genereic controls in ways that are as close to the native look as +possible. +", ""); + +class wxRendererNative +{ +public: + + + DocDeclStr( + virtual void , DrawHeaderButton(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0), + "Draw the header control button (such as whar is used by `wx.ListCtrl` +in report mode.)", ""); + + + + DocDeclStr( + virtual void , DrawTreeItemButton(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0), + "Draw the expanded/collapsed icon for a tree control item.", ""); + + + DocDeclStr( + virtual void , DrawSplitterBorder(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0), + "Draw the border for a sash window: this border must be such that the +sash drawn by `DrawSplitterSash` blends into it well.", ""); + + + DocDeclStr( + virtual void , DrawSplitterSash(wxWindow *win, + wxDC& dc, + const wxSize& size, + wxCoord position, + wxOrientation orient, + int flags = 0), + "Draw a sash. The orient parameter defines whether the sash should be +vertical or horizontal and how the position should be interpreted.", ""); + + + DocDeclStr( + virtual void , DrawComboBoxDropButton(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0), + "Draw a button like the one used by `wx.ComboBox` to show a drop down +window. The usual appearance is a downwards pointing arrow. + +The ``flags`` parameter may have the ``wx.CONTROL_PRESSED`` or +``wx.CONTROL_CURRENT`` bits set.", ""); + + + DocDeclStr( + virtual void , DrawDropArrow(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0), + "Draw a drop down arrow that is suitable for use outside a combo +box. Arrow will have a transparent background. + +``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. ``flags`` may have the ``wx.CONTROL_PRESSED`` or +``wx.CONTROL_CURRENT`` bit set.", ""); + + + + DocDeclStr( + virtual wxSplitterRenderParams , GetSplitterParams(const wxWindow *win), + "Get the splitter parameters, see `wx.SplitterRenderParams`.", ""); + + + + + DocDeclStr( + static wxRendererNative& , Get(), + "Return the currently used renderer", ""); + + + DocDeclStr( + static wxRendererNative& , GetGeneric(), + "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`.", ""); + + + DocDeclStr( + static wxRendererNative& , GetDefault(), + "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`.", ""); + + + + +// // 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 +// static wxRendererNative *Load(const wxString& name); + + + DocDeclStr( + static wxRendererNative *, Set(wxRendererNative *renderer), + "Set the renderer to use, passing None reverts to using the default +renderer. Returns the previous renderer used with Set or None.", ""); + + + + DocDeclStr( + virtual wxRendererVersion , GetVersion() const, + "Returns the version of the renderer. Will be used for ensuring +compatibility of dynamically loaded renderers.", ""); + +}; + + +//--------------------------------------------------------------------------- diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i index 9b0078e018..eccdd1c4aa 100644 --- a/wxPython/src/gdi.i +++ b/wxPython/src/gdi.i @@ -48,6 +48,7 @@ MAKE_CONST_WXSTRING_NOSWIG(EmptyString); %include _imaglist.i %include _stockobjs.i %include _effects.i +%include _renderer.i //--------------------------------------------------------------------------- diff --git a/wxPython/wxPython/_gdi.py b/wxPython/wxPython/_gdi.py index 2173ab4086..3484752a3a 100644 --- a/wxPython/wxPython/_gdi.py +++ b/wxPython/wxPython/_gdi.py @@ -581,6 +581,30 @@ wxTheBrushList = wx._gdi.TheBrushList wxTheColourDatabase = wx._gdi.TheColourDatabase wxEffects = wx._gdi.Effects wxEffectsPtr = wx._gdi.EffectsPtr +wxCONTROL_DISABLED = wx._gdi.CONTROL_DISABLED +wxCONTROL_FOCUSED = wx._gdi.CONTROL_FOCUSED +wxCONTROL_PRESSED = wx._gdi.CONTROL_PRESSED +wxCONTROL_ISDEFAULT = wx._gdi.CONTROL_ISDEFAULT +wxCONTROL_ISSUBMENU = wx._gdi.CONTROL_ISSUBMENU +wxCONTROL_EXPANDED = wx._gdi.CONTROL_EXPANDED +wxCONTROL_CURRENT = wx._gdi.CONTROL_CURRENT +wxCONTROL_SELECTED = wx._gdi.CONTROL_SELECTED +wxCONTROL_CHECKED = wx._gdi.CONTROL_CHECKED +wxCONTROL_CHECKABLE = wx._gdi.CONTROL_CHECKABLE +wxCONTROL_UNDETERMINED = wx._gdi.CONTROL_UNDETERMINED +wxCONTROL_FLAGS_MASK = wx._gdi.CONTROL_FLAGS_MASK +wxCONTROL_DIRTY = wx._gdi.CONTROL_DIRTY +wxSplitterRenderParams = wx._gdi.SplitterRenderParams +wxSplitterRenderParamsPtr = wx._gdi.SplitterRenderParamsPtr +wxRendererVersion = wx._gdi.RendererVersion +wxRendererVersionPtr = wx._gdi.RendererVersionPtr +wxRendererVersion_IsCompatible = wx._gdi.RendererVersion_IsCompatible +wxRendererNative = wx._gdi.RendererNative +wxRendererNativePtr = wx._gdi.RendererNativePtr +wxRendererNative_Get = wx._gdi.RendererNative_Get +wxRendererNative_GetGeneric = wx._gdi.RendererNative_GetGeneric +wxRendererNative_GetDefault = wx._gdi.RendererNative_GetDefault +wxRendererNative_Set = wx._gdi.RendererNative_Set wxMaskColour = wx._gdi.MaskColour