]> git.lizzy.rs Git - nothing.git/commitdiff
Remove Lt from Edit_field
authorrexim <reximkut@gmail.com>
Sun, 5 Jan 2020 19:31:42 +0000 (02:31 +0700)
committerrexim <reximkut@gmail.com>
Sun, 5 Jan 2020 19:31:42 +0000 (02:31 +0700)
src/config.h
src/game/level/level_editor.c
src/game/level/level_editor.h
src/game/level/level_editor/label_layer.c
src/game/level/level_editor/point_layer.c
src/game/level/level_editor/rect_layer.c
src/ui/console.c
src/ui/edit_field.c
src/ui/edit_field.h

index 1431bb0b8ebc8a7cf61585835e7e928cb703c0d3..59b4e9820b21bea818ad11e9c975d4f4d69a02d7 100644 (file)
@@ -33,4 +33,6 @@
 
 #define UNDO_HISTORY_CAPACITY 256
 
+#define EDIT_FIELD_CAPACITY 256
+
 #endif  // CONFIG_H_
index 7101150138cd59e762d232e5c229ab1444d420dc..7ecd72583300a4bb89cac65a8a14afa1683e1e19 100644 (file)
@@ -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
index ac55e05288d5d6ea1ddf2ec806b5194cf3af32c0..2c7ebbbfdb61dbcd81e00597816e791abec5db49 100644 (file)
@@ -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;
 
index 9c7bf9c2507f02a2748c56080c4e8816e0c9913d..487b949cf985d7f8f7f3fa781d02e749095849d3 100644 (file)
@@ -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
index c0550919315a9e954b5d361825177c25b82059f1..89f3daa68c23b30699aa9dc7826c1522ddd3c729 100644 (file)
@@ -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
index 778c324cf8f2f9fc9d4a1c069f103153f3ec941e..7748ea2c1c439b496c1c329ce0e942bb2dfb8f13 100644 (file)
@@ -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;
index 9b1458c4c5ffe560b94e6b43fbf54aa95e1d2ce5..1db00120827f3b289f6a1046d3aaeee9ab7f8f91 100644 (file)
@@ -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;
index f902b8f7cb91128c815030739f4b1a94531663ff..8366c72cae42e66187912bb28cefa6eb904a6173 100644 (file)
@@ -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)
index a896876c020085a7687fa6ff49aaeff8b74e8fea..585fec7a059f65d5138629c0ae165ffe60babf33 100644 (file)
@@ -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,