efl: Move VG-specific change event to efl.gfx.path

This commit is contained in:
Jean-Philippe Andre 2017-12-12 17:00:39 +09:00
parent 3136500fbe
commit 1fdbb00e22
12 changed files with 59 additions and 30 deletions

View File

@ -76,11 +76,17 @@ struct _Ector_Renderer_Cairo_Shape_Data
};
static void
_ector_renderer_cairo_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED)
_ector_renderer_cairo_shape_path_changed(void *data, const Efl_Event *event)
{
Ector_Renderer_Cairo_Shape_Data *pd = data;
Efl_Gfx_Path_Change_Event *ev = event->info;
if (pd->path) cairo_path_destroy(pd->path);
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;
}

View File

@ -24,6 +24,11 @@ static void
_ector_renderer_gl_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED)
{
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;

View File

@ -746,6 +746,11 @@ static void
_ector_renderer_software_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED)
{
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);

View File

@ -146,6 +146,5 @@ interface Efl.Gfx {
hide; [[Object just became invisible.]]
move; [[Object was moved, its position during the event is the new one.]]
resize; [[Object was resized, its size during the event is the new one.]]
changed; [[Object was changed]]
}
}

View File

@ -149,6 +149,7 @@ _efl_gfx_path_path_set(Eo *obj, Efl_Gfx_Path_Data *pd,
const Efl_Gfx_Path_Command *commands,
const double *points)
{
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;
@ -184,9 +185,9 @@ _efl_gfx_path_path_set(Eo *obj, Efl_Gfx_Path_Data *pd,
_efl_gfx_path_current_search(pd->commands, pd->points,
&pd->current.x, &pd->current.y,
&pd->current_ctrl.x, &pd->current_ctrl.y);
end:
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
@ -276,6 +277,7 @@ EOLIAN static Eina_Bool
_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 *pts;
@ -339,8 +341,7 @@ _efl_gfx_path_interpolate(Eo *obj, Efl_Gfx_Path_Data *pd,
pd->current_ctrl.y = interpolate(from_pd->current_ctrl.y,
to_pd->current_ctrl.y, pos_map);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
return EINA_TRUE;
}
@ -361,6 +362,8 @@ _efl_gfx_path_equal_commands(Eo *obj EINA_UNUSED,
EOLIAN static void
_efl_gfx_path_reset(Eo *obj, Efl_Gfx_Path_Data *pd)
{
Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
free(pd->commands);
pd->commands = NULL;
pd->commands_count = 0;
@ -375,14 +378,14 @@ _efl_gfx_path_reset(Eo *obj, Efl_Gfx_Path_Data *pd)
pd->current_ctrl.y = 0;
pd->convex = EINA_FALSE;
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
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_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))
@ -394,14 +397,14 @@ _efl_gfx_path_append_move_to(Eo *obj, Efl_Gfx_Path_Data *pd,
pd->current.x = x;
pd->current.y = y;
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
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_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))
@ -413,8 +416,7 @@ _efl_gfx_path_append_line_to(Eo *obj, Efl_Gfx_Path_Data *pd,
pd->current.x = x;
pd->current.y = y;
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
@ -423,6 +425,7 @@ _efl_gfx_path_append_cubic_to(Eo *obj, Efl_Gfx_Path_Data *pd,
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,
@ -441,8 +444,7 @@ _efl_gfx_path_append_cubic_to(Eo *obj, Efl_Gfx_Path_Data *pd,
pd->current_ctrl.x = ctrl_x1;
pd->current_ctrl.y = ctrl_y1;
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static void
@ -1028,12 +1030,12 @@ _efl_gfx_path_append_arc(Eo *obj, Efl_Gfx_Path_Data *pd,
EOLIAN static void
_efl_gfx_path_append_close(Eo *obj, 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, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
static void
@ -1578,6 +1580,7 @@ _efl_gfx_path_append_svg_path(Eo *obj, Efl_Gfx_Path_Data *pd,
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;
@ -1588,8 +1591,7 @@ _efl_gfx_path_copy_from(Eo *obj, Efl_Gfx_Path_Data *pd, const Eo *dup_from)
_efl_gfx_path_path_set(obj, pd, from->commands, from->points);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
#include "interfaces/efl_gfx_path.eo.c"

View File

@ -284,6 +284,6 @@ mixin Efl.Gfx.Path
}
}
events {
changed; [[Graphics path was changed.]]
changed: Efl.Gfx.Path.Change_Event; [[Graphics path was changed.]]
}
}

View File

@ -161,9 +161,10 @@ _efl_gfx_shape_stroke_color_get(Eo *obj EINA_UNUSED, Efl_Gfx_Shape_Data *pd,
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, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
EOLIAN static double

View File

@ -146,13 +146,18 @@ enum Efl.Gfx.Border_Fill_Mode
solid = 2 [[Image's center region is to be made solid, even if it has transparency on it]]
}
enum Efl.Gfx.Change.Flag
enum Efl.Gfx.Change_Flag
{
[[What property got changed for this object @since 1.18]]
none = 0x0, [[No change]]
matrix = 0x1, [[matrix got changed]]
path = 0x2, [[path got changes]]
all = -1 [[all property got changed]]
fill = 0x4, [[coloring or fill information changed, not geometry]]
all = 0xffff [[all properties got changed]]
}
struct Efl.Gfx.Path.Change_Event {
what: Efl.Gfx.Change_Flag; [[Indicates what changed.]]
}
struct Efl.Gfx.Event.Render_Post

View File

@ -438,10 +438,15 @@ _ellipsis_set(Efl_Ui_Textpath_Data *pd)
}
static void
_path_changed_cb(void *data, const Efl_Event *event EINA_UNUSED)
_path_changed_cb(void *data, const Efl_Event *event)
{
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);
}

View File

@ -343,7 +343,7 @@ _efl_canvas_vg_efl_object_constructor(Eo *eo_obj, Efl_Canvas_Vg_Data *pd)
eina_array_step_set(&pd->cleanup, sizeof(pd->cleanup), 8);
efl_event_callback_add(pd->root, EFL_GFX_EVENT_CHANGED, _evas_vg_tree_changed, obj);
efl_event_callback_add(pd->root, EFL_GFX_PATH_EVENT_CHANGED, _evas_vg_tree_changed, obj);
return eo_obj;
}

View File

@ -17,7 +17,7 @@ static const Efl_VG_Interpolation interpolation_identity = {
};
static void
_efl_vg_property_changed(void *data, const Efl_Event *event)
_efl_vg_property_changed(void *data, const Efl_Event *event EINA_UNUSED)
{
Efl_VG_Data *pd = data;
Eo *parent;
@ -25,7 +25,7 @@ _efl_vg_property_changed(void *data, const Efl_Event *event)
if (!pd->flags) pd->flags = EFL_GFX_CHANGE_FLAG_ALL;
parent = efl_parent_get(event->object);
efl_event_callback_legacy_call(parent, event->desc, event->info);
efl_event_callback_call(parent, event->desc, event->info);
}
static void
@ -252,7 +252,7 @@ _efl_vg_efl_object_constructor(Eo *obj,
return NULL;
}
efl_event_callback_add(obj, EFL_GFX_EVENT_CHANGED, _efl_vg_property_changed, pd);
efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _efl_vg_property_changed, pd);
pd->flags = EFL_GFX_CHANGE_FLAG_ALL;
pd->changed = EINA_TRUE;

View File

@ -127,7 +127,8 @@ _evas_vg_render_pre(Efl_VG *child, Ector_Surface *s, Eina_Matrix3 *m)
static inline void
_efl_vg_changed(Eo *obj)
{
efl_event_callback_legacy_call(obj, EFL_GFX_EVENT_CHANGED, NULL);
Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_FILL };
efl_event_callback_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
}
static inline void *