#if wxUSE_COMMANDLINKBUTTON
*m_chkCommandLink,
#endif // wxUSE_COMMANDLINKBUTTON
+#if wxUSE_MARKUP
+ *m_chkUseMarkup,
+#endif // wxUSE_MARKUP
*m_chkDefault;
// more checkboxes for wxBitmapButton only
#if wxUSE_COMMANDLINKBUTTON
m_chkCommandLink =
#endif // wxUSE_COMMANDLINKBUTTON
+#if wxUSE_MARKUP
+ m_chkUseMarkup =
+#endif // wxUSE_MARKUP
m_chkDefault =
m_chkUsePressed =
m_chkUseFocused =
#if wxUSE_COMMANDLINKBUTTON
m_chkCommandLink = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("Use command &link button"));
#endif
+#if wxUSE_MARKUP
+ m_chkUseMarkup = CreateCheckBoxAndAddToSizer(sizerLeft, "Interpret &markup");
+#endif // wxUSE_MARKUP
m_chkDefault = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("&Default"));
sizerLeft->AddSpacer(5);
#if wxUSE_COMMANDLINKBUTTON
m_chkCommandLink->SetValue(false);
#endif
+#if wxUSE_MARKUP
+ m_chkUseMarkup->SetValue(false);
+#endif // wxUSE_MARKUP
m_chkUsePressed->SetValue(true);
m_chkUseFocused->SetValue(true);
void ButtonWidgetsPage::OnButtonChangeLabel(wxCommandEvent& WXUNUSED(event))
{
+ const wxString labelText = m_textLabel->GetValue();
+
#if wxUSE_COMMANDLINKBUTTON
if ( m_cmdLnkButton )
- m_cmdLnkButton->SetMainLabel(m_textLabel->GetValue());
+ m_cmdLnkButton->SetMainLabel(labelText);
else
#endif // wxUSE_COMMANDLINKBUTTON
- m_button->SetLabel(m_textLabel->GetValue());
+ {
+#if wxUSE_MARKUP
+ if ( m_chkUseMarkup->GetValue() )
+ m_button->SetLabelMarkup(labelText);
+ else
+#endif // wxUSE_MARKUP
+ m_button->SetLabel(labelText);
+ }
m_sizerButton->Layout();
}
#include "wx/msw/private/dc.h"
#include "wx/private/window.h"
+#if wxUSE_MARKUP
+ #include "wx/generic/private/markuptext.h"
+#endif // wxUSE_MARKUP
+
using namespace wxMSWImpl;
#if wxUSE_UXTHEME
}
delete m_imageData;
+#if wxUSE_MARKUP
+ delete m_markupText;
+#endif // wxUSE_MARKUP
}
// ----------------------------------------------------------------------------
wxMSWButton::UpdateMultilineStyle(GetHwnd(), label);
wxButtonBase::SetLabel(label);
+
+#if wxUSE_MARKUP
+ // If we have a plain text label, we shouldn't be using markup any longer.
+ if ( m_markupText )
+ {
+ delete m_markupText;
+ m_markupText = NULL;
+
+ // Unfortunately we don't really know whether we can reset the button
+ // to be non-owner-drawn or not: if we had made it owner-drawn just
+ // because of a call to SetLabelMarkup(), we could, but not if there
+ // were [also] calls to Set{Fore,Back}groundColour(). If it's really a
+ // problem to have button remain owner-drawn forever just because it
+ // had markup label once, we should record the reason for our current
+ // owner-drawnness and check it here.
+ }
+#endif // wxUSE_MARKUP
}
// ----------------------------------------------------------------------------
if ( GetAuthNeeded() )
flags |= wxMSWButton::Size_AuthNeeded;
- size = wxMSWButton::ComputeBestFittingSize(self, flags);
+#if wxUSE_MARKUP
+ if ( m_markupText )
+ {
+ wxClientDC dc(self);
+ size = wxMSWButton::GetFittingSize(self,
+ m_markupText->Measure(dc),
+ flags);
+ }
+ else // Normal plain text (but possibly multiline) label.
+#endif // wxUSE_MARKUP
+ {
+ size = wxMSWButton::ComputeBestFittingSize(self, flags);
+ }
}
if ( m_imageData )
InvalidateBestSize();
}
+// ----------------------------------------------------------------------------
+// markup support
+// ----------------------------------------------------------------------------
+
+#if wxUSE_MARKUP
+
+bool wxButton::DoSetLabelMarkup(const wxString& markup)
+{
+ if ( !wxButtonBase::DoSetLabelMarkup(markup) )
+ return false;
+
+ if ( !m_markupText )
+ {
+ m_markupText = new wxMarkupText(markup);
+ MakeOwnerDrawn();
+ }
+ else
+ {
+ // We are already owner-drawn so just update the text.
+ m_markupText->SetMarkup(markup);
+ }
+
+ Refresh();
+
+ return true;
+}
+
+#endif // wxUSE_MARKUP
+
// ----------------------------------------------------------------------------
// owner-drawn buttons support
// ----------------------------------------------------------------------------
void DrawButtonText(HDC hdc,
RECT *pRect,
const wxString& text,
- COLORREF col,
int flags)
{
- wxTextColoursChanger changeFg(hdc, col, CLR_INVALID);
- wxBkModeChanger changeBkMode(hdc, wxBRUSHSTYLE_TRANSPARENT);
-
// center text horizontally in any case
flags |= DT_CENTER;
? ::GetSysColor(COLOR_GRAYTEXT)
: wxColourToRGB(GetForegroundColour());
- // notice that DT_HIDEPREFIX doesn't work on old (pre-Windows 2000)
- // systems but by happy coincidence ODS_NOACCEL is not used under them
- // neither so DT_HIDEPREFIX should never be used there
- DrawButtonText(hdc, &rectBtn, GetLabel(), colFg,
- state & ODS_NOACCEL ? DT_HIDEPREFIX : 0);
+ wxTextColoursChanger changeFg(hdc, colFg, CLR_INVALID);
+ wxBkModeChanger changeBkMode(hdc, wxBRUSHSTYLE_TRANSPARENT);
+
+#if wxUSE_MARKUP
+ if ( m_markupText )
+ {
+ wxDCTemp dc((WXHDC)hdc);
+ dc.SetTextForeground(wxColour(colFg));
+ dc.SetFont(GetFont());
+
+ m_markupText->Render(dc, wxRectFromRECT(rectBtn),
+ state & ODS_NOACCEL
+ ? wxMarkupText::Render_Default
+ : wxMarkupText::Render_ShowAccels);
+ }
+ else // Plain text label
+#endif // wxUSE_MARKUP
+ {
+ // notice that DT_HIDEPREFIX doesn't work on old (pre-Windows 2000)
+ // systems but by happy coincidence ODS_NOACCEL is not used under
+ // them neither so DT_HIDEPREFIX should never be used there
+ DrawButtonText(hdc, &rectBtn, GetLabel(),
+ state & ODS_NOACCEL ? DT_HIDEPREFIX : 0);
+ }
}
return true;