elementary: enable caching for Efl.Ui.ImageFactory.
authorCedric BAIL <cedric.bail@free.fr>
Fri, 7 Dec 2018 22:42:09 +0000 (14:42 -0800)
committerJiyoun Park <jy0703.park@samsung.com>
Wed, 16 Jan 2019 02:13:22 +0000 (11:13 +0900)
Differential Revision: https://phab.enlightenment.org/D7444

src/lib/elementary/efl_ui_image_factory.c
src/lib/elementary/efl_ui_image_factory.eo

index 998c43f..30d222c 100644 (file)
@@ -17,6 +17,7 @@ EOLIAN static Eo *
 _efl_ui_image_factory_efl_object_constructor(Eo *obj, Efl_Ui_Image_Factory_Data *pd)
 {
    obj = efl_constructor(efl_super(obj, MY_CLASS));
+   efl_ui_caching_factory_item_class_set(obj, EFL_UI_IMAGE_CLASS);
 
    pd->property = NULL;
 
@@ -32,27 +33,33 @@ _efl_ui_image_factory_efl_object_destructor(Eo *obj EINA_UNUSED, Efl_Ui_Image_Fa
    efl_destructor(efl_super(obj, MY_CLASS));
 }
 
-EOLIAN static Eina_Future *
-_efl_ui_image_factory_efl_ui_factory_create(Eo *obj, Efl_Ui_Image_Factory_Data *pd, Efl_Model *model, Efl_Gfx_Entity *parent)
+static Eina_Value
+_efl_ui_image_factory_connect(Eo *obj, void *data, const Eina_Value value)
 {
-   Efl_Gfx_Entity *ui_view;
-   Eina_Value r;
+   Efl_Gfx_Entity *entity = NULL;
+   Efl_Ui_Image_Factory_Data *pd = data;
 
-   EINA_SAFETY_ON_NULL_RETURN_VAL(pd->property, NULL);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
-   ui_view = efl_add(EFL_UI_IMAGE_CLASS, parent);
-   efl_ui_view_model_set(ui_view, model);
-   efl_ui_model_connect(ui_view, "filename", pd->property);
+   eina_value_pget(&value, &entity);
 
-   r = eina_value_object_init(ui_view);
+   efl_ui_model_connect(entity, "filename", pd->property);
 
-   return eina_future_resolved(efl_loop_future_scheduler_get(obj), r);
+   return value;
 }
 
-EOLIAN static void
-_efl_ui_image_factory_efl_ui_factory_release(Eo *obj EINA_UNUSED, Efl_Ui_Image_Factory_Data *pd EINA_UNUSED, Efl_Gfx_Entity *ui_view)
+EOLIAN static Eina_Future *
+_efl_ui_image_factory_efl_ui_factory_create(Eo *obj, Efl_Ui_Image_Factory_Data *pd, Efl_Model *model, Efl_Gfx_Entity *parent)
 {
-   efl_parent_set(ui_view, NULL);
+   Eina_Future *f;
+
+   if (!parent) return efl_loop_future_rejected(obj, EFL_FACTORY_ERROR_NOT_SUPPORTED);
+   if (!pd->property) return efl_loop_future_rejected(obj, EFL_FACTORY_ERROR_NOT_SUPPORTED);
+
+   f = efl_ui_factory_create(efl_super(obj, EFL_UI_IMAGE_FACTORY_CLASS), model, parent);
+
+   return efl_future_then(obj, f,
+                          .success_type = EINA_VALUE_TYPE_OBJECT,
+                          .success = _efl_ui_image_factory_connect,
+                          .data = pd);
 }
 
 EOLIAN static void
index a966d23..66abdf4 100644 (file)
@@ -1,11 +1,10 @@
-class Efl.Ui.Image_Factory (Efl.Object, Efl.Ui.Factory)
+class Efl.Ui.Image_Factory (Efl.Ui.Caching_Factory)
 {
    [[Efl UI image factory class]]
    implements {
       Efl.Object.constructor;
       Efl.Object.destructor;
       Efl.Ui.Factory.create;
-      Efl.Ui.Factory.release;
       Efl.Ui.Model.Connect.connect;
    }
 }