cairo_path_t *path;
};
-static void
-_ector_renderer_cairo_shape_path_changed(void *data, const Efl_Event *event)
+EOLIAN static void
+_ector_renderer_cairo_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
+ Ector_Renderer_Cairo_Shape_Data *pd)
{
- Ector_Renderer_Cairo_Shape_Data *pd = data;
- Efl_Gfx_Path_Change_Event *ev = event->info;
-
- if (!pd->path) return;
- if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) ||
- (ev->what & EFL_GFX_CHANGE_FLAG_PATH)))
- return;
-
- cairo_path_destroy(pd->path);
- pd->path = NULL;
+ if (pd->path)
+ {
+ cairo_path_destroy(pd->path);
+ pd->path = NULL;
+ }
}
static Eina_Bool
pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
- efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_cairo_shape_path_changed, pd);
-
- return obj;
+ return obj;
}
static Efl_Object *
Ector.Renderer.prepare;
Ector.Renderer.draw;
Efl.Gfx.Path.bounds_get;
+ Efl.Gfx.Path.commit;
Ector.Renderer.crc { get; }
Ector.Renderer.Cairo.op_fill;
Efl.Object.constructor;
GLshort *vertex;
};
-static void
-_ector_renderer_gl_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED)
+EOLIAN static void
+_ector_renderer_gl_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
+ Ector_Renderer_GL_Shape_Data *pd)
{
- Ector_Renderer_GL_Shape_Data *pd = data;
- Efl_Gfx_Path_Change_Event *ev = event->info;
-
- if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) ||
- (ev->what & EFL_GFX_CHANGE_FLAG_PATH)))
- return;
-
- free(pd->vertex);
- pd->vertex = NULL;
+ if (pd->vertex)
+ {
+ free(pd->vertex);
+ pd->vertex = NULL;
+ }
}
static Eina_Bool
pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
- efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_gl_shape_path_changed, pd);
-
return obj;
}
Ector.Renderer.crc { get; }
Ector.Renderer.GL.op_fill;
Efl.Gfx.Path.bounds_get;
+ Efl.Gfx.Path.commit;
Efl.Object.constructor;
Efl.Object.destructor;
}
return EINA_FALSE;
}
-static void
-_ector_renderer_software_shape_efl_gfx_path_path_set(Eo *obj,
- Ector_Renderer_Software_Shape_Data *pd,
- const Efl_Gfx_Path_Command *op,
- const double *points)
-{
- if (pd->shape_data) ector_software_rasterizer_destroy_rle_data(pd->shape_data);
- if (pd->outline_data) ector_software_rasterizer_destroy_rle_data(pd->outline_data);
- pd->shape_data = NULL;
- pd->outline_data = NULL;
-
- efl_gfx_path_set(efl_super(obj, MY_CLASS), op, points);
-}
-
-
-static void
-_ector_renderer_software_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED)
+EOLIAN static void
+_ector_renderer_software_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
+ Ector_Renderer_Software_Shape_Data *pd)
{
- Ector_Renderer_Software_Shape_Data *pd = data;
- Efl_Gfx_Path_Change_Event *ev = event->info;
-
- if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) ||
- (ev->what & EFL_GFX_CHANGE_FLAG_PATH)))
- return;
-
- if (pd->shape_data) ector_software_rasterizer_destroy_rle_data(pd->shape_data);
- if (pd->outline_data) ector_software_rasterizer_destroy_rle_data(pd->outline_data);
-
- pd->shape_data = NULL;
- pd->outline_data = NULL;
+ if (pd->shape_data)
+ {
+ ector_software_rasterizer_destroy_rle_data(pd->shape_data);
+ pd->shape_data = NULL;
+ }
+ if (pd->outline_data)
+ {
+ ector_software_rasterizer_destroy_rle_data(pd->outline_data);
+ pd->outline_data = NULL;
+ }
}
static Eo *
pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj);
pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
- efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_software_shape_path_changed, pd);
return obj;
}
Ector.Renderer.Software.op_fill;
Ector.Renderer.mask { set; }
Ector.Renderer.crc { get; }
- Efl.Gfx.Path.path { set; }
+ Efl.Gfx.Path.commit;
Efl.Object.constructor;
Efl.Object.destructor;
}
return;
}
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
Efl_Gfx_Path_Command *cmds;
double *pts;
unsigned int cmds_length = 0, pts_length = 0;
_efl_gfx_path_current_search(pd->commands, pd->points,
&pd->current.x, &pd->current.y,
&pd->current_ctrl.x, &pd->current_ctrl.y);
-
- efl_event_callback_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
_efl_gfx_path_interpolate(Eo *obj, Efl_Gfx_Path_Data *pd,
const Eo *from, const Eo *to, double pos_map)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
Efl_Gfx_Path_Data *from_pd, *to_pd;
Efl_Gfx_Path_Command *cmds;
double interv; //interpolated value
}
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
-
return EINA_TRUE;
}
}
EOLIAN static void
-_efl_gfx_path_reset(Eo *obj, Efl_Gfx_Path_Data *pd)
+_efl_gfx_path_reset(Eo *obj EINA_UNUSED, Efl_Gfx_Path_Data *pd)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
-
free(pd->commands);
pd->reserved_cmd_cnt = 0;
pd->commands = NULL;
pd->current_ctrl.x = 0;
pd->current_ctrl.y = 0;
pd->convex = EINA_FALSE;
-
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
-_efl_gfx_path_append_move_to(Eo *obj, Efl_Gfx_Path_Data *pd,
- double x, double y)
+_efl_gfx_path_append_move_to(Eo *obj EINA_UNUSED,
+ Efl_Gfx_Path_Data *pd,
+ double x, double y)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
double *offset_point;
if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO, pd, &offset_point))
pd->current.x = x;
pd->current.y = y;
-
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
-_efl_gfx_path_append_line_to(Eo *obj, Efl_Gfx_Path_Data *pd,
- double x, double y)
+_efl_gfx_path_append_line_to(Eo *obj EINA_UNUSED,
+ Efl_Gfx_Path_Data *pd,
+ double x, double y)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
double *offset_point;
if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_LINE_TO, pd, &offset_point))
pd->current.x = x;
pd->current.y = y;
-
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
-_efl_gfx_path_append_cubic_to(Eo *obj, Efl_Gfx_Path_Data *pd,
- double ctrl_x0, double ctrl_y0,
- double ctrl_x1, double ctrl_y1,
- double x, double y)
+_efl_gfx_path_append_cubic_to(Eo *obj EINA_UNUSED,
+ Efl_Gfx_Path_Data *pd,
+ double ctrl_x0, double ctrl_y0,
+ double ctrl_x1, double ctrl_y1,
+ double x, double y)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
double *offset_point;
if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_CUBIC_TO,
pd->current.y = y;
pd->current_ctrl.x = ctrl_x1;
pd->current_ctrl.y = ctrl_y1;
-
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
}
EOLIAN static void
-_efl_gfx_path_append_close(Eo *obj, Efl_Gfx_Path_Data *pd)
+_efl_gfx_path_append_close(Eo *obj EINA_UNUSED, Efl_Gfx_Path_Data *pd)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
double *offset_point;
-
efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_CLOSE, pd, &offset_point);
-
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
static void
EOLIAN static void
_efl_gfx_path_copy_from(Eo *obj, Efl_Gfx_Path_Data *pd, const Eo *dup_from)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
Efl_Gfx_Path_Data *from;
if (obj == dup_from) return;
pd->convex = from->convex;
_efl_gfx_path_path_set(obj, pd, from->commands, from->points);
-
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
#include "interfaces/efl_gfx_path.eo.c"
@in pts_count: uint; [[Pointers count to reserve]]
}
}
- }
- events {
- changed: Efl.Gfx.Path_Change_Event; [[Graphics path was changed.]]
+ commit @pure_virtual {
+ [[Request to update the path object.
+
+ One path object may get appending several path calls (such as
+ append_cubic, append_rect, etc) to construct the final path data.
+ Here commit means all path data is prepared and now object
+ could update its own internal status based on the last path
+ information.
+ ]]
+ }
}
}
EOLIAN static void
_efl_gfx_shape_stroke_width_set(Eo *obj, Efl_Gfx_Shape_Data *pd, double w)
{
- Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
-
pd->public.stroke.width = w;
- efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static double
}
static void
-_path_changed_cb(void *data, const Efl_Event *event)
+_efl_ui_textpath_efl_gfx_path_commit(Eo *obj, Efl_Ui_Textpath_Data *pd)
{
- Efl_Gfx_Path_Change_Event *ev = event->info;
- EFL_UI_TEXTPATH_DATA_GET(data, sd);
-
- if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) ||
- (ev->what & EFL_GFX_CHANGE_FLAG_PATH)))
- return;
-
- _path_data_get(data, sd, EINA_TRUE);
- _sizing_eval(sd);
+ _path_data_get(obj, pd, EINA_TRUE);
+ _sizing_eval(pd);
}
static Eina_Bool
evas_object_smart_member_add(priv->text_obj, obj);
elm_widget_sub_object_add(obj, priv->text_obj);
-
- efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _path_changed_cb, obj);
}
EOLIAN static Efl_Object *
radius * 2, start_angle, 360);
}
+ _path_data_get(obj, pd, EINA_TRUE);
_sizing_eval(pd);
}
implements {
Efl.Object.constructor;
Efl.Object.destructor;
+ Efl.Gfx.Path.commit;
Efl.Canvas.Group.group_calculate;
Efl.Text.text {get; set;}
Efl.Part.part_get;
};
// FIXME: Use the renderer bounding box when it has been created instead of an estimation
-static void
-_efl_canvas_vg_shape_path_changed(void *data, const Efl_Event *event)
-{
- efl_canvas_vg_node_change(event->object);
-}
static void
_efl_canvas_vg_shape_fill_set(Eo *obj EINA_UNUSED,
pd->fill = efl_ref(f);
efl_unref(tmp);
-
- efl_canvas_vg_node_change(obj);
}
static Efl_Canvas_Vg_Node *
pd->stroke.fill = efl_ref(f);
efl_unref(tmp);
-
- efl_canvas_vg_node_change(obj);
}
static Efl_Canvas_Vg_Node *
pd->stroke.marker = efl_ref(m);
efl_unref(tmp);
-
- efl_canvas_vg_node_change(obj);
}
static Efl_Canvas_Vg_Shape *
ector_renderer_shape_stroke_fill_set(nd->renderer, stroke_fill ? stroke_fill->renderer : NULL);
ector_renderer_shape_stroke_marker_set(nd->renderer, stroke_marker ? stroke_marker->renderer : NULL);
efl_gfx_path_copy_from(nd->renderer, obj);
+ efl_gfx_path_commit(nd->renderer);
ector_renderer_prepare(nd->renderer);
ector_renderer_mask_set(nd->renderer, mask, mask_op);
-
}
static Eo *
nd->render_pre = _efl_canvas_vg_shape_render_pre;
nd->data = pd;
- efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED,
- _efl_canvas_vg_shape_path_changed, pd);
-
return obj;
}
if (pd->stroke.fill) efl_unref(pd->stroke.fill);
if (pd->stroke.marker) efl_unref(pd->stroke.marker);
- efl_event_callback_del(obj, EFL_GFX_PATH_EVENT_CHANGED,
- _efl_canvas_vg_shape_path_changed, pd);
-
efl_gfx_path_reset(obj);
efl_destructor(efl_super(obj, MY_CLASS));
}
return r;
}
+EOLIAN static void
+_efl_canvas_vg_shape_efl_gfx_path_commit(Eo *obj,
+ Efl_Canvas_Vg_Shape_Data *pd EINA_UNUSED)
+{
+ efl_canvas_vg_node_change(obj);
+}
EOLIAN static Efl_Canvas_Vg_Node *
_efl_canvas_vg_shape_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Shape_Data *pd)
evas_vg_shape_stroke_scale_set(Eo *obj, double s)
{
efl_gfx_shape_stroke_scale_set(obj, s);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_stroke_color_set(Eo *obj, int r, int g, int b, int a)
{
efl_gfx_shape_stroke_color_set(obj, r, g, b, a);
+ efl_canvas_vg_node_change(obj);
}
EAPI double
evas_vg_shape_stroke_width_set(Eo *obj, double w)
{
efl_gfx_shape_stroke_width_set(obj, w);
+ efl_canvas_vg_node_change(obj);
}
EAPI double
evas_vg_shape_stroke_location_set(Eo *obj, double centered)
{
efl_gfx_shape_stroke_location_set(obj, centered);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_stroke_dash_set(Eo *obj, const Efl_Gfx_Dash *dash, unsigned int length)
{
efl_gfx_shape_stroke_dash_set(obj, dash, length);
+ efl_canvas_vg_node_change(obj);
}
EAPI Efl_Gfx_Cap
evas_vg_shape_stroke_cap_set(Eo *obj, Efl_Gfx_Cap c)
{
efl_gfx_shape_stroke_cap_set(obj, c);
+ efl_canvas_vg_node_change(obj);
}
EAPI Efl_Gfx_Join
evas_vg_shape_stroke_join_set(Eo *obj, Efl_Gfx_Join j)
{
efl_gfx_shape_stroke_join_set(obj, j);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_path_set(Eo *obj, const Efl_Gfx_Path_Command *op, const double *points)
{
efl_gfx_path_set(obj, op, points);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_dup(Eo *obj, Eo *dup_from)
{
efl_gfx_path_copy_from(obj, dup_from);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_reset(Eo *obj)
{
efl_gfx_path_reset(obj);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_move_to(Eo *obj, double x, double y)
{
efl_gfx_path_append_move_to(obj, x, y);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_line_to(Eo *obj, double x, double y)
{
efl_gfx_path_append_line_to(obj, x, y);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_quadratic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y)
{
efl_gfx_path_append_quadratic_to(obj, x, y, ctrl_x, ctrl_y);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_squadratic_to(Eo *obj, double x, double y)
{
efl_gfx_path_append_squadratic_to(obj, x, y);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_cubic_to(Eo *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1)
{
efl_gfx_path_append_cubic_to(obj, x, y, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_scubic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y)
{
efl_gfx_path_append_scubic_to(obj, x, y, ctrl_x, ctrl_y);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_arc_to(Eo *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep)
{
efl_gfx_path_append_arc_to(obj, x, y, rx, ry, angle, large_arc, sweep);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_arc(Eo *obj, double x, double y, double w, double h, double start_angle, double sweep_length)
{
efl_gfx_path_append_arc(obj, x, y, w, h, start_angle, sweep_length);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_close(Eo *obj)
{
efl_gfx_path_append_close(obj);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_circle(Eo *obj, double x, double y, double radius)
{
efl_gfx_path_append_circle(obj, x, y, radius);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry)
{
efl_gfx_path_append_rect(obj, x, y, w, h, rx, ry);
+ efl_canvas_vg_node_change(obj);
}
EAPI void
evas_vg_shape_append_svg_path(Eo *obj, const char *svg_path_data)
{
efl_gfx_path_append_svg_path(obj, svg_path_data);
+ efl_canvas_vg_node_change(obj);
}
EAPI Eina_Bool
evas_vg_shape_interpolate(Eo *obj, const Eo *from, const Eo *to, double pos_map)
{
- return efl_gfx_path_interpolate(obj, from, to, pos_map);
+ Eina_Bool ret = efl_gfx_path_interpolate(obj, from, to, pos_map);
+ efl_canvas_vg_node_change(obj);
+ return ret;
}
EAPI Eina_Bool
}
implements {
Efl.Gfx.Path.interpolate;
+ Efl.Gfx.Path.commit;
Efl.Duplicate.duplicate;
Efl.Object.constructor;
Efl.Object.destructor;