// set the default text to display void textbox_text(textbox *tb, char *text) { if (tb->text) free(tb->text); tb->text = strdup(text); tb->cursor = MAX(0, MIN(strlen(text), tb->cursor)); textbox_extents(tb); }
// set an input prompt for edit mode void textbox_prompt( textbox *tb, char *text ) { if ( tb->prompt ) free( tb->prompt ); tb->prompt = strdup( text ); textbox_extents( tb ); }
// remove text void textbox_delete(textbox *tb, int pos, int dlen) { int len = strlen(tb->text); pos = MAX(0, MIN(len, pos)); // move everything after pos+dlen down char *at = tb->text + pos; memmove(at, at + dlen, len - pos); textbox_extents(tb); }
// insert text void textbox_insert(textbox *tb, int pos, char *str) { int len = strlen(tb->text), slen = strlen(str); pos = MAX(0, MIN(len, pos)); // expand buffer tb->text = realloc(tb->text, len + slen + 1); // move everything after cursor upward char *at = tb->text + pos; memmove(at + slen, at, len - pos + 1); // insert new str memmove(at, str, slen); textbox_extents(tb); }