added wxRendererNative to be used by the generic controls for rendering platfomr-specific parts

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22151 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-07-20 17:52:26 +00:00
parent f509d00d20
commit 9c7f49f569
13 changed files with 1021 additions and 284 deletions

View File

@@ -417,9 +417,6 @@ protected:
wxTimer *m_renameTimer;
wxBitmap *m_arrowRight,
*m_arrowDown;
// incremental search data
wxString m_findPrefix;
wxTimer *m_findTimer;

116
include/wx/renderer.h Normal file
View File

@@ -0,0 +1,116 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/renderer.h
// Purpose: wxRendererNative class declaration
// Author: Vadim Zeitlin
// Modified by:
// Created: 20.07.2003
// RCS-ID: $Id$
// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
/*
Renderers are used in wxWindows for two similar but different things:
(a) wxUniversal uses them to draw everything, i.e. all the control
(b) all the native ports use them to draw generic controls only
wxUniversal needs more functionality than what is included in the base class
as it needs to draw stuff like scrollbars which are never going to be
generic. So we put the bare minimum needed by the native ports here and the
full wxRenderer class is declared in wx/univ/renderer.h and is only used by
wxUniveral (although note that native ports can load wxRenderer objects from
theme DLLs and use them as wxRendererNative ones, of course).
*/
#ifndef _WX_RENDERER_H_
#define _WX_RENDERER_H_
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// 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_FLAGS_MASK = 0x000000ff,
// this is a pseudo flag not used directly by wxRenderer but rather by some
// controls internally
wxCONTROL_DIRTY = 0x80000000
};
// ----------------------------------------------------------------------------
// wxRendererNative: abstracts drawing methods needed by the native controls
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxRendererNative
{
public:
// drawing functions
// -----------------
// draw the header control button (used by wxListCtrl)
virtual void DrawHeaderButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0) = 0;
// draw the expanded/collapsed icon for a tree control item
virtual void DrawTreeItemButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0) = 0;
// pseudo constructors
// -------------------
// return the currently used renderer
static wxRendererNative& Get();
// return the generic implementation of the renderer
static wxRendererNative& GetGeneric();
};
// ----------------------------------------------------------------------------
// wxDelegateRendererNative: allows reuse of renderers code
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxDelegateRendererNative : public wxRendererNative
{
public:
wxDelegateRendererNative()
: m_rendererNative(GetGeneric()) { }
wxDelegateRendererNative(wxRendererNative& rendererNative)
: m_rendererNative(rendererNative) { }
virtual void DrawHeaderButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0)
{ m_rendererNative.DrawHeaderButton(win, dc, rect, flags); }
virtual void DrawTreeItemButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0)
{ m_rendererNative.DrawTreeItemButton(win, dc, rect, flags); }
protected:
wxRendererNative& m_rendererNative;
};
#endif // _WX_RENDERER_H_

View File

@@ -122,34 +122,33 @@ enum wxTreeItemIcon
wxTreeItemIcon_Max
};
/*
* wxTreeCtrl flags
*/
// TODO: maybe renumber these?
// ----------------------------------------------------------------------------
// wxTreeCtrl flags
// ----------------------------------------------------------------------------
#define wxTR_NO_BUTTONS 0x0000 // for convenience
#define wxTR_HAS_BUTTONS 0x0001 // generates a +/- button
#define wxTR_TWIST_BUTTONS 0x0002 // generates a twister button
#define wxTR_NO_LINES 0x0004 // don't generate level connectors
#define wxTR_HAS_BUTTONS 0x0001 // draw collapsed/expanded btns
#define wxTR_NO_LINES 0x0004 // don't draw lines at all
#define wxTR_LINES_AT_ROOT 0x0008 // connect top-level nodes
#define wxTR_MAC_BUTTONS wxTR_TWIST_BUTTONS // backward compatibility
#define wxTR_AQUA_BUTTONS 0x0010 // used internally
#define wxTR_SINGLE 0x0000 // for convenience
#define wxTR_MULTIPLE 0x0020 // can select multiple items
#define wxTR_EXTENDED 0x0040 // TODO: allow extended selection
#define wxTR_FULL_ROW_HIGHLIGHT 0x2000 // highlight full horizontal space
#define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080 // what it says
#define wxTR_EDIT_LABELS 0x0200 // can edit item labels
#define wxTR_ROW_LINES 0x0400 // put border around items
#define wxTR_HIDE_ROOT 0x0800 // don't display root node
#define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080 // what it says
// TODO: different default styles for wxGTK, wxMotif, whatever?
#ifdef __WXMAC__
#define wxTR_DEFAULT_STYLE (wxTR_TWIST_BUTTONS|wxTR_NO_LINES|wxTR_ROW_LINES)
#else
#define wxTR_DEFAULT_STYLE (wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT)
#endif
#define wxTR_FULL_ROW_HIGHLIGHT 0x2000 // highlight full horz space
#define wxTR_DEFAULT_STYLE (wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT)
// deprecated, don't use
#define wxTR_TWIST_BUTTONS 0
#define wxTR_MAC_BUTTONS 0
#define wxTR_AQUA_BUTTONS 0
// values for the `flags' parameter of wxTreeCtrl::HitTest() which determine
// where exactly the specified point is situated:

View File

@@ -18,7 +18,11 @@
renderers and provide the functionality which is often similar or identical
in all renderers (using inheritance here would be more restrictive as the
given concrete renderer may need an arbitrary subset of the base class
methods)
methods).
Finally note that wxRenderer supersedes wxRendererNative in wxUniv build and
includes the latters functionality (which it may delegate to the generic
implementation of the latter or reimplement itself).
*/
#ifdef __GNUG__
@@ -28,6 +32,8 @@
#ifndef _WX_UNIV_RENDERER_H_
#define _WX_UNIV_RENDERER_H_
#include "wx/renderer.h"
class WXDLLEXPORT wxDC;
class WXDLLEXPORT wxCheckListBox;
class WXDLLEXPORT wxListBox;
@@ -59,7 +65,7 @@ public:
// wxRenderer: abstract renderers interface
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxRenderer
class WXDLLEXPORT wxRenderer : public wxDelegateRendererNative
{
public:
// drawing functions
@@ -458,6 +464,7 @@ 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()
@@ -821,6 +828,17 @@ public:
int flags) const
{ return m_renderer->HitTestFrame(rect, pt, flags); }
virtual void DrawHeaderButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0)
{ m_renderer->DrawHeaderButton(win, dc, rect, flags); }
virtual void DrawTreeItemButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0)
{ m_renderer->DrawTreeItemButton(win, dc, rect, flags); }
protected:
wxRenderer *m_renderer;
};

View File

@@ -27,30 +27,6 @@ class WXDLLEXPORT wxMenuBar;
class WXDLLEXPORT wxRenderer;
class WXDLLEXPORT wxScrollBar;
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// 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_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_FLAGS_MASK = 0x000000ff,
// this is a pseudo flag not used directly by wxRenderer but rather by some
// controls internally
wxCONTROL_DIRTY = 0x80000000
};
#ifdef __WXX11__
#define wxUSE_TWO_WINDOWS 1
#else