Simplify html_is_valid and allow it to work with 3 and 4 hex digits

This commit is contained in:
Aaron Franke 2020-07-30 04:25:07 -04:00
parent ecd6a893b4
commit a6ff389a55
No known key found for this signature in database
GPG key ID: 40A1750B977E56BF
2 changed files with 16 additions and 57 deletions

View file

@ -296,7 +296,7 @@ Color Color::html(const String &p_rgba) {
return Color();
}
if (color[0] == '#') {
color = color.substr(1, color.length() - 1);
color = color.substr(1);
}
// If enabled, use 1 hex digit per channel instead of 2.
@ -347,41 +347,22 @@ bool Color::html_is_valid(const String &p_color) {
return false;
}
if (color[0] == '#') {
color = color.substr(1, color.length() - 1);
color = color.substr(1);
}
bool alpha = false;
if (color.length() == 8) {
alpha = true;
} else if (color.length() == 6) {
alpha = false;
} else {
// Check if the amount of hex digits is valid.
int len = color.length();
if (!(len == 3 || len == 4 || len == 6 || len == 8)) {
return false;
}
if (alpha) {
int a = _parse_col8(color, 0);
if (a < 0) {
// Check if each hex digit is valid.
for (int i = 0; i < len; i++) {
if (_parse_col4(color, i) == -1) {
return false;
}
}
int from = alpha ? 2 : 0;
int r = _parse_col8(color, from + 0);
if (r < 0) {
return false;
}
int g = _parse_col8(color, from + 2);
if (g < 0) {
return false;
}
int b = _parse_col8(color, from + 4);
if (b < 0) {
return false;
}
return true;
}

View file

@ -827,46 +827,24 @@ namespace Godot
if (color[0] == '#')
{
color = color.Substring(1, color.Length - 1);
color = color.Substring(1);
}
bool alpha;
switch (color.Length)
// Check if the amount of hex digits is valid.
int len = color.Length;
if (!(len == 3 || len == 4 || len == 6 || len == 8))
{
case 8:
alpha = true;
break;
case 6:
alpha = false;
break;
default:
return false;
return false;
}
if (alpha)
{
if (ParseCol8(color, 0) < 0)
// Check if each hex digit is valid.
for (int i = 0; i < len; i++) {
if (ParseCol4(color, i) == -1)
{
return false;
}
}
int from = alpha ? 2 : 0;
if (ParseCol8(color, from + 0) < 0)
{
return false;
}
if (ParseCol8(color, from + 2) < 0)
{
return false;
}
if (ParseCol8(color, from + 4) < 0)
{
return false;
}
return true;
}