From 0d5bf93205ab85091e8b6155c13a907aa6fa114a Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 6 Jan 2020 02:31:42 +0700 Subject: [PATCH] Remove Lt from Edit_field --- src/config.h | 2 + src/game/level/level_editor.c | 28 ++++---------- src/game/level/level_editor.h | 3 +- src/game/level/level_editor/label_layer.c | 35 ++++++++---------- src/game/level/level_editor/point_layer.c | 21 ++++------- src/game/level/level_editor/rect_layer.c | 23 ++++-------- src/ui/console.c | 32 +++++++--------- src/ui/edit_field.c | 45 +---------------------- src/ui/edit_field.h | 12 +++--- 9 files changed, 61 insertions(+), 140 deletions(-) diff --git a/src/config.h b/src/config.h index 1431bb0b..59b4e982 100644 --- a/src/config.h +++ b/src/config.h @@ -33,4 +33,6 @@ #define UNDO_HISTORY_CAPACITY 256 +#define EDIT_FIELD_CAPACITY 256 + #endif // CONFIG_H_ diff --git a/src/game/level/level_editor.c b/src/game/level/level_editor.c index 71011501..7ecd7258 100644 --- a/src/game/level/level_editor.c +++ b/src/game/level/level_editor.c @@ -48,15 +48,8 @@ LevelEditor *create_level_editor(Cursor *cursor) } level_editor->lt = lt; - level_editor->edit_field_filename = PUSH_LT( - lt, - create_edit_field( - LEVEL_EDITOR_EDIT_FIELD_SIZE, - LEVEL_EDITOR_EDIT_FIELD_COLOR), - destroy_edit_field); - if (level_editor->edit_field_filename == NULL) { - RETURN_LT(lt, NULL); - } + level_editor->edit_field_filename.font_size = LEVEL_EDITOR_EDIT_FIELD_SIZE; + level_editor->edit_field_filename.font_color = LEVEL_EDITOR_EDIT_FIELD_COLOR; level_editor->background_layer = create_background_layer(hexstr("fffda5")); @@ -159,15 +152,8 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor } level_editor->lt = lt; - level_editor->edit_field_filename = PUSH_LT( - lt, - create_edit_field( - LEVEL_EDITOR_EDIT_FIELD_SIZE, - LEVEL_EDITOR_EDIT_FIELD_COLOR), - destroy_edit_field); - if (level_editor->edit_field_filename == NULL) { - RETURN_LT(lt, NULL); - } + level_editor->edit_field_filename.font_size = LEVEL_EDITOR_EDIT_FIELD_SIZE; + level_editor->edit_field_filename.font_color = LEVEL_EDITOR_EDIT_FIELD_COLOR; level_editor->file_name = PUSH_LT( @@ -297,7 +283,7 @@ int level_editor_render(const LevelEditor *level_editor, position); if (edit_field_render_screen( - level_editor->edit_field_filename, + &level_editor->edit_field_filename, camera, vec(position.x + save_as_width, position.y)) < 0) { return -1; @@ -333,7 +319,7 @@ int level_editor_saveas_event(LevelEditor *level_editor, path, LEVEL_FOLDER_MAX_LENGTH, "./assets/levels/%s.txt", - edit_field_as_text(level_editor->edit_field_filename)); + edit_field_as_text(&level_editor->edit_field_filename)); level_editor->file_name = PUSH_LT( level_editor->lt, string_duplicate(path, NULL), @@ -346,7 +332,7 @@ int level_editor_saveas_event(LevelEditor *level_editor, } break; } - return edit_field_event(level_editor->edit_field_filename, event); + return edit_field_event(&level_editor->edit_field_filename, event); } static diff --git a/src/game/level/level_editor.h b/src/game/level/level_editor.h index ac55e052..2c7ebbbf 100644 --- a/src/game/level/level_editor.h +++ b/src/game/level/level_editor.h @@ -12,7 +12,6 @@ typedef struct LevelEditor LevelEditor; typedef struct RectLayer RectLayer; typedef struct PointLayer PointLayer; typedef struct LabelLayer LabelLayer; -typedef struct Edit_field Edit_field; typedef struct Sound_samples Sound_samples; typedef enum { @@ -26,7 +25,7 @@ struct LevelEditor LevelEditorState state; Vec2f camera_position; float camera_scale; - Edit_field *edit_field_filename; + Edit_field edit_field_filename; LayerPicker layer_picker; FadingWigglyText notice; diff --git a/src/game/level/level_editor/label_layer.c b/src/game/level/level_editor/label_layer.c index 9c7bf9c2..487b949c 100644 --- a/src/game/level/level_editor/label_layer.c +++ b/src/game/level/level_editor/label_layer.c @@ -43,7 +43,7 @@ struct LabelLayer { int selection; ColorPicker color_picker; Vec2f move_anchor; - Edit_field *edit_field; + Edit_field edit_field; Vec2f inter_position; Color inter_color; int id_name_counter; @@ -186,13 +186,8 @@ LabelLayer *create_label_layer(const char *id_name_prefix) label_layer->color_picker = create_color_picker_from_rgba(COLOR_RED); label_layer->selection = -1; - label_layer->edit_field = PUSH_LT( - lt, - create_edit_field(LABELS_SIZE, COLOR_RED), - destroy_edit_field); - if (label_layer->edit_field == NULL) { - RETURN_LT(lt, NULL); - } + label_layer->edit_field.font_size = LABELS_SIZE; + label_layer->edit_field.font_color = COLOR_RED; label_layer->id_name_prefix = id_name_prefix; @@ -313,7 +308,7 @@ int label_layer_render(const LabelLayer *label_layer, // Label Text if (label_layer->state == LABEL_LAYER_EDIT_TEXT && label_layer->selection == (int) i) { if (edit_field_render_world( - label_layer->edit_field, + &label_layer->edit_field, camera, position) < 0) { return -1; @@ -334,7 +329,7 @@ int label_layer_render(const LabelLayer *label_layer, // Label ID if (label_layer->state == LABEL_LAYER_EDIT_ID && label_layer->selection == (int)i) { if (edit_field_render_world( - label_layer->edit_field, + &label_layer->edit_field, camera, vec_sum( position, @@ -541,10 +536,10 @@ int label_layer_idle_event(LabelLayer *label_layer, undo_history); label_layer->state = LABEL_LAYER_EDIT_TEXT; edit_field_replace( - label_layer->edit_field, + &label_layer->edit_field, texts + label_layer->selection * LABEL_LAYER_TEXT_MAX_SIZE); edit_field_restyle( - label_layer->edit_field, + &label_layer->edit_field, LABELS_SIZE, colors[label_layer->selection]); SDL_StartTextInput(); @@ -585,10 +580,10 @@ int label_layer_idle_event(LabelLayer *label_layer, if (label_layer->selection >= 0) { label_layer->state = LABEL_LAYER_EDIT_TEXT; edit_field_replace( - label_layer->edit_field, + &label_layer->edit_field, texts + label_layer->selection * LABEL_LAYER_TEXT_MAX_SIZE); edit_field_restyle( - label_layer->edit_field, + &label_layer->edit_field, LABELS_SIZE, colors[label_layer->selection]); SDL_StartTextInput(); @@ -599,10 +594,10 @@ int label_layer_idle_event(LabelLayer *label_layer, if (label_layer->selection >= 0) { label_layer->state = LABEL_LAYER_EDIT_ID; edit_field_replace( - label_layer->edit_field, + &label_layer->edit_field, ids + label_layer->selection * LABEL_LAYER_ID_MAX_SIZE); edit_field_restyle( - label_layer->edit_field, + &label_layer->edit_field, vec(1.0f, 1.0f), color_invert(colors[label_layer->selection])); SDL_StartTextInput(); @@ -765,7 +760,7 @@ int label_layer_edit_text_event(LabelLayer *label_layer, char *text = (char*)label_layer->texts.data + label_layer->selection * LABEL_LAYER_TEXT_MAX_SIZE; memset(text, 0, LABEL_LAYER_TEXT_MAX_SIZE); - memcpy(text, edit_field_as_text(label_layer->edit_field), LABEL_LAYER_TEXT_MAX_SIZE - 1); + memcpy(text, edit_field_as_text(&label_layer->edit_field), LABEL_LAYER_TEXT_MAX_SIZE - 1); label_layer->state = LABEL_LAYER_IDLE; SDL_StopTextInput(); return 0; @@ -780,7 +775,7 @@ int label_layer_edit_text_event(LabelLayer *label_layer, } break; } - return edit_field_event(label_layer->edit_field, event); + return edit_field_event(&label_layer->edit_field, event); } static @@ -804,7 +799,7 @@ int label_layer_edit_id_event(LabelLayer *label_layer, char *id = (char*)label_layer->ids.data + label_layer->selection * LABEL_LAYER_ID_MAX_SIZE; memset(id, 0, LABEL_LAYER_ID_MAX_SIZE); - memcpy(id, edit_field_as_text(label_layer->edit_field), LABEL_LAYER_ID_MAX_SIZE - 1); + memcpy(id, edit_field_as_text(&label_layer->edit_field), LABEL_LAYER_ID_MAX_SIZE - 1); label_layer->state = LABEL_LAYER_IDLE; SDL_StopTextInput(); return 0; @@ -819,7 +814,7 @@ int label_layer_edit_id_event(LabelLayer *label_layer, } break; } - return edit_field_event(label_layer->edit_field, event); + return edit_field_event(&label_layer->edit_field, event); } static diff --git a/src/game/level/level_editor/point_layer.c b/src/game/level/level_editor/point_layer.c index c0550919..89f3daa6 100644 --- a/src/game/level/level_editor/point_layer.c +++ b/src/game/level/level_editor/point_layer.c @@ -44,7 +44,7 @@ struct PointLayer Vec2f inter_position; Color inter_color; - Edit_field *edit_field; + Edit_field edit_field; int id_name_counter; const char *id_name_prefix; @@ -181,15 +181,8 @@ PointLayer *create_point_layer(const char *id_name_prefix) point_layer->colors = create_dynarray(sizeof(Color)); point_layer->ids = create_dynarray(sizeof(char) * ID_MAX_SIZE); - point_layer->edit_field = PUSH_LT( - lt, - create_edit_field( - POINT_LAYER_ID_TEXT_SIZE, - POINT_LAYER_ID_TEXT_COLOR), - destroy_edit_field); - if (point_layer->edit_field == NULL) { - RETURN_LT(lt, NULL); - } + point_layer->edit_field.font_size = POINT_LAYER_ID_TEXT_SIZE; + point_layer->edit_field.font_color = POINT_LAYER_ID_TEXT_COLOR; point_layer->id_name_prefix = id_name_prefix; @@ -312,7 +305,7 @@ int point_layer_render(const PointLayer *point_layer, if (point_layer->state == POINT_LAYER_EDIT_ID) { if (edit_field_render_world( - point_layer->edit_field, + &point_layer->edit_field, camera, positions[point_layer->selection]) < 0) { return -1; @@ -505,7 +498,7 @@ int point_layer_idle_event(PointLayer *point_layer, char *ids = (char*)point_layer->ids.data; point_layer->state = POINT_LAYER_EDIT_ID; edit_field_replace( - point_layer->edit_field, + &point_layer->edit_field, ids + ID_MAX_SIZE * point_layer->selection); SDL_StartTextInput(); } @@ -559,7 +552,7 @@ int point_layer_edit_id_event(PointLayer *point_layer, POINT_UNDO_UPDATE)); char *id = dynarray_pointer_at(&point_layer->ids, (size_t) point_layer->selection); - const char *text = edit_field_as_text(point_layer->edit_field); + const char *text = edit_field_as_text(&point_layer->edit_field); size_t n = min_size_t(strlen(text), ID_MAX_SIZE - 1); memcpy(id, text, n); memset(id + n, 0, ID_MAX_SIZE - n); @@ -578,7 +571,7 @@ int point_layer_edit_id_event(PointLayer *point_layer, } break; } - return edit_field_event(point_layer->edit_field, event); + return edit_field_event(&point_layer->edit_field, event); } static diff --git a/src/game/level/level_editor/rect_layer.c b/src/game/level/level_editor/rect_layer.c index 778c324c..7748ea2c 100644 --- a/src/game/level/level_editor/rect_layer.c +++ b/src/game/level/level_editor/rect_layer.c @@ -69,7 +69,7 @@ struct RectLayer { int selection; Vec2f move_anchor; // The mouse offset from the left-top // corner of the rect during moving it - Edit_field *id_edit_field; + Edit_field id_edit_field; Color inter_color; Rect inter_rect; int id_name_counter; @@ -449,13 +449,13 @@ static int rect_layer_event_idle(RectLayer *layer, Color *colors = (Color*)layer->colors.data; edit_field_restyle( - layer->id_edit_field, + &layer->id_edit_field, RECT_LAYER_ID_LABEL_SIZE, color_invert(colors[layer->selection])); layer->state = RECT_LAYER_ID_RENAME; edit_field_replace( - layer->id_edit_field, + &layer->id_edit_field, ids + layer->selection * ENTITY_MAX_ID_SIZE); SDL_StartTextInput(); } @@ -812,7 +812,7 @@ static int rect_layer_event_id_rename(RectLayer *layer, char *id = dynarray_pointer_at(&layer->ids, (size_t)layer->selection); memset(id, 0, ENTITY_MAX_ID_SIZE); - memcpy(id, edit_field_as_text(layer->id_edit_field), ENTITY_MAX_ID_SIZE - 1); + memcpy(id, edit_field_as_text(&layer->id_edit_field), ENTITY_MAX_ID_SIZE - 1); layer->state = RECT_LAYER_IDLE; SDL_StopTextInput(); } break; @@ -825,7 +825,7 @@ static int rect_layer_event_id_rename(RectLayer *layer, } break; } - return edit_field_event(layer->id_edit_field, event); + return edit_field_event(&layer->id_edit_field, event); } LayerPtr rect_layer_as_layer(RectLayer *rect_layer) @@ -854,15 +854,8 @@ RectLayer *create_rect_layer(const char *id_name_prefix, Cursor *cursor) layer->colors = create_dynarray(sizeof(Color)); layer->actions = create_dynarray(sizeof(Action)); - layer->id_edit_field = PUSH_LT( - lt, - create_edit_field( - RECT_LAYER_ID_LABEL_SIZE, - COLOR_BLACK), - destroy_edit_field); - if (layer->id_edit_field == NULL) { - RETURN_LT(lt, NULL); - } + layer->id_edit_field.font_size = RECT_LAYER_ID_LABEL_SIZE; + layer->id_edit_field.font_color = COLOR_BLACK; layer->grid = PUSH_LT( @@ -1037,7 +1030,7 @@ int rect_layer_render(const RectLayer *layer, const Camera *camera, int active) if (layer->state == RECT_LAYER_ID_RENAME) { // ID renaming Edit Field if (edit_field_render_world( - layer->id_edit_field, + &layer->id_edit_field, camera, rect_id_pos) < 0) { return -1; diff --git a/src/ui/console.c b/src/ui/console.c index 9b1458c4..1db00120 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -35,7 +35,7 @@ struct Console { Lt *lt; - Edit_field *edit_field; + Edit_field edit_field; Console_Log *console_log; History *history; Game *game; @@ -54,15 +54,8 @@ Console *create_console(Game *game) } console->lt = lt; - console->edit_field = PUSH_LT( - lt, - create_edit_field( - vec(FONT_WIDTH_SCALE, FONT_HEIGHT_SCALE), - CONSOLE_FOREGROUND), - destroy_edit_field); - if (console->edit_field == NULL) { - RETURN_LT(lt, NULL); - } + console->edit_field.font_size = vec(FONT_WIDTH_SCALE, FONT_HEIGHT_SCALE); + console->edit_field.font_color = CONSOLE_FOREGROUND; console->console_log = PUSH_LT( lt, @@ -94,13 +87,13 @@ void destroy_console(Console *console) static int console_eval_input(Console *console) { - const char *input_text = edit_field_as_text(console->edit_field); + const char *input_text = edit_field_as_text(&console->edit_field); String input = string_nt(input_text); String command = chop_word(&input); if (string_equal(command, STRING_LIT(""))) { - edit_field_clean(console->edit_field); + edit_field_clean(&console->edit_field); return 0; } @@ -130,7 +123,7 @@ static int console_eval_input(Console *console) console_log_push_line(console->console_log, "Unknown command", NULL, CONSOLE_ERROR); } - edit_field_clean(console->edit_field); + edit_field_clean(&console->edit_field); return 0; } @@ -146,7 +139,7 @@ int console_handle_event(Console *console, case SDLK_UP: edit_field_replace( - console->edit_field, + &console->edit_field, history_current(console->history)); history_prev(console->history); return 0; @@ -154,7 +147,8 @@ int console_handle_event(Console *console, case SDLK_p: { if (event->key.keysym.mod & KMOD_CTRL) { edit_field_replace( - console->edit_field, history_current(console->history)); + &console->edit_field, + history_current(console->history)); history_prev(console->history); return 0; } @@ -169,7 +163,7 @@ int console_handle_event(Console *console, case SDLK_DOWN: edit_field_replace( - console->edit_field, + &console->edit_field, history_current(console->history)); history_next(console->history); return 0; @@ -177,7 +171,7 @@ int console_handle_event(Console *console, case SDLK_n: { if (event->key.keysym.mod & KMOD_CTRL) { edit_field_replace( - console->edit_field, history_current(console->history)); + &console->edit_field, history_current(console->history)); history_next(console->history); return 0; } @@ -186,7 +180,7 @@ int console_handle_event(Console *console, } break; } - return edit_field_event(console->edit_field, event); + return edit_field_event(&console->edit_field, event); } int console_render(const Console *console, @@ -212,7 +206,7 @@ int console_render(const Console *console, camera, vec(0.0f, y)); - if (edit_field_render_screen(console->edit_field, + if (edit_field_render_screen(&console->edit_field, camera, vec(0.0f, y + CONSOLE_LOG_HEIGHT)) < 0) { return -1; diff --git a/src/ui/edit_field.c b/src/ui/edit_field.c index f902b8f7..8366c72c 100644 --- a/src/ui/edit_field.c +++ b/src/ui/edit_field.c @@ -9,17 +9,6 @@ #include "system/nth_alloc.h" #include "system/stacktrace.h" -#define BUFFER_CAPACITY 256 - -struct Edit_field -{ - Lt *lt; - char *buffer; - size_t buffer_size; - size_t cursor; - Vec2f font_size; - Color font_color; -}; static void edit_field_insert_char(Edit_field *edit_field, char c); @@ -48,7 +37,7 @@ static void handle_keydown_ctrl(Edit_field *edit_field, const SDL_Event *event); static void edit_field_insert_char(Edit_field *edit_field, char c) { - if (edit_field->buffer_size >= BUFFER_CAPACITY) { + if (edit_field->buffer_size >= EDIT_FIELD_CAPACITY) { return; } @@ -347,38 +336,6 @@ static void handle_keydown_ctrl(Edit_field *edit_field, const SDL_Event *event) } } -Edit_field *create_edit_field(Vec2f font_size, - Color font_color) -{ - Lt *lt = create_lt(); - - Edit_field *const edit_field = PUSH_LT(lt, nth_calloc(1, sizeof(Edit_field)), free); - if (edit_field == NULL) { - RETURN_LT(lt, NULL); - } - edit_field->lt = lt; - - edit_field->buffer = PUSH_LT(lt, nth_calloc(1, sizeof(char) * (BUFFER_CAPACITY + 10)), free); - if (edit_field->buffer == NULL) { - RETURN_LT(lt, NULL); - } - - edit_field->buffer_size = 0; - edit_field->cursor = 0; - edit_field->font_size = font_size; - edit_field->font_color = font_color; - - edit_field->buffer[edit_field->buffer_size] = 0; - - return edit_field; -} - -void destroy_edit_field(Edit_field *edit_field) -{ - trace_assert(edit_field); - RETURN_LT0(edit_field->lt); -} - int edit_field_render_screen(const Edit_field *edit_field, const Camera *camera, Vec2f screen_position) diff --git a/src/ui/edit_field.h b/src/ui/edit_field.h index a896876c..585fec7a 100644 --- a/src/ui/edit_field.h +++ b/src/ui/edit_field.h @@ -7,11 +7,13 @@ #include "math/vec.h" #include "game/camera.h" -typedef struct Edit_field Edit_field; - -Edit_field *create_edit_field(Vec2f font_size, - Color font_color); -void destroy_edit_field(Edit_field *edit_field); +typedef struct { + char buffer[EDIT_FIELD_CAPACITY]; + size_t buffer_size; + size_t cursor; + Vec2f font_size; + Color font_color; +} Edit_field; int edit_field_render_screen(const Edit_field *edit_field, const Camera *camera, -- 2.44.0