rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=7ce6f34c8550e75a633f0958e1ec7c1b91a332a7

commit 7ce6f34c8550e75a633f0958e1ec7c1b91a332a7
Author: Vitalii Vorobiov <vi.vorob...@samsung.com>
Date:   Tue Jun 7 13:09:47 2016 +0300

    editor: more API for map (zplace, rotation x/y/z/center, focal, point color 
etc)
---
 src/bin/editor/diff.c          |  15 ++++
 src/bin/editor/diff.h          |  11 +++
 src/bin/editor/editor.h        |  28 +++++++
 src/bin/editor/editor_states.c | 178 ++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 229 insertions(+), 3 deletions(-)

diff --git a/src/bin/editor/diff.c b/src/bin/editor/diff.c
index bc6e405..20b39d5 100644
--- a/src/bin/editor/diff.c
+++ b/src/bin/editor/diff.c
@@ -34,6 +34,8 @@ typedef Eina_Bool (* 
function_type_string_string_double_string_double) (Evas_Obj
                                                                         const 
char *, const char *, double, const char *, double);
 typedef Eina_Bool (* function_type_string_string_double_int_int_int_int) 
(Evas_Object *, Change*, Eina_Bool, Eina_Bool,
                                                                           
const char *, const char *, double, int, int, int, int);
+typedef Eina_Bool (* function_type_string_string_double_int_int_int_int_int) 
(Evas_Object *, Change*, Eina_Bool, Eina_Bool,
+                                                                              
const char *, const char *, double, int, int, int, int, int);
 typedef Eina_Bool (* function_type_string_string_double_uchar) (Evas_Object *, 
Change*, Eina_Bool, Eina_Bool,
                                                                 const char *, 
const char *, double, unsigned char);
 typedef Eina_Bool (* function_type_string_edjetexteffect) (Evas_Object *, 
Change*, Eina_Bool, Eina_Bool,
@@ -108,6 +110,9 @@ _apply(Evas_Object *obj, Function_Info *fi)
       case FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT:
          return 
((function_type_string_string_double_int_int_int_int)fi->function)(obj, NULL, 
false, true,
                   fi->args.type_ssdiiii.s1, fi->args.type_ssdiiii.s2, 
fi->args.type_ssdiiii.d3, fi->args.type_ssdiiii.i4, fi->args.type_ssdiiii.i5, 
fi->args.type_ssdiiii.i6, fi->args.type_ssdiiii.i7);
+      case FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT_INT:
+         return 
((function_type_string_string_double_int_int_int_int_int)fi->function)(obj, 
NULL, false, true,
+                  fi->args.type_ssdiiiii.s1, fi->args.type_ssdiiiii.s2, 
fi->args.type_ssdiiiii.d3, fi->args.type_ssdiiiii.i4, 
fi->args.type_ssdiiiii.i5, fi->args.type_ssdiiiii.i6, 
fi->args.type_ssdiiiii.i7, fi->args.type_ssdiiiii.i8);
       case FUNCTION_TYPE_STRING_STRING_DOUBLE_UCHAR:
          return ((function_type_string_string_double_uchar)fi->function)(obj, 
NULL, false, true,
                   fi->args.type_ssduc.s1, fi->args.type_ssduc.s2, 
fi->args.type_ssduc.d3, fi->args.type_ssduc.uc4);
@@ -257,6 +262,12 @@ diff_update(Diff *diff, Diff *new_diff)
          eina_stringshare_ref(new_diff->redo.args.type_ssdiiii.s1);
          eina_stringshare_ref(new_diff->redo.args.type_ssdiiii.s2);
          break;
+      case FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT_INT:
+         eina_stringshare_del(diff->redo.args.type_ssdiiiii.s1);
+         eina_stringshare_del(diff->redo.args.type_ssdiiiii.s2);
+         eina_stringshare_ref(new_diff->redo.args.type_ssdiiiii.s1);
+         eina_stringshare_ref(new_diff->redo.args.type_ssdiiiii.s2);
+         break;
       case FUNCTION_TYPE_STRING_STRING_DOUBLE_UCHAR:
          eina_stringshare_del(diff->redo.args.type_ssduc.s1);
          eina_stringshare_del(diff->redo.args.type_ssduc.s2);
@@ -420,6 +431,10 @@ diff_free(Diff *diff)
          eina_stringshare_del(diff->redo.args.type_ssdiiii.s1);
          eina_stringshare_del(diff->redo.args.type_ssdiiii.s2);
          break;
+      case FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT_INT:
+         eina_stringshare_del(diff->redo.args.type_ssdiiiii.s1);
+         eina_stringshare_del(diff->redo.args.type_ssdiiiii.s2);
+         break;
       case FUNCTION_TYPE_STRING_STRING_DOUBLE_UCHAR:
          eina_stringshare_del(diff->redo.args.type_ssduc.s1);
          eina_stringshare_del(diff->redo.args.type_ssduc.s2);
diff --git a/src/bin/editor/diff.h b/src/bin/editor/diff.h
index c488071..b8d4d11 100644
--- a/src/bin/editor/diff.h
+++ b/src/bin/editor/diff.h
@@ -31,6 +31,7 @@ typedef enum {
    FUNCTION_TYPE_STRING_STRING_DOUBLE_STRING,
    FUNCTION_TYPE_STRING_STRING_DOUBLE_STRING_DOUBLE,
    FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT,
+   FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT_INT,
    FUNCTION_TYPE_STRING_STRING_DOUBLE_UCHAR,
    FUNCTION_TYPE_STRING_EDJEPARTTYPE,
    FUNCTION_TYPE_STRING_EDJETEXTEFFECT,
@@ -108,6 +109,16 @@ struct _Function_Info {
          Eina_Stringshare *s1;
          Eina_Stringshare *s2;
          double d3;
+         int i4;
+         int i5;
+         int i6;
+         int i7;
+         int i8;
+      } type_ssdiiiii;
+      struct {
+         Eina_Stringshare *s1;
+         Eina_Stringshare *s2;
+         double d3;
          unsigned char uc4;
       } type_ssduc;
       struct {
diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h
index 20a8473..b43969c 100644
--- a/src/bin/editor/editor.h
+++ b/src/bin/editor/editor.h
@@ -168,6 +168,13 @@ typedef enum {
    ATTRIBUTE_STATE_MAP_SMOOTH,
    ATTRIBUTE_STATE_MAP_ALPHA,
    ATTRIBUTE_STATE_MAP_BACKFACE_CULL,
+   ATTRIBUTE_STATE_MAP_PERSPECTIVE_FOCAL,
+   ATTRIBUTE_STATE_MAP_PERSPECTIVE_ZPLANE,
+   ATTRIBUTE_STATE_MAP_ROTATION_CENTER,
+   ATTRIBUTE_STATE_MAP_ROTATION_X,
+   ATTRIBUTE_STATE_MAP_ROTATION_Y,
+   ATTRIBUTE_STATE_MAP_ROTATION_Z,
+   ATTRIBUTE_STATE_MAP_POINT_COLOR,
    ATTRIBUTE_PROGRAM_TRANSITION_TYPE,
    ATTRIBUTE_PROGRAM_TRANSITION_FROM_CURRENT,
    ATTRIBUTE_PROGRAM_ACTION,
@@ -883,5 +890,26 @@ editor_state_map_perspective_set(Evas_Object *obj, Change 
*change, Eina_Bool mer
 Eina_Bool
 editor_state_map_light_set(Evas_Object *obj, Change *change, Eina_Bool merge, 
Eina_Bool apply, const char *part_name, const char *state_name, double 
state_val,
       const char * new_val) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_rotation_x_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                const char *part_name, const char *state_name, 
double state_val, double n4) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_rotation_y_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                const char *part_name, const char *state_name, 
double state_val, double n4) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_rotation_z_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                const char *part_name, const char *state_name, 
double state_val, double n4) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_point_color_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                 const char *part_name, const char 
*state_name, double state_val, int idx, int n4, int n5, int n6, int n7) 
EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_rotation_center_set(Evas_Object *obj, Change *change, 
Eina_Bool merge, Eina_Bool apply, const char *part_name, const char 
*state_name, double state_val,
+      const char * new_val) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_perspective_focal_set(Evas_Object *obj, Change *change, 
Eina_Bool merge, Eina_Bool apply, const char *part_name, const char 
*state_name, double state_val,
+      int new_val) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_state_map_perspective_zplane_set(Evas_Object *obj, Change *change, 
Eina_Bool merge, Eina_Bool apply, const char *part_name, const char 
*state_name, double state_val,
+      int new_val) EINA_WARN_UNUSED_RESULT;
 
 #endif /* EDITOR_H */
diff --git a/src/bin/editor/editor_states.c b/src/bin/editor/editor_states.c
index 91cb74f..3b8601d 100644
--- a/src/bin/editor/editor_states.c
+++ b/src/bin/editor/editor_states.c
@@ -180,10 +180,182 @@ EDITOR_STATE_STRING(map_light, 
ATTRIBUTE_STATE_MAP_LIGHT, true)
 EDITOR_STATE_BOOL(map_smooth, ATTRIBUTE_STATE_MAP_SMOOTH)
 EDITOR_STATE_BOOL(map_alpha, ATTRIBUTE_STATE_MAP_ALPHA)
 EDITOR_STATE_BOOL(map_backface_cull, ATTRIBUTE_STATE_MAP_BACKFACE_CULL)
-//map_perspective_focal
-//map_perspective_zplane
-//map_rotation_center (part)
+EDITOR_STATE_INT(map_perspective_focal, ATTRIBUTE_STATE_MAP_PERSPECTIVE_FOCAL)
+EDITOR_STATE_INT(map_perspective_zplane, 
ATTRIBUTE_STATE_MAP_PERSPECTIVE_ZPLANE)
+EDITOR_STATE_STRING(map_rotation_center, ATTRIBUTE_STATE_MAP_ROTATION_CENTER, 
true)
+
 //map_rotation (3 values)
+Eina_Bool
+editor_state_map_rotation_x_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                const char *part_name, const char *state_name, 
double state_val, double n4)
+{
+   Diff *diff;
+   double o4, o5, o6;
+   Attribute attribute = ATTRIBUTE_STATE_MAP_ROTATION_X;
+   assert(edit_object != NULL);
+   assert(part_name != NULL);
+   assert(state_name != NULL);
+   edje_edit_state_map_rotation_get(edit_object, part_name, state_name, 
state_val, &o4, &o5, &o6);
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE_DOUBLE;
+        diff->redo.function = editor_state_map_rotation_x_set;
+        diff->redo.args.type_ssdd.s1 = eina_stringshare_add(part_name);
+        diff->redo.args.type_ssdd.s2 = eina_stringshare_add(state_name);
+        diff->redo.args.type_ssdd.d3 = state_val;
+        diff->redo.args.type_ssdd.d4 = n4;
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE_DOUBLE;
+        diff->undo.function = editor_state_map_rotation_x_set;
+        diff->undo.args.type_ssdd.s1 = eina_stringshare_add(part_name);
+        diff->undo.args.type_ssdd.s2 = eina_stringshare_add(state_name);
+        diff->undo.args.type_ssdd.d3 = state_val;
+        diff->undo.args.type_ssdd.d4 = o4;
+        if (merge)
+          change_diff_merge_add(change, diff);
+        else
+          change_diff_add(change, diff);
+     }
+   if (apply)
+     {
+        if (!edje_edit_state_map_rotation_set(edit_object, part_name, 
state_name, state_val, n4, o5, o6))
+          return false;
+        _editor_project_changed();
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
+     }
+   return true;
+}
+
+Eina_Bool
+editor_state_map_rotation_y_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                const char *part_name, const char *state_name, 
double state_val, double n5)
+{
+   Diff *diff;
+   double o4, o5, o6;
+   Attribute attribute = ATTRIBUTE_STATE_MAP_ROTATION_Y;
+   assert(edit_object != NULL);
+   assert(part_name != NULL);
+   assert(state_name != NULL);
+   edje_edit_state_map_rotation_get(edit_object, part_name, state_name, 
state_val, &o4, &o5, &o6);
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE_DOUBLE;
+        diff->redo.function = editor_state_map_rotation_y_set;
+        diff->redo.args.type_ssdd.s1 = eina_stringshare_add(part_name);
+        diff->redo.args.type_ssdd.s2 = eina_stringshare_add(state_name);
+        diff->redo.args.type_ssdd.d3 = state_val;
+        diff->redo.args.type_ssdd.d4 = n5;
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE_DOUBLE;
+        diff->undo.function = editor_state_map_rotation_y_set;
+        diff->undo.args.type_ssdd.s1 = eina_stringshare_add(part_name);
+        diff->undo.args.type_ssdd.s2 = eina_stringshare_add(state_name);
+        diff->undo.args.type_ssdd.d3 = state_val;
+        diff->undo.args.type_ssdd.d4 = o5;
+        if (merge)
+          change_diff_merge_add(change, diff);
+        else
+          change_diff_add(change, diff);
+     }
+   if (apply)
+     {
+        if (!edje_edit_state_map_rotation_set(edit_object, part_name, 
state_name, state_val, o4, n5, o6))
+          return false;
+        _editor_project_changed();
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
+     }
+   return true;
+}
+
+Eina_Bool
+editor_state_map_rotation_z_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                const char *part_name, const char *state_name, 
double state_val, double n6)
+{
+   Diff *diff;
+   double o4, o5, o6;
+   Attribute attribute = ATTRIBUTE_STATE_MAP_ROTATION_Z;
+   assert(edit_object != NULL);
+   assert(part_name != NULL);
+   assert(state_name != NULL);
+   edje_edit_state_map_rotation_get(edit_object, part_name, state_name, 
state_val, &o4, &o5, &o6);
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE_DOUBLE;
+        diff->redo.function = editor_state_map_rotation_z_set;
+        diff->redo.args.type_ssdd.s1 = eina_stringshare_add(part_name);
+        diff->redo.args.type_ssdd.s2 = eina_stringshare_add(state_name);
+        diff->redo.args.type_ssdd.d3 = state_val;
+        diff->redo.args.type_ssdd.d4 = n6;
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE_DOUBLE;
+        diff->undo.function = editor_state_map_rotation_z_set;
+        diff->undo.args.type_ssdd.s1 = eina_stringshare_add(part_name);
+        diff->undo.args.type_ssdd.s2 = eina_stringshare_add(state_name);
+        diff->undo.args.type_ssdd.d3 = state_val;
+        diff->undo.args.type_ssdd.d4 = o6;
+        if (merge)
+          change_diff_merge_add(change, diff);
+        else
+          change_diff_add(change, diff);
+     }
+   if (apply)
+     {
+        if (!edje_edit_state_map_rotation_set(edit_object, part_name, 
state_name, state_val, o4, o5, n6))
+          return false;
+        _editor_project_changed();
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
+     }
+   return true;
+}
+
+Eina_Bool
+editor_state_map_point_color_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge, Eina_Bool apply,
+                                 const char *part_name, const char 
*state_name, double state_val, int idx, int n4, int n5, int n6, int n7)
+{
+   Diff *diff;
+   int o4, o5, o6, o7;
+   Attribute attribute = ATTRIBUTE_STATE_MAP_POINT_COLOR;
+   assert(edit_object != NULL);
+   assert(part_name != NULL);
+   assert(state_name != NULL);
+   if (change)
+     {
+        edje_edit_state_map_point_color_get(edit_object, part_name, 
state_name, state_val, idx, &o4, &o5, &o6, &o7);
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = 
FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT_INT;
+        diff->redo.function = editor_state_map_point_color_set;
+        diff->redo.args.type_ssdiiiii.s1 = eina_stringshare_add(part_name);
+        diff->redo.args.type_ssdiiiii.s2 = eina_stringshare_add(state_name);
+        diff->redo.args.type_ssdiiiii.d3 = state_val;
+        diff->redo.args.type_ssdiiiii.i4 = n4;
+        diff->redo.args.type_ssdiiiii.i5 = n5;
+        diff->redo.args.type_ssdiiiii.i6 = n6;
+        diff->redo.args.type_ssdiiiii.i7 = n7;
+        diff->redo.args.type_ssdiiiii.i8 = idx;
+        diff->undo.type = 
FUNCTION_TYPE_STRING_STRING_DOUBLE_INT_INT_INT_INT_INT;
+        diff->undo.function = editor_state_map_point_color_set;
+        diff->undo.args.type_ssdiiiii.s1 = eina_stringshare_add(part_name);
+        diff->undo.args.type_ssdiiiii.s2 = eina_stringshare_add(state_name);
+        diff->undo.args.type_ssdiiiii.d3 = state_val;
+        diff->undo.args.type_ssdiiiii.i4 = o4;
+        diff->undo.args.type_ssdiiiii.i5 = o5;
+        diff->undo.args.type_ssdiiiii.i6 = o6;
+        diff->undo.args.type_ssdiiiii.i7 = o7;
+        diff->undo.args.type_ssdiiiii.i8 = idx;
+        if (merge)
+          change_diff_merge_add(change, diff);
+        else
+          change_diff_add(change, diff);
+     }
+   if (apply)
+     {
+        if (!edje_edit_state_map_point_color_set(edit_object, part_name, 
state_name, state_val, idx, n4, n5, n6, n7))
+          return false;
+        _editor_project_changed();
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
+     }
+   return true;
+}
 
 TODO("Fix edje_edit API")
 //EDITOR_STATE_STRING(box_layout, ATTRIBUTE_STATE_BOX_LAYOUT)

-- 


Reply via email to