274 #ifndef INCLUDE_STB_TEXTEDIT_H 275 #define INCLUDE_STB_TEXTEDIT_H 286 #ifndef STB_TEXTEDIT_UNDOSTATECOUNT 287 #define STB_TEXTEDIT_UNDOSTATECOUNT 99 289 #ifndef STB_TEXTEDIT_UNDOCHARCOUNT 290 #define STB_TEXTEDIT_UNDOCHARCOUNT 999 292 #ifndef STB_TEXTEDIT_CHARTYPE 293 #define STB_TEXTEDIT_CHARTYPE int 295 #ifndef STB_TEXTEDIT_POSITIONTYPE 296 #define STB_TEXTEDIT_POSITIONTYPE int 367 #endif //INCLUDE_STB_TEXTEDIT_H 380 #ifdef STB_TEXTEDIT_IMPLEMENTATION 382 #ifndef STB_TEXTEDIT_memmove 384 #define STB_TEXTEDIT_memmove memmove 398 float base_y = 0, prev_x;
411 if (i==0 && y < base_y + r.
ymin)
414 if (y < base_y + r.
ymax)
527 find->first_char = 0;
540 find->first_char = i;
542 find->prev_first = prev_start;
559 find->first_char = first = i;
562 find->prev_first = prev_start;
567 for (i=0; first+i < n; ++i)
571 #define STB_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end) 644 #ifdef STB_TEXTEDIT_IS_SPACE 650 #ifndef STB_TEXTEDIT_MOVEWORDLEFT 654 while( c >= 0 && !is_word_boundary( str, c ) )
662 #define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous 665 #ifndef STB_TEXTEDIT_MOVEWORDRIGHT 670 while( c < len && !is_word_boundary( str, c ) )
678 #define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next 722 #ifndef STB_TEXTEDIT_KEYTYPE 723 #define STB_TEXTEDIT_KEYTYPE int 759 #ifdef STB_TEXTEDIT_K_INSERT 760 case STB_TEXTEDIT_K_INSERT:
805 #ifdef STB_TEXTEDIT_MOVEWORDLEFT 826 #ifdef STB_TEXTEDIT_MOVEWORDRIGHT 881 int start = find.first_char + find.length;
887 #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE 929 if (find.prev_first != find.first_char) {
933 state->
cursor = find.prev_first;
938 #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE 984 #ifdef STB_TEXTEDIT_K_TEXTSTART2 985 case STB_TEXTEDIT_K_TEXTSTART2:
992 #ifdef STB_TEXTEDIT_K_TEXTEND2 993 case STB_TEXTEDIT_K_TEXTEND2:
1001 #ifdef STB_TEXTEDIT_K_TEXTSTART2 1010 #ifdef STB_TEXTEDIT_K_TEXTEND2 1020 #ifdef STB_TEXTEDIT_K_LINESTART2 1021 case STB_TEXTEDIT_K_LINESTART2:
1033 #ifdef STB_TEXTEDIT_K_LINEEND2 1034 case STB_TEXTEDIT_K_LINEEND2:
1048 #ifdef STB_TEXTEDIT_K_LINESTART2 1062 #ifdef STB_TEXTEDIT_K_LINEEND2 1176 if (insert_len == 0) {
1315 for (i=0; i <
length; ++i)
1325 for (i=0; i < old_length; ++i)
1343 state->
single_line = (
unsigned char) is_single_line;
1353 #if defined(__GNUC__) || defined(__clang__) 1354 #pragma GCC diagnostic push 1355 #pragma GCC diagnostic ignored "-Wcast-qual" 1363 #if defined(__GNUC__) || defined(__clang__) 1364 #pragma GCC diagnostic pop 1367 #endif//STB_TEXTEDIT_IMPLEMENTATION
static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
static ImWchar STB_TEXTEDIT_NEWLINE
static void stb_textedit_move_to_first(STB_TexteditState *state)
static void stb_textedit_discard_redo(StbUndoState *state)
static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
unsigned char initialized
static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING *obj, int idx)
#define STB_TEXTEDIT_UNDOSTATECOUNT
static int STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING *obj)
GLenum GLuint GLenum GLsizei length
static void stb_textedit_flush_redo(StbUndoState *state)
static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len)
#define STB_TEXTEDIT_GETWIDTH_NEWLINE
unsigned char has_preferred_x
static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING *obj, int pos, const ImWchar *new_text, int new_text_len)
static float STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING *obj, int line_start_idx, int char_idx)
#define STB_TEXTEDIT_POSITIONTYPE
static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length)
STB_TEXTEDIT_CHARTYPE undo_char[STB_TEXTEDIT_UNDOCHARCOUNT]
static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line)
static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_STRING *str, int n, int single_line)
static STB_TEXTEDIT_CHARTYPE * stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len)
unsigned char single_line
static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
static void STB_TEXTEDIT_DELETECHARS(STB_TEXTEDIT_STRING *obj, int pos, int n)
static void stb_textedit_discard_undo(StbUndoState *state)
static int STB_TEXTEDIT_KEYTOTEXT(int key)
unsigned char insert_mode
static void stb_textedit_sortselection(STB_TexteditState *state)
#define STB_TEXTEDIT_CHARTYPE
STB_TEXTEDIT_POSITIONTYPE delete_length
unsigned char cursor_at_end_of_line
static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len)
#define STB_TEXTEDIT_UNDOCHARCOUNT
static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow *r, STB_TEXTEDIT_STRING *obj, int line_start_idx)
#define STB_TEXTEDIT_STRING
static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length)
static StbUndoRecord * stb_text_create_undo_record(StbUndoState *state, int numchars)
static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key)
static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y)
STB_TEXTEDIT_POSITIONTYPE where
STB_TEXTEDIT_POSITIONTYPE insert_length
static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length)
StbUndoRecord undo_rec[STB_TEXTEDIT_UNDOSTATECOUNT]
static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)