From 7c71dc4e2df2ac74f121598da44ea872c0a6eaa2 Mon Sep 17 00:00:00 2001 From: Ali Alzyod Date: Fri, 27 Dec 2019 10:17:17 +0900 Subject: [PATCH 01/12] efl.ui.textbox: fix crash when toggle scroll mode Reviewers: eagleeye, bu5hm4n, cedric, woohyun Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10924 --- src/lib/elementary/efl_ui_textbox.c | 5 ++++- src/tests/elementary/efl_ui_test_text.c | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_textbox.c b/src/lib/elementary/efl_ui_textbox.c index ed9c4b365f..e96842dba7 100644 --- a/src/lib/elementary/efl_ui_textbox.c +++ b/src/lib/elementary/efl_ui_textbox.c @@ -2451,7 +2451,10 @@ _efl_ui_textbox_scrollable_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Ein } else { - efl_content_set(sd->scroller, NULL); + /* sd->text_table should not be deleted, so we need to use content_unset + * instead of efl_content_set(sd->scroller, NULL) + */ + efl_content_unset(sd->scroller); edje_object_part_swallow(sd->entry_edje, "efl.text", sd->text_table); efl_del(sd->scroller); sd->scroller = NULL; diff --git a/src/tests/elementary/efl_ui_test_text.c b/src/tests/elementary/efl_ui_test_text.c index b0eecd14ae..5c26e6f528 100644 --- a/src/tests/elementary/efl_ui_test_text.c +++ b/src/tests/elementary/efl_ui_test_text.c @@ -132,10 +132,32 @@ EFL_START_TEST(text_user_change) } EFL_END_TEST +EFL_START_TEST(text_scroll_mode) +{ + Eo *txt, *win, *cur; + win = win_add(); + txt = efl_add(EFL_UI_TEXTBOX_CLASS, win); + cur = efl_text_interactive_main_cursor_get(txt); + efl_text_set(txt, "Hello"); + /*scroll mode is false by default*/ + fail_if(efl_ui_textbox_scrollable_get(txt)); + efl_ui_textbox_scrollable_set(txt, !efl_ui_textbox_scrollable_get(txt)); + efl_text_cursor_text_insert(cur, "World"); + fail_if(!efl_ui_textbox_scrollable_get(txt)); + efl_ui_textbox_scrollable_set(txt, !efl_ui_textbox_scrollable_get(txt)); + efl_text_cursor_text_insert(cur, "!!!"); + + ck_assert_str_eq(efl_text_get(txt),"HelloWorld!!!"); + efl_del(txt); + efl_del(win); +} +EFL_END_TEST + void efl_ui_test_text(TCase *tc) { tcase_add_test(tc, text_cnp); tcase_add_test(tc, text_all_select_all_unselect); tcase_add_test(tc, text_selection); tcase_add_test(tc, text_user_change); + tcase_add_test(tc, text_scroll_mode); } From e583b9159e9d9b0bbb5e1bf14be81e5acdc9a98b Mon Sep 17 00:00:00 2001 From: Ali Alzyod Date: Fri, 27 Dec 2019 16:10:24 +0900 Subject: [PATCH 02/12] efl_style: rename enums (background,strikthrough) from enabled to solid_color Reviewers: woohyun, segfaultxavi Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7942 Differential Revision: https://phab.enlightenment.org/D10967 --- src/lib/efl/interfaces/efl_text_style.eo | 4 ++-- src/tests/evas/evas_test_textblock.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/efl/interfaces/efl_text_style.eo b/src/lib/efl/interfaces/efl_text_style.eo index 17c209e01d..9fdd1e05f2 100644 --- a/src/lib/efl/interfaces/efl_text_style.eo +++ b/src/lib/efl/interfaces/efl_text_style.eo @@ -2,7 +2,7 @@ enum @beta Efl.Text_Style_Background_Type { [[Whether to add a background colored rectangle (background) to each line of text or not.]] disabled = 0, [[Do not use background.]] - enabled, [[Use background.]] + solid_color, [[Use solid color background.]] } @@ -10,7 +10,7 @@ enum @beta Efl.Text_Style_Strikethrough_Type { [[Whether to add a strike-through decoration to the displayed text or not.]] disabled = 0, [[Do not use strike-through.]] - enabled, [[Use strike-through.]] + solid_color, [[Use solid color strike-through.]] } diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 9e9c43f259..6ade455ddc 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -4908,7 +4908,7 @@ EFL_START_TEST(efl_canvas_textblock_style) ck_assert_int_eq(efl_text_wrap_get(txt), EFL_TEXT_FORMAT_WRAP_NONE); efl_canvas_textblock_style_apply(txt, "backing=on"); - ck_assert_int_eq(efl_text_background_type_get(txt), EFL_TEXT_STYLE_BACKGROUND_TYPE_ENABLED); + ck_assert_int_eq(efl_text_background_type_get(txt), EFL_TEXT_STYLE_BACKGROUND_TYPE_SOLID_COLOR); efl_canvas_textblock_style_apply(txt, "style=far_soft_shadow"); ck_assert_int_eq(efl_text_effect_type_get(txt), EFL_TEXT_STYLE_EFFECT_TYPE_FAR_SOFT_SHADOW); From 6756485476c0182e46b13471ba74a87a00c47702 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 14 Nov 2019 17:11:03 -0800 Subject: [PATCH 03/12] elementary: improve focus memory for Efl.Ui.CollectionView. This patch will make the CollectionView remember at all time the last focus object and the last item in the list. Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D10677 --- src/lib/elementary/efl_ui_collection_view.c | 166 +++++++++++++++++--- 1 file changed, 144 insertions(+), 22 deletions(-) diff --git a/src/lib/elementary/efl_ui_collection_view.c b/src/lib/elementary/efl_ui_collection_view.c index 75210982ce..6cf7635223 100644 --- a/src/lib/elementary/efl_ui_collection_view.c +++ b/src/lib/elementary/efl_ui_collection_view.c @@ -79,6 +79,11 @@ struct _Efl_Ui_Collection_View_Data Eina_List *requests; // Array of Efl_Ui_Collection_Request in progress + struct { + Efl_Gfx_Entity *last; // The last item of the collection, so focus can start by the end if necessary. + Efl_Gfx_Entity *previously; // The previously selected item in the collection, so focus can come back to it. + } focus; + unsigned int start_id; unsigned int end_id; @@ -293,6 +298,9 @@ _all_cleanup(Efl_Ui_Collection_View *obj, Efl_Ui_Collection_View_Data *pd) } #endif + efl_replace(&pd->focus.previously, NULL); + efl_replace(&pd->focus.last, NULL); + EINA_LIST_FOREACH_SAFE(pd->requests, l, ll, request) eina_future_cancel(request->f); } @@ -485,6 +493,33 @@ _entity_fetch_cb(Eo *obj, void *data EINA_UNUSED, const Eina_Value v) return eina_future_as_value(r); } +static inline unsigned int +_lookup_entity_index(Efl_Gfx_Entity *entity, Efl_Model **model) +{ + Efl_Model *fetch; + + fetch = efl_ui_view_model_get(entity); + if (model) *model = fetch; + return efl_composite_model_index_get(fetch); +} + +static void +_last_entity_update(Efl_Ui_Collection_View_Data *pd, Efl_Gfx_Entity *entity) +{ + Efl_Model *new_model, *old_model; + unsigned int new_index, old_index; + + if (!pd->focus.last) goto replace; + + new_index = _lookup_entity_index(entity, &new_model); + old_index = _lookup_entity_index(pd->focus.last, &old_model); + + if (new_index <= old_index) return; + + replace: + efl_replace(&pd->focus.last, entity); +} + static inline Eina_Bool _entity_propagate(Efl_Model *model, Efl_Gfx_Entity *entity) { @@ -634,6 +669,9 @@ _entity_fetched_cb(Eo *obj, void *data, const Eina_Value v) evas_event_thaw(e); evas_event_thaw_eval(e); + // Check if the last child is also the list item in the list + _last_entity_update(pd, child); + // Currently position manager will flush its entire size cache on update, so only do // it when necessary to improve performance. if (updated_size || request->need_size) @@ -667,6 +705,54 @@ _entity_free_cb(Eo *o, void *data, const Eina_Future *dead_future EINA_UNUSED) free(request); } +static Eina_Bool +_focus_lookup(Efl_Ui_Collection_View_Data *pd, unsigned int search_index, + Efl_Gfx_Entity **entity, Efl_Model **model) +{ + unsigned int idx; + + if (entity) *entity = pd->focus.last; + if (pd->focus.last) + { + idx = _lookup_entity_index(pd->focus.last, model); + if (idx == search_index) return EINA_TRUE; + } + if (entity) *entity = pd->focus.previously; + if (pd->focus.previously) + { + idx = _lookup_entity_index(pd->focus.previously, model); + if (idx == search_index) return EINA_TRUE; + } + + if (entity) *entity = NULL; + if (model) *model = NULL; + return EINA_FALSE; +} + +static Efl_Ui_Collection_Item_Lookup * +_build_from_focus(Efl_Ui_Collection_View_Data *pd, unsigned int search_index, + Efl_Model **model) +{ + Efl_Ui_Collection_Item_Lookup *insert; + Efl_Gfx_Entity *entity = NULL; + + // Not found in the cache lookup, but just maybe + if (!_focus_lookup(pd, search_index, &entity, model)) return NULL; + + // Lucky us, let's add it to the cache + insert = calloc(1, sizeof (Efl_Ui_Collection_Item_Lookup)); + if (!insert) return NULL; + + insert->index = search_index; + insert->item.model = efl_ref(*model); + insert->item.entity = efl_ref(entity); + + pd->cache = eina_rbtree_inline_insert(pd->cache, EINA_RBTREE_GET(insert), + _cache_tree_cmp, NULL); + + return insert; +} + static Eina_List * _cache_size_fetch(Eina_List *requests, Efl_Ui_Collection_Request **request, Efl_Ui_Collection_View_Data *pd, @@ -675,7 +761,7 @@ _cache_size_fetch(Eina_List *requests, Efl_Ui_Collection_Request **request, Eina_Size2D item_base) { Efl_Ui_Collection_Item_Lookup *lookup; - Efl_Model *model; + Efl_Model *model = NULL; Eina_Size2D item_size = item_base; if (!pd->cache) goto not_found; @@ -683,10 +769,16 @@ _cache_size_fetch(Eina_List *requests, Efl_Ui_Collection_Request **request, lookup = (void*) eina_rbtree_inline_lookup(pd->cache, &search_index, sizeof (search_index), _cache_tree_lookup, NULL); - if (!lookup) goto not_found; - // In the cache we should always have model, so no need to check for it - model = lookup->item.model; + if (lookup) + { + model = lookup->item.model; + } + else + { + lookup = _build_from_focus(pd, search_index, &model); + if (!lookup) goto not_found; + } // If we do not know the size if (!ITEM_SIZE_FROM_MODEL(model, item_size)) @@ -731,12 +823,14 @@ _cache_entity_fetch(Eina_List *requests, Efl_Ui_Collection_Request **request, Efl_Ui_Position_Manager_Object_Batch_Entity *target) { Efl_Ui_Collection_Item_Lookup *lookup; + Efl_Model *model = NULL; if (!pd->cache) goto not_found; lookup = (void*) eina_rbtree_inline_lookup(pd->cache, &search_index, sizeof (search_index), _cache_tree_lookup, NULL); + if (!lookup) lookup = _build_from_focus(pd, search_index, &model); if (!lookup) goto not_found; if (!lookup->item.entity) goto not_found; @@ -1668,8 +1762,27 @@ _efl_ui_collection_view_position_manager_get(const Eo *obj EINA_UNUSED, } static void -_efl_model_count_changed(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED) +_efl_model_count_changed(void *data, const Efl_Event *event EINA_UNUSED) { + Efl_Ui_Collection_Request *request = NULL; + Eina_List *requests = NULL; + MY_DATA_GET(data, pd); + unsigned int index; + unsigned int count = 0; + + count = efl_model_children_count_get(pd->model); + if (pd->focus.last) + { + index = _lookup_entity_index(pd->focus.last, NULL); + + if (index + 1 == count) + return ; + } + + // The last item is not the last item anymore + requests = _request_add(requests, &request, count, EINA_TRUE); + requests = _batch_request_flush(requests, data, pd); + // We are not triggering efl_ui_position_manager_entity_data_access_set as it is can // only be slow, we rely on child added/removed instead (If we were to not rely on // child added/removed we could maybe use count changed) @@ -1863,6 +1976,7 @@ _efl_model_child_removed(void *data, const Efl_Event *event) if (request_length > 0) { Efl_Ui_Collection_Request *request = NULL; + requests = _request_add(requests, &request, ev->index, EINA_TRUE); request->length = request_length; requests = eina_list_append(requests, request); @@ -1882,9 +1996,7 @@ static void _efl_ui_collection_view_model_changed(void *data, const Efl_Event *event) { Efl_Model_Changed_Event *ev = event->info; -#ifdef VIEWPORT_ENABLE Eina_List *requests = NULL; -#endif MY_DATA_GET(data, pd); Eina_Iterator *it; const char *property; @@ -1971,7 +2083,6 @@ _efl_ui_collection_view_model_changed(void *data, const Efl_Event *event) #ifdef VIEWPORT_ENABLE for (i = 0; i < 3; i++) { - Efl_Ui_Collection_Request *request; if (!pd->viewport[i]) continue ; if (pd->viewport[i]->count == 0) continue ; @@ -1986,10 +2097,21 @@ _efl_ui_collection_view_model_changed(void *data, const Efl_Event *event) requests = eina_list_append(requests, request); } - requests = _batch_request_flush(requests, data, pd); #endif - switch(efl_ui_position_manager_entity_version(pd->manager, 1)) + // Fetch last item if necessary for later focus + if (efl_model_children_count_get(model)) + { + Efl_Ui_Collection_Request *request = NULL; + uint64_t index = efl_model_children_count_get(model) - 1; + + requests = _request_add(requests, &request, index, EINA_TRUE); + } + + // Flush all pending request + requests = _batch_request_flush(requests, data, pd); + + switch (efl_ui_position_manager_entity_version(pd->manager, 1)) { case 1: efl_ui_position_manager_data_access_v1_data_access_set(pd->manager, @@ -2249,20 +2371,17 @@ _efl_ui_collection_view_focus_manager_efl_ui_focus_manager_manager_focus_set(Eo if (focus == efl_ui_focus_manager_root_get(obj)) { // Find last item - item_id = efl_model_children_count_get(cpd->model) - 1; + item = cpd->focus.previously; + if (!item) item = cpd->focus.last; + if (item) item_id = _lookup_entity_index(item, NULL); + else item_id = efl_model_children_count_get(cpd->model) - 1; } else { - Efl_Model *model; - Eina_Value *vindex; - item = _find_item(obj, cpd, focus); if (!item) return ; - model = efl_ui_view_model_get(item); - vindex = efl_model_property_get(model, "child.index"); - if (!eina_value_uint_convert(vindex, &item_id)) return; - eina_value_free(vindex); + item_id = _lookup_entity_index(item, NULL); } // If this is NULL then we are before finalize, we cannot serve any sane value here @@ -2293,7 +2412,8 @@ EOLIAN static Efl_Ui_Focus_Object * _efl_ui_collection_view_focus_manager_efl_ui_focus_manager_request_move(Eo *obj, Efl_Ui_Collection_View_Focus_Manager_Data *pd, Efl_Ui_Focus_Direction direction, Efl_Ui_Focus_Object *child, Eina_Bool logical) { MY_DATA_GET(pd->collection, cpd); - Efl_Ui_Item *new_item, *item; + Efl_Ui_Item *new_item = NULL; + Efl_Ui_Item *item; unsigned int item_id; if (!child) @@ -2302,11 +2422,11 @@ _efl_ui_collection_view_focus_manager_efl_ui_focus_manager_request_move(Eo *obj, item = _find_item(obj, cpd, child); //if this is NULL then we are before finalize, we cannot serve any sane value here - if (!cpd->manager) return NULL; - if (!item) return NULL; + if (!cpd->manager) goto end; + if (!item) goto end; if (!_id_from_item(item, &item_id)) - return NULL; + goto end; if (ITEM_IS_OUTSIDE_VISIBLE(item_id)) { @@ -2361,6 +2481,8 @@ _efl_ui_collection_view_focus_manager_efl_ui_focus_manager_request_move(Eo *obj, new_item = efl_ui_focus_manager_request_move(efl_super(obj, EFL_UI_COLLECTION_VIEW_FOCUS_MANAGER_CLASS), direction, child, logical); } + end: + efl_replace(&cpd->focus.previously, new_item); return new_item; } From 4624b56bedad0d19426f55470649ade41cf55753 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 19 Dec 2019 10:47:57 -0800 Subject: [PATCH 04/12] elementary: make sure that our index for the maximum number of object is actually unsigned int bound. Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D10927 --- src/lib/elementary/efl_ui_collection.c | 5 +-- src/lib/elementary/efl_ui_collection_view.c | 10 +++--- .../efl_ui_position_manager_entity.eo | 3 +- .../elementary/efl_ui_position_manager_grid.c | 35 +++++++++---------- .../elementary/efl_ui_position_manager_list.c | 27 +++++++------- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/lib/elementary/efl_ui_collection.c b/src/lib/elementary/efl_ui_collection.c index 53afb10743..53eb344d4e 100644 --- a/src/lib/elementary/efl_ui_collection.c +++ b/src/lib/elementary/efl_ui_collection.c @@ -1208,8 +1208,9 @@ _efl_ui_collection_focus_manager_efl_ui_focus_manager_request_move(Eo *obj, Efl_ if (ITEM_IS_OUTSIDE_VISIBLE(item_id)) { - int new_id = efl_ui_position_manager_entity_relative_item(collection_pd->pos_man, efl_ui_item_index_get(item), direction); - if (new_id == -1) + unsigned int new_id; + + if (!efl_ui_position_manager_entity_relative_item(collection_pd->pos_man, efl_ui_item_index_get(item), direction, &new_id)) { new_item = NULL; } diff --git a/src/lib/elementary/efl_ui_collection_view.c b/src/lib/elementary/efl_ui_collection_view.c index 6cf7635223..433f5d3511 100644 --- a/src/lib/elementary/efl_ui_collection_view.c +++ b/src/lib/elementary/efl_ui_collection_view.c @@ -2430,12 +2430,12 @@ _efl_ui_collection_view_focus_manager_efl_ui_focus_manager_request_move(Eo *obj, if (ITEM_IS_OUTSIDE_VISIBLE(item_id)) { - int new_id; + unsigned int new_id; - new_id = efl_ui_position_manager_entity_relative_item(cpd->manager, - item_id, - direction); - if (new_id < 0) + if (!efl_ui_position_manager_entity_relative_item(cpd->manager, + item_id, + direction, + &new_id)) { new_item = NULL; } diff --git a/src/lib/elementary/efl_ui_position_manager_entity.eo b/src/lib/elementary/efl_ui_position_manager_entity.eo index f75711f915..368e7cb034 100644 --- a/src/lib/elementary/efl_ui_position_manager_entity.eo +++ b/src/lib/elementary/efl_ui_position_manager_entity.eo @@ -107,8 +107,9 @@ interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable params { current_id : uint; [[The id where the direction is oriented at]] direction : Efl.Ui.Focus.Direction; [[The direction where the new id is]] + @out index: uint; [[The relative item index after the translation has been applied.]] } - return : int; [[The id of the item in that direction, or -1 if there is no item in that direction]] + return : bool; [[$true if there is a next item, $false otherwise.]] } } events { diff --git a/src/lib/elementary/efl_ui_position_manager_grid.c b/src/lib/elementary/efl_ui_position_manager_grid.c index 2cec569d44..59aabbe2b2 100644 --- a/src/lib/elementary/efl_ui_position_manager_grid.c +++ b/src/lib/elementary/efl_ui_position_manager_grid.c @@ -738,35 +738,34 @@ _efl_ui_position_manager_grid_efl_ui_position_manager_entity_position_single_ite return geom; } -EOLIAN static int -_efl_ui_position_manager_grid_efl_ui_position_manager_entity_relative_item(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd, unsigned int current_id, Efl_Ui_Focus_Direction direction) +EOLIAN static Eina_Bool +_efl_ui_position_manager_grid_efl_ui_position_manager_entity_relative_item(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd, unsigned int current_id, Efl_Ui_Focus_Direction direction, unsigned int *index) { - int new_id = current_id; switch(direction) { case EFL_UI_FOCUS_DIRECTION_RIGHT: case EFL_UI_FOCUS_DIRECTION_NEXT: - new_id += 1; - break; + if (current_id + 1 >= pd->size) return EINA_FALSE; + current_id += 1; + break; case EFL_UI_FOCUS_DIRECTION_LEFT: case EFL_UI_FOCUS_DIRECTION_PREVIOUS: - new_id -= 1; - break; + if (current_id == 0) return EINA_FALSE; + current_id -= 1; + break; case EFL_UI_FOCUS_DIRECTION_UP: - //FIXME - break; + //FIXME + break; case EFL_UI_FOCUS_DIRECTION_DOWN: - //FIXME - break; + //FIXME + break; default: - new_id = -1; - ERR("Uncaught case!"); - break; + ERR("Uncaught case!"); + return EINA_FALSE; } - if (new_id < 0 || new_id > (int)pd->size) - return -1; - else - return new_id; + + if (index) *index = current_id; + return EINA_TRUE; } EOLIAN static int diff --git a/src/lib/elementary/efl_ui_position_manager_list.c b/src/lib/elementary/efl_ui_position_manager_list.c index 3980e127ef..6424b4bf4d 100644 --- a/src/lib/elementary/efl_ui_position_manager_list.c +++ b/src/lib/elementary/efl_ui_position_manager_list.c @@ -520,31 +520,30 @@ _efl_ui_position_manager_list_efl_object_invalidate(Eo *obj, Efl_Ui_Position_Man efl_invalidate(efl_super(obj, MY_CLASS)); } -EOLIAN static int -_efl_ui_position_manager_list_efl_ui_position_manager_entity_relative_item(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd, unsigned int current_id, Efl_Ui_Focus_Direction direction) +EOLIAN static Eina_Bool +_efl_ui_position_manager_list_efl_ui_position_manager_entity_relative_item(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd, unsigned int current_id, Efl_Ui_Focus_Direction direction, unsigned int *index) { - int new_id = current_id; switch(direction) { case EFL_UI_FOCUS_DIRECTION_RIGHT: case EFL_UI_FOCUS_DIRECTION_NEXT: case EFL_UI_FOCUS_DIRECTION_DOWN: - new_id += 1; - break; + if (current_id + 1 >= pd->size) return EINA_FALSE; + current_id += 1; + break; case EFL_UI_FOCUS_DIRECTION_LEFT: case EFL_UI_FOCUS_DIRECTION_PREVIOUS: case EFL_UI_FOCUS_DIRECTION_UP: - new_id -= 1; - break; + if (current_id == 0) return EINA_FALSE; + current_id -= 1; + break; default: - ERR("Uncaught case!"); - new_id = -1; - break; + ERR("Uncaught case!"); + return EINA_FALSE; } - if (new_id < 0 || new_id > (int)pd->size) - return -1; - else - return new_id; + + if (index) *index = current_id; + return EINA_TRUE; } EOLIAN static int From 858caa21b0f503c90ea2cfc2e8dfe5a462021959 Mon Sep 17 00:00:00 2001 From: Xavi Artigas Date: Fri, 27 Dec 2019 11:36:24 +0100 Subject: [PATCH 05/12] docs:Clarify Efl.Text_Formatter format parameter Ref T8455 --- src/lib/evas/canvas/efl_text_formatter.eo | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/efl_text_formatter.eo b/src/lib/evas/canvas/efl_text_formatter.eo index ccc84816b5..fca4e84b3b 100644 --- a/src/lib/evas/canvas/efl_text_formatter.eo +++ b/src/lib/evas/canvas/efl_text_formatter.eo @@ -15,12 +15,11 @@ abstract @beta Efl.Text.Formatter extends Efl.Object { The $format will be applied to the given range. The passed cursors must belong to same text object, otherwise insertion will be ignored. - Passed format parameter uses same format as style in @Efl.Canvas.Textblock.style_apply. ]] params { start: const(Efl.Text.Cursor); [[Start of range.]] end: const(Efl.Text.Cursor); [[End of range.]] - format: string; [[Attribute format.]] + format: string; [[Format string. Uses same format as $style in @Efl.Canvas.Textblock.style_apply.]] } } From 595a066a64711b9a86808f1399f6ceffbb177370 Mon Sep 17 00:00:00 2001 From: Xavi Artigas Date: Fri, 27 Dec 2019 11:45:35 +0100 Subject: [PATCH 06/12] whitespace --- src/lib/elementary/efl_ui_position_manager_entity.eo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_position_manager_entity.eo b/src/lib/elementary/efl_ui_position_manager_entity.eo index 368e7cb034..d7a4e80c44 100644 --- a/src/lib/elementary/efl_ui_position_manager_entity.eo +++ b/src/lib/elementary/efl_ui_position_manager_entity.eo @@ -107,7 +107,7 @@ interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable params { current_id : uint; [[The id where the direction is oriented at]] direction : Efl.Ui.Focus.Direction; [[The direction where the new id is]] - @out index: uint; [[The relative item index after the translation has been applied.]] + @out index: uint; [[The relative item index after the translation has been applied.]] } return : bool; [[$true if there is a next item, $false otherwise.]] } From 2e854ce7ed5a75249ceb7201411ccb2b83e27a4d Mon Sep 17 00:00:00 2001 From: Ross Vandegrift Date: Wed, 25 Dec 2019 04:33:53 +0000 Subject: [PATCH 07/12] correct edje pkg-config generation for luaold Currently, edje.pc gets its lua Requires from the -Dlua-interpreter argument. If -Dlua-interpreter=lua, an unversioned lua entry ends up in Requires, which cannot always be satisifed. The evas filters meson.build handles this case by generating a version-specific entry. This patch copies that logic into the top level meson.build, and passes the result to the edje subproject. Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D10965 --- meson.build | 35 +++++++++++++++++++++++++++++++- src/lib/elua/meson.build | 13 +----------- src/lib/evas/filters/meson.build | 30 --------------------------- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/meson.build b/meson.build index 222a79bcff..5ee96f0f09 100644 --- a/meson.build +++ b/meson.build @@ -254,6 +254,39 @@ ecore_evas_wayland_engine_include_dir = [] evas_static_list = [] +luaold_interpreters = [ + ['lua', ['>=5.1.0','<5.3.0']], + ['lua51', ['>=5.1.0','<5.2.0']], + ['lua-5.1', ['>=5.1.0','<5.2.0']], + ['lua5.1', ['>=5.1.0','<5.2.0']], + ['lua52', ['>=5.2.0','<5.3.0']], + ['lua-5.2', ['>=5.2.0','<5.3.0']], + ['lua5.2', ['>=5.2.0','<5.3.0']], +] + +lua_pc_name = '' + +if get_option('lua-interpreter') == 'lua' + foreach l : luaold_interpreters + lua = dependency(l[0], version: l[1], required:false) + lua_pc_name = l[0] + if lua.found() == true + break + endif + endforeach +else + lua = dependency(get_option('lua-interpreter')) + lua_pc_name = 'luajit' +endif + +if sys_osx == true and get_option('lua-interpreter') == 'luajit' +# luajit on macro is broken, this means we need to generate our own dependency with our arguments, a library later still needs to link to luajit for the pagesize argument thingy + lua = declare_dependency( + include_directories: include_directories(lua.get_pkgconfig_variable('includedir')), + link_args: ['-L'+lua.get_pkgconfig_variable('libdir'), '-l'+lua.get_pkgconfig_variable('libname')] + ) +endif + subprojects = [ # name | option | mod | lib | bin | bench | tests | examples | pkg-config options | name of static libs ['evil' ,[] , false, true, false, false, false, false, [], []], @@ -293,7 +326,7 @@ subprojects = [ ['efreet' ,[] , false, false, true, false, false, false, ['eina', 'efl', 'eo'], []], ['ecore_imf_evas' ,[] , false, true, false, false, false, false, ['eina', 'efl', 'eo'], []], ['ephysics' ,['physics'] , false, true, false, false, false, false, ['eina', 'efl', 'eo'], []], -['edje' ,[] , false, true, true, false, true, true, ['evas', 'eo', 'efl', get_option('lua-interpreter')], []], +['edje' ,[] , false, true, true, false, true, true, ['evas', 'eo', 'efl', lua_pc_name], []], ['emotion' ,[] , true, true, false, false, true, true, ['eina', 'efl', 'eo'], []], ['ethumb' ,[] , true, true, true, false, false, false, ['eina', 'efl', 'eo'], []], ['ethumb_client' ,[] , false, true, true, false, false, true, ['eina', 'efl', 'eo', 'ethumb'], []], diff --git a/src/lib/elua/meson.build b/src/lib/elua/meson.build index 33cb3f9733..227d211584 100644 --- a/src/lib/elua/meson.build +++ b/src/lib/elua/meson.build @@ -1,16 +1,5 @@ elua_deps = [eina, eo, efl, ecore, ecore_file, intl] -if sys_osx == true -# luajit on macro is broken, this means we need to generate our own dependency with our arguments, a library later still needs to link to luajit for the pagesize argument thingy - luajit = dependency('luajit') - lua = declare_dependency( - include_directories: include_directories(luajit.get_pkgconfig_variable('includedir')), - link_args: ['-L'+luajit.get_pkgconfig_variable('libdir'), '-l'+luajit.get_pkgconfig_variable('libname')] - ) - elua_pub_deps = [lua] -else - elua_pub_deps = [dependency('luajit')] -endif - +elua_pub_deps = [lua] elua_src = ['elua.c', 'io.c', 'cache.c'] elua_header_src = ['Elua.h'] diff --git a/src/lib/evas/filters/meson.build b/src/lib/evas/filters/meson.build index 78c896d939..58ff2f21d1 100644 --- a/src/lib/evas/filters/meson.build +++ b/src/lib/evas/filters/meson.build @@ -7,34 +7,4 @@ evas_src += files([ 'evas_filter_utils.c', ]) -luaold_interpreters = [ - ['lua', ['>=5.1.0','<5.3.0']], - ['lua51', ['>=5.1.0','<5.2.0']], - ['lua-5.1', ['>=5.1.0','<5.2.0']], - ['lua5.1', ['>=5.1.0','<5.2.0']], - ['lua52', ['>=5.2.0','<5.3.0']], - ['lua-5.2', ['>=5.2.0','<5.3.0']], - ['lua5.2', ['>=5.2.0','<5.3.0']], -] - -if get_option('lua-interpreter') == 'lua' - config_h.set('ENABLE_LUA_OLD', '1') - foreach l : luaold_interpreters - lua = dependency(l[0], version: l[1], required:false) - if lua.found() == true - break - endif - endforeach -else - lua = dependency(get_option('lua-interpreter')) -endif - -if sys_osx == true and get_option('lua-interpreter') == 'luajit' -# luajit on macro is broken, this means we need to generate our own dependency with our arguments, a library later still needs to link to luajit for the pagesize argument thingy - lua = declare_dependency( - include_directories: include_directories(lua.get_pkgconfig_variable('includedir')), - link_args: ['-L'+lua.get_pkgconfig_variable('libdir'), '-l'+lua.get_pkgconfig_variable('libname')] - ) -endif - evas_deps += lua From f989cea52ddcff188bfab56a4cf5b29612d7ebaf Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sat, 28 Dec 2019 20:36:52 +0000 Subject: [PATCH 08/12] elm - add plain and icon style radio and check and elm tests for it this will be common enough to put into elm - there is no way to do a gimp style "tool palette" where you select one of them (like one from a set of radio buttons) at all times... but you don't want the "round circle" but instead want it to look more like a button to fit in with a palette style look. this calls for styles... so here they are. @feat --- data/elementary/themes/edc/elm/radio.edc | 643 +++++++++++++++++++++++ src/bin/elementary/test_check.c | 63 ++- src/bin/elementary/test_radio.c | 44 +- 3 files changed, 733 insertions(+), 17 deletions(-) diff --git a/data/elementary/themes/edc/elm/radio.edc b/data/elementary/themes/edc/elm/radio.edc index 6d137b8a17..71d538e0b5 100644 --- a/data/elementary/themes/edc/elm/radio.edc +++ b/data/elementary/themes/edc/elm/radio.edc @@ -288,3 +288,646 @@ group { name: "elm/radio/base/default"; #undef MASK #undef DISABLE } + +group { name: "elm/radio/base/plain"; + alias: "elm/check/base/plain"; + images.image: "button_normal.png" COMP; + images.image: "button_clicked.png" COMP; + images.image: "horizontal_separated_bar_small_glow.png" COMP; +#define ICON 1 +#define LABEL 2 +#define MASK 3 +#define DISABLE 4 +#define SELECTED 8 + script { + public btmode; + public eval_mode(m) { + new m1 = m & MASK; + new d = m & DISABLE; + new s = m & SELECTED; + if (s) { + set_state(PART:"base", "selected", 0.0); + set_state(PART:"bar", "selected", 0.0); + } else { + set_state(PART:"base", "default", 0.0); + set_state(PART:"bar", "default", 0.0); + } + if (m1 == (ICON | LABEL)) { + if (!d) { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"sizer_content", "visible", 0.0); + set_state(PART:"elm.text", "visible", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"sizer_content", "visible", 0.0); + set_state(PART:"elm.text", "disabled_visible", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } else if (m1 == (ICON)) { + if (!d) { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"sizer_content", "icononly", 0.0); + set_state(PART:"elm.text", "default", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"sizer_content", "icononly", 0.0); + set_state(PART:"elm.text", "disabled", 0.0); + set_state(PART:"base", "disabled", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } else if (m1 == (LABEL)) { + if (!d) { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "visible", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "disabled_visible", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } else { + if (!d) { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "default", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "default", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } + } + } + parts { + part { name: "base"; mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: -1 0; + rel2.offset: 0 1; + image.normal: "button_normal.png"; + image.border: 4 4 3 5; + image.middle: SOLID; + fill.smooth: 0; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: "button_clicked.png"; + image.border: 5 5 4 6; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + } + } + part { name: "clip"; type: RECT; + description { state: "default" 0.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 255 255 255 64; + } + } + part { name: "elm.swallow.content"; type: SWALLOW; + scale: 1; + clip_to: "clip"; + description { state: "default" 0.0; + fixed: 1 0; + visible: 0; + align: 0.0 0.5; + max: 0 0; + rel1.offset: 6 5; + rel1.to: "base"; + rel2.relative: 0.0 1.0; + rel2.offset: 6 -8; + rel2.to: "base"; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + visible: 1; + align: 0.5 0.5; + max: 9999 9999; + min: 16 16; + rel2.relative: 1.0 1.0; + rel2.offset: -7 -8; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + aspect: 1.0 1.0; + max: 9999 9999; + min: 16 16; + } + } + part { name: "sizer_content"; type: TEXT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + visible: 0; + text { font: FN; size: 10; + min: 0 0; + text_class: "radio_text"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.to: "elm.swallow.content"; + rel2.to: "elm.swallow.content"; + text { + min: 1 1; + ellipsis: -1; + text: "M"; + } + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + rel1.to: "elm.swallow.content"; + rel2.to: "elm.swallow.content"; + text { + min: 1 1; + ellipsis: -1; + text: "M"; + } + } + } + part { name: "elm.text"; type: TEXT; mouse_events: 0; + effect: SHADOW BOTTOM; + scale: 1; + description { state: "default" 0.0; + rel1.offset: 2 4; + rel1.to_x: "elm.swallow.content"; + rel1.relative: 1.0 0.0; + rel1.to_y: "base"; + rel2.offset: -8 -8; + rel2.to: "base"; + color: FN_COL_DEFAULT; + color_class: "radio_text"; + text { font: FN; size: 10; + min: 0 0; + align: 0.0 0.5; + text_class: "radio"; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color_class: "radio_text_disabled"; + color3: 255 255 255 255; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + description { state: "disabled_visible" 0.0; + inherit: "default" 0.0; + color_class: "radio_text_disabled"; + color3: 255 255 255 255; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + } + image { "bar"; nomouse; + desc { "default"; + image.normal: "horizontal_separated_bar_small_glow.png"; + image.border: 4 4 4 4; + fill.smooth: 0; + fill.smooth: 0; + fixed: 0 1; + rel.to: "base"; + rel1.relative: 0.0 1.0; + rel1.offset: 1 -12; + rel2.offset: -2 -3; + color: 255 255 255 0; + visible: 0; + } + desc { "selected"; + inherit: "default"; + color: 255 255 255 255; + visible: 1; + } + } + part { name: "event"; type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + programs { + program { signal: "mouse,down,1"; source: "event"; + action: STATE_SET "selected" 0.0; + target: "base"; + } + program { signal: "mouse,up,1"; source: "event"; + script { + new m = get_int(btmode); + eval_mode(m); + } + } + program { signal: "mouse,clicked,1"; source: "event"; + action: SIGNAL_EMIT "elm,action,radio,toggle" "elm"; + } + program { signal: "mouse,clicked,1"; source: "event"; + action: SIGNAL_EMIT "elm,action,check,toggle" "elm"; + } + program { signal: "elm,state,*,on"; source: "elm"; + script { + new m = get_int(btmode); + m |= SELECTED; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,*,off"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~SELECTED; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,text,visible"; source: "elm"; + script { + new m = get_int(btmode); + m |= LABEL; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,text,hidden"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~LABEL; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,icon,visible"; source: "elm"; + script { + new m = get_int(btmode); + m |= ICON; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,icon,hidden"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~ICON; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,disabled"; source: "elm"; + script { + new m = get_int(btmode); + m |= DISABLE; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,enabled"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~DISABLE; set_int(btmode, m); + eval_mode(m); + } + } + } +#undef ICON +#undef LABEL +#undef MASK +#undef DISABLE +} + +group { name: "elm/radio/base/icon"; + alias: "elm/check/base/icon"; + images.image: "button_normal.png" COMP; + images.image: "button_clicked.png" COMP; + images.image: "horizontal_separated_bar_small_glow.png" COMP; +#define ICON 1 +#define LABEL 2 +#define MASK 3 +#define DISABLE 4 +#define SELECTED 8 + script { + public btmode; + public eval_mode(m) { + new m1 = m & MASK; + new d = m & DISABLE; + new s = m & SELECTED; + if (s) { + set_state(PART:"base", "selected", 0.0); + set_state(PART:"bar", "selected", 0.0); + } else { + set_state(PART:"base", "default", 0.0); + set_state(PART:"bar", "default", 0.0); + } + if (m1 == (ICON | LABEL)) { + if (!d) { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"sizer_content", "visible", 0.0); + set_state(PART:"elm.text", "visible", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"sizer_content", "visible", 0.0); + set_state(PART:"elm.text", "disabled_visible", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } else if (m1 == (ICON)) { + if (!d) { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"sizer_content", "icononly", 0.0); + set_state(PART:"elm.text", "default", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"sizer_content", "icononly", 0.0); + set_state(PART:"elm.text", "disabled", 0.0); + set_state(PART:"base", "disabled", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } else if (m1 == (LABEL)) { + if (!d) { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "visible", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "disabled_visible", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } else { + if (!d) { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "default", 0.0); + set_state(PART:"clip", "default", 0.0); + set_state(PART:"event", "default", 0.0); + } else { + set_state(PART:"elm.swallow.content", "default", 0.0); + set_state(PART:"sizer_content", "default", 0.0); + set_state(PART:"elm.text", "default", 0.0); + set_state(PART:"clip", "disabled", 0.0); + set_state(PART:"event", "disabled", 0.0); + } + } + } + } + parts { + part { name: "base"; mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: -1 0; + rel2.offset: 0 1; + image.normal: "button_normal.png"; + image.border: 4 4 3 5; + image.middle: SOLID; + fill.smooth: 0; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: "button_clicked.png"; + image.border: 5 5 4 6; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + } + } + part { name: "clip"; type: RECT; + description { state: "default" 0.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 255 255 255 64; + } + } + part { name: "elm.swallow.content"; type: SWALLOW; + scale: 1; + clip_to: "clip"; + description { state: "default" 0.0; + fixed: 0 1; + visible: 0; + align: 0.5 0.0; + max: 0 0; + rel1.offset: 6 2; + rel1.to: "base"; + rel2.relative: 1.0 0.0; + rel2.offset: -7 2; + rel2.to: "base"; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + fixed: 0 0; + visible: 1; + align: 0.5 0.5; + max: 9999 9999; + min: 16 16; + rel2.relative: 1.0 1.0; + rel2.offset: -7 -8; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + fixed: 0 0; + visible: 1; + rel1.offset: 6 5; + rel2.offset: -7 5; + aspect: 1.0 1.0; + max: 9999 9999; + min: 16 16; + } + } + part { name: "sizer_content"; type: TEXT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + visible: 0; + text { font: FN; size: 10; + min: 0 0; + text_class: "radio_text"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.to: "elm.swallow.content"; + rel2.to: "elm.swallow.content"; + text { + min: 1 1; + ellipsis: -1; + text: "M"; + } + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + rel1.to: "elm.swallow.content"; + rel2.to: "elm.swallow.content"; + text { + min: 1 1; + ellipsis: -1; + text: "M"; + } + } + } + part { name: "elm.text"; type: TEXT; mouse_events: 0; + effect: SHADOW BOTTOM; + scale: 1; + description { state: "default" 0.0; + rel1.offset: 6 2; + rel1.to_y: "elm.swallow.content"; + rel1.relative: 0.0 1.0; + rel2.offset: -8 -8; + rel2.to: "base"; + color: FN_COL_DEFAULT; + color_class: "radio_text"; + text { font: FN; size: 10; + min: 0 0; + align: 0.5 1.0; + text_class: "radio"; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color_class: "radio_text_disabled"; + color3: 255 255 255 255; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + description { state: "disabled_visible" 0.0; + inherit: "default" 0.0; + color_class: "radio_text_disabled"; + color3: 255 255 255 255; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + } + image { "bar"; nomouse; + desc { "default"; + image.normal: "horizontal_separated_bar_small_glow.png"; + image.border: 4 4 4 4; + fill.smooth: 0; + fill.smooth: 0; + fixed: 0 1; + rel.to: "base"; + rel1.relative: 0.0 1.0; + rel1.offset: 1 -12; + rel2.offset: -2 -3; + color: 255 255 255 0; + visible: 0; + } + desc { "selected"; + inherit: "default"; + color: 255 255 255 255; + visible: 1; + } + } + part { name: "event"; type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + programs { + program { signal: "mouse,down,1"; source: "event"; + action: STATE_SET "selected" 0.0; + target: "base"; + } + program { signal: "mouse,up,1"; source: "event"; + script { + new m = get_int(btmode); + eval_mode(m); + } + } + program { signal: "mouse,clicked,1"; source: "event"; + action: SIGNAL_EMIT "elm,action,radio,toggle" "elm"; + } + program { signal: "mouse,clicked,1"; source: "event"; + action: SIGNAL_EMIT "elm,action,check,toggle" "elm"; + } + program { signal: "elm,state,*,on"; source: "elm"; + script { + new m = get_int(btmode); + m |= SELECTED; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,*,off"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~SELECTED; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,text,visible"; source: "elm"; + script { + new m = get_int(btmode); + m |= LABEL; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,text,hidden"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~LABEL; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,icon,visible"; source: "elm"; + script { + new m = get_int(btmode); + m |= ICON; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,icon,hidden"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~ICON; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,disabled"; source: "elm"; + script { + new m = get_int(btmode); + m |= DISABLE; set_int(btmode, m); + eval_mode(m); + } + } + program { signal: "elm,state,enabled"; source: "elm"; + script { + new m = get_int(btmode); + m &= ~DISABLE; set_int(btmode, m); + eval_mode(m); + } + } + } +#undef ICON +#undef LABEL +#undef MASK +#undef DISABLE +} diff --git a/src/bin/elementary/test_check.c b/src/bin/elementary/test_check.c index 40ca00dfbe..b47145e773 100644 --- a/src/bin/elementary/test_check.c +++ b/src/bin/elementary/test_check.c @@ -29,25 +29,18 @@ state_changed_cb2(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EIN elm_object_text_set(obj, "text is visible when check state is true."); } -void -test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +static void +check_style(Evas_Object *win, Evas_Object *bx, const char *style) { - Evas_Object *win, *bx, *ic, *ck, *ck0; + Evas_Object *ic, *ck, *ck0; char buf[PATH_MAX]; - win = elm_win_util_standard_add("check", "Check"); - elm_win_autodel_set(win, EINA_TRUE); - - bx = elm_box_add(win); - evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, bx); - evas_object_show(bx); - ic = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); elm_image_file_set(ic, buf, NULL); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_text_set(ck, "Icon sized to check"); elm_object_part_content_set(ck, "icon", ic); elm_check_state_set(ck, EINA_TRUE); @@ -62,6 +55,7 @@ test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf elm_image_file_set(ic, buf, NULL); elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_text_set(ck, "Icon not resizable"); elm_object_part_content_set(ck, "icon", ic); elm_box_pack_end(bx, ck); @@ -71,17 +65,20 @@ test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf evas_object_smart_callback_add(ck, "changed", changed_cb, ck0); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_text_set(ck, "Label Only"); elm_box_pack_end(bx, ck); evas_object_show(ck); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_text_set(ck, "Use State Pointer"); elm_check_state_pointer_set(ck, &eb); elm_box_pack_end(bx, ck); evas_object_show(ck); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_text_set(ck, "Print State Pointer Value"); elm_box_pack_end(bx, ck); evas_object_show(ck); @@ -92,6 +89,7 @@ test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf elm_image_file_set(ic, buf, NULL); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_text_set(ck, "Disabled check"); elm_object_part_content_set(ck, "icon", ic); elm_check_state_set(ck, EINA_TRUE); @@ -101,6 +99,7 @@ test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf evas_object_show(ic); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_box_pack_end(bx, ck); elm_object_disabled_set(ck, EINA_TRUE); evas_object_show(ck); @@ -110,21 +109,63 @@ test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf elm_image_file_set(ic, buf, NULL); elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_object_part_content_set(ck, "icon", ic); elm_box_pack_end(bx, ck); evas_object_show(ck); evas_object_show(ic); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_box_pack_end(bx, ck); evas_object_show(ck); ck = elm_check_add(win); + elm_object_style_set(ck, style); elm_box_pack_end(bx, ck); elm_object_text_set(ck, "text is visible when check state is true."); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", state_changed_cb2, NULL); +} + +void +test_check(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *win, *bx, *bx0; + + win = elm_win_util_standard_add("check", "Check"); + elm_win_autodel_set(win, EINA_TRUE); + + bx0 = elm_box_add(win); + evas_object_size_hint_weight_set(bx0, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx0, EINA_TRUE); + elm_win_resize_object_add(win, bx0); + evas_object_show(bx0); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_FALSE); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + check_style(win, bx, "default"); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_FALSE); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + check_style(win, bx, "plain"); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_FALSE); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + check_style(win, bx, "icon"); evas_object_show(win); } diff --git a/src/bin/elementary/test_radio.c b/src/bin/elementary/test_radio.c index 608893e9a0..d27494f8d9 100644 --- a/src/bin/elementary/test_radio.c +++ b/src/bin/elementary/test_radio.c @@ -18,7 +18,7 @@ _rdg_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, } static void -_group_1_create(Evas_Object *bx) +_group_1_create(Evas_Object *bx, const char *style) { Evas_Object *bx2, *fr, *ic, *rd, *rdg; char buf[PATH_MAX]; @@ -41,6 +41,7 @@ _group_1_create(Evas_Object *bx) evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 0); evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); @@ -60,6 +61,7 @@ _group_1_create(Evas_Object *bx) elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 1); elm_radio_group_add(rd, rdg); elm_object_text_set(rd, "Icon no scale"); @@ -69,6 +71,7 @@ _group_1_create(Evas_Object *bx) evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, NULL); rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 2); elm_radio_group_add(rd, rdg); // add a radio button rd to a radio group rdg. elm_object_text_set(rd, "Label Only"); @@ -77,6 +80,7 @@ _group_1_create(Evas_Object *bx) evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, NULL); rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 3); elm_radio_group_add(rd, rdg); // add a radio button rd to a radio group rdg. elm_object_text_set(rd, "Disabled"); @@ -91,6 +95,7 @@ _group_1_create(Evas_Object *bx) elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 4); elm_radio_group_add(rd, rdg); // add a radio button rd to a radio group rdg. elm_object_part_content_set(rd, "icon", ic); @@ -104,6 +109,7 @@ _group_1_create(Evas_Object *bx) elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE); rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 5); elm_radio_group_add(rd, rdg); // add a radio button rd to a radio group rdg. elm_object_part_content_set(rd, "icon", ic); @@ -116,7 +122,7 @@ _group_1_create(Evas_Object *bx) } static void -_group_2_create(Evas_Object *bx) +_group_2_create(Evas_Object *bx, const char *style) { Evas_Object *bx2, *fr, *rd, *rdg; @@ -134,6 +140,7 @@ _group_2_create(Evas_Object *bx) // radio 1 rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 1); evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); @@ -148,6 +155,7 @@ _group_2_create(Evas_Object *bx) // radio 2 rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 2); evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); @@ -158,6 +166,7 @@ _group_2_create(Evas_Object *bx) // radio 2 rd = elm_radio_add(bx2); + elm_object_style_set(rd, style); elm_radio_state_value_set(rd, 3); evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); @@ -171,19 +180,42 @@ void test_radio(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *win, *bx; + Evas_Object *win, *bx, *bx0; win = elm_win_util_standard_add("radios", "Radios"); elm_win_autodel_set(win, EINA_TRUE); + bx0 = elm_box_add(win); + elm_box_horizontal_set(bx0, EINA_TRUE); + elm_win_resize_object_add(win, bx0); + evas_object_show(bx0); + bx = elm_box_add(win); evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, bx); elm_box_horizontal_set(bx, EINA_TRUE); + elm_box_pack_end(bx0, bx); evas_object_show(bx); - _group_1_create(bx); - _group_2_create(bx); + _group_1_create(bx, "default"); + _group_2_create(bx, "default"); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx, EINA_TRUE); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + _group_1_create(bx, "plain"); + _group_2_create(bx, "plain"); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx, EINA_TRUE); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + _group_1_create(bx, "icon"); + _group_2_create(bx, "icon"); evas_object_show(win); } From d8b2cf28b167acddf2edef63c6f896a1928d8b1c Mon Sep 17 00:00:00 2001 From: rafspiny Date: Sat, 28 Dec 2019 22:06:17 +0000 Subject: [PATCH 09/12] Fix check for XIGetProperty Summary: The function XIGetProperty returns 0 on success. More info on the function here: https://www.x.org/releases/X11R7.5/doc/man/man3/XIGetProperty.3.html Reviewers: raster, stefan_schmidt, bu5hm4n Reviewed By: raster Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10978 --- src/lib/ecore_x/ecore_x_xi2.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore_x/ecore_x_xi2.c b/src/lib/ecore_x/ecore_x_xi2.c index 6bbbd855b6..c1b131e1c0 100644 --- a/src/lib/ecore_x/ecore_x_xi2.c +++ b/src/lib/ecore_x/ecore_x_xi2.c @@ -1035,9 +1035,10 @@ ecore_x_input_device_property_get(int slot, const char *prop, int *num_ret, if ((slot < 0) || (slot >= _ecore_x_xi2_num)) goto err; a = XInternAtom(_ecore_x_disp, prop, False); - if (!XIGetProperty(_ecore_x_disp, _ecore_x_xi2_devs[slot].deviceid, + // XIGetProperty returns 0 AKA `Success` if everything is good + if (XIGetProperty(_ecore_x_disp, _ecore_x_xi2_devs[slot].deviceid, a, 0, 65536, False, AnyPropertyType, &a_type, &fmt, - &num, &dummy, &data)) goto err; + &num, &dummy, &data) != 0) goto err; *format_ret = a_type; *num_ret = num; *unit_size_ret = fmt; From 895f64f33c2156ae3ff687bcb1621b5bef2bb194 Mon Sep 17 00:00:00 2001 From: Ali Alzyod Date: Mon, 30 Dec 2019 10:31:32 +0900 Subject: [PATCH 10/12] efl_ui_textbox: replace legacy calls with new ones Summary: This patch only changes some of legacy calls, with new ones Reviewers: woohyun, zmike, bu5hm4n Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8522 Differential Revision: https://phab.enlightenment.org/D10982 --- src/lib/elementary/efl_ui_textbox.c | 94 ++++++++++++++--------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/lib/elementary/efl_ui_textbox.c b/src/lib/elementary/efl_ui_textbox.c index e96842dba7..6d91f21519 100644 --- a/src/lib/elementary/efl_ui_textbox.c +++ b/src/lib/elementary/efl_ui_textbox.c @@ -353,9 +353,9 @@ _efl_ui_textbox_guide_update(Evas_Object *obj, EFL_UI_TEXT_DATA_GET(obj, sd); if ((has_text) && (!sd->has_text)) - edje_object_signal_emit(sd->entry_edje, "efl,guide,disabled", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,guide,disabled", "efl"); else if ((!has_text) && (sd->has_text)) - edje_object_signal_emit(sd->entry_edje, "efl,guide,enabled", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,guide,enabled", "efl"); sd->has_text = has_text; } @@ -390,7 +390,7 @@ _mirrored_set(Evas_Object *obj, { EFL_UI_TEXT_DATA_GET(obj, sd); - edje_object_mirrored_set(sd->entry_edje, rtl); + efl_ui_mirrored_set(sd->entry_edje, rtl); if (sd->anchor_hover.hover) efl_ui_mirrored_set(sd->anchor_hover.hover, rtl); @@ -405,12 +405,12 @@ _hide_selection_handler(Evas_Object *obj) if (sd->start_handler_shown) { - edje_object_signal_emit(sd->start_handler, "efl,handler,hide", "efl"); + efl_layout_signal_emit(sd->start_handler, "efl,handler,hide", "efl"); sd->start_handler_shown = EINA_FALSE; } if (sd->end_handler_shown) { - edje_object_signal_emit(sd->end_handler, "efl,handler,hide", "efl"); + efl_layout_signal_emit(sd->end_handler, "efl,handler,hide", "efl"); sd->end_handler_shown = EINA_FALSE; } } @@ -431,7 +431,7 @@ _viewport_region_get(Evas_Object *obj) rect = efl_gfx_entity_geometry_get(sd->text_obj); } - parent = elm_widget_parent_get(obj); + parent = efl_ui_widget_parent_get(obj); while (parent) { if (efl_isa(parent, ELM_INTERFACE_SCROLLABLE_MIXIN)) @@ -445,7 +445,7 @@ _viewport_region_get(Evas_Object *obj) break; } } - parent = elm_widget_parent_get(parent); + parent = efl_ui_widget_parent_get(parent); } return rect; @@ -500,13 +500,13 @@ _update_selection_handler(Eo *obj) } if (!sd->start_handler_shown && !hidden) { - edje_object_signal_emit(sd->start_handler, + efl_layout_signal_emit(sd->start_handler, "efl,handler,show", "efl"); sd->start_handler_shown = EINA_TRUE; } else if (sd->start_handler_shown && hidden) { - edje_object_signal_emit(sd->start_handler, + efl_layout_signal_emit(sd->start_handler, "efl,handler,hide", "efl"); sd->start_handler_shown = EINA_FALSE; } @@ -528,13 +528,13 @@ _update_selection_handler(Eo *obj) } if (!sd->end_handler_shown && !hidden) { - edje_object_signal_emit(sd->end_handler, + efl_layout_signal_emit(sd->end_handler, "efl,handler,show", "efl"); sd->end_handler_shown = EINA_TRUE; } else if (sd->end_handler_shown && hidden) { - edje_object_signal_emit(sd->end_handler, + efl_layout_signal_emit(sd->end_handler, "efl,handler,hide", "efl"); sd->end_handler_shown = EINA_FALSE; } @@ -543,13 +543,13 @@ _update_selection_handler(Eo *obj) { if (sd->start_handler_shown) { - edje_object_signal_emit(sd->start_handler, + efl_layout_signal_emit(sd->start_handler, "efl,handler,hide", "efl"); sd->start_handler_shown = EINA_FALSE; } if (sd->end_handler_shown) { - edje_object_signal_emit(sd->end_handler, + efl_layout_signal_emit(sd->end_handler, "efl,handler,hide", "efl"); sd->end_handler_shown = EINA_FALSE; } @@ -671,10 +671,10 @@ _efl_ui_textbox_efl_ui_widget_disabled_set(Eo *obj, Efl_Ui_Textbox_Data *sd, Ein _dnd_drop_cb, NULL); emission = efl_ui_widget_disabled_get(obj) ? "efl,state,disabled" : "efl,state,enabled"; - edje_object_signal_emit(sd->entry_edje, emission, "efl"); + efl_layout_signal_emit(sd->entry_edje, emission, "efl"); if (sd->scroll) { - edje_object_signal_emit(sd->scr_edje, emission, "efl"); + efl_layout_signal_emit(sd->scr_edje, emission, "efl"); elm_interface_scrollable_freeze_set(obj, efl_ui_widget_disabled_get(obj)); } @@ -709,7 +709,7 @@ _efl_ui_textbox_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Textbox_Data *sd) edje_object_mirrored_set (wd->resize_obj, efl_ui_mirrored_get(obj)); - edje_object_scale_set + efl_gfx_entity_scale_set (wd->resize_obj, efl_gfx_entity_scale_get(obj) * elm_config_scale_get()); @@ -725,15 +725,15 @@ _efl_ui_textbox_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Textbox_Data *sd) if (efl_ui_focus_object_focus_get(obj)) { - edje_object_signal_emit(sd->entry_edje, "efl,action,focus", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,action,focus", "efl"); if (sd->scroll) - edje_object_signal_emit(sd->scr_edje, "efl,action,focus", "efl"); + efl_layout_signal_emit(sd->scr_edje, "efl,action,focus", "efl"); } - edje_object_message_signal_process(sd->entry_edje); + efl_layout_signal_process(sd->entry_edje, EINA_FALSE); Evas_Object* clip = evas_object_clip_get(sd->entry_edje); - evas_object_clip_set(sd->hit_rect, clip); + efl_canvas_object_clipper_set(sd->hit_rect, clip); if (sd->start_handler) { @@ -880,7 +880,7 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data _edje_signal_emit(sd, "efl,action,focus", "efl"); if (sd->scroll) - edje_object_signal_emit(sd->scr_edje, "efl,action,focus", "efl"); + efl_layout_signal_emit(sd->scr_edje, "efl,action,focus", "efl"); if (top && top_is_win && efl_input_text_input_panel_autoshow_get(obj) && !efl_input_text_input_panel_show_on_demand_get(obj)) elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON); @@ -893,7 +893,7 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data _edje_signal_emit(sd, "efl,action,unfocus", "efl"); if (sd->scroll) - edje_object_signal_emit(sd->scr_edje, "efl,action,unfocus", "efl"); + efl_layout_signal_emit(sd->scr_edje, "efl,action,unfocus", "efl"); evas_object_focus_set(sw, EINA_FALSE); if (top && top_is_win && efl_input_text_input_panel_autoshow_get(obj)) @@ -906,13 +906,13 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data if ((efl_text_interactive_have_selection_get(obj)) && (!sd->hoversel)) { sd->sel_mode = EINA_FALSE; - elm_widget_scroll_hold_pop(obj); + efl_ui_widget_scroll_hold_pop(obj); edje_object_part_text_select_allow_set(sd->entry_edje, "efl.text", EINA_FALSE); - edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); edje_object_part_text_select_none(sd->entry_edje, "efl.text"); } } - edje_object_signal_emit(sd->scr_edje, "validation,default", "efl"); + efl_layout_signal_emit(sd->scr_edje, "validation,default", "efl"); } return EINA_TRUE; @@ -998,7 +998,7 @@ _hover_dismissed_cb(void *data, const Efl_Event *event EINA_UNUSED) (sd->entry_edje, "efl.text", EINA_TRUE); } } - elm_widget_scroll_freeze_pop(data); + efl_ui_widget_scroll_freeze_pop(data); ecore_job_del(sd->hov_deljob); sd->hov_deljob = ecore_job_add(_hover_del_job, data); } @@ -1021,10 +1021,10 @@ _hover_selected_cb(void *data, edje_object_part_text_select_allow_set (sd->entry_edje, "efl.text", EINA_TRUE); } - edje_object_signal_emit(sd->entry_edje, "efl,state,select,on", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,state,select,on", "efl"); if (!_elm_config->desktop_entry) - elm_widget_scroll_hold_push(data); + efl_ui_widget_scroll_hold_push(data); } static void @@ -1142,9 +1142,9 @@ _hover_cancel_cb(void *data, if (!_elm_config->desktop_entry) edje_object_part_text_select_allow_set (sd->entry_edje, "efl.text", EINA_FALSE); - edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); if (!_elm_config->desktop_entry) - elm_widget_scroll_hold_pop(data); + efl_ui_widget_scroll_hold_pop(data); edje_object_part_text_select_none(sd->entry_edje, "efl.text"); } @@ -1190,10 +1190,10 @@ _menu_call(Evas_Object *obj) return; } if (sd->hoversel) evas_object_del(sd->hoversel); - else elm_widget_scroll_freeze_push(obj); + else efl_ui_widget_scroll_freeze_push(obj); sd->hoversel = elm_hoversel_add(obj); - context_menu_orientation = edje_object_data_get + context_menu_orientation = efl_layout_group_data_get (sd->entry_edje, "context_menu_orientation"); if ((context_menu_orientation) && @@ -1201,7 +1201,7 @@ _menu_call(Evas_Object *obj) elm_hoversel_horizontal_set(sd->hoversel, EINA_TRUE); elm_object_style_set(sd->hoversel, "entry"); - elm_widget_sub_object_add(obj, sd->hoversel); + efl_ui_widget_sub_object_add(obj, sd->hoversel); elm_object_text_set(sd->hoversel, "Text"); top = elm_widget_top_get(obj); @@ -2294,10 +2294,10 @@ _efl_ui_textbox_selection_cut(Eo *obj, Efl_Ui_Textbox_Data *sd) if (!_elm_config->desktop_entry) edje_object_part_text_select_allow_set (sd->entry_edje, "efl.text", EINA_FALSE); - edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); + efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); if (!_elm_config->desktop_entry) - elm_widget_scroll_hold_pop(obj); + efl_ui_widget_scroll_hold_pop(obj); /*In password mode, cut will remove text only*/ if (!efl_text_password_get(obj)) @@ -2330,8 +2330,8 @@ _efl_ui_textbox_selection_copy(Eo *obj, Efl_Ui_Textbox_Data *sd) { edje_object_part_text_select_allow_set (sd->entry_edje, "efl.text", EINA_FALSE); - edje_object_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); - elm_widget_scroll_hold_pop(obj); + efl_layout_signal_emit(sd->entry_edje, "efl,state,select,off", "efl"); + efl_ui_widget_scroll_hold_pop(obj); } _selection_store(EFL_UI_SELECTION_TYPE_CLIPBOARD, obj); efl_event_callback_call(obj, EFL_UI_TEXTBOX_EVENT_SELECTION_COPY, NULL); @@ -2438,13 +2438,13 @@ _efl_ui_textbox_scrollable_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Ein if (scroll) { - edje_object_part_swallow(sd->entry_edje, "efl.text", NULL); + efl_content_set(efl_part(sd->entry_edje, "efl.text"), NULL); sd->scroller = efl_add(EFL_UI_INTERNAL_TEXT_SCROLLER_CLASS, obj, efl_ui_internal_text_scroller_initialize(efl_added, sd->text_obj, sd->text_table)); efl_ui_scrollbar_bar_mode_set(sd->scroller, EFL_UI_SCROLLBAR_MODE_AUTO, EFL_UI_SCROLLBAR_MODE_AUTO); - edje_object_part_swallow(sd->entry_edje, "efl.text", sd->scroller); - evas_object_clip_set(sd->cursor, + efl_content_set(efl_part(sd->entry_edje, "efl.text"), sd->scroller); + efl_canvas_object_clipper_set(sd->cursor, efl_ui_internal_text_scroller_viewport_clip_get(sd->scroller)); efl_event_callback_add(sd->scroller, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _scroller_size_changed_cb, obj); @@ -2455,7 +2455,7 @@ _efl_ui_textbox_scrollable_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Ein * instead of efl_content_set(sd->scroller, NULL) */ efl_content_unset(sd->scroller); - edje_object_part_swallow(sd->entry_edje, "efl.text", sd->text_table); + efl_content_set(efl_part(sd->entry_edje, "efl.text"), sd->text_table); efl_del(sd->scroller); sd->scroller = NULL; } @@ -2475,7 +2475,7 @@ _efl_ui_textbox_efl_ui_widget_on_access_activate(Eo *obj, Efl_Ui_Textbox_Data *_ EFL_UI_TEXT_DATA_GET(obj, sd); - if (!elm_widget_disabled_get(obj) && + if (!efl_ui_widget_disabled_get(obj) && !evas_object_freeze_events_get(obj)) { efl_event_callback_call(obj, EFL_INPUT_EVENT_CLICKED, NULL); @@ -3039,9 +3039,9 @@ _efl_ui_textbox_efl_access_object_i18n_name_get(const Eo *obj, Efl_Ui_Textbox_Da static void _edje_signal_emit(Efl_Ui_Textbox_Data *sd, const char *sig, const char *src) { - edje_object_signal_emit(sd->entry_edje, sig, src); - edje_object_signal_emit(sd->cursor, sig, src); - edje_object_signal_emit(sd->cursor_bidi, sig, src); + efl_layout_signal_emit(sd->entry_edje, sig, src); + efl_layout_signal_emit(sd->cursor, sig, src); + efl_layout_signal_emit(sd->cursor_bidi, sig, src); } static inline Eo * @@ -3062,7 +3062,7 @@ _decoration_create(Eo *obj, Efl_Ui_Textbox_Data *sd, { evas_object_stack_below(ret, NULL); } - evas_object_clip_set(ret, clip); + efl_canvas_object_clipper_set(ret, clip); evas_object_pass_events_set(ret, EINA_TRUE); return ret; } @@ -3423,7 +3423,7 @@ _anchors_update(Eo *obj, Efl_Ui_Textbox_Data *sd) evas_object_color_set(ob, 0, 0, 0, 0); evas_object_smart_member_add(ob, smart); evas_object_stack_above(ob, obj); - evas_object_clip_set(ob, clip); + efl_canvas_object_clipper_set(ob, clip); evas_object_repeat_events_set(ob, EINA_TRUE); rect->obj = ob; //FIXME: add event handlers From 7b105b33bb12321e970f01ae76e02b6efa22e61d Mon Sep 17 00:00:00 2001 From: ali Date: Mon, 30 Dec 2019 10:56:37 +0900 Subject: [PATCH 11/12] efl.text.style: strikethrough_type & Background_type enum rename Summary: rename **solid color** to **single** rename **disabled** to **none** Reviewers: woohyun, segfaultxavi Reviewed By: segfaultxavi Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7942, T7941 Differential Revision: https://phab.enlightenment.org/D10974 --- src/lib/edje/edje_part_text.c | 2 +- src/lib/efl/interfaces/efl_text_style.eo | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/edje/edje_part_text.c b/src/lib/edje/edje_part_text.c index 4c3e09161a..5b61a54aa3 100644 --- a/src/lib/edje/edje_part_text.c +++ b/src/lib/edje/edje_part_text.c @@ -63,7 +63,7 @@ _efl_canvas_layout_part_text_efl_text_style_text_background_type_get(const Eo *o PROXY_DATA_GET(obj, pd); if (pd->rp->part->type == EDJE_PART_TYPE_TEXT) - return EFL_TEXT_STYLE_BACKGROUND_TYPE_DISABLED; + return EFL_TEXT_STYLE_BACKGROUND_TYPE_NONE; return efl_text_background_type_get(pd->rp->object); } diff --git a/src/lib/efl/interfaces/efl_text_style.eo b/src/lib/efl/interfaces/efl_text_style.eo index 9fdd1e05f2..7ecd7afeb4 100644 --- a/src/lib/efl/interfaces/efl_text_style.eo +++ b/src/lib/efl/interfaces/efl_text_style.eo @@ -1,7 +1,7 @@ enum @beta Efl.Text_Style_Background_Type { [[Whether to add a background colored rectangle (background) to each line of text or not.]] - disabled = 0, [[Do not use background.]] + none = 0, [[Do not use background.]] solid_color, [[Use solid color background.]] } @@ -9,8 +9,8 @@ enum @beta Efl.Text_Style_Background_Type enum @beta Efl.Text_Style_Strikethrough_Type { [[Whether to add a strike-through decoration to the displayed text or not.]] - disabled = 0, [[Do not use strike-through.]] - solid_color, [[Use solid color strike-through.]] + none = 0, [[Do not use strike-through.]] + single, [[Strikethrough with a single line.]] } From 64d160da0a2479abd250d404bda775bc4fb680ba Mon Sep 17 00:00:00 2001 From: ali Date: Mon, 30 Dec 2019 13:27:13 +0900 Subject: [PATCH 12/12] efl.text.style: underline enum rename + underline method fix Summary: underline methods was not working + fix enums names Reviewers: woohyun, segfaultxavi, bu5hm4n, zmike Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7945 Differential Revision: https://phab.enlightenment.org/D10975 --- src/lib/efl/interfaces/efl_text_style.eo | 3 +-- src/lib/evas/canvas/evas_object_textblock.c | 20 +++++++++++++------- src/tests/evas/evas_test_textblock.c | 18 ++++++++++++++++++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/lib/efl/interfaces/efl_text_style.eo b/src/lib/efl/interfaces/efl_text_style.eo index 7ecd7afeb4..8807e047ac 100644 --- a/src/lib/efl/interfaces/efl_text_style.eo +++ b/src/lib/efl/interfaces/efl_text_style.eo @@ -50,8 +50,7 @@ enum @beta Efl.Text_Style_Shadow_Direction enum @beta Efl.Text_Style_Underline_Type { [[Type of underline of the displayed text.]] - off = 0, [[Text without underline.]] - on, [[Underline enabled.]] + none = 0, [[Text without underline.]] single, [[Underlined with a single line.]] double, [[Underlined with a double line.]] dashed, [[Underlined with a dashed line.]] diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 48857a5a32..2347961759 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -16412,19 +16412,25 @@ static struct }; static void -_efl_canvas_textblock_efl_text_style_text_underline_type_set(Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED, Efl_Text_Style_Underline_Type type EINA_UNUSED) +_efl_canvas_textblock_efl_text_style_text_underline_type_set(Eo *obj, Efl_Canvas_Textblock_Data *o, Efl_Text_Style_Underline_Type type) { - ASYNC_BLOCK; - _FMT_SET(underline, _style_underline_map[type].underline_single); - _FMT_SET(underline2, _style_underline_map[type].underline_double); - _FMT_SET(underline_dash, _style_underline_map[type].underline_dashed); + if (efl_text_underline_type_get(obj) == type) + return; + ASYNC_BLOCK; + _FMT(underline) = _style_underline_map[type].underline_single; + _FMT(underline2) = _style_underline_map[type].underline_double; + _FMT(underline_dash) = _style_underline_map[type].underline_dashed; + _canvas_text_format_changed(obj, o); } static Efl_Text_Style_Underline_Type -_efl_canvas_textblock_efl_text_style_text_underline_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o EINA_UNUSED) +_efl_canvas_textblock_efl_text_style_text_underline_type_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Textblock_Data *o) { - return _FMT(underline); + if(_FMT(underline_dash)) return EFL_TEXT_STYLE_UNDERLINE_TYPE_DASHED; + else if (_FMT(underline2)) return EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE; + else if (_FMT(underline)) return EFL_TEXT_STYLE_UNDERLINE_TYPE_SINGLE; + else return EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE; } static void diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 6ade455ddc..ef830e8507 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -4936,6 +4936,23 @@ EFL_START_TEST(efl_canvas_textblock_style) } EFL_END_TEST +EFL_START_TEST(efl_text_style) +{ + START_EFL_CANVAS_TEXTBLOCK_TEST(); + + efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE); + ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_NONE); + efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_SINGLE); + ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_SINGLE); + efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE); + ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_DOUBLE); + efl_text_underline_type_set(txt, EFL_TEXT_STYLE_UNDERLINE_TYPE_DASHED); + ck_assert_int_eq(efl_text_underline_type_get(txt), EFL_TEXT_STYLE_UNDERLINE_TYPE_DASHED); + + END_EFL_CANVAS_TEXTBLOCK_TEST(); +} +EFL_END_TEST + void evas_test_textblock(TCase *tc) { tcase_add_test(tc, evas_textblock_simple); @@ -4972,5 +4989,6 @@ void evas_test_textblock(TCase *tc) tcase_add_test(tc, efl_canvas_textblock_markup_invalid_escape); tcase_add_test(tc, efl_text_font); tcase_add_test(tc, efl_canvas_textblock_style); + tcase_add_test(tc, efl_text_style); }