Ector_Renderer_Cairo_Base_Data *pd,
int r, int g, int b, int a)
{
- ector_color_argb_unpremul(a, &r ,&g, &b);
pd->generic->color.r = r;
pd->generic->color.g = g;
pd->generic->color.b = b;
if (g) *g = pd->generic->color.g;
if (b) *b = pd->generic->color.b;
if (a) *a = pd->generic->color.a;
-
- ector_color_argb_premul(pd->generic->color.a, r, g, b);
}
static Eina_Bool
Eina_Array *clips EINA_UNUSED,
unsigned int mul_col)
{
- double r, g, b, a;
+ int r, g, b, a;
cairo_operator_t cop;
double cx, cy;
break;
}
- r = ((double)((pd->generic->color.r * R_VAL(&mul_col)) >> 8)) / 255;
- g = ((double)((pd->generic->color.g * G_VAL(&mul_col)) >> 8)) / 255;
- b = ((double)((pd->generic->color.b * B_VAL(&mul_col)) >> 8)) / 255;
- a = ((double)((pd->generic->color.a * A_VAL(&mul_col)) >> 8)) / 255;
+ r = ((pd->generic->color.r * R_VAL(&mul_col)) >> 8);
+ g = ((pd->generic->color.g * G_VAL(&mul_col)) >> 8);
+ b = ((pd->generic->color.b * B_VAL(&mul_col)) >> 8);
+ 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_transform(pd->parent->cairo, &identity);
pd->parent->current.x = pd->generic->origin.x;
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_rectangle, EINA_FALSE);
pd->pat = cairo_pattern_create_linear(gld->start.x, gld->start.y,
gld->end.x, gld->end.y);
+ int r,g,b,a;
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,
- gd->colors[i].b, gd->colors[i].a);
+ {
+ r = gd->colors[i].r;
+ 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);
cairo_pattern_set_extend(pd->pat, gd->s);
pd->pat = cairo_pattern_create_radial(grd->focal.x, grd->focal.y, 0,
grd->radial.x, grd->radial.y, grd->radius);
+
+ int r,g,b,a;
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,
- gd->colors[i].b, gd->colors[i].a);
+ {
+ r = gd->colors[i].r;
+ 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);
cairo_pattern_set_extend(pd->pat, gd->s);
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)
{
+ int r, g, b, a;
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));
USE(obj, cairo_new_path, EINA_FALSE);
if (pd->shape->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_set_source_rgba, EINA_FALSE);
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)
eo_do(pd->shape->stroke.fill, ector_renderer_cairo_base_fill());
- // Set dash, cap and join
- 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);
- cairo_set_line_join(pd->parent->cairo, pd->shape->stroke.join);
- cairo_stroke(pd->parent->cairo);
+ else
+ {
+ r = (((pd->shape->stroke.color.r * R_VAL(&mul_col)) + 0xff) >> 8);
+ g = (((pd->shape->stroke.color.g * G_VAL(&mul_col)) + 0xff) >> 8);
+ 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
{