Apply mirroring feature to circle surface 88/140988/1
authorTaehyub Kim <taehyub.kim@samsung.com>
Thu, 27 Jul 2017 10:38:17 +0000 (19:38 +0900)
committerTaehyub Kim <taehyub.kim@samsung.com>
Thu, 27 Jul 2017 10:38:37 +0000 (19:38 +0900)
Change-Id: I36d7f434c9b57d7d8b5cc7a821f51e4ffc22f0ca

inc/wearable/circle/efl_extension_circle_object.h
inc/wearable/circle/efl_extension_circle_private.h
src/wearable/circle/efl_extension_circle_object.c
src/wearable/circle/efl_extension_circle_object_genlist.c
src/wearable/circle/efl_extension_circle_object_scroller.c
src/wearable/circle/efl_extension_circle_surface.c

index d58071cbe8d7642f831a34e62e0b9d2a74b7434c..66d8b0883924bcfa2635d05a7bd9a472c105a498 100644 (file)
 #ifndef __EFL_EXTENSION_CIRCLE_OBJECT_H__
 #define __EFL_EXTENSION_CIRCLE_OBJECT_H__
 
+
+typedef enum _Eext_Circle_Mirrored_State
+{
+   EEXT_CIRCLE_MIRRORED_OFF,
+   EEXT_CIRCLE_MIRRORED_ON,
+   EEXT_CIRCLE_MIRRORED_CONFIG
+} Eext_Circle_Mirrored_State;
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -589,6 +597,32 @@ EAPI void eext_circle_object_item_radius_set(Evas_Object *obj, const char *item_
  */
 EAPI double eext_circle_object_item_radius_get(const Evas_Object *obj, const char *item_name);
 
+/**
+ * @internal
+ * @WEARABLE_ONLY
+ * @brief Set mirrored state of a given circle object.
+ *
+ * @param[in] obj The circle object
+ * @param[in] mirrored The mirrored state
+ *
+ * @if WEARABLE @since_tizen 4.0
+ * @endif
+ */
+EAPI void eext_circle_object_mirrored_set(const Evas_Object *obj, Eext_Circle_Mirrored_State state);
+
+/**
+ * @internal
+ * @WEARABLE_ONLY
+ * @brief Get mirrored state of a given circle object.
+ *
+ * @param[in] obj The circle object
+ * @return The mirrored state
+ *
+ * @if WEARABLE @since_tizen 4.0
+ * @endif
+ */
+EAPI Eext_Circle_Mirrored_State eext_circle_object_mirrored_get(const Evas_Object *obj);
+
 /**
  * @}
  */
index 560d332a312345f1f242382315b8e41fc753e4bd..df87ba1d4d6482747b5e53dea0084f9bf7648f55 100644 (file)
@@ -72,6 +72,7 @@ struct _Eext_Circle_Object {
    Evas_Object          *widget_object;
    void                 *widget_data;
    const char           *widget_type;
+   Eext_Circle_Mirrored_State mirrored_state;
 
    Eina_List           *bg_image_objs;
    int                  bg_image_index;
index 7a555ec2550f50f2c8b4600de36a486d89a1e720..f5ad11da03609cf5a732f7f0ade657c2faffc9e5 100644 (file)
@@ -675,3 +675,19 @@ eext_circle_object_item_radius_get(const Evas_Object *obj, const char *item_name
 
    return -1.0;
 }
+
+EAPI void
+eext_circle_object_mirrored_set(const Evas_Object *obj, Eext_Circle_Mirrored_State state)
+{
+   EEXT_CIRCLE_OBJECT_GET(obj, circle_obj) return;
+
+   circle_obj->mirrored_state = state;
+}
+
+EAPI Eext_Circle_Mirrored_State
+eext_circle_object_mirrored_get(const Evas_Object *obj)
+{
+   EEXT_CIRCLE_OBJECT_GET(obj, circle_obj) return EEXT_CIRCLE_MIRRORED_OFF;
+
+   return circle_obj->mirrored_state;
+}
index 921695edee460a57e1229d16424b7167125d5d86..f62e5610ec2e3e5ce1db8e6f69f56ad5ad7d79ad 100644 (file)
@@ -404,6 +404,7 @@ _eext_circle_object_genlist_init(Eext_Circle_Object *obj, Evas_Object *genlist)
    obj->del_func = _eext_circle_object_genlist_del_cb;
    obj->disabled_func = _eext_circle_object_genlist_disabled_cb;
    obj->color_changed_func = _eext_circle_object_genlist_color_changed_cb;
+   obj->mirrored_state = EEXT_CIRCLE_MIRRORED_CONFIG;
 
    data = (Eext_Circle_Object_Genlist_Data *)calloc(1, sizeof(Eext_Circle_Object_Genlist_Data));
    data->policy_v = ELM_SCROLLER_POLICY_AUTO;
index e035f8dd67881aa1640971afb14111b6b3359022..9141b7ab669e7828046d27baca31c09627431186 100644 (file)
@@ -563,6 +563,7 @@ _eext_circle_object_scroller_init(Eext_Circle_Object *obj, Evas_Object *scroller
    obj->del_func = _eext_circle_object_scroller_del_cb;
    obj->disabled_func = _eext_circle_object_scroller_disabled_cb;
    obj->color_changed_func = _eext_circle_object_scroller_color_changed_cb;
+   obj->mirrored_state = EEXT_CIRCLE_MIRRORED_CONFIG;
 
    data = (Eext_Circle_Object_Scroller_Data *)calloc(1, sizeof(Eext_Circle_Object_Scroller_Data));
    data->policy_v = ELM_SCROLLER_POLICY_AUTO;
index bef4ea761586472c083f2094f50fd5b313f29e6b..5fd99cdc7a834d7879aaf1a1c2856a2eccb17538 100644 (file)
@@ -178,15 +178,35 @@ _eext_circle_surface_render(void *data)
                   // Draw Arc
                   if (item->line_width)
                     {
+                       double angle1, angle2;
+                       Eina_Bool is_mirrored = EINA_FALSE;
+
                        cairo_save(surface->cairo);
+
+                       if (render_obj->mirrored_state == EEXT_CIRCLE_MIRRORED_CONFIG)
+                         is_mirrored = elm_config_mirrored_get();
+                       else if (render_obj->mirrored_state == EEXT_CIRCLE_MIRRORED_ON)
+                         is_mirrored = EINA_TRUE;
+
+                       if (is_mirrored)
+                         {
+                            angle1 = (item->draw.angle_offset + item->draw.angle + 90.0) * -1;
+                            angle2 = (item->draw.angle_offset + item->min_angle + 90.0) * -1;
+                         }
+                       else
+                         {
+                            angle1 = item->draw.angle_offset + item->min_angle - 90.0;
+                            angle2 = item->draw.angle_offset + item->draw.angle - 90.0;
+                         }
+
                        _eext_circle_surface_cairo_draw_arc(surface->cairo, item->line_width,
                                                            surface->center_x, surface->center_y, item->radius,
                                                            (double)item->draw.color.r / 255,
                                                            (double)item->draw.color.g / 255,
                                                            (double)item->draw.color.b / 255,
                                                            (double)item->draw.color.a / 255,
-                                                           item->draw.angle_offset + item->min_angle - 90.0,
-                                                           item->draw.angle_offset + item->draw.angle - 90.0,
+                                                           angle1,
+                                                           angle2,
                                                            item->round_cap);
                        cairo_restore(surface->cairo);
                     }