|
|
|
@ -987,58 +987,58 @@ retry: |
|
|
|
|
#ifdef STB_TEXTEDIT_K_LINESTART2 |
|
|
|
|
case STB_TEXTEDIT_K_LINESTART2: |
|
|
|
|
#endif |
|
|
|
|
case STB_TEXTEDIT_K_LINESTART: { |
|
|
|
|
StbFindState find; |
|
|
|
|
case STB_TEXTEDIT_K_LINESTART: |
|
|
|
|
stb_textedit_clamp(str, state); |
|
|
|
|
stb_textedit_move_to_first(state); |
|
|
|
|
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); |
|
|
|
|
state->cursor = find.first_char; |
|
|
|
|
if (state->single_line) |
|
|
|
|
state->cursor = 0; |
|
|
|
|
else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) |
|
|
|
|
--state->cursor; |
|
|
|
|
state->has_preferred_x = 0; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef STB_TEXTEDIT_K_LINEEND2 |
|
|
|
|
case STB_TEXTEDIT_K_LINEEND2: |
|
|
|
|
#endif |
|
|
|
|
case STB_TEXTEDIT_K_LINEEND: { |
|
|
|
|
StbFindState find; |
|
|
|
|
int n = STB_TEXTEDIT_STRINGLEN(str); |
|
|
|
|
stb_textedit_clamp(str, state); |
|
|
|
|
stb_textedit_move_to_first(state); |
|
|
|
|
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); |
|
|
|
|
|
|
|
|
|
if (state->single_line) |
|
|
|
|
state->cursor = n; |
|
|
|
|
else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) |
|
|
|
|
++state->cursor; |
|
|
|
|
state->has_preferred_x = 0; |
|
|
|
|
state->cursor = find.first_char + find.length; |
|
|
|
|
if (find.length > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) == STB_TEXTEDIT_NEWLINE) |
|
|
|
|
--state->cursor; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef STB_TEXTEDIT_K_LINESTART2 |
|
|
|
|
case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT: |
|
|
|
|
#endif |
|
|
|
|
case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT: { |
|
|
|
|
StbFindState find; |
|
|
|
|
case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT: |
|
|
|
|
stb_textedit_clamp(str, state); |
|
|
|
|
stb_textedit_prep_selection_at_cursor(state); |
|
|
|
|
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); |
|
|
|
|
state->cursor = state->select_end = find.first_char; |
|
|
|
|
if (state->single_line) |
|
|
|
|
state->cursor = 0; |
|
|
|
|
else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) |
|
|
|
|
--state->cursor; |
|
|
|
|
state->select_end = state->cursor; |
|
|
|
|
state->has_preferred_x = 0; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef STB_TEXTEDIT_K_LINEEND2 |
|
|
|
|
case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT: |
|
|
|
|
#endif |
|
|
|
|
case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: { |
|
|
|
|
StbFindState find; |
|
|
|
|
int n = STB_TEXTEDIT_STRINGLEN(str); |
|
|
|
|
stb_textedit_clamp(str, state); |
|
|
|
|
stb_textedit_prep_selection_at_cursor(state); |
|
|
|
|
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); |
|
|
|
|
state->has_preferred_x = 0; |
|
|
|
|
state->cursor = find.first_char + find.length; |
|
|
|
|
if (find.length > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) == STB_TEXTEDIT_NEWLINE) |
|
|
|
|
--state->cursor; |
|
|
|
|
if (state->single_line) |
|
|
|
|
state->cursor = n; |
|
|
|
|
else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) |
|
|
|
|
++state->cursor; |
|
|
|
|
state->select_end = state->cursor; |
|
|
|
|
state->has_preferred_x = 0; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|