forked from enlightenment/efl
ector: add mul_col feature in Cairo backend and fixed color handling issue.
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
c9aaa12c07
commit
1f62465916
|
@ -88,7 +88,6 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_color_set(Eo *obj EINA_UN
|
||||||
Ector_Renderer_Cairo_Base_Data *pd,
|
Ector_Renderer_Cairo_Base_Data *pd,
|
||||||
int r, int g, int b, int a)
|
int r, int g, int b, int a)
|
||||||
{
|
{
|
||||||
ector_color_argb_unpremul(a, &r ,&g, &b);
|
|
||||||
pd->generic->color.r = r;
|
pd->generic->color.r = r;
|
||||||
pd->generic->color.g = g;
|
pd->generic->color.g = g;
|
||||||
pd->generic->color.b = b;
|
pd->generic->color.b = b;
|
||||||
|
@ -104,8 +103,6 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_color_get(Eo *obj EINA_UN
|
||||||
if (g) *g = pd->generic->color.g;
|
if (g) *g = pd->generic->color.g;
|
||||||
if (b) *b = pd->generic->color.b;
|
if (b) *b = pd->generic->color.b;
|
||||||
if (a) *a = pd->generic->color.a;
|
if (a) *a = pd->generic->color.a;
|
||||||
|
|
||||||
ector_color_argb_premul(pd->generic->color.a, r, g, b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -145,7 +142,7 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_draw(Eo *obj,
|
||||||
Eina_Array *clips EINA_UNUSED,
|
Eina_Array *clips EINA_UNUSED,
|
||||||
unsigned int mul_col)
|
unsigned int mul_col)
|
||||||
{
|
{
|
||||||
double r, g, b, a;
|
int r, g, b, a;
|
||||||
cairo_operator_t cop;
|
cairo_operator_t cop;
|
||||||
double cx, cy;
|
double cx, cy;
|
||||||
|
|
||||||
|
@ -165,10 +162,11 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_draw(Eo *obj,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = ((double)((pd->generic->color.r * R_VAL(&mul_col)) >> 8)) / 255;
|
r = ((pd->generic->color.r * R_VAL(&mul_col)) >> 8);
|
||||||
g = ((double)((pd->generic->color.g * G_VAL(&mul_col)) >> 8)) / 255;
|
g = ((pd->generic->color.g * G_VAL(&mul_col)) >> 8);
|
||||||
b = ((double)((pd->generic->color.b * B_VAL(&mul_col)) >> 8)) / 255;
|
b = ((pd->generic->color.b * B_VAL(&mul_col)) >> 8);
|
||||||
a = ((double)((pd->generic->color.a * A_VAL(&mul_col)) >> 8)) / 255;
|
a = ((pd->generic->color.a * A_VAL(&mul_col)) >> 8);
|
||||||
|
ector_color_argb_unpremul(a, &r, &g, &b);
|
||||||
|
|
||||||
cairo_set_operator(pd->parent->cairo, cop);
|
cairo_set_operator(pd->parent->cairo, cop);
|
||||||
cairo_transform(pd->parent->cairo, &identity);
|
cairo_transform(pd->parent->cairo, &identity);
|
||||||
|
@ -179,7 +177,7 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_draw(Eo *obj,
|
||||||
pd->parent->current.x = pd->generic->origin.x;
|
pd->parent->current.x = pd->generic->origin.x;
|
||||||
pd->parent->current.y = pd->generic->origin.y;
|
pd->parent->current.y = pd->generic->origin.y;
|
||||||
|
|
||||||
cairo_set_source_rgba(pd->parent->cairo, r, g, b, a);
|
cairo_set_source_rgba(pd->parent->cairo, r/255.0, g/255.0, b/255.0, a/255.0);
|
||||||
|
|
||||||
USE(obj, cairo_new_path, EINA_FALSE);
|
USE(obj, cairo_new_path, EINA_FALSE);
|
||||||
USE(obj, cairo_rectangle, EINA_FALSE);
|
USE(obj, cairo_rectangle, EINA_FALSE);
|
||||||
|
|
|
@ -51,10 +51,16 @@ _ector_renderer_cairo_gradient_linear_ector_renderer_generic_base_prepare(Eo *ob
|
||||||
|
|
||||||
pd->pat = cairo_pattern_create_linear(gld->start.x, gld->start.y,
|
pd->pat = cairo_pattern_create_linear(gld->start.x, gld->start.y,
|
||||||
gld->end.x, gld->end.y);
|
gld->end.x, gld->end.y);
|
||||||
|
int r,g,b,a;
|
||||||
for (i = 0; i < gd->colors_count; i++)
|
for (i = 0; i < gd->colors_count; i++)
|
||||||
cairo_pattern_add_color_stop_rgba(pd->pat, gd->colors[i].offset,
|
{
|
||||||
gd->colors[i].r, gd->colors[i].g,
|
r = gd->colors[i].r;
|
||||||
gd->colors[i].b, gd->colors[i].a);
|
g = gd->colors[i].g;
|
||||||
|
b = gd->colors[i].b;
|
||||||
|
a = gd->colors[i].a;
|
||||||
|
ector_color_argb_unpremul(a, &r, &g, &b);
|
||||||
|
cairo_pattern_add_color_stop_rgba(pd->pat, gd->colors[i].offset, r/255.0, g/255.0, b/255.0, a/255.0);
|
||||||
|
}
|
||||||
|
|
||||||
USE(obj, cairo_pattern_set_extend, EINA_FALSE);
|
USE(obj, cairo_pattern_set_extend, EINA_FALSE);
|
||||||
cairo_pattern_set_extend(pd->pat, gd->s);
|
cairo_pattern_set_extend(pd->pat, gd->s);
|
||||||
|
|
|
@ -55,10 +55,17 @@ _ector_renderer_cairo_gradient_radial_ector_renderer_generic_base_prepare(Eo *ob
|
||||||
|
|
||||||
pd->pat = cairo_pattern_create_radial(grd->focal.x, grd->focal.y, 0,
|
pd->pat = cairo_pattern_create_radial(grd->focal.x, grd->focal.y, 0,
|
||||||
grd->radial.x, grd->radial.y, grd->radius);
|
grd->radial.x, grd->radial.y, grd->radius);
|
||||||
|
|
||||||
|
int r,g,b,a;
|
||||||
for (i = 0; i < gd->colors_count; i++)
|
for (i = 0; i < gd->colors_count; i++)
|
||||||
cairo_pattern_add_color_stop_rgba(pd->pat, gd->colors[i].offset,
|
{
|
||||||
gd->colors[i].r, gd->colors[i].g,
|
r = gd->colors[i].r;
|
||||||
gd->colors[i].b, gd->colors[i].a);
|
g = gd->colors[i].g;
|
||||||
|
b = gd->colors[i].b;
|
||||||
|
a = gd->colors[i].a;
|
||||||
|
ector_color_argb_unpremul(a, &r, &g, &b);
|
||||||
|
cairo_pattern_add_color_stop_rgba(pd->pat, gd->colors[i].offset, r/255.0, g/255.0, b/255.0, a/255.0);
|
||||||
|
}
|
||||||
|
|
||||||
USE(obj, cairo_pattern_set_extend, EINA_FALSE);
|
USE(obj, cairo_pattern_set_extend, EINA_FALSE);
|
||||||
cairo_pattern_set_extend(pd->pat, gd->s);
|
cairo_pattern_set_extend(pd->pat, gd->s);
|
||||||
|
|
|
@ -149,9 +149,9 @@ _ector_renderer_cairo_shape_ector_renderer_generic_base_prepare(Eo *obj, Ector_R
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ector_renderer_cairo_shape_ector_renderer_generic_base_draw(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd, Ector_Rop op, Eina_Array *clips, unsigned int mul_col)
|
_ector_renderer_cairo_shape_ector_renderer_generic_base_draw(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd, Ector_Rop op, Eina_Array *clips, unsigned int mul_col)
|
||||||
{
|
{
|
||||||
|
int r, g, b, a;
|
||||||
if (pd->path == NULL) return EINA_FALSE;
|
if (pd->path == NULL) return EINA_FALSE;
|
||||||
|
|
||||||
// FIXME: find a way to set multiple clips
|
|
||||||
eo_do_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS, ector_renderer_draw(op, clips, mul_col));
|
eo_do_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS, ector_renderer_draw(op, clips, mul_col));
|
||||||
|
|
||||||
USE(obj, cairo_new_path, EINA_FALSE);
|
USE(obj, cairo_new_path, EINA_FALSE);
|
||||||
|
@ -163,7 +163,7 @@ _ector_renderer_cairo_shape_ector_renderer_generic_base_draw(Eo *obj, Ector_Rend
|
||||||
if (pd->shape->fill)
|
if (pd->shape->fill)
|
||||||
eo_do(pd->shape->fill, ector_renderer_cairo_base_fill());
|
eo_do(pd->shape->fill, ector_renderer_cairo_base_fill());
|
||||||
|
|
||||||
if (pd->shape->stroke.color.a > 0)
|
if (pd->shape->stroke.fill || pd->shape->stroke.color.a > 0)
|
||||||
{
|
{
|
||||||
USE(obj, cairo_fill_preserve, EINA_FALSE);
|
USE(obj, cairo_fill_preserve, EINA_FALSE);
|
||||||
USE(obj, cairo_set_source_rgba, EINA_FALSE);
|
USE(obj, cairo_set_source_rgba, EINA_FALSE);
|
||||||
|
@ -174,19 +174,23 @@ _ector_renderer_cairo_shape_ector_renderer_generic_base_draw(Eo *obj, Ector_Rend
|
||||||
|
|
||||||
cairo_fill_preserve(pd->parent->cairo);
|
cairo_fill_preserve(pd->parent->cairo);
|
||||||
|
|
||||||
cairo_set_source_rgba(pd->parent->cairo,
|
|
||||||
pd->shape->stroke.color.r / 255.0,
|
|
||||||
pd->shape->stroke.color.g / 255.0,
|
|
||||||
pd->shape->stroke.color.b / 255.0,
|
|
||||||
pd->shape->stroke.color.a / 255.0);
|
|
||||||
|
|
||||||
if (pd->shape->stroke.fill)
|
if (pd->shape->stroke.fill)
|
||||||
eo_do(pd->shape->stroke.fill, ector_renderer_cairo_base_fill());
|
eo_do(pd->shape->stroke.fill, ector_renderer_cairo_base_fill());
|
||||||
// Set dash, cap and join
|
else
|
||||||
cairo_set_line_width(pd->parent->cairo, (pd->shape->stroke.width * pd->shape->stroke.scale));
|
{
|
||||||
cairo_set_line_cap(pd->parent->cairo, pd->shape->stroke.cap);
|
r = (((pd->shape->stroke.color.r * R_VAL(&mul_col)) + 0xff) >> 8);
|
||||||
cairo_set_line_join(pd->parent->cairo, pd->shape->stroke.join);
|
g = (((pd->shape->stroke.color.g * G_VAL(&mul_col)) + 0xff) >> 8);
|
||||||
cairo_stroke(pd->parent->cairo);
|
b = (((pd->shape->stroke.color.b * B_VAL(&mul_col)) + 0xff) >> 8);
|
||||||
|
a = (((pd->shape->stroke.color.a * A_VAL(&mul_col)) + 0xff) >> 8);
|
||||||
|
ector_color_argb_unpremul(a, &r, &g, &b);
|
||||||
|
cairo_set_source_rgba(pd->parent->cairo, r/255.0, g/255.0, b/255.0, a/255.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set dash, cap and join
|
||||||
|
cairo_set_line_width(pd->parent->cairo, (pd->shape->stroke.width * pd->shape->stroke.scale * 2));
|
||||||
|
cairo_set_line_cap(pd->parent->cairo, pd->shape->stroke.cap);
|
||||||
|
cairo_set_line_join(pd->parent->cairo, pd->shape->stroke.join);
|
||||||
|
cairo_stroke(pd->parent->cairo);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue