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
39 #define KEYCODE_ENTER 0x3
44 #define STB_TEXTEDIT_K_LEFT 0x0001C
45 #define STB_TEXTEDIT_K_RIGHT 0x0001D
46 #define STB_TEXTEDIT_K_UP 0x0001E
47 #define STB_TEXTEDIT_K_DOWN 0x0001F
48 #define STB_TEXTEDIT_K_LINESTART (COMMAND_HI | STB_TEXTEDIT_K_LEFT)
49 #define STB_TEXTEDIT_K_LINESTART2 0x1
50 #define STB_TEXTEDIT_K_LINEEND (COMMAND_HI | STB_TEXTEDIT_K_RIGHT)
51 #define STB_TEXTEDIT_K_LINEEND2 0x4
52 #define STB_TEXTEDIT_K_TEXTSTART (COMMAND_HI | STB_TEXTEDIT_K_UP)
53 #define STB_TEXTEDIT_K_TEXTSTART2 (CONTROL_HI | 0x41)
54 #define STB_TEXTEDIT_K_TEXTEND (COMMAND_HI | STB_TEXTEDIT_K_DOWN)
55 #define STB_TEXTEDIT_K_TEXTEND2 (CONTROL_HI | 0x45)
56 #define STB_TEXTEDIT_K_DELETE 0x7f
57 #define STB_TEXTEDIT_K_BACKSPACE 0x00008
58 #define STB_TEXTEDIT_K_UNDO (COMMAND_HI | 0x1A)
59 #define STB_TEXTEDIT_K_REDO (COMMAND_HI | 0x19)
60 #define STB_TEXTEDIT_K_REDO2 ((COMMAND_HI | SHIFT_HI) | 0x1A)
61 #define STB_TEXTEDIT_K_WORDLEFT (OPTION_HI | STB_TEXTEDIT_K_LEFT)
62 #define STB_TEXTEDIT_K_WORDRIGHT (OPTION_HI | STB_TEXTEDIT_K_RIGHT)
63 #define STB_TEXTEDIT_K_DELETEWORD (OPTION_HI | STB_TEXTEDIT_K_BACKSPACE)
64 #define STB_TEXTEDIT_K_DELETEWORDRIGHT (OPTION_HI | STB_TEXTEDIT_K_DELETE)
65 #define STB_TEXTEDIT_K_DELETELINE (COMMAND_HI | STB_TEXTEDIT_K_BACKSPACE)
66 #define STB_TEXTEDIT_K_DELETELINERIGHT (COMMAND_HI | STB_TEXTEDIT_K_DELETE)
67 #define STB_TEXTEDIT_K_SHIFT SHIFT_HI
68 #define STB_TEXTEDIT_K_SELECTALL (COMMAND_HI | 0x1)
71 #define STB_TEXTEDIT_GETWIDTH_NEWLINE 0
83 return ((uint64_t)utf32) | (((uint64_t)modifiers) << 32);
94 for(
int i = 0; i < (*length); i++)
95 stbchars[i] = utf32[i];
113 return utf32_char >= 0xA && utf32_char <= 0xD;
122 if( utf32_char < 33 || (utf32_char >= 0x2000 && utf32_char <= 0x200A) )
142 for(
size_t i = 0; i < length; i++)
144 if(utf32_char == separators[i])
175 int start =
MIN(len, state->select_start);
176 state->select_start = 0;
178 for(
int i = start; i > 0; i--)
180 if( (*separatorFunc)(chars[i]) )
182 state->select_start = i + 1;
187 int prev_end = state->select_end;
188 state->select_end = len;
191 for(
int i = prev_end; i < len; i++)
193 if( (*separatorFunc)(chars[i]) )
195 state->select_end = i;
207 int start =
MIN(state->select_start, state->select_end);
208 int end =
MAX(state->select_start, state->select_end);
224 if( state->select_start != state->select_end )
320 if (!state->textImageData)
334 unsigned int lineIndex = 0;
337 find->x = position.x;
338 find->y = position.y;
339 find->height = data->lineHeight;
341 find->length = data->lineCounts[lineIndex];
351 unsigned int lineIndex = 0;
363 uint32_t lo = (uint32_t) (key & 0xFFFF);
370 return lo > 31 && lo < UINT32_MAX ? lo : 0;
374 #define STB_TEXTEDIT_IS_SPACE(x) VuoTextEdit_isSeparator(((uint32_t)x))
377 #define STB_TEXTEDIT_IS_SEPARATOR(x) VuoTextEdit_isSeparator(((uint32_t)x))
389 return data->charAdvance[n + i];
397 unsigned int len = 1;
399 r->x0 = rect.center.x - (rect.size.x * .5);
401 r->baseline_y_delta = rect.size.y;
402 r->ymin = rect.center.y - (rect.size.y * .5f);
403 r->ymax = rect.size.y;
423 uint32_t new_text_32[new_text_len];
425 for(
int i = 0; i < new_text_len; i++)
426 new_text_32[i] = (uint32_t) (new_text[i] & 0xFFFF);