Update just the colour, not font, in wxOSX SetForegroundColour()

Calling wxWindow::SetForegroundColour() also changed the window font,
which was unexpected and unnecessary.

Add a separate peer SetForegroundColour() method and implement it to
change just the colour in Cocoa version (and leave unimplemented, just
as it was before, for iOS) and use it in wxWindow to avoid the font
change.
This commit is contained in:
Vadim Zeitlin
2021-03-13 23:03:28 +01:00
parent ede4ff9490
commit ac4634b294
7 changed files with 30 additions and 18 deletions

View File

@@ -101,6 +101,7 @@ public :
virtual void SetBackgroundColour(const wxColour&) wxOVERRIDE; virtual void SetBackgroundColour(const wxColour&) wxOVERRIDE;
virtual bool SetBackgroundStyle(wxBackgroundStyle style) wxOVERRIDE; virtual bool SetBackgroundStyle(wxBackgroundStyle style) wxOVERRIDE;
virtual void SetForegroundColour(const wxColour& col) wxOVERRIDE;
virtual void GetContentArea( int &left, int &top, int &width, int &height ) const wxOVERRIDE; virtual void GetContentArea( int &left, int &top, int &width, int &height ) const wxOVERRIDE;
virtual void Move(int x, int y, int width, int height) wxOVERRIDE; virtual void Move(int x, int y, int width, int height) wxOVERRIDE;

View File

@@ -276,6 +276,7 @@ public :
virtual void SetBackgroundColour( const wxColour& col ) = 0; virtual void SetBackgroundColour( const wxColour& col ) = 0;
virtual bool SetBackgroundStyle(wxBackgroundStyle style) = 0; virtual bool SetBackgroundStyle(wxBackgroundStyle style) = 0;
virtual void SetForegroundColour( const wxColour& col ) = 0;
// all coordinates in native parent widget relative coordinates // all coordinates in native parent widget relative coordinates
virtual void GetContentArea( int &left , int &top , int &width , int &height ) const = 0; virtual void GetContentArea( int &left , int &top , int &width , int &height ) const = 0;

View File

@@ -56,6 +56,7 @@ public :
virtual void SetBackgroundColour( const wxColour& col ) ; virtual void SetBackgroundColour( const wxColour& col ) ;
virtual bool SetBackgroundStyle(wxBackgroundStyle style) ; virtual bool SetBackgroundStyle(wxBackgroundStyle style) ;
virtual void SetForegroundColour( const wxColour& col ) ;
virtual void GetContentArea( int &left , int &top , int &width , int &height ) const; virtual void GetContentArea( int &left , int &top , int &width , int &height ) const;
virtual void Move(int x, int y, int width, int height); virtual void Move(int x, int y, int width, int height);

View File

@@ -342,7 +342,6 @@ protected:
bool MacHasScrollBarCorner() const; bool MacHasScrollBarCorner() const;
void MacCreateScrollBars( long style ) ; void MacCreateScrollBars( long style ) ;
void MacRepositionScrollBars() ; void MacRepositionScrollBars() ;
void MacUpdateControlFont() ;
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DoGetTextExtent(const wxString& string, virtual void DoGetTextExtent(const wxString& string,

View File

@@ -3559,13 +3559,19 @@ void wxWidgetCocoaImpl::SetFont(wxFont const& font)
if ([targetView respondsToSelector:@selector(setFont:)]) if ([targetView respondsToSelector:@selector(setFont:)])
[targetView setFont: font.OSXGetNSFont()]; [targetView setFont: font.OSXGetNSFont()];
if ([m_osxView respondsToSelector:@selector(setAttributedTitle:)])
SetLabel(wxStripMenuCodes(GetWXPeer()->GetLabel(), wxStrip_Mnemonics), GetWXPeer()->GetFont().GetEncoding());
}
void wxWidgetCocoaImpl::SetForegroundColour(const wxColour& col)
{
NSView* const targetView = GetViewWithText();
if ([targetView respondsToSelector:@selector(setTextColor:)]) if ([targetView respondsToSelector:@selector(setTextColor:)])
{ {
wxColor col = GetWXPeer()->GetForegroundColour(); wxColor col = GetWXPeer()->GetForegroundColour();
[targetView setTextColor: col.OSXGetNSColor()]; [targetView setTextColor: col.OSXGetNSColor()];
} }
if ([m_osxView respondsToSelector:@selector(setAttributedTitle:)])
SetLabel(wxStripMenuCodes(GetWXPeer()->GetLabel(), wxStrip_Mnemonics), GetWXPeer()->GetFont().GetEncoding());
} }
void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip) void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)

View File

@@ -482,6 +482,11 @@ void wxWidgetIPhoneImpl::SetBackgroundColour( const wxColour &col )
m_osxView.backgroundColor = [UIColor colorWithCGColor:col.GetCGColor()]; m_osxView.backgroundColor = [UIColor colorWithCGColor:col.GetCGColor()];
} }
void wxWidgetIPhoneImpl::SetForegroundColour( const wxColour &col )
{
// TODO: use textColor if available?
}
bool wxWidgetIPhoneImpl::SetBackgroundStyle(wxBackgroundStyle style) bool wxWidgetIPhoneImpl::SetBackgroundStyle(wxBackgroundStyle style)
{ {
if ( style == wxBG_STYLE_PAINT ) if ( style == wxBG_STYLE_PAINT )

View File

@@ -504,33 +504,32 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
} }
} }
void wxWindowMac::MacUpdateControlFont() bool wxWindowMac::SetFont(const wxFont& font)
{ {
bool retval = wxWindowBase::SetFont( font );
if (retval)
{
if ( GetPeer() ) if ( GetPeer() )
GetPeer()->SetFont(GetFont()) ; GetPeer()->SetFont(GetFont()) ;
// do not trigger refreshes upon invisible and possible partly created objects // do not trigger refreshes upon invisible and possible partly created objects
if ( IsShownOnScreen() ) if ( IsShownOnScreen() )
Refresh() ; Refresh() ;
} }
bool wxWindowMac::SetFont(const wxFont& font)
{
bool retval = wxWindowBase::SetFont( font );
MacUpdateControlFont() ;
return retval; return retval;
} }
bool wxWindowMac::SetForegroundColour(const wxColour& col ) bool wxWindowMac::SetForegroundColour(const wxColour& col )
{ {
bool retval = wxWindowBase::SetForegroundColour( col ); if ( !wxWindowBase::SetForegroundColour( col ) )
return false;
if (retval) if ( GetPeer() )
MacUpdateControlFont(); GetPeer()->SetForegroundColour(col);
return retval; return true;
} }
bool wxWindowMac::SetBackgroundStyle(wxBackgroundStyle style) bool wxWindowMac::SetBackgroundStyle(wxBackgroundStyle style)