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, &region_y, NULL, &region_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, &region_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

-- 


Reply via email to