hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=4f4da34c9b3ab7ca6261341be73ac9b7972bb757
commit 4f4da34c9b3ab7ca6261341be73ac9b7972bb757 Author: Taehyub Kim <[email protected]> Date: Mon Jun 20 13:10:36 2016 +0900 edc_editor: rearrange selected part to be placed in center Summary: When we search the word or click part in live edit view and edc navigator, The corresponding name in text view is selected, but it is not center align. So I make it center align when the word is selected. @T3326 Test Plan: 1. launch enventor 2. open search window 3. input any word in script 4. click ok forward button 5. check selection part if it is placed in center 6. click a part in live edit view 7. check selection part if it is placed in center 8. click a part name in edc navigator 9. check selection part if it is placed in center Reviewers: Hermet, Jaehyun_Cho, NikaWhite, bowonryu Differential Revision: https://phab.enlightenment.org/D4059 --- src/lib/edc_editor.c | 40 +++++++++++++++++++++++++++++++++++++++- src/lib/enventor_private.h | 2 ++ src/lib/enventor_smart.c | 3 +-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/lib/edc_editor.c b/src/lib/edc_editor.c index 37de60f..0d016ad 100644 --- a/src/lib/edc_editor.c +++ b/src/lib/edc_editor.c @@ -1154,7 +1154,7 @@ finish: { int cur_pos = part_pos - utf8 + 1; elm_entry_select_none(ed->en_edit); - elm_entry_select_region_set(ed->en_edit, cur_pos, cur_pos + strlen(part_name)); + edit_selection_region_center_set(ed, cur_pos, cur_pos + strlen(part_name)); } free(utf8); @@ -1744,4 +1744,42 @@ edit_key_up_event_dispatch(edit_data *ed, const char *key) return EINA_FALSE; } +void +edit_selection_region_center_set(edit_data *ed, int start, int end) +{ + Evas_Coord region_y, region_h; + Evas_Coord cursor_y, cursor_h; + + //Calculate line of selection region + elm_entry_cursor_pos_set(ed->en_edit, start); + elm_entry_cursor_geometry_get(ed->en_edit, NULL, &cursor_y, NULL, &cursor_h); + int cur_line = (cursor_y / cursor_h) + 1; + + //Calculate current region of scroller + elm_scroller_region_get(ed->scroller, NULL, ®ion_y, NULL, ®ion_h); + + + int line; + //Case 1: selection region is above the centor of scroller region + if (((region_y + (region_h / 2))) > cursor_y) + { + line = cur_line - (int)((region_h / cursor_h) / 2); + if (line < 1) line = 1; + } + //Case 2: selection region is below the center of scroller region + else + { + line = cur_line + 2 + (int)((region_h / cursor_h) / 2); + if (line > ed->line_max) line = ed->line_max; + } + //Move the scroller for selection align + Evas_Object *tb = elm_entry_textblock_get(ed->en_edit); + Evas_Textblock_Cursor *cur = evas_object_textblock_cursor_get(tb); + evas_textblock_cursor_line_set(cur, (line - 1)); + elm_entry_cursor_geometry_get(ed->en_edit, NULL, ®ion_y, NULL, NULL); + elm_scroller_region_show(ed->scroller, 0, region_y, 0, 0); + + //Select region + elm_entry_select_region_set(ed->en_edit, start, end); +} diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h index 0a551b6..bf76ac5 100644 --- a/src/lib/enventor_private.h +++ b/src/lib/enventor_private.h @@ -270,4 +270,6 @@ void edit_error_set(edit_data *ed, int line, const char *target); void edit_text_insert(edit_data *ed, const char *text); void edit_part_cursor_set(edit_data *ed, const char *group_name, const char *part_name); redoundo_data *edit_redoundo_get(edit_data *ed); +void edit_selection_region_center_set(edit_data *ed, int start, int end); + #endif diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c index e947467..1e838a5 100644 --- a/src/lib/enventor_smart.c +++ b/src/lib/enventor_smart.c @@ -695,8 +695,7 @@ _enventor_object_select_region_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, int start, int end) { edit_selection_clear(pd->main_it.ed); - elm_entry_cursor_pos_set(edit_entry_get(pd->main_it.ed), start); - elm_entry_select_region_set(edit_entry_get(pd->main_it.ed), start, end); + edit_selection_region_center_set(pd->main_it.ed, start, end); } EOLIAN static void --
