forked from enlightenment/efl
Efl.Gfx.Color: add color_code{}
color_code allows user to pass/get the color hex string (e.g. efl_gfx_color_code_set(o, "#FFAA22CC")) Also make this interface as mixin class.
This commit is contained in:
parent
9db0ec554b
commit
e2cb16c78b
|
@ -139,6 +139,7 @@ lib/efl/interfaces/efl_io_queue.c \
|
|||
lib/efl/interfaces/efl_observer.c \
|
||||
lib/efl/interfaces/efl_file.c \
|
||||
lib/efl/interfaces/efl_ui_format.c \
|
||||
lib/efl/interfaces/efl_gfx_color.c \
|
||||
lib/efl/interfaces/efl_text_markup_util.c \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -391,6 +391,7 @@ _cb_check_changed_scale_type(void *data, const Efl_Event *ev)
|
|||
|
||||
efl_gfx_color_get(o_bg, &r, &g, &b, &a);
|
||||
printf("bg color: %d %d %d %d\n", r, g, b, a);
|
||||
printf("bg hex color code: %s\n", efl_gfx_color_code_get(o_bg));
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
#include "config.h"
|
||||
#include "Efl.h"
|
||||
|
||||
static int
|
||||
_format_clean_param(Eina_Tmpstr *s)
|
||||
{
|
||||
Eina_Tmpstr *ss;
|
||||
char *ds;
|
||||
int len = 0;
|
||||
|
||||
ds = (char*) s;
|
||||
for (ss = s; *ss; ss++, ds++, len++)
|
||||
{
|
||||
if ((*ss == '\\') && *(ss + 1)) ss++;
|
||||
if (ds != ss) *ds = *ss;
|
||||
}
|
||||
*ds = 0;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static int
|
||||
_hex_string_get(char ch, Eina_Bool *ok)
|
||||
{
|
||||
if ((ch >= '0') && (ch <= '9')) return (ch - '0');
|
||||
else if ((ch >= 'A') && (ch <= 'F')) return (ch - 'A' + 10);
|
||||
else if ((ch >= 'a') && (ch <= 'f')) return (ch - 'a' + 10);
|
||||
*ok = EINA_FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Parses a string of one of the formas:
|
||||
* 1. "#RRGGBB"
|
||||
* 2. "#RRGGBBAA"
|
||||
* 3. "#RGB"
|
||||
* 4. "#RGBA"
|
||||
* To the rgba values.
|
||||
*
|
||||
* @param[in] str The string to parse - NOT NULL.
|
||||
* @param[out] r The Red value - NOT NULL.
|
||||
* @param[out] g The Green value - NOT NULL.
|
||||
* @param[out] b The Blue value - NOT NULL.
|
||||
* @param[out] a The Alpha value - NOT NULL.
|
||||
*/
|
||||
static Eina_Bool
|
||||
_format_color_parse(const char *str, int slen,
|
||||
unsigned char *r, unsigned char *g,
|
||||
unsigned char *b, unsigned char *a)
|
||||
{
|
||||
Eina_Bool v = EINA_TRUE;
|
||||
|
||||
*r = *g = *b = *a = 0;
|
||||
|
||||
if (slen == 7) /* #RRGGBB */
|
||||
{
|
||||
*r = (_hex_string_get(str[1], &v) << 4) | (_hex_string_get(str[2], &v));
|
||||
*g = (_hex_string_get(str[3], &v) << 4) | (_hex_string_get(str[4], &v));
|
||||
*b = (_hex_string_get(str[5], &v) << 4) | (_hex_string_get(str[6], &v));
|
||||
*a = 0xff;
|
||||
}
|
||||
else if (slen == 9) /* #RRGGBBAA */
|
||||
{
|
||||
*r = (_hex_string_get(str[1], &v) << 4) | (_hex_string_get(str[2], &v));
|
||||
*g = (_hex_string_get(str[3], &v) << 4) | (_hex_string_get(str[4], &v));
|
||||
*b = (_hex_string_get(str[5], &v) << 4) | (_hex_string_get(str[6], &v));
|
||||
*a = (_hex_string_get(str[7], &v) << 4) | (_hex_string_get(str[8], &v));
|
||||
}
|
||||
else if (slen == 4) /* #RGB */
|
||||
{
|
||||
*r = _hex_string_get(str[1], &v);
|
||||
*r = (*r << 4) | *r;
|
||||
*g = _hex_string_get(str[2], &v);
|
||||
*g = (*g << 4) | *g;
|
||||
*b = _hex_string_get(str[3], &v);
|
||||
*b = (*b << 4) | *b;
|
||||
*a = 0xff;
|
||||
}
|
||||
else if (slen == 5) /* #RGBA */
|
||||
{
|
||||
*r = _hex_string_get(str[1], &v);
|
||||
*r = (*r << 4) | *r;
|
||||
*g = _hex_string_get(str[2], &v);
|
||||
*g = (*g << 4) | *g;
|
||||
*b = _hex_string_get(str[3], &v);
|
||||
*b = (*b << 4) | *b;
|
||||
*a = _hex_string_get(str[4], &v);
|
||||
*a = (*a << 4) | *a;
|
||||
}
|
||||
else v = EINA_FALSE;
|
||||
|
||||
*r = (*r * *a) / 255;
|
||||
*g = (*g * *a) / 255;
|
||||
*b = (*b * *a) / 255;
|
||||
return v;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_gfx_color_color_code_set(Eo *obj, void *_pd EINA_UNUSED, const char *colorcode)
|
||||
{
|
||||
int len;
|
||||
unsigned char r, g, b, a;
|
||||
|
||||
len = _format_clean_param(colorcode);
|
||||
|
||||
_format_color_parse(colorcode, len, &r, &g, &b, &a);
|
||||
efl_gfx_color_set(obj, r, g, b, a);
|
||||
}
|
||||
|
||||
EOLIAN static const char *
|
||||
_efl_gfx_color_color_code_get(Eo *obj, void *_pd EINA_UNUSED)
|
||||
{
|
||||
int r, g, b, a;
|
||||
|
||||
efl_gfx_color_get(obj, &r, &g, &b, &a);
|
||||
return eina_slstr_printf("#%02X%02X%02X%02X", r, g, b, a);
|
||||
}
|
||||
|
||||
#include "interfaces/efl_gfx_color.eo.c"
|
|
@ -1,6 +1,7 @@
|
|||
interface Efl.Gfx.Color
|
||||
mixin Efl.Gfx.Color
|
||||
{
|
||||
[[Efl Gfx Color interface class]]
|
||||
[[Efl Gfx Color mixin class]]
|
||||
data: null;
|
||||
methods {
|
||||
@property color @pure_virtual {
|
||||
set {
|
||||
|
@ -42,5 +43,20 @@ interface Efl.Gfx.Color
|
|||
a: int;
|
||||
}
|
||||
}
|
||||
@property color_code {
|
||||
set {
|
||||
[[Set the color of given Evas object to the given hex color code(#RRGGBBAA).
|
||||
e.g. efl_gfx_color_code_set(obj, "#FFCCAACC");
|
||||
]]
|
||||
}
|
||||
get {
|
||||
[[Get hex color code of given Evas object.
|
||||
This returns a short lived hex color code string.
|
||||
]]
|
||||
}
|
||||
values {
|
||||
colorcode: string; [[the hex color code.]]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "interfaces/efl_text_markup.eo.c"
|
||||
|
||||
#include "interfaces/efl_gfx.eo.c"
|
||||
#include "interfaces/efl_gfx_color.eo.c"
|
||||
#include "interfaces/efl_gfx_buffer.eo.c"
|
||||
#include "interfaces/efl_gfx_stack.eo.c"
|
||||
#include "interfaces/efl_gfx_fill.eo.c"
|
||||
|
|
Loading…
Reference in New Issue