17 #ifndef STB_TEXTEDIT_CHARTYPE
18 #define STB_TEXTEDIT_CHARTYPE uint64_t
24 #include "stb_textedit.h"
28 #define COMMAND_HI ((((uint64_t)VuoModifierKey_Command) << 32))
29 #define CONTROL_HI ((((uint64_t)VuoModifierKey_Control) << 32))
30 #define OPTION_HI ((((uint64_t)VuoModifierKey_Option) << 32))
31 #define SHIFT_HI ((((uint64_t)VuoModifierKey_Shift) << 32))
33 #define KEYCODE_COPY 0x3
34 #define KEYCODE_PASTE 0x16
35 #define KEYCODE_CUT 0x18
36 #define KEYCODE_ESC 0x1b
37 #define KEYCODE_TAB 0x9
38 #define KEYCODE_RETURN 0xD
43 #define STB_TEXTEDIT_K_LEFT 0x0001C
44 #define STB_TEXTEDIT_K_RIGHT 0x0001D
45 #define STB_TEXTEDIT_K_UP 0x0001E
46 #define STB_TEXTEDIT_K_DOWN 0x0001F
47 #define STB_TEXTEDIT_K_LINESTART (COMMAND_HI | STB_TEXTEDIT_K_LEFT)
48 #define STB_TEXTEDIT_K_LINEEND (COMMAND_HI | STB_TEXTEDIT_K_RIGHT)
49 #define STB_TEXTEDIT_K_TEXTSTART (COMMAND_HI | STB_TEXTEDIT_K_UP)
50 #define STB_TEXTEDIT_K_TEXTSTART2 (CONTROL_HI | 0x41)
51 #define STB_TEXTEDIT_K_TEXTEND (COMMAND_HI | STB_TEXTEDIT_K_DOWN)
52 #define STB_TEXTEDIT_K_TEXTEND2 (CONTROL_HI | 0x45)
53 #define STB_TEXTEDIT_K_DELETE 0x7f
54 #define STB_TEXTEDIT_K_BACKSPACE 0x00008
55 #define STB_TEXTEDIT_K_UNDO (COMMAND_HI | 0x1A)
56 #define STB_TEXTEDIT_K_REDO (COMMAND_HI | 0x19)
57 #define STB_TEXTEDIT_K_REDO2 ((COMMAND_HI | SHIFT_HI) | 0x1A)
58 #define STB_TEXTEDIT_K_WORDLEFT (OPTION_HI | STB_TEXTEDIT_K_LEFT)
59 #define STB_TEXTEDIT_K_WORDRIGHT (OPTION_HI | STB_TEXTEDIT_K_RIGHT)
60 #define STB_TEXTEDIT_K_DELETEWORD (OPTION_HI | STB_TEXTEDIT_K_BACKSPACE)
61 #define STB_TEXTEDIT_K_DELETEWORDRIGHT (OPTION_HI | STB_TEXTEDIT_K_DELETE)
62 #define STB_TEXTEDIT_K_DELETELINE (COMMAND_HI | STB_TEXTEDIT_K_BACKSPACE)
63 #define STB_TEXTEDIT_K_DELETELINERIGHT (COMMAND_HI | STB_TEXTEDIT_K_DELETE)
64 #define STB_TEXTEDIT_K_SHIFT SHIFT_HI
65 #define STB_TEXTEDIT_K_SELECTALL (COMMAND_HI | 0x1)
67 #define STB_TEXTEDIT_GETWIDTH_NEWLINE 0
80 return ((uint64_t)utf32) | (((uint64_t)modifiers) << 32);
91 for(
int i = 0; i < (*length); i++)
92 stbchars[i] = utf32[i];
110 return utf32_char >= 0xA && utf32_char <= 0xD;
119 if( utf32_char < 33 || (utf32_char >= 0x2000 && utf32_char <= 0x200A) )
139 for(
size_t i = 0; i < length; i++)
141 if(utf32_char == separators[i])
172 int start =
MIN(len, state->select_start);
173 state->select_start = 0;
175 for(
int i = start; i > 0; i--)
177 if( (*separatorFunc)(chars[i]) )
179 state->select_start = i + 1;
184 int prev_end = state->select_end;
185 state->select_end = len;
188 for(
int i = prev_end; i < len; i++)
190 if( (*separatorFunc)(chars[i]) )
192 state->select_end = i;
204 int start =
MIN(state->select_start, state->select_end);
205 int end =
MAX(state->select_start, state->select_end);
221 if( state->select_start != state->select_end )
328 unsigned int lineIndex = 0;
331 find->x = position.x;
332 find->y = position.y;
345 unsigned int lineIndex = 0;
363 uint32_t lo = (uint32_t) (key & 0xFFFF);
365 return lo > 31 && lo < UINT32_MAX ? lo : 0;
369 #define STB_TEXTEDIT_IS_SPACE(x) VuoTextEdit_isSeparator(((uint32_t)x))
372 #define STB_TEXTEDIT_IS_SEPARATOR(x) VuoTextEdit_isSeparator(((uint32_t)x))
392 unsigned int len = 1;
394 r->x0 = rect.center.x - (rect.size.x * .5);
396 r->baseline_y_delta = rect.size.y;
397 r->ymin = rect.center.y - (rect.size.y * .5f);
398 r->ymax = rect.size.y;
418 uint32_t new_text_32[new_text_len];
420 for(
int i = 0; i < new_text_len; i++)
421 new_text_32[i] = (uint32_t) (new_text[i] & 0xFFFF);