272 #ifndef INCLUDE_STB_TEXTEDIT_H 273 #define INCLUDE_STB_TEXTEDIT_H 284 #ifndef STB_TEXTEDIT_UNDOSTATECOUNT 285 #define STB_TEXTEDIT_UNDOSTATECOUNT 99 287 #ifndef STB_TEXTEDIT_UNDOCHARCOUNT 288 #define STB_TEXTEDIT_UNDOCHARCOUNT 999 290 #ifndef STB_TEXTEDIT_CHARTYPE 291 #define STB_TEXTEDIT_CHARTYPE int 293 #ifndef STB_TEXTEDIT_POSITIONTYPE 294 #define STB_TEXTEDIT_POSITIONTYPE int 365 #endif //INCLUDE_STB_TEXTEDIT_H 378 #ifdef STB_TEXTEDIT_IMPLEMENTATION 380 #ifndef STB_TEXTEDIT_memmove 382 #define STB_TEXTEDIT_memmove memmove 395 int n = STB_TEXTEDIT_STRINGLEN(str);
396 float base_y = 0, prev_x;
405 STB_TEXTEDIT_LAYOUTROW(&r, str, i);
409 if (i==0 && y < base_y + r.
ymin)
412 if (y < base_y + r.
ymax)
432 float w = STB_TEXTEDIT_GETWIDTH(str, i, k);
445 if (STB_TEXTEDIT_GETCHAR(str, i+r.
num_chars-1) == STB_TEXTEDIT_NEWLINE)
454 state->
cursor = stb_text_locate_coord(str,
x, y);
463 int p = stb_text_locate_coord(str,
x, y);
491 static void stb_textedit_find_charpos(StbFindState *find,
STB_TEXTEDIT_STRING *str,
int n,
int single_line)
495 int z = STB_TEXTEDIT_STRINGLEN(str);
502 STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
504 find->first_char = 0;
513 STB_TEXTEDIT_LAYOUTROW(&r, str, i);
517 find->first_char = i;
519 find->prev_first = prev_start;
528 STB_TEXTEDIT_LAYOUTROW(&r, str, i);
536 find->first_char = first = i;
539 find->prev_first = prev_start;
544 for (i=0; first+i < n; ++i)
545 find->x += STB_TEXTEDIT_GETWIDTH(str, first, i);
548 #define STB_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end) 553 int n = STB_TEXTEDIT_STRINGLEN(str);
567 stb_text_makeundo_delete(str, state, where, len);
568 STB_TEXTEDIT_DELETECHARS(str, where, len);
575 stb_textedit_clamp(str, state);
602 stb_textedit_sortselection(state);
613 stb_textedit_sortselection(state);
614 stb_textedit_clamp(str, state);
621 #ifdef STB_TEXTEDIT_IS_SPACE 624 return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1;
627 #ifndef STB_TEXTEDIT_MOVEWORDLEFT 631 while( c >= 0 && !is_word_boundary( str, c ) )
639 #define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous 642 #ifndef STB_TEXTEDIT_MOVEWORDRIGHT 645 const int len = STB_TEXTEDIT_STRINGLEN(str);
647 while( c < len && !is_word_boundary( str, c ) )
655 #define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next 673 stb_textedit_delete_selection(str,state);
684 stb_textedit_clamp(str, state);
685 stb_textedit_delete_selection(str,state);
687 if (STB_TEXTEDIT_INSERTCHARS(str, state->
cursor, text, len)) {
688 stb_text_makeundo_insert(state, state->
cursor, len);
705 int c = STB_TEXTEDIT_KEYTOTEXT(key);
714 stb_text_makeundo_replace(str, state, state->
cursor, 1, 1);
715 STB_TEXTEDIT_DELETECHARS(str, state->
cursor, 1);
716 if (STB_TEXTEDIT_INSERTCHARS(str, state->
cursor, &ch, 1)) {
721 stb_textedit_delete_selection(str,state);
722 if (STB_TEXTEDIT_INSERTCHARS(str, state->
cursor, &ch, 1)) {
723 stb_text_makeundo_insert(state, state->
cursor, 1);
732 #ifdef STB_TEXTEDIT_K_INSERT 733 case STB_TEXTEDIT_K_INSERT:
739 stb_text_undo(str, state);
744 stb_text_redo(str, state);
751 stb_textedit_move_to_first(state);
761 stb_textedit_move_to_last(str, state);
764 stb_textedit_clamp(str, state);
769 stb_textedit_clamp(str, state);
770 stb_textedit_prep_selection_at_cursor(state);
778 #ifdef STB_TEXTEDIT_MOVEWORDLEFT 781 stb_textedit_move_to_first(state);
784 stb_textedit_clamp( str, state );
790 stb_textedit_prep_selection_at_cursor(state);
795 stb_textedit_clamp( str, state );
799 #ifdef STB_TEXTEDIT_MOVEWORDRIGHT 802 stb_textedit_move_to_last(str, state);
805 stb_textedit_clamp( str, state );
811 stb_textedit_prep_selection_at_cursor(state);
816 stb_textedit_clamp( str, state );
821 stb_textedit_prep_selection_at_cursor(state);
824 stb_textedit_clamp(str, state);
842 stb_textedit_prep_selection_at_cursor(state);
844 stb_textedit_move_to_last(str,state);
847 stb_textedit_clamp(str, state);
854 int start = find.first_char + find.length;
856 STB_TEXTEDIT_LAYOUTROW(&row, str, state->
cursor);
859 float dx = STB_TEXTEDIT_GETWIDTH(str, start, i);
860 #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE 869 stb_textedit_clamp(str, state);
893 stb_textedit_prep_selection_at_cursor(state);
895 stb_textedit_move_to_first(state);
898 stb_textedit_clamp(str, state);
902 if (find.prev_first != find.first_char) {
906 state->
cursor = find.prev_first;
907 STB_TEXTEDIT_LAYOUTROW(&row, str, state->
cursor);
910 float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i);
911 #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE 920 stb_textedit_clamp(str, state);
934 stb_textedit_delete_selection(str, state);
936 int n = STB_TEXTEDIT_STRINGLEN(str);
938 stb_textedit_delete(str, state, state->
cursor, 1);
946 stb_textedit_delete_selection(str, state);
948 stb_textedit_clamp(str, state);
950 stb_textedit_delete(str, state, state->
cursor-1, 1);
957 #ifdef STB_TEXTEDIT_K_TEXTSTART2 958 case STB_TEXTEDIT_K_TEXTSTART2:
965 #ifdef STB_TEXTEDIT_K_TEXTEND2 966 case STB_TEXTEDIT_K_TEXTEND2:
969 state->
cursor = STB_TEXTEDIT_STRINGLEN(str);
974 #ifdef STB_TEXTEDIT_K_TEXTSTART2 978 stb_textedit_prep_selection_at_cursor(state);
983 #ifdef STB_TEXTEDIT_K_TEXTEND2 987 stb_textedit_prep_selection_at_cursor(state);
993 #ifdef STB_TEXTEDIT_K_LINESTART2 994 case STB_TEXTEDIT_K_LINESTART2:
997 stb_textedit_clamp(str, state);
998 stb_textedit_move_to_first(state);
1001 else while (state->
cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->
cursor-1) != STB_TEXTEDIT_NEWLINE)
1006 #ifdef STB_TEXTEDIT_K_LINEEND2 1007 case STB_TEXTEDIT_K_LINEEND2:
1010 int n = STB_TEXTEDIT_STRINGLEN(str);
1011 stb_textedit_clamp(str, state);
1012 stb_textedit_move_to_first(state);
1015 else while (state->
cursor < n && STB_TEXTEDIT_GETCHAR(str, state->
cursor) != STB_TEXTEDIT_NEWLINE)
1021 #ifdef STB_TEXTEDIT_K_LINESTART2 1025 stb_textedit_clamp(str, state);
1026 stb_textedit_prep_selection_at_cursor(state);
1029 else while (state->
cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->
cursor-1) != STB_TEXTEDIT_NEWLINE)
1035 #ifdef STB_TEXTEDIT_K_LINEEND2 1039 int n = STB_TEXTEDIT_STRINGLEN(str);
1040 stb_textedit_clamp(str, state);
1041 stb_textedit_prep_selection_at_cursor(state);
1044 else while (state->
cursor < n && STB_TEXTEDIT_GETCHAR(str, state->
cursor) != STB_TEXTEDIT_NEWLINE)
1063 static void stb_textedit_flush_redo(
StbUndoState *state)
1070 static void stb_textedit_discard_undo(
StbUndoState *state)
1092 static void stb_textedit_discard_redo(
StbUndoState *state)
1115 stb_textedit_flush_redo(state);
1120 stb_textedit_discard_undo(state);
1131 stb_textedit_discard_undo(state);
1138 StbUndoRecord *r = stb_text_create_undo_record(state, insert_len);
1146 if (insert_len == 0) {
1192 stb_textedit_discard_redo(s);
1277 stb_text_createundo(&state->
undostate, where, 0, length);
1285 for (i=0; i <
length; ++i)
1286 p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
1295 for (i=0; i < old_length; ++i)
1296 p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
1301 static void stb_textedit_clear_state(
STB_TexteditState *state,
int is_single_line)
1313 state->
single_line = (
unsigned char) is_single_line;
1318 static void stb_textedit_initialize_state(
STB_TexteditState *state,
int is_single_line)
1320 stb_textedit_clear_state(state, is_single_line);
1322 #endif//STB_TEXTEDIT_IMPLEMENTATION short char_storage
Definition: stb_textedit.h:303
#define STB_TEXTEDIT_K_LINESTART
Definition: imgui.cpp:10054
int where
Definition: stb_textedit.h:300
int select_end
Definition: stb_textedit.h:326
Definition: stb_textedit.h:315
GLuint length
Definition: wglext.h:372
int int int int height
Definition: wglext.h:61
unsigned char initialized
Definition: stb_textedit.h:341
float baseline_y_delta
Definition: stb_textedit.h:361
short undo_char_point
Definition: stb_textedit.h:312
#define STB_TEXTEDIT_K_UNDO
Definition: imgui.cpp:10060
#define STB_TEXTEDIT_K_TEXTEND
Definition: imgui.cpp:10057
#define STB_TEXTEDIT_K_SHIFT
Definition: imgui.cpp:10064
StbUndoState undostate
Definition: stb_textedit.h:346
int int y
Definition: wglext.h:61
#define STB_TEXTEDIT_K_REDO
Definition: imgui.cpp:10061
Definition: stb_textedit.h:306
#define STB_TEXTEDIT_K_DOWN
Definition: imgui.cpp:10053
#define STB_TEXTEDIT_K_LINEEND
Definition: imgui.cpp:10055
#define STB_TEXTEDIT_GETWIDTH_NEWLINE
Definition: imgui_internal.h:78
unsigned char has_preferred_x
Definition: stb_textedit.h:342
#define STB_TEXTEDIT_MOVEWORDLEFT
Definition: imgui.cpp:10008
float x0
Definition: stb_textedit.h:360
float ymax
Definition: stb_textedit.h:362
#define STB_TEXTEDIT_UNDOSTATECOUNT
Definition: stb_textedit.h:285
#define STB_TEXTEDIT_CHARTYPE
Definition: stb_textedit.h:291
unsigned char padding3
Definition: stb_textedit.h:344
unsigned char single_line
Definition: stb_textedit.h:343
#define STB_TEXTEDIT_MOVEWORDRIGHT
Definition: imgui.cpp:10009
StbUndoRecord undo_rec[99]
Definition: stb_textedit.h:309
#define STB_TEXTEDIT_UNDOCHARCOUNT
Definition: stb_textedit.h:288
#define STB_TEXT_HAS_SELECTION(s)
Definition: imgui.cpp:549
#define STB_TEXTEDIT_K_DELETE
Definition: imgui.cpp:10058
unsigned char insert_mode
Definition: stb_textedit.h:332
int num_chars
Definition: stb_textedit.h:363
#define STB_TEXTEDIT_K_BACKSPACE
Definition: imgui.cpp:10059
short delete_length
Definition: stb_textedit.h:302
#define STB_TEXTEDIT_K_WORDLEFT
Definition: imgui.cpp:10062
int x
Definition: wglext.h:61
unsigned char cursor_at_end_of_line
Definition: stb_textedit.h:340
float ymin
Definition: stb_textedit.h:362
short redo_point
Definition: stb_textedit.h:311
short insert_length
Definition: stb_textedit.h:301
#define STB_TEXTEDIT_POSITIONTYPE
Definition: stb_textedit.h:294
#define STB_TEXTEDIT_memmove
Definition: imgui.cpp:383
#define STB_TEXTEDIT_K_WORDRIGHT
Definition: imgui.cpp:10063
#define STB_TEXTEDIT_K_RIGHT
Definition: imgui.cpp:10051
#define STB_TEXTEDIT_STRING
Definition: imgui_internal.h:76
#define STB_TEXTEDIT_K_UP
Definition: imgui.cpp:10052
short redo_char_point
Definition: stb_textedit.h:312
#define STB_TEXTEDIT_K_TEXTSTART
Definition: imgui.cpp:10056
int cursor
Definition: stb_textedit.h:322
int select_start
Definition: stb_textedit.h:325
float preferred_x
Definition: stb_textedit.h:345
int undo_char[999]
Definition: stb_textedit.h:310
short undo_point
Definition: stb_textedit.h:311
Definition: stb_textedit.h:297
float x1
Definition: stb_textedit.h:360
Definition: stb_textedit.h:358
#define STB_TEXTEDIT_K_LEFT
Definition: imgui.cpp:10050