|
|
|
@ -443,6 +443,15 @@ static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y) |
|
|
|
|
// API click: on mouse down, move the cursor to the clicked location, and reset the selection
|
|
|
|
|
static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) |
|
|
|
|
{ |
|
|
|
|
// In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
|
|
|
|
|
// goes off the top or bottom of the text
|
|
|
|
|
if( state->single_line ) |
|
|
|
|
{ |
|
|
|
|
StbTexteditRow r; |
|
|
|
|
STB_TEXTEDIT_LAYOUTROW(&r, str, 0); |
|
|
|
|
y = r.ymin; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
state->cursor = stb_text_locate_coord(str, x, y); |
|
|
|
|
state->select_start = state->cursor; |
|
|
|
|
state->select_end = state->cursor; |
|
|
|
@ -452,9 +461,21 @@ static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *stat |
|
|
|
|
// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location
|
|
|
|
|
static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) |
|
|
|
|
{ |
|
|
|
|
int p = stb_text_locate_coord(str, x, y); |
|
|
|
|
int p = 0; |
|
|
|
|
|
|
|
|
|
// In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
|
|
|
|
|
// goes off the top or bottom of the text
|
|
|
|
|
if( state->single_line ) |
|
|
|
|
{ |
|
|
|
|
StbTexteditRow r; |
|
|
|
|
STB_TEXTEDIT_LAYOUTROW(&r, str, 0); |
|
|
|
|
y = r.ymin; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (state->select_start == state->select_end) |
|
|
|
|
state->select_start = state->cursor; |
|
|
|
|
|
|
|
|
|
p = stb_text_locate_coord(str, x, y); |
|
|
|
|
state->cursor = state->select_end = p; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|