From b2f61deb37accb065480b591622415b9b9ff286e Mon Sep 17 00:00:00 2001 From: ali-alzyod Date: Thu, 8 Apr 2021 02:02:08 +0100 Subject: [PATCH] evas_textblock: update color text parsingUpdate text color parsing for rgba(r, g, b, a) for alpha to be value between 0.0 - 1.0 same as CSS. Summary: ... spam removed ... Reviewers: woohyun, bowonryu, id213sin, AbdullehGhujeh, devilhorns Subscribers: raster, cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D12248 --- src/lib/evas/canvas/evas_object_textblock.c | 40 ++++++++++----------- src/lib/evas/common/evas_text_utils.c | 15 ++++---- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index f44dfaab5c..ff87db7be0 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -1785,8 +1785,8 @@ _format_command_legacy_only(Evas_Object_Textblock_Format *fmt, const char *cmd, * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * backing_color= @@ -1827,8 +1827,8 @@ _format_command_legacy_only(Evas_Object_Textblock_Format *fmt, const char *cmd, * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * underline2_color= @@ -1849,8 +1849,8 @@ _format_command_legacy_only(Evas_Object_Textblock_Format *fmt, const char *cmd, * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * glow2_color= @@ -2001,8 +2001,8 @@ _format_command_legacy_only(Evas_Object_Textblock_Format *fmt, const char *cmd, * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * underline_dash_color= @@ -2516,8 +2516,8 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * color= @@ -2537,8 +2537,8 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * underline_color= @@ -2559,8 +2559,8 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * outline_color= @@ -2581,8 +2581,8 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * shadow_color= @@ -2603,8 +2603,8 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * glow_color= @@ -2625,8 +2625,8 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch * @li "#RRGGBBAA" * @li "#RGB" * @li "#RGBA" - * @li "rgb(r,g,b)" - * @li "rgba(r,g,b,a)" + * @li "rgb(0-255,0-255,0-255)" + * @li "rgba(0-255,0-255,0-255,0.0-1.0)" * @li "color_name" like "red" * @code * strikethrough_color= diff --git a/src/lib/evas/common/evas_text_utils.c b/src/lib/evas/common/evas_text_utils.c index 99a9c3e3b3..1a0a7a0af2 100644 --- a/src/lib/evas/common/evas_text_utils.c +++ b/src/lib/evas/common/evas_text_utils.c @@ -1362,8 +1362,8 @@ Eina_Bool read_byte_color_component(const char* source,char ** next,unsigned cha * 3. "#RGB" * 4. "#RGBA" * 5. "color names" - * 6. "rgb(r,g,b)" - * 7. "rgba(r,g,b,a)" + * 6. "rgb(0-255,0-255,0-255)" + * 7. "rgba(0-255,0-255,0-255,0.0-1.0)" * TODO (we may use specific color parser) * 8. "hsl(H,S,L)" * 9. "hsla(H,S,L,A)" @@ -1422,7 +1422,7 @@ evas_common_format_color_parse(const char *str, int slen, } else v = EINA_FALSE; } - else if (slen <= 21)/* search for rgb(),hsv(),colorname, 20 is length of rgba(255,255,255,255) */ + else if (slen <= 25)/* search for rgb(),hsv(),colorname, 25 is length of rgba(255,255,255,1.0) */ { /*remove spaces and convert name to lowercase*/ char color_name[0xFF] = {0}; @@ -1446,20 +1446,23 @@ evas_common_format_color_parse(const char *str, int slen, *a = 0xff; } } - else if ((strncmp(color_name,"rgba(",4) == 0) && color_name[slen-1] == ')'&& slen >= 13 && slen <=21) /* rgba() */ + else if ((strncmp(color_name,"rgba(",4) == 0) && color_name[slen-1] == ')'&& slen >= 13 && slen <=25) /* rgba() */ { char * p_color = &color_name[4]; if ( (!read_byte_color_component(++p_color,&p_color,r) || !p_color || *p_color != ',') || (!read_byte_color_component(++p_color,&p_color,g) || !p_color || *p_color != ',') || - (!read_byte_color_component(++p_color,&p_color,b) || !p_color || *p_color != ',') || - (!read_byte_color_component(++p_color,&p_color,a) || !p_color || *p_color != ')') + (!read_byte_color_component(++p_color,&p_color,b) || !p_color || *p_color != ',') ) { *r = *g = *b = *a = 0; v = EINA_FALSE; } + else + { + *a = (unsigned char)(strtof(++p_color, NULL) * 255); + } } else {