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) --