jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=2d10127524b50ba5fbfbf4615295ac1c46ebb4e5

commit 2d10127524b50ba5fbfbf4615295ac1c46ebb4e5
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Mar 2 15:44:12 2016 +0900

    Evas image: Move filled property to Efl.Gfx.Fill and set as default
    
    The filled property should be set to true by default since it
    makes more sense. Legacy APIs behaviour is preserved by setting
    the default to false.
---
 src/lib/efl/interfaces/efl_gfx_fill.eo  | 30 ++++++++++++++-------
 src/lib/evas/Evas_Legacy.h              | 30 +++++++++++++++++++++
 src/lib/evas/canvas/evas_image.eo       | 31 ++++-----------------
 src/lib/evas/canvas/evas_object_image.c | 48 ++++++++++++++++++++-------------
 src/tests/evas/evas_test_image.c        | 29 ++++++++++++++++++++
 5 files changed, 114 insertions(+), 54 deletions(-)

diff --git a/src/lib/efl/interfaces/efl_gfx_fill.eo 
b/src/lib/efl/interfaces/efl_gfx_fill.eo
index 74aff4c..0dde45c 100644
--- a/src/lib/efl/interfaces/efl_gfx_fill.eo
+++ b/src/lib/efl/interfaces/efl_gfx_fill.eo
@@ -1,8 +1,26 @@
 interface Efl.Gfx.Fill {
    legacy_prefix: null;
    methods {
+      @property filled {
+         [[Binds the object's @.fill property to its actual geometry.
+
+           If $true, then every time the object is resized, it will
+           automatically trigger a call to @Efl.Gfx.Fill.fill.set
+           with the new size (and 0, 0 as source image's origin),
+           so the bound image will fill the whole object's area.
+
+           This property takes precedence over @.fill.
+
+           This flag is $true by default (used to be $false with the old APIs).
+         ]]
+         set {}
+         get {}
+         values {
+            filled: bool; [[$true to make the fill property follow
+                            object size or $false otherwise.]]
+         }
+      }
       @property fill {
-         /* FIXME: bad defaults, bad doc */
          [[Specifies how to tile an image to fill its rectangle geometry.
 
            Note that if $w or $h are smaller than the dimensions of the object,
@@ -11,15 +29,7 @@ interface Efl.Gfx.Fill {
            $w and $h need to be the exact width and height of the image object
            itself, respectively.
 
-           Warning: The default values for the fill parameters are $x = 0,
-           $y = 0, $w = 0 and $h = 0. Thus, if you're not using the
-           evas_object_image_filled_add() helper and want your image
-           displayed, you'll have to set valid values with this function on
-           your object.
-
-           Note: evas_object_image_filled_set() is a helper function which
-           will override the values set here automatically, for you, in a
-           given way.
+           Note that this property has no effect if @.filled is $true.
          ]]
             /* FIXME-doc
              * See the following image to better understand the effects of this
diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h
index 91c9d73..472b2ae 100644
--- a/src/lib/evas/Evas_Legacy.h
+++ b/src/lib/evas/Evas_Legacy.h
@@ -2898,6 +2898,36 @@ image) to start drawing from.
 EAPI void evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, 
Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
 
 /**
+ * @brief Set whether the image object's fill property should track the
+ * object's size.
+ *
+ * If @c setting is @c true, then every @ref evas_object_resize will
+ * automatically trigger a call to @ref evas_object_image_fill_set with the
+ * that new size (and 0, 0 as source image's origin), so the bound image will
+ * fill the whole object's area.
+ *
+ * @param[in] filled @c true to make the fill property follow object size or
+ * @c false otherwise.
+ *
+ * @ingroup Evas_Image
+ */
+EAPI void evas_object_image_filled_set(Evas_Object *obj, Eina_Bool filled);
+
+/**
+ * @brief Retrieve whether the image object's fill property should track the
+ * object's size.
+ *
+ * Returns @c true if it is tracking, @c false if not (and @ref
+ * evas_object_fill_set must be called manually).
+ *
+ * @return @c true to make the fill property follow object size or @c false
+ * otherwise.
+ *
+ * @ingroup Evas_Image
+ */
+EAPI Eina_Bool evas_object_image_filled_get(const Evas_Object *obj);
+
+/**
  *
  * Sets the size of the given image object.
  *
diff --git a/src/lib/evas/canvas/evas_image.eo 
b/src/lib/evas/canvas/evas_image.eo
index beb066b..f78a471 100644
--- a/src/lib/evas/canvas/evas_image.eo
+++ b/src/lib/evas/canvas/evas_image.eo
@@ -71,30 +71,6 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, 
Efl.Gfx.Fill, Efl.Gfx.View,
             src: Evas.Object *; [[Source object to use for the proxy.]]
          }
       }
-      @property filled {
-         set {
-            [[Set whether the image object's fill property should track the
-              object's size.
-
-              If $setting is $true, then every \@ref evas_object_resize will
-              automatically trigger a call to \@ref evas_object_image_fill_set
-              with the that new size (and 0, 0 as source image's origin),
-              so the bound image will fill the whole object's area.
-            ]]
-         }
-         get {
-            [[Retrieve whether the image object's fill property should track
-              the object's size.
-
-              Returns $true if it is tracking, $false if not (and
-              \@ref evas_object_fill_set must be called manually).
-            ]]
-         }
-         values {
-            filled: bool; [[$true to make the fill property follow
-                            object size or $false otherwise.]]
-         }
-      }
       @property content_hint {
          set {
             [[Set the content hint setting of a given image object of the
@@ -320,8 +296,8 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, 
Efl.Gfx.Fill, Efl.Gfx.View,
               in @Evas.Border_Fill_Mode. By center we mean the complementary
               part of that defined by @.border.set. This one is very useful
               for making frames and decorations. You would most probably
-              also be using a filled image (as in @.filled.set) to use as
-              a frame.
+              also be using a filled image (as in @Efl.Gfx.Fill.filled) to use
+              as a frame.
             ]]
          }
          get {
@@ -768,6 +744,7 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, 
Efl.Gfx.Fill, Efl.Gfx.View,
       Eo.Base.constructor;
       Eo.Base.destructor;
       Eo.Base.dbg_info_get;
+      Eo.Base.finalize;
       Efl.File.file.set;
       Efl.File.file.get;
       Efl.File.mmap.set;
@@ -780,6 +757,8 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, 
Efl.Gfx.Fill, Efl.Gfx.View,
       Efl.Image.smooth_scale.get;
       Efl.Gfx.Fill.fill.set;
       Efl.Gfx.Fill.fill.get;
+      Efl.Gfx.Fill.filled.get;
+      Efl.Gfx.Fill.filled.set;
       Efl.Gfx.View.size.set;
       Efl.Gfx.View.size.get;
       Efl.Gfx.Filter.filter_program.set;
diff --git a/src/lib/evas/canvas/evas_object_image.c 
b/src/lib/evas/canvas/evas_object_image.c
index 351c481..747a269 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -124,6 +124,7 @@ struct _Evas_Object_Image
    Eina_Bool         changed : 1;
    Eina_Bool         dirty_pixels : 1;
    Eina_Bool         filled : 1;
+   Eina_Bool         filled_set : 1;
    Eina_Bool         proxyrendering : 1;
    Eina_Bool         preloading : 1;
    Eina_Bool         video_surface : 1;
@@ -372,26 +373,27 @@ _evas_image_eo_base_constructor(Eo *eo_obj, 
Evas_Image_Data *o)
    return eo_obj;
 }
 
+EOLIAN static Eo *
+_evas_image_eo_base_finalize(Eo *eo_obj, Evas_Image_Data *o)
+{
+   if (!o->filled_set)
+     efl_gfx_fill_filled_set(eo_obj, EINA_TRUE);
+   return eo_finalize(eo_super(eo_obj, MY_CLASS));
+}
+
 EAPI Evas_Object *
 evas_object_image_add(Evas *eo_e)
 {
-   MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
-   return NULL;
-   MAGIC_CHECK_END();
-   Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e, NULL);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e->engine.func, NULL);
-   Evas_Object *eo_obj = eo_add(EVAS_IMAGE_CLASS, eo_e);
-   return eo_obj;
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(eo_isa(eo_e, EVAS_CANVAS_CLASS), NULL);
+   return eo_add(EVAS_IMAGE_CLASS, eo_e,
+                 efl_gfx_fill_filled_set(eo_obj, EINA_FALSE));
 }
 
 EAPI Evas_Object *
 evas_object_image_filled_add(Evas *eo_e)
 {
-   Evas_Object *eo_obj;
-   eo_obj = evas_object_image_add(eo_e);
-   evas_object_image_filled_set(eo_obj, 1);
-   return eo_obj;
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(eo_isa(eo_e, EVAS_CANVAS_CLASS), NULL);
+   return eo_add(EVAS_IMAGE_CLASS, eo_e);
 }
 
 EAPI void
@@ -927,11 +929,12 @@ _evas_image_border_center_fill_get(Eo *eo_obj 
EINA_UNUSED, Evas_Image_Data *o)
    return o->cur->border.fill;
 }
 
-static void
-_evas_image_filled_set(Eo *eo_obj, Evas_Image_Data* o, Eina_Bool setting)
+EOLIAN static void
+_evas_image_efl_gfx_fill_filled_set(Eo *eo_obj, Evas_Image_Data* o, Eina_Bool 
setting)
 {
    Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, 
EVAS_OBJECT_CLASS);
    setting = !!setting;
+   o->filled_set = 1;
    if (o->filled == setting) return;
 
    evas_object_async_block(obj);
@@ -953,11 +956,23 @@ _evas_image_filled_set(Eo *eo_obj, Evas_Image_Data* o, 
Eina_Bool setting)
 }
 
 EOLIAN static Eina_Bool
-_evas_image_filled_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
+_evas_image_efl_gfx_fill_filled_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
 {
    return o->filled;
 }
 
+EAPI void
+evas_object_image_filled_set(Evas_Object *eo_obj, Eina_Bool value)
+{
+   efl_gfx_fill_filled_set(eo_obj, value);
+}
+
+EAPI Eina_Bool
+evas_object_image_filled_get(const Evas_Object *eo_obj)
+{
+   return efl_gfx_fill_filled_get(eo_obj);
+}
+
 EOLIAN static void
 _evas_image_border_scale_set(Eo *eo_obj, Evas_Image_Data *o, double scale)
 {
@@ -4914,14 +4929,12 @@ evas_object_image_mmap_get(const Evas_Image *obj, const 
Eina_File **f, const cha
 EAPI Eina_Bool
 evas_object_image_save(const Eo *obj, const char *file, const char *key, const 
char *flags)
 {
-   Eina_Bool ret;
    return efl_file_save((Eo *) obj, file, key, flags);
 }
 
 EAPI Eina_Bool
 evas_object_image_animated_get(const Eo *obj)
 {
-   Eina_Bool ret;
    return efl_image_animated_get((Eo *) obj);
 }
 
@@ -4946,7 +4959,6 @@ evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool 
smooth_scale)
 EAPI Eina_Bool
 evas_object_image_smooth_scale_get(const Eo *obj)
 {
-   Eina_Bool ret;
    return efl_image_smooth_scale_get((Eo *) obj);
 }
 
diff --git a/src/tests/evas/evas_test_image.c b/src/tests/evas/evas_test_image.c
index aa7debb..0f7514c 100644
--- a/src/tests/evas/evas_test_image.c
+++ b/src/tests/evas/evas_test_image.c
@@ -627,8 +627,37 @@ START_TEST(evas_object_image_partially_load_orientation)
 }
 END_TEST
 
+START_TEST(evas_object_image_defaults)
+{
+   Evas *e = _setup_evas();
+   Evas_Object *o;
+   int x, y, w, h, iw, ih;
+   Eina_Bool b;
+
+   /* test legacy defaults */
+   o = evas_object_image_add(e);
+   fail_if(evas_object_image_filled_get(o));
+   evas_object_image_fill_get(o, &x, &y, &w, &h);
+   fail_if(x || y || w || h);
+   eo_del(o);
+
+   o = evas_object_image_filled_add(e);
+   fail_if(!evas_object_image_filled_get(o));
+   eo_del(o);
+
+   /* test eo defaults */
+   eo_add(&o, EVAS_IMAGE_CLASS, e);
+   fail_if(!efl_gfx_fill_filled_get(o));
+   eo_del(o);
+
+   evas_free(e);
+   evas_shutdown();
+}
+END_TEST
+
 void evas_test_image_object(TCase *tc)
 {
+   tcase_add_test(tc, evas_object_image_defaults);
    tcase_add_test(tc, evas_object_image_loader);
    tcase_add_test(tc, evas_object_image_loader_orientation);
    tcase_add_test(tc, evas_object_image_orient);

-- 


Reply via email to