check: improve on&off sizing effect. 99/43099/1
authorChunEon Park <chuneon.park@samsung.com>
Sat, 9 May 2015 13:01:43 +0000 (22:01 +0900)
committerSubhransu Mohanty <sub.mohanty@samsung.com>
Wed, 8 Jul 2015 00:24:25 +0000 (09:24 +0900)
don't depends on edc part size but use scale by transform.

Change-Id: I871634c6ea130ed4b8d763c7d42e02b5d8ee3d5a

src/lib/tizen_vector.c

index 0bf50f366321c14213214cb7cb4fd3d37db34f34..de49cdf37d7eb5dff3d9d047ca4968dae12b5d9e 100644 (file)
@@ -198,7 +198,7 @@ typedef struct check_onoff_s
 {
    Evas_Object *vg[3]; //0: bg, 1: overlapped circle, 2: line-circle
    Efl_VG_Shape *shape[4];  //0: bg, 1: overlapped circle, 2: line, 3: circle
-   Elm_Transit *transit[2];  //0: circle, 1: line
+   Elm_Transit *transit[3];  //0: circle, 1: line, 2: overlapped circle
    Evas_Object *obj;
    Eina_Bool init : 1;
 } check_onoff;
@@ -243,13 +243,20 @@ transit_check_onoff_circle_op(Elm_Transit_Effect *effect,
 
    evas_vg_shape_shape_reset(vd->shape[3]);
 
-   if (elm_check_state_get(vd->obj)) progress = 1 - progress;
-
-   double radius = ELM_SCALE_SIZE(center_x - 2);
+   int radius =
+      ELM_SCALE_SIZE((center_x > center_y ? center_x : center_y) - 2);
 
-   evas_vg_shape_stroke_width_set(vd->shape[3], ELM_SCALE_SIZE(2) * progress);
    evas_vg_shape_shape_append_circle(vd->shape[3], center_x, center_y,
-                                     (radius * progress));
+                                     radius);
+
+   if (elm_check_state_get(vd->obj)) progress = 1 - progress;
+
+   Eina_Matrix3 m;
+   eina_matrix3_identity(&m);
+   eina_matrix3_translate(&m, center_x, center_y);
+   eina_matrix3_scale(&m, progress, progress);
+   eina_matrix3_translate(&m, -center_x, -center_y);
+   evas_vg_node_transformation_set(vd->shape[3], &m);
 }
 
 static void
@@ -289,6 +296,44 @@ transit_check_onoff_line_del_cb(void *data, Elm_Transit *transit EINA_UNUSED)
    vd->transit[1] = NULL;
 }
 
+
+static void
+transit_check_onoff_sizing_op(void *data, Elm_Transit *transit EINA_UNUSED,
+                              double progress)
+{
+   check_onoff *vd = data;
+
+   check_onoff_init(vd);
+
+   Evas_Coord w, h;
+   evas_object_geometry_get(vd->vg[1], NULL, NULL, &w, &h);
+   Evas_Coord center_x = (w / 2);
+   Evas_Coord center_y = (h / 2);
+
+   evas_vg_shape_shape_reset(vd->shape[1]);
+   evas_vg_shape_shape_append_circle(vd->shape[1],
+                                     center_x, center_y,
+                                     center_x);
+
+   if (!elm_check_state_get(vd->obj)) progress = 1 - progress;
+   progress *= 0.3;
+
+   Eina_Matrix3 m;
+   eina_matrix3_identity(&m);
+   eina_matrix3_translate(&m, center_x, center_y);
+   eina_matrix3_scale(&m, 0.7 + progress, 0.7 + progress);
+   eina_matrix3_translate(&m, -center_x, -center_y);
+   evas_vg_node_transformation_set(vd->shape[1], &m);
+}
+
+static void
+transit_check_onoff_sizing_del_cb(void *data,
+                                  Elm_Transit *transit EINA_UNUSED)
+{
+   check_onoff *vd = data;
+   vd->transit[2] = NULL;
+}
+
 static void
 check_onoff_changed_cb(void *data, Evas_Object *obj,
                        void *event_info EINA_UNUSED)
@@ -338,6 +383,18 @@ check_onoff_changed_cb(void *data, Evas_Object *obj,
         elm_transit_duration_set(vd->transit[1], 0.1);
         elm_transit_go(vd->transit[1]);
      }
+
+   //Overlap Circle Sizing Effect
+   elm_transit_del(vd->transit[2]);
+   vd->transit[2] = elm_transit_add();
+   elm_transit_effect_add(vd->transit[2], transit_check_onoff_sizing_op, vd,
+                          NULL);
+   elm_transit_del_cb_set(vd->transit[2], transit_check_onoff_sizing_del_cb,
+                          vd);
+   elm_transit_tween_mode_set(vd->transit[2],
+                              ELM_TRANSIT_TWEEN_MODE_DECELERATE);
+   elm_transit_duration_set(vd->transit[2], 0.3);
+   elm_transit_go(vd->transit[2]);
 }
 
 static void
@@ -349,6 +406,7 @@ check_onoff_del_cb(void *data, Evas *e EINA_UNUSED,
    evas_object_smart_callback_del(vd->obj, "changed", check_onoff_changed_cb);
    elm_transit_del(vd->transit[0]);
    elm_transit_del(vd->transit[1]);
+   elm_transit_del(vd->transit[2]);
    free(vd);
 }