Add support for stricken-through fonts.
Support stricken-through fonts in wxMSW and wxGTK (including special support in wxStaticText and wxTextCtrl). Closes #9907. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70446 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -153,31 +153,48 @@ bool wxStaticText::DoSetLabelMarkup(const wxString& markup)
|
||||
bool wxStaticText::SetFont( const wxFont &font )
|
||||
{
|
||||
const bool wasUnderlined = GetFont().GetUnderlined();
|
||||
const bool wasStrickenThrough = GetFont().GetStrikethrough();
|
||||
|
||||
bool ret = wxControl::SetFont(font);
|
||||
|
||||
if ( font.GetUnderlined() != wasUnderlined )
|
||||
{
|
||||
// the underlines for mnemonics are incompatible with using attributes
|
||||
// so turn them off when setting underlined font and restore them when
|
||||
// unsetting it
|
||||
gtk_label_set_use_underline(GTK_LABEL(m_widget), wasUnderlined);
|
||||
const bool isUnderlined = GetFont().GetUnderlined();
|
||||
const bool isStrickenThrough = GetFont().GetStrikethrough();
|
||||
|
||||
if ( wasUnderlined )
|
||||
if ( (isUnderlined != wasUnderlined) ||
|
||||
(isStrickenThrough != wasStrickenThrough) )
|
||||
{
|
||||
// We need to update the Pango attributes used for the text.
|
||||
if ( isUnderlined || isStrickenThrough )
|
||||
{
|
||||
// it's not underlined any more, remove the attributes we set
|
||||
gtk_label_set_attributes(GTK_LABEL(m_widget), NULL);
|
||||
}
|
||||
else // the text is underlined now
|
||||
{
|
||||
PangoAttrList *attrs = pango_attr_list_new();
|
||||
PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE);
|
||||
a->start_index = 0;
|
||||
a->end_index = (guint)-1;
|
||||
pango_attr_list_insert(attrs, a);
|
||||
PangoAttrList* const attrs = pango_attr_list_new();
|
||||
if ( isUnderlined )
|
||||
{
|
||||
PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE);
|
||||
a->start_index = 0;
|
||||
a->end_index = (guint)-1;
|
||||
pango_attr_list_insert(attrs, a);
|
||||
}
|
||||
|
||||
if ( isStrickenThrough )
|
||||
{
|
||||
PangoAttribute *a = pango_attr_strikethrough_new( TRUE );
|
||||
a->start_index = 0;
|
||||
a->end_index = (guint) -1;
|
||||
pango_attr_list_insert(attrs, a);
|
||||
}
|
||||
|
||||
gtk_label_set_attributes(GTK_LABEL(m_widget), attrs);
|
||||
pango_attr_list_unref(attrs);
|
||||
}
|
||||
else // No special attributes any more.
|
||||
{
|
||||
// Just remove any attributes we had set.
|
||||
gtk_label_set_attributes(GTK_LABEL(m_widget), NULL);
|
||||
}
|
||||
|
||||
// The underlines for mnemonics are incompatible with using attributes
|
||||
// so turn them off when setting underlined font.
|
||||
gtk_label_set_use_underline(GTK_LABEL(m_widget), !isUnderlined);
|
||||
}
|
||||
|
||||
// adjust the label size to the new label unless disabled
|
||||
|
Reference in New Issue
Block a user