diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c index ae02bad..20aa91e 100644 --- a/src/bin/editor/edi_editor.c +++ b/src/bin/editor/edi_editor.c @@ -15,6 +15,9 @@ #define EDITOR_FONT "DEFAULT='font=Monospace font_size=12'" +static void +_update_lines(Edi_Editor *editor); + static void _undo_do(Edi_Editor *editor, Elm_Entry_Change_Info *inf) @@ -94,6 +97,7 @@ _changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) } editor->undo_stack = eina_list_prepend(editor->undo_stack, change); + _update_lines(editor); } static void @@ -132,24 +136,36 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED, } } -static void _set_offset(Evas_Object *lines, int offset, int height) +static int +_get_lines_in_textblock(Evas_Object *textblock) { - elm_scroller_region_show(lines, 0, offset, 10, height); + int lines; + Evas_Textblock_Cursor *cursor; + + cursor = evas_object_textblock_cursor_new(textblock); + evas_textblock_cursor_paragraph_last(cursor); + lines = evas_textblock_cursor_geometry_get(cursor, NULL, NULL, NULL, NULL, NULL, EVAS_TEXTBLOCK_CURSOR_BEFORE); + + evas_textblock_cursor_free(cursor); + return lines + 1; } -static void _set_line(Evas_Object *lines, int line, int count) +static void +_update_lines(Edi_Editor *editor) { Eina_Strbuf *content; - int i; + int lines, i; + + lines = _get_lines_in_textblock(elm_entry_textblock_get(editor->entry)); content = eina_strbuf_new(); eina_strbuf_append(content, ""); - for (i = line; i < line + count; i++) + for (i = 1; i <= lines; i++) { eina_strbuf_append_printf(content, "%d
", i); } - eina_strbuf_append(content, ""); - elm_object_text_set(lines, eina_strbuf_string_get(content)); + eina_strbuf_append(content, "

"); + elm_object_text_set(editor->lines, eina_strbuf_string_get(content)); eina_strbuf_free(content); } @@ -158,17 +174,10 @@ _scroll_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSE { Edi_Editor *editor = data; Evas_Coord y, h; - int line, lines, offset, line_height; - line_height = (int) (15.0 * elm_config_scale_get()); - elm_scroller_region_get(editor->entry, NULL, &y, NULL, &h); - offset = y % line_height; - line = (y - offset) / line_height + 1; - lines = h / line_height + 2; + elm_scroller_region_get(editor->entry, NULL, &y, NULL, NULL); elm_scroller_region_get(editor->lines, NULL, NULL, NULL, &h); - - _set_offset(editor->lines, offset, h); - _set_line(editor->lines, line, lines); + elm_scroller_region_show(editor->lines, 0, y, 10, h); } EAPI Evas_Object *edi_editor_add(Evas_Object *parent, const char *path) @@ -189,7 +198,6 @@ EAPI Evas_Object *edi_editor_add(Evas_Object *parent, const char *path) elm_entry_text_style_user_push(lines, EDITOR_FONT); evas_object_color_set(lines, 127, 127, 127, 255); - _set_line(lines, 1, 200); evas_object_size_hint_weight_set(lines, 0.052, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(lines, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -229,5 +237,6 @@ EAPI Evas_Object *edi_editor_add(Evas_Object *parent, const char *path) (void)!evas_object_key_grab(txt, "z", ctrl, shift | alt, 1); evas_object_data_set(box, "editor", editor); + _update_lines(editor); return box; }