From 31ba2d4ca393a6fda6af409d37f1aa2de9946d43 Mon Sep 17 00:00:00 2001 From: Steve Browne Date: Mon, 29 May 2017 14:40:45 -0400 Subject: [PATCH] Fix setting foreground color for several controls in wxOSX This allows setting color of wxStaticBox, wxCheckBox, wxRadioButton and any other controls that use NSBox and NSButton to work. Closes #16284. Closes https://github.com/wxWidgets/wxWidgets/pull/489 --- docs/changes.txt | 1 + src/osx/cocoa/window.mm | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/changes.txt b/docs/changes.txt index 3b30025e18..b96d26faac 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -199,6 +199,7 @@ wxMSW: wxOSX: - Fix handling of non-BMP characters in GetPartialTextExtents() (ARATA Mizuki). +- Fix setting foreground colour for several controls (Steve Browne). - Fix dialogs using wxFRAME_FLOAT_ON_PARENT frame as parent (Lauri Nurmi). - Implement wxGetDisplaySizeMM() and fix printing DPI (David Vanderson). - Remove extra borders around wxFilePickerCtrl (John Roberts). diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index d43e28d1fa..805b04b530 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -2447,7 +2447,8 @@ void wxWidgetCocoaImpl::SetLabel( const wxString& title, wxFontEncoding encoding if ( [m_osxView respondsToSelector:@selector(setAttributedTitle:) ] ) { wxFont f = GetWXPeer()->GetFont(); - if ( f.GetStrikethrough() || f.GetUnderlined() ) + wxColour col = GetWXPeer()->GetForegroundColour(); + if ( f.GetStrikethrough() || f.GetUnderlined() || col.IsOk() ) { wxCFStringRef cf(title, encoding ); @@ -2476,6 +2477,13 @@ void wxWidgetCocoaImpl::SetLabel( const wxString& title, wxFontEncoding encoding } + if ( col.IsOk() ) + { + [attrString addAttribute:NSForegroundColorAttributeName + value:col.OSXGetNSColor() + range:NSMakeRange(0, [attrString length])]; + } + [attrString endEditing]; [(id)m_osxView setAttributedTitle:attrString]; @@ -2727,11 +2735,15 @@ void wxWidgetCocoaImpl::SetFont(wxFont const& font, wxColour const&col, long, bo NSView* targetView = m_osxView; if ( [m_osxView isKindOfClass:[NSScrollView class] ] ) targetView = [(NSScrollView*) m_osxView documentView]; + else if ( [m_osxView isKindOfClass:[NSBox class] ] ) + targetView = [(NSBox*) m_osxView titleCell]; if ([targetView respondsToSelector:@selector(setFont:)]) [targetView setFont: font.OSXGetNSFont()]; if ([targetView respondsToSelector:@selector(setTextColor:)]) [targetView setTextColor: col.OSXGetNSColor()]; + if ([m_osxView respondsToSelector:@selector(setAttributedTitle:)]) + SetLabel(wxStripMenuCodes(GetWXPeer()->GetLabel(), wxStrip_Mnemonics), GetWXPeer()->GetFont().GetEncoding()); } void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)