forked from enlightenment/efl
elementary: Efl.Ui.Image now rely on event to update model binding.
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de> Differential Revision: https://phab.enlightenment.org/D9289
This commit is contained in:
parent
4d071ff1cb
commit
a68e18a903
|
@ -53,6 +53,7 @@ void _efl_ui_image_sizing_eval(Evas_Object *obj);
|
||||||
static void _efl_ui_image_model_properties_changed_cb(void *data, const Efl_Event *event);
|
static void _efl_ui_image_model_properties_changed_cb(void *data, const Efl_Event *event);
|
||||||
static void _on_size_hints_changed(void *data, const Efl_Event *e);
|
static void _on_size_hints_changed(void *data, const Efl_Event *e);
|
||||||
static Eina_Bool _efl_ui_image_download(Eo *obj, Efl_Ui_Image_Data *sd, const char *url);
|
static Eina_Bool _efl_ui_image_download(Eo *obj, Efl_Ui_Image_Data *sd, const char *url);
|
||||||
|
static void _update_viewmodel(Eo *obj, Efl_Ui_Image_Data *pd);
|
||||||
|
|
||||||
static const Elm_Action key_actions[] = {
|
static const Elm_Action key_actions[] = {
|
||||||
{"activate", _key_action_activate},
|
{"activate", _key_action_activate},
|
||||||
|
@ -848,6 +849,21 @@ _on_size_hints_changed(void *data EINA_UNUSED, const Efl_Event *ev)
|
||||||
_efl_ui_image_sizing_eval(ev->object);
|
_efl_ui_image_sizing_eval(ev->object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_efl_ui_image_model_changed(void *data, const Efl_Event *event)
|
||||||
|
{
|
||||||
|
Efl_Model_Changed_Event *ev = event->info;
|
||||||
|
|
||||||
|
if (ev->previous)
|
||||||
|
efl_event_callback_del(ev->previous, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
||||||
|
_efl_ui_image_model_properties_changed_cb, event->object);
|
||||||
|
if (ev->current)
|
||||||
|
efl_event_callback_add(ev->current, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
||||||
|
_efl_ui_image_model_properties_changed_cb, event->object);
|
||||||
|
|
||||||
|
_update_viewmodel(event->object, data);
|
||||||
|
}
|
||||||
|
|
||||||
EOLIAN static Eo *
|
EOLIAN static Eo *
|
||||||
_efl_ui_image_efl_object_constructor(Eo *obj, Efl_Ui_Image_Data *pd)
|
_efl_ui_image_efl_object_constructor(Eo *obj, Efl_Ui_Image_Data *pd)
|
||||||
{
|
{
|
||||||
|
@ -861,6 +877,22 @@ _efl_ui_image_efl_object_constructor(Eo *obj, Efl_Ui_Image_Data *pd)
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_image_efl_object_invalidate(Eo *obj, Efl_Ui_Image_Data *pd EINA_UNUSED)
|
||||||
|
{
|
||||||
|
Efl_Model *model;
|
||||||
|
|
||||||
|
if (pd->property_watch)
|
||||||
|
efl_event_callback_del(obj, EFL_UI_VIEW_EVENT_MODEL_CHANGED,
|
||||||
|
_efl_ui_image_model_changed, pd);
|
||||||
|
|
||||||
|
model = efl_ui_view_model_get(obj);
|
||||||
|
if (model)
|
||||||
|
efl_event_callback_del(model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
||||||
|
_efl_ui_image_model_properties_changed_cb, obj);
|
||||||
|
efl_invalidate(efl_super(obj, EFL_UI_IMAGE_CLASS));
|
||||||
|
}
|
||||||
|
|
||||||
static const Eina_Slice remote_uri[] = {
|
static const Eina_Slice remote_uri[] = {
|
||||||
EINA_SLICE_STR_LITERAL("http://"),
|
EINA_SLICE_STR_LITERAL("http://"),
|
||||||
EINA_SLICE_STR_LITERAL("https://"),
|
EINA_SLICE_STR_LITERAL("https://"),
|
||||||
|
@ -1829,6 +1861,15 @@ _update_viewmodel(Eo *obj, Efl_Ui_Image_Data *pd)
|
||||||
char *key = NULL;
|
char *key = NULL;
|
||||||
Efl_Model *model;
|
Efl_Model *model;
|
||||||
|
|
||||||
|
if (!pd->property.file) return ;
|
||||||
|
|
||||||
|
if (!pd->property_watch)
|
||||||
|
{
|
||||||
|
efl_event_callback_add(obj, EFL_UI_VIEW_EVENT_MODEL_CHANGED,
|
||||||
|
_efl_ui_image_model_changed, pd);
|
||||||
|
pd->property_watch = EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
model = efl_ui_view_model_get(obj);
|
model = efl_ui_view_model_get(obj);
|
||||||
if (!model) return ;
|
if (!model) return ;
|
||||||
|
|
||||||
|
@ -1903,35 +1944,14 @@ _efl_ui_image_model_properties_changed_cb(void *data, const Efl_Event *event)
|
||||||
if (refresh) _update_viewmodel(obj, pd);
|
if (refresh) _update_viewmodel(obj, pd);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_ui_image_efl_ui_view_model_set(Eo *obj, Efl_Ui_Image_Data *pd, Efl_Model *model)
|
|
||||||
{
|
|
||||||
Efl_Model *setted;
|
|
||||||
|
|
||||||
setted = efl_ui_view_model_get(obj);
|
|
||||||
if (setted)
|
|
||||||
{
|
|
||||||
efl_event_callback_del(setted, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
|
||||||
_efl_ui_image_model_properties_changed_cb, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
efl_ui_view_model_set(efl_super(obj, EFL_UI_IMAGE_CLASS), model);
|
|
||||||
|
|
||||||
setted = efl_ui_view_model_get(obj);
|
|
||||||
if (setted)
|
|
||||||
{
|
|
||||||
efl_event_callback_add(setted, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
|
||||||
_efl_ui_image_model_properties_changed_cb, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
_update_viewmodel(obj, pd);
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static Eina_Error
|
EOLIAN static Eina_Error
|
||||||
_efl_ui_image_efl_ui_property_bind_property_bind(Eo *obj, Efl_Ui_Image_Data *pd, const char *key, const char *property)
|
_efl_ui_image_efl_ui_property_bind_property_bind(Eo *obj, Efl_Ui_Image_Data *pd, const char *key, const char *property)
|
||||||
{
|
{
|
||||||
Eina_Stringshare *sk;
|
Eina_Stringshare *sk;
|
||||||
|
|
||||||
|
if (efl_ui_property_bind(efl_super(obj, EFL_UI_IMAGE_CLASS), key, property) == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (strcmp(key, "filename") == 0)
|
if (strcmp(key, "filename") == 0)
|
||||||
{
|
{
|
||||||
pd->property.icon = EINA_FALSE;
|
pd->property.icon = EINA_FALSE;
|
||||||
|
@ -1949,7 +1969,7 @@ _efl_ui_image_efl_ui_property_bind_property_bind(Eo *obj, Efl_Ui_Image_Data *pd,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return efl_ui_property_bind(efl_super(obj, EFL_UI_IMAGE_CLASS), key, property);
|
return EFL_PROPERTY_ERROR_INVALID_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
_update_viewmodel(obj, pd);
|
_update_viewmodel(obj, pd);
|
||||||
|
|
|
@ -89,6 +89,7 @@ class @beta Efl.Ui.Image extends Efl.Ui.Widget implements Efl.Ui.Clickable, Efl.
|
||||||
}
|
}
|
||||||
implements {
|
implements {
|
||||||
Efl.Object.constructor;
|
Efl.Object.constructor;
|
||||||
|
Efl.Object.invalidate;
|
||||||
Efl.File.load;
|
Efl.File.load;
|
||||||
Efl.File.unload;
|
Efl.File.unload;
|
||||||
Efl.Gfx.Color.color { set; }
|
Efl.Gfx.Color.color { set; }
|
||||||
|
@ -118,7 +119,6 @@ class @beta Efl.Ui.Image extends Efl.Ui.Widget implements Efl.Ui.Clickable, Efl.
|
||||||
Efl.Canvas.Group.group_member_add;
|
Efl.Canvas.Group.group_member_add;
|
||||||
Efl.Ui.Draggable.drag_target { get; set; }
|
Efl.Ui.Draggable.drag_target { get; set; }
|
||||||
Efl.Ui.Property_Bind.property_bind;
|
Efl.Ui.Property_Bind.property_bind;
|
||||||
Efl.Ui.View.model { set; }
|
|
||||||
Efl.Ui.Widget.theme_apply;
|
Efl.Ui.Widget.theme_apply;
|
||||||
Efl.Ui.Widget.widget_input_event_handler;
|
Efl.Ui.Widget.widget_input_event_handler;
|
||||||
Efl.Access.Component.extents { get; }
|
Efl.Access.Component.extents { get; }
|
||||||
|
|
|
@ -103,6 +103,7 @@ struct _Efl_Ui_Image_Data
|
||||||
Eina_Bool scale_up : 1;
|
Eina_Bool scale_up : 1;
|
||||||
Eina_Bool scale_down : 1;
|
Eina_Bool scale_down : 1;
|
||||||
Eina_Bool legacy_align : 1;
|
Eina_Bool legacy_align : 1;
|
||||||
|
Eina_Bool property_watch : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue