Adding IsSolid to wxColour

Under macOS colors can be patterns, then accessors for RGB values are useless, IsSolid returns true if the color can be expressed in RGB values at all.
This commit is contained in:
Stefan Csomor
2018-10-30 20:53:35 +01:00
parent 3ab2bfd62a
commit 9a05410470
5 changed files with 28 additions and 1 deletions

View File

@@ -118,6 +118,9 @@ public:
virtual ChannelType Blue() const = 0; virtual ChannelType Blue() const = 0;
virtual ChannelType Alpha() const virtual ChannelType Alpha() const
{ return wxALPHA_OPAQUE ; } { return wxALPHA_OPAQUE ; }
virtual bool IsSolid() const
{ return true; }
// implemented in colourcmn.cpp // implemented in colourcmn.cpp
virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const; virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const;

View File

@@ -34,6 +34,8 @@ public:
virtual ChannelType Blue() const wxOVERRIDE; virtual ChannelType Blue() const wxOVERRIDE;
virtual ChannelType Alpha() const wxOVERRIDE; virtual ChannelType Alpha() const wxOVERRIDE;
virtual bool IsSolid() const wxOVERRIDE;
wxColour& operator=(const wxColour& col); wxColour& operator=(const wxColour& col);
// comparison // comparison
@@ -90,7 +92,10 @@ public:
virtual CGFloat Green() const = 0; virtual CGFloat Green() const = 0;
virtual CGFloat Blue() const = 0; virtual CGFloat Blue() const = 0;
virtual CGFloat Alpha() const = 0; virtual CGFloat Alpha() const = 0;
virtual bool IsSolid() const
{ return true; }
virtual CGColorRef GetCGColor() const = 0; virtual CGColorRef GetCGColor() const = 0;
virtual wxColourRefData* Clone() const = 0; virtual wxColourRefData* Clone() const = 0;

View File

@@ -182,6 +182,11 @@ public:
*/ */
virtual unsigned char Red() const; virtual unsigned char Red() const;
/**
Returns @true if the color can be described using RGB values, ie is solid,
@false if it is a pattern (currently only possible on macOS)
*/
virtual bool IsSolid() const;
//@{ //@{
/** /**
Sets the RGB intensity values using the given values (first overload), Sets the RGB intensity values using the given values (first overload),

View File

@@ -27,6 +27,8 @@ public:
virtual CGFloat Blue() const wxOVERRIDE; virtual CGFloat Blue() const wxOVERRIDE;
virtual CGFloat Alpha() const wxOVERRIDE; virtual CGFloat Alpha() const wxOVERRIDE;
virtual bool IsSolid() const wxOVERRIDE;
CGColorRef GetCGColor() const wxOVERRIDE; CGColorRef GetCGColor() const wxOVERRIDE;
virtual wxColourRefData* Clone() const wxOVERRIDE { return new wxNSColorRefData(*this); } virtual wxColourRefData* Clone() const wxOVERRIDE { return new wxNSColorRefData(*this); }
@@ -94,6 +96,11 @@ CGFloat wxNSColorRefData::Alpha() const
return 0.0; return 0.0;
} }
bool wxNSColorRefData::IsSolid() const
{
return [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] != nil;
}
CGColorRef wxNSColorRefData::GetCGColor() const CGColorRef wxNSColorRefData::GetCGColor() const
{ {
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8

View File

@@ -189,6 +189,13 @@ wxColour::ChannelType wxColour::Alpha() const
return wxRound(M_COLDATA->Alpha() * 255.0); return wxRound(M_COLDATA->Alpha() * 255.0);
} }
bool wxColour::IsSolid() const
{
wxCHECK_MSG( IsOk(), false, "invalid colour" );
return M_COLDATA->IsSolid();
}
#if wxOSX_USE_COCOA_OR_CARBON #if wxOSX_USE_COCOA_OR_CARBON
void wxColour::GetRGBColor(RGBColor* col) const void wxColour::GetRGBColor(RGBColor* col) const
{ {