Merge branch 'osx-set-color-without-font'

Set colour without changing font in wxOSX.

See https://github.com/wxWidgets/wxWidgets/pull/2278
This commit is contained in:
Vadim Zeitlin
2021-04-04 14:19:39 +02:00
7 changed files with 45 additions and 23 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;
@@ -241,6 +242,10 @@ protected:
// was the wx event for the current native key down event sent // was the wx event for the current native key down event sent
bool WasKeyDownSent() const; bool WasKeyDownSent() const;
// Return the view to apply the font/colour to.
NSView* GetViewWithText() const;
NSEvent* m_lastKeyDownEvent; NSEvent* m_lastKeyDownEvent;
bool m_lastKeyDownWXSent; bool m_lastKeyDownWXSent;
#if !wxOSX_USE_NATIVE_FLIPPED #if !wxOSX_USE_NATIVE_FLIPPED

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

@@ -3578,23 +3578,35 @@ void wxWidgetCocoaImpl::SetControlSize( wxWindowVariant variant )
} }
} }
NSView* wxWidgetCocoaImpl::GetViewWithText() const
{
if ( [m_osxView isKindOfClass:[NSScrollView class] ] )
return [(NSScrollView*) m_osxView documentView];
else if ( [m_osxView isKindOfClass:[NSBox class] ] )
return [(NSBox*) m_osxView titleCell];
return m_osxView;
}
void wxWidgetCocoaImpl::SetFont(wxFont const& font) void wxWidgetCocoaImpl::SetFont(wxFont const& font)
{ {
NSView* targetView = m_osxView; NSView* const targetView = GetViewWithText();
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:)]) 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

@@ -421,6 +421,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()
{
if ( GetPeer() )
GetPeer()->SetFont(GetFont()) ;
// do not trigger refreshes upon invisible and possible partly created objects
if ( IsShownOnScreen() )
Refresh() ;
}
bool wxWindowMac::SetFont(const wxFont& font) bool wxWindowMac::SetFont(const wxFont& font)
{ {
bool retval = wxWindowBase::SetFont( font ); bool retval = wxWindowBase::SetFont( font );
MacUpdateControlFont() ; if (retval)
{
if ( GetPeer() )
GetPeer()->SetFont(GetFont()) ;
// do not trigger refreshes upon invisible and possible partly created objects
if ( IsShownOnScreen() )
Refresh() ;
}
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)