efl: add Efl.Gfx.Shape.append_rect following SVG specification.

SVG rectangle can have rounded corner.
This commit is contained in:
Cedric BAIL 2015-04-03 16:31:53 +02:00
parent 59635cd492
commit 9f8c35002b
4 changed files with 37 additions and 0 deletions

View File

@ -665,6 +665,26 @@ _efl_gfx_shape_append_circle(Eo *obj, Efl_Gfx_Shape_Data *pd,
_efl_gfx_shape_append_arc_to(obj, pd, x, y - radius, radius, radius, 0, EINA_FALSE, EINA_FALSE);
}
void
_efl_gfx_shape_append_rect(Eo *obj, Efl_Gfx_Shape_Data *pd,
double x, double y, double w, double h,
double rx, double ry)
{
_efl_gfx_shape_append_move_to(obj, pd, x, y + ry);
// Top left corner
_efl_gfx_shape_append_arc_to(obj, pd, x + rx, y, rx, ry, 0, EINA_FALSE, EINA_TRUE);
_efl_gfx_shape_append_line_to(obj, pd, x + w - rx, y);
// Top right corner
_efl_gfx_shape_append_arc_to(obj, pd, x + w, y + ry, rx, ry, 0, EINA_FALSE, EINA_TRUE);
_efl_gfx_shape_append_line_to(obj, pd, x + w, y + h - ry);
// Bottom right corner
_efl_gfx_shape_append_arc_to(obj, pd, x + w - rx, y + h, rx, ry, 0, EINA_FALSE, EINA_TRUE);
_efl_gfx_shape_append_line_to(obj, pd, x + rx, y + h);
// Bottom left corner
_efl_gfx_shape_append_arc_to(obj, pd, x, y + h - ry, rx, ry, 0, EINA_FALSE, EINA_TRUE);
_efl_gfx_shape_append_line_to(obj, pd, x, y - ry);
}
static void
_efl_gfx_path_append_horizontal_to(Eo *obj, Efl_Gfx_Shape_Data *pd,
double d, double current_x EINA_UNUSED, double current_y)

View File

@ -250,6 +250,16 @@ mixin Efl.Gfx.Shape
@in double radius;
}
}
append_rect {
params {
@in double x;
@in double y;
@in double w;
@in double h;
@in double rx;
@in double ry;
}
}
append_svg_path {
params {
@in const(char)* svg_path_data;

View File

@ -1755,6 +1755,7 @@ EAPI void evas_vg_shape_shape_append_scubic_to(Eo *obj, double x, double y, doub
EAPI void evas_vg_shape_shape_append_arc_to(Eo *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep);
EAPI void evas_vg_shape_shape_append_close(Eo *obj);
EAPI void evas_vg_shape_shape_append_circle(Eo *obj, double x, double y, double radius);
EAPI void evas_vg_shape_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry);
EAPI void evas_vg_shape_shape_append_svg_path(Eo *obj, const char *svg_path_data);
EAPI Eina_Bool evas_vg_shape_shape_interpolate(Eo *obj, const Eo *from, const Eo *to, double pos_map);
EAPI Eina_Bool evas_vg_shape_shape_equal_commands(Eo *obj, const Eo *with);

View File

@ -525,6 +525,12 @@ evas_vg_shape_shape_append_circle(Eo *obj, double x, double y, double radius)
eo_do(obj, efl_gfx_shape_append_circle(x, y, radius));
}
EAPI void
evas_vg_shape_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry)
{
eo_do(obj, efl_gfx_shape_append_rect(x, y, w, h, rx, ry));
}
EAPI void
evas_vg_shape_shape_append_svg_path(Eo *obj, const char *svg_path_data)
{