From b1b0679daaa3ddf81363812061eeb008a2efbf96 Mon Sep 17 00:00:00 2001 From: Subhransu Mohanty Date: Wed, 18 Nov 2015 14:25:09 +0900 Subject: [PATCH] efl: added fill_rule property in efl_gfx_shape class Open question, should fill rule be part of the public data ? Let's say no for now. Signed-off-by: Cedric BAIL --- src/lib/efl/Efl.h | 10 ++++++++++ src/lib/efl/interfaces/efl_gfx_shape.c | 24 ++++++++++++++++++++++-- src/lib/efl/interfaces/efl_gfx_shape.eo | 19 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h index 8bc30b26b8..aa09157210 100644 --- a/src/lib/efl/Efl.h +++ b/src/lib/efl/Efl.h @@ -124,6 +124,16 @@ typedef enum _Efl_Gfx_Gradient_Spread } Efl_Gfx_Gradient_Spread; +/** + * Type defining how an image content get filled. + * @since 1.14 + */ +typedef enum _Efl_Gfx_Fill_Rule +{ + EFL_GFX_FILL_RULE_WINDING = 0, /**< Draw a horizontal line from the point to a location outside the shape. Determine whether the direction of the line at each intersection point is up or down. The winding number is determined by summing the direction of each intersection. If the number is non zero, the point is inside the shape. This mode is the default */ + EFL_GFX_FILL_RULE_ODD_EVEN = 1, /**< Draw a horizontal line from the point to a location outside the shape, and count the number of intersections. If the number of intersections is an odd number, the point is inside the shape. */ +} Efl_Gfx_Fill_Rule; + /** * Type defining stroke information. * @note Describe the properties to define the path stroke. diff --git a/src/lib/efl/interfaces/efl_gfx_shape.c b/src/lib/efl/interfaces/efl_gfx_shape.c index 4ff8ceb131..8ffdb76a66 100644 --- a/src/lib/efl/interfaces/efl_gfx_shape.c +++ b/src/lib/efl/interfaces/efl_gfx_shape.c @@ -13,6 +13,8 @@ struct _Efl_Gfx_Shape_Data { Efl_Gfx_Shape_Public public; + Efl_Gfx_Fill_Rule fill_rule; + struct { double x; double y; @@ -435,6 +437,7 @@ _efl_gfx_shape_dup(Eo *obj, Efl_Gfx_Shape_Data *pd, const Eo *dup_from) { const Efl_Gfx_Dash *dash = NULL; Efl_Gfx_Shape_Data *from; + Efl_Gfx_Fill_Rule fill_rule; unsigned int dash_length = 0; Efl_Gfx_Cap cap; Efl_Gfx_Join j; @@ -453,7 +456,8 @@ _efl_gfx_shape_dup(Eo *obj, Efl_Gfx_Shape_Data *pd, const Eo *dup_from) location = efl_gfx_shape_stroke_location_get(), efl_gfx_shape_stroke_dash_get(&dash, &dash_length), cap = efl_gfx_shape_stroke_cap_get(), - j = efl_gfx_shape_stroke_join_get()); + j = efl_gfx_shape_stroke_join_get(), + fill_rule = efl_gfx_shape_fill_rule_get()); eo_do(obj, efl_gfx_shape_stroke_scale_set(scale), efl_gfx_shape_stroke_color_set(sr, sg, sb, sa), @@ -461,7 +465,8 @@ _efl_gfx_shape_dup(Eo *obj, Efl_Gfx_Shape_Data *pd, const Eo *dup_from) efl_gfx_shape_stroke_location_set(location), efl_gfx_shape_stroke_dash_set(dash, dash_length), efl_gfx_shape_stroke_cap_set(cap), - efl_gfx_shape_stroke_join_set(j)); + efl_gfx_shape_stroke_join_set(j), + efl_gfx_shape_fill_rule_set(fill_rule)); _efl_gfx_shape_path_set(obj, pd, from->commands, from->points); @@ -1497,4 +1502,19 @@ _efl_gfx_shape_stroke_join_get(Eo *obj EINA_UNUSED, return pd->public.stroke.join; } +static void +_efl_gfx_shape_fill_rule_set(Eo *obj EINA_UNUSED, + Efl_Gfx_Shape_Data *pd, + Efl_Gfx_Fill_Rule fill_rule) +{ + pd->fill_rule = fill_rule; +} + +static Efl_Gfx_Fill_Rule +_efl_gfx_shape_fill_rule_get(Eo *obj EINA_UNUSED, + Efl_Gfx_Shape_Data *pd) +{ + return pd->fill_rule; +} + #include "interfaces/efl_gfx_shape.eo.c" diff --git a/src/lib/efl/interfaces/efl_gfx_shape.eo b/src/lib/efl/interfaces/efl_gfx_shape.eo index 395e54248f..4943522e9d 100644 --- a/src/lib/efl/interfaces/efl_gfx_shape.eo +++ b/src/lib/efl/interfaces/efl_gfx_shape.eo @@ -125,6 +125,25 @@ mixin Efl.Gfx.Shape j: Efl_Gfx_Join; [[join style to use, default is EFL_GFX_JOIN_MITER]] } } + @property fill_rule { + set { + [[Sets the fill rule of the given shape object. + $EFL_GFX_FILL_RULE_WINDING, or $EFL_GFX_FILL_RULE_ODD_EVEN. + + @since 1.14 + ]] + } + get { + [[Retrieves the fill rule for the given shape object. + + @since 1.14 + ]] + } + values { + fill_rule: Efl_Gfx_Fill_Rule; [[The current fill rule of the shape object. + One of $EFL_GFX_FILL_RULE_WINDING, $EFL_GFX_FILL_RULE_ODD_EVEN]] + } + } @property path { set { [[Set the list of commands and points to be used to create the