Return empty string from wxColour::GetAsString() if it's invalid

This is consistent with wxToString(wxColour) and seems more useful than
either returning black string representation (as wxMSW used to do) or
asserting (as wxGTK did).

Document this behaviour and add a test checking for it.

Closes #18623.
This commit is contained in:
Vadim Zeitlin 2020-07-11 14:31:54 +02:00
parent 5d14346325
commit 9890cf6bac
3 changed files with 18 additions and 4 deletions

View File

@ -113,10 +113,11 @@ public:
@c wxC2S_HTML_SYNTAX, to obtain the colour as "#" followed by 6
hexadecimal digits (e.g. wxColour(255,0,0) == "#FF0000").
This function never fails and always returns a non-empty string but
asserts if the colour has alpha channel (i.e. is non opaque) but
@c wxC2S_CSS_SYNTAX (which is the only one supporting alpha) is not
specified in flags.
This function returns empty string if the colour is not initialized
(see IsOk()). Otherwise, the returned string is always non-empty, but
the function asserts if the colour has alpha channel (i.e. is non
opaque) but @c wxC2S_CSS_SYNTAX (which is the only one supporting
alpha) is not specified in @a flags.
@note For non-solid (i.e. non-RGB) colour this function returns
"rgb(??, ?? ??)" or "#??????".

View File

@ -218,6 +218,9 @@ bool wxColourBase::FromString(const wxString& str)
wxString wxColourBase::GetAsString(long flags) const
{
if ( !IsOk() )
return wxString();
wxString colName;
if ( IsSolid() )

View File

@ -145,6 +145,16 @@ TEST_CASE("wxColour::FromString", "[colour][string]")
CHECK( !wxFromString("rgba(1, 2, 3.456, foo)", &col) );
}
TEST_CASE("wxColour::GetAsString", "[colour][string]")
{
CHECK( wxColour().GetAsString() == "" );
wxColour red("red");
CHECK( red.GetAsString() == "red" );
CHECK( red.GetAsString(wxC2S_CSS_SYNTAX) == "rgb(255, 0, 0)" );
CHECK( red.GetAsString(wxC2S_HTML_SYNTAX) == "#FF0000" );
}
TEST_CASE("wxColour::GetLuminance", "[colour][luminance]")
{
CHECK( wxBLACK->GetLuminance() == Approx(0.0) );