diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-09-02 04:47:27 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-09-02 04:47:27 +0400 |
commit | 26cbf331a858db0ac49e2de8b60ae7710a8c7c66 (patch) | |
tree | 474cf2531643215c547dd740c40f1839b8517dd1 /source/blender/blenkernel | |
parent | 75a2b5ee3574a5c7654270cf5d55cee96251933d (diff) |
text editor cursor motion (left/right arrows) with selected text typically jumps to either side of the selection previously the cursor would move and loose the selection too.
text button fields already did this.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_text.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/text.c | 27 |
2 files changed, 19 insertions, 10 deletions
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h index 24fd763d078..bba209334d4 100644 --- a/source/blender/blenkernel/BKE_text.h +++ b/source/blender/blenkernel/BKE_text.h @@ -58,7 +58,7 @@ void BKE_text_write (struct Text *text, const char *str); char *txt_to_buf (struct Text *text); void txt_clean_text (struct Text *text); -void txt_order_cursors (struct Text *text); +void txt_order_cursors (struct Text *text, const bool reverse); int txt_find_string (struct Text *text, const char *findstr, int wrap, int match_case); int txt_has_sel (struct Text *text); int txt_get_span (struct TextLine *from, struct TextLine *to); diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index f0c01e25598..750f328e7e7 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -1151,17 +1151,26 @@ void txt_pop_sel(Text *text) text->selc = text->curc; } -void txt_order_cursors(Text *text) +void txt_order_cursors(Text *text, const bool reverse) { if (!text) return; if (!text->curl) return; if (!text->sell) return; - /* Flip so text->curl is before text->sell */ - if ((txt_get_span(text->curl, text->sell) < 0) || - (text->curl == text->sell && text->curc > text->selc)) - { - txt_curs_swap(text); + /* Flip so text->curl is before/after text->sell */ + if (reverse == false) { + if ((txt_get_span(text->curl, text->sell) < 0) || + (text->curl == text->sell && text->curc > text->selc)) + { + txt_curs_swap(text); + } + } + else { + if ((txt_get_span(text->curl, text->sell) > 0) || + (text->curl == text->sell && text->curc < text->selc)) + { + txt_curs_swap(text); + } } } @@ -1181,7 +1190,7 @@ static void txt_delete_sel(Text *text) if (!txt_has_sel(text)) return; - txt_order_cursors(text); + txt_order_cursors(text, false); if (!undoing) { buf = txt_sel_to_buf(text); @@ -1305,7 +1314,7 @@ int txt_find_string(Text *text, const char *findstr, int wrap, int match_case) if (!text || !text->curl || !text->sell) return 0; - txt_order_cursors(text); + txt_order_cursors(text, false); tl = startl = text->sell; @@ -2833,7 +2842,7 @@ void txt_move_lines(struct Text *text, const int direction) if (!text || !text->curl || !text->sell) return; - txt_order_cursors(text); + txt_order_cursors(text, false); line_other = (direction == TXT_MOVE_LINE_DOWN) ? text->sell->next : text->curl->prev; |