use insert_char for insert_string, free console log, move actions to edit field
parent
c67cfe91de
commit
eb3088a323
|
@ -213,24 +213,6 @@ int console_handle_event(Console *console,
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case SDLK_w: {
|
|
||||||
if (event->key.keysym.mod & (KMOD_CTRL | KMOD_ALT)) {
|
|
||||||
SDL_SetClipboardText(edit_field_as_text(console->edit_field));
|
|
||||||
if (event->key.keysym.mod & KMOD_CTRL) {
|
|
||||||
edit_field_clean(console->edit_field);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case SDLK_y: {
|
|
||||||
if (event->key.keysym.mod & KMOD_CTRL) {
|
|
||||||
char *text = SDL_GetClipboardText();
|
|
||||||
edit_field_append(console->edit_field, text);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
edit_field_replace(
|
edit_field_replace(
|
||||||
console->edit_field,
|
console->edit_field,
|
||||||
|
|
|
@ -114,6 +114,7 @@ void console_log_clear(Console_Log *console_log)
|
||||||
console_log->cursor = 0;
|
console_log->cursor = 0;
|
||||||
for (size_t i = 0; i < console_log->capacity; ++i) {
|
for (size_t i = 0; i < console_log->capacity; ++i) {
|
||||||
if (console_log->buffer[i]) {
|
if (console_log->buffer[i]) {
|
||||||
|
free(console_log->buffer[i]);
|
||||||
console_log->buffer[i] = 0;
|
console_log->buffer[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,9 @@ static void delete_backward_char(Edit_field *edit_field);
|
||||||
static void kill_word(Edit_field *edit_field);
|
static void kill_word(Edit_field *edit_field);
|
||||||
static void backward_kill_word(Edit_field *edit_field);
|
static void backward_kill_word(Edit_field *edit_field);
|
||||||
static void kill_to_end_of_line(Edit_field *edit_field);
|
static void kill_to_end_of_line(Edit_field *edit_field);
|
||||||
|
static void field_buffer_cut(Edit_field *edit_field);
|
||||||
|
static void field_buffer_copy(Edit_field *edit_field);
|
||||||
|
static void field_buffer_paste(Edit_field *edit_field);
|
||||||
|
|
||||||
static void handle_keydown(Edit_field *edit_field, const SDL_Event *event);
|
static void handle_keydown(Edit_field *edit_field, const SDL_Event *event);
|
||||||
static void handle_keydown_alt(Edit_field *edit_field, const SDL_Event *event);
|
static void handle_keydown_alt(Edit_field *edit_field, const SDL_Event *event);
|
||||||
|
@ -56,6 +59,15 @@ static void edit_field_insert_char(Edit_field *edit_field, char c)
|
||||||
edit_field->buffer[++edit_field->buffer_size] = 0;
|
edit_field->buffer[++edit_field->buffer_size] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void edit_field_insert_string(Edit_field *edit_field, const char *text)
|
||||||
|
{
|
||||||
|
size_t n = strlen(text);
|
||||||
|
for (size_t i = 0; i < n; ++i) {
|
||||||
|
edit_field_insert_char(edit_field, text[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// See: https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html
|
// See: https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html
|
||||||
// For an explanation of the naming terminology for these helper methods
|
// For an explanation of the naming terminology for these helper methods
|
||||||
|
|
||||||
|
@ -201,6 +213,23 @@ static void kill_to_end_of_line(Edit_field *edit_field) {
|
||||||
edit_field->buffer_size);
|
edit_field->buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void field_buffer_cut(Edit_field *edit_field) {
|
||||||
|
// "C-w"
|
||||||
|
SDL_SetClipboardText(edit_field_as_text(edit_field));
|
||||||
|
edit_field_clean(edit_field);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void field_buffer_copy(Edit_field *edit_field) {
|
||||||
|
// "M-w"
|
||||||
|
SDL_SetClipboardText(edit_field_as_text(edit_field));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void field_buffer_paste(Edit_field *edit_field) {
|
||||||
|
// "C-y"
|
||||||
|
char *text = SDL_GetClipboardText();
|
||||||
|
edit_field_insert_string(edit_field, text);
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_keydown(Edit_field *edit_field, const SDL_Event *event)
|
static void handle_keydown(Edit_field *edit_field, const SDL_Event *event)
|
||||||
{
|
{
|
||||||
switch (event->key.keysym.sym) {
|
switch (event->key.keysym.sym) {
|
||||||
|
@ -251,6 +280,10 @@ static void handle_keydown_alt(Edit_field *edit_field, const SDL_Event *event)
|
||||||
case SDLK_d: {
|
case SDLK_d: {
|
||||||
kill_word(edit_field);
|
kill_word(edit_field);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case SDLK_w: {
|
||||||
|
field_buffer_copy(edit_field);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,6 +329,14 @@ static void handle_keydown_ctrl(Edit_field *edit_field, const SDL_Event *event)
|
||||||
case SDLK_k: {
|
case SDLK_k: {
|
||||||
kill_to_end_of_line(edit_field);
|
kill_to_end_of_line(edit_field);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case SDLK_w: {
|
||||||
|
field_buffer_cut(edit_field);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case SDLK_y: {
|
||||||
|
field_buffer_paste(edit_field);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,13 +490,6 @@ void edit_field_replace(Edit_field *edit_field, const char *text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void edit_field_append(Edit_field *edit_field, const char *text)
|
|
||||||
{
|
|
||||||
size_t n = strlen(text);
|
|
||||||
edit_field->buffer = strcat(edit_field->buffer, text);
|
|
||||||
edit_field->cursor += n;
|
|
||||||
}
|
|
||||||
|
|
||||||
void edit_field_clean(Edit_field *edit_field)
|
void edit_field_clean(Edit_field *edit_field)
|
||||||
{
|
{
|
||||||
trace_assert(edit_field);
|
trace_assert(edit_field);
|
||||||
|
|
|
@ -26,7 +26,6 @@ int edit_field_event(Edit_field *edit_field, const SDL_Event *event);
|
||||||
const char *edit_field_as_text(const Edit_field *edit_field);
|
const char *edit_field_as_text(const Edit_field *edit_field);
|
||||||
|
|
||||||
void edit_field_replace(Edit_field *edit_field, const char *text);
|
void edit_field_replace(Edit_field *edit_field, const char *text);
|
||||||
void edit_field_append(Edit_field *edit_field, const char *text);
|
|
||||||
void edit_field_clean(Edit_field *edit_field);
|
void edit_field_clean(Edit_field *edit_field);
|
||||||
void edit_field_restyle(Edit_field *edit_field,
|
void edit_field_restyle(Edit_field *edit_field,
|
||||||
Vec2f font_size,
|
Vec2f font_size,
|
||||||
|
|
Loading…
Reference in New Issue