Add "inherit" to <font> XRC tag.

This allows to construct a font based on the parent window font instead of
either fully specifying all font parameters or basing it on a standard font.

Closes #14632.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72572 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-09-28 23:48:34 +00:00
parent 9696657f22
commit 45df4bb6c2
6 changed files with 85 additions and 16 deletions

View File

@@ -557,6 +557,7 @@ All (GUI):
- Fix text origin and extent computations in wxSVGFileDC (Neil Chittenden). - Fix text origin and extent computations in wxSVGFileDC (Neil Chittenden).
- Show tooltips for the too long items in generic wxTreeCtrl (Steven Houchins). - Show tooltips for the too long items in generic wxTreeCtrl (Steven Houchins).
- Add wxStyledTextCtrl::AnnotationClearLine() (sentieshar). - Add wxStyledTextCtrl::AnnotationClearLine() (sentieshar).
- Add "inherit" to <font> XRC tag (Steffen Olszewski, Gero Meßsysteme GmbH).
wxGTK: wxGTK:

View File

@@ -402,7 +402,8 @@ Examples:
XRC uses similar, but more flexible, abstract description of fonts to that XRC uses similar, but more flexible, abstract description of fonts to that
used by wxFont class. A font can be described either in terms of its elementary used by wxFont class. A font can be described either in terms of its elementary
properties, or it can be derived from one of system fonts. properties, or it can be derived from one of system fonts or the parent window
font.
The font property element is "composite" element: unlike majority of The font property element is "composite" element: unlike majority of
properties, it doesn't have text value but contains several child elements properties, it doesn't have text value but contains several child elements
@@ -413,7 +414,8 @@ and can be one of the following "sub-properties":
@hdr3col{property, type, description} @hdr3col{property, type, description}
@row3col{size, unsigned integer, @row3col{size, unsigned integer,
Pixel size of the font (default: wxNORMAL_FONT's size or @c sysfont's Pixel size of the font (default: wxNORMAL_FONT's size or @c sysfont's
size if the @c sysfont property is used.} size if the @c sysfont property is used or the current size of the font
of the enclosing control if the @c inherit property is used.}
@row3col{style, enum, @row3col{style, enum,
One of "normal", "italic" or "slant" (default: normal).} One of "normal", "italic" or "slant" (default: normal).}
@row3col{weight, enum, @row3col{weight, enum,
@@ -431,14 +433,18 @@ and can be one of the following "sub-properties":
(default: unspecified).} (default: unspecified).}
@row3col{sysfont, , @row3col{sysfont, ,
Symbolic name of system standard font(one of wxSYS_*_FONT constants).} Symbolic name of system standard font(one of wxSYS_*_FONT constants).}
@row3col{inherit, @ref overview_xrcformat_type_bool,
If true, the font of the enclosing control is used. If this property and the
@c sysfont property are specified the @c sysfont property takes precedence.}
@row3col{relativesize, float, @row3col{relativesize, float,
Float, font size relative to chosen system font's size; can only be Float, font size relative to chosen system font's or inherited font's size;
used when 'sysfont' is used and when 'size' is not used.} can only be used when 'sysfont' or 'inherit' is used and when 'size' is not
used.}
@endTable @endTable
All of them are optional, if they are missing, appropriate wxFont default is All of them are optional, if they are missing, appropriate wxFont default is
used. If the @c sysfont property is used, then the defaults are taken from it used. If the @c sysfont or @c inherit property is used, then the defaults are
instead. taken from it instead.
Examples: Examples:
@code @code
@@ -456,6 +462,10 @@ Examples:
</font> </font>
@endcode @endcode
@note You cannot use @c inherit for a font that gets used before the enclosing
control is created, e.g. if the control gets the font passed as parameter
for its constructor, or if the control is not derived from wxWindow.
@section overview_xrcformat_windows Controls and Windows @section overview_xrcformat_windows Controls and Windows

View File

@@ -594,7 +594,7 @@ protected:
#endif #endif
// Gets a font. // Gets a font.
wxFont GetFont(const wxString& param = wxT("font")); wxFont GetFont(const wxString& param = wxT("font"), wxWindow* parent = NULL);
// Gets the value of a boolean attribute (only "0" and "1" are valid values) // Gets the value of a boolean attribute (only "0" and "1" are valid values)
bool GetBoolAttr(const wxString& attr, bool defaultv); bool GetBoolAttr(const wxString& attr, bool defaultv);

View File

@@ -934,20 +934,65 @@ lay them out using wxSizers, absolute positioning, everything you like!
<object class="choicebookpage"> <object class="choicebookpage">
<label>wxStaticText</label> <label>wxStaticText</label>
<object class="wxPanel" name="statictext"> <object class="wxPanel" name="statictext">
<font>
<size>12</size>
</font>
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<cols>1</cols> <cols>2</cols>
<rows>0</rows> <rows>0</rows>
<vgap>0</vgap> <vgap>0</vgap>
<hgap>0</hgap> <hgap>0</hgap>
<growablecols>0</growablecols> <growablecols>0,1</growablecols>
<growablerows>0</growablerows> <growablerows>0,1,2</growablerows>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALIGN_CENTRE|wxALL</flag> <flag>wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxALL</flag>
<border>5</border>
<object class="wxStaticText" name="wxID_STATIC">
<label>Default font:</label>
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
<object class="wxStaticText" name="controls_statictext"> <object class="wxStaticText" name="controls_statictext">
<label>It was a dark and stormy night.</label> <label>It was a dark and stormy night.</label>
</object> </object>
</object> </object>
<object class="sizeritem">
<flag>wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxALL</flag>
<border>5</border>
<object class="wxStaticText" name="wxID_STATIC">
<label>Default constructed bold font:</label>
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border>
<object class="wxStaticText" name="controls_statictext">
<label>It was a dark and stormy night.</label>
<font>
<weight>bold</weight>
</font>
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxALL</flag>
<border>5</border>
<object class="wxStaticText" name="wxID_STATIC">
<label>Inheritance constructed bold font:</label>
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border>
<object class="wxStaticText" name="controls_statictext">
<label>It was a dark and stormy night.</label>
<font>
<inherit>1</inherit>
<weight>bold</weight>
</font>
</object>
</object>
</object> </object>
</object> </object>
</object> </object>

View File

@@ -150,7 +150,7 @@ void wxListCtrlXmlHandler::HandleListItem()
if (HasParam(wxT("data"))) if (HasParam(wxT("data")))
item.SetData(GetLong(wxT("data"))); item.SetData(GetLong(wxT("data")));
if (HasParam(wxT("font"))) if (HasParam(wxT("font")))
item.SetFont(GetFont()); item.SetFont(GetFont(wxT("font"), list));
if (HasParam(wxT("state"))) if (HasParam(wxT("state")))
item.SetState(GetStyle(wxT("state"))); item.SetState(GetStyle(wxT("state")));
if (HasParam(wxT("textcolour"))) if (HasParam(wxT("textcolour")))

View File

@@ -2201,7 +2201,7 @@ static wxFont GetSystemFont(const wxString& name)
return wxNullFont; return wxNullFont;
} }
wxFont wxXmlResourceHandler::GetFont(const wxString& param) wxFont wxXmlResourceHandler::GetFont(const wxString& param, wxWindow* parent)
{ {
wxXmlNode *font_node = GetParamNode(param); wxXmlNode *font_node = GetParamNode(param);
if (font_node == NULL) if (font_node == NULL)
@@ -2304,8 +2304,21 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
} }
#endif // wxUSE_FONTMAP #endif // wxUSE_FONTMAP
wxFont font;
// is this font based on a system font? // is this font based on a system font?
wxFont font = GetSystemFont(GetParamValue(wxT("sysfont"))); if (HasParam(wxT("sysfont")))
{
font = GetSystemFont(GetParamValue(wxT("sysfont")));
}
// or should the font of the widget be used?
else if (GetBool(wxT("inherit"), false))
{
if (parent)
font = parent->GetFont();
else
ReportError("no parent window specified to derive the font from");
}
if (font.IsOk()) if (font.IsOk())
{ {
@@ -2368,9 +2381,9 @@ void wxXmlResourceHandler::SetupWindow(wxWindow *wnd)
wnd->SetToolTip(GetText(wxT("tooltip"))); wnd->SetToolTip(GetText(wxT("tooltip")));
#endif #endif
if (HasParam(wxT("font"))) if (HasParam(wxT("font")))
wnd->SetFont(GetFont(wxT("font"))); wnd->SetFont(GetFont(wxT("font"), wnd));
if (HasParam(wxT("ownfont"))) if (HasParam(wxT("ownfont")))
wnd->SetOwnFont(GetFont(wxT("ownfont"))); wnd->SetOwnFont(GetFont(wxT("ownfont"), wnd));
if (HasParam(wxT("help"))) if (HasParam(wxT("help")))
wnd->SetHelpText(GetText(wxT("help"))); wnd->SetHelpText(GetText(wxT("help")));
} }