Remove Lt from LabelLayer

master
rexim 2020-01-06 05:22:56 +07:00
parent 56e308932f
commit 30f119c094
6 changed files with 62 additions and 91 deletions

View File

@ -126,7 +126,7 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor)
level->labels = PUSH_LT(
lt,
create_labels_from_label_layer(level_editor->label_layer),
create_labels_from_label_layer(&level_editor->label_layer),
destroy_labels);
if (level->labels == NULL) {
RETURN_LT(lt, NULL);

View File

@ -6,7 +6,6 @@
#include "config.h"
typedef struct Labels Labels;
typedef struct LabelLayer LabelLayer;
Labels *create_labels_from_label_layer(const LabelLayer *label_layer);
void destroy_labels(Labels *label);

View File

@ -57,15 +57,7 @@ LevelEditor *create_level_editor(Cursor *cursor)
level_editor->lava_layer = create_rect_layer("lava", cursor);
level_editor->back_platforms_layer = create_rect_layer("back_platform", cursor);
level_editor->boxes_layer = create_rect_layer("box", cursor);
level_editor->label_layer = PUSH_LT(
lt,
create_label_layer("label"),
destroy_label_layer);
if (level_editor->label_layer == NULL) {
RETURN_LT(lt, NULL);
}
level_editor->label_layer = create_label_layer("label");
level_editor->regions_layer = create_rect_layer("region", cursor),
level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(&level_editor->boxes_layer);
@ -76,7 +68,7 @@ LevelEditor *create_level_editor(Cursor *cursor)
level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(&level_editor->lava_layer);
level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(&level_editor->regions_layer);
level_editor->layers[LAYER_PICKER_BACKGROUND] = background_layer_as_layer(&level_editor->background_layer);
level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(level_editor->label_layer);
level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(&level_editor->label_layer);
level_editor->notice = (FadingWigglyText) {
.wiggly_text = {
@ -157,7 +149,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor
level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(&level_editor->lava_layer);
level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(&level_editor->regions_layer);
level_editor->layers[LAYER_PICKER_BACKGROUND] = background_layer_as_layer(&level_editor->background_layer);
level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(level_editor->label_layer);
level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(&level_editor->label_layer);
level_editor->drag = false;

View File

@ -6,11 +6,11 @@
#include "game/level/level_editor/undo_history.h"
#include "game/level/level_editor/rect_layer.h"
#include "game/level/level_editor/point_layer.h"
#include "game/level/level_editor/label_layer.h"
#include "ui/wiggly_text.h"
#include "ui/cursor.h"
typedef struct LevelEditor LevelEditor;
typedef struct LabelLayer LabelLayer;
typedef struct Sound_samples Sound_samples;
typedef enum {
@ -36,7 +36,7 @@ struct LevelEditor
RectLayer lava_layer;
RectLayer regions_layer;
BackgroundLayer background_layer;
LabelLayer *label_layer;
LabelLayer label_layer;
LayerPtr layers[LAYER_PICKER_N];

View File

@ -21,35 +21,10 @@
// TODO(#1139): Label Layer does not support snapping
typedef enum {
LABEL_LAYER_IDLE = 0,
LABEL_LAYER_MOVE,
LABEL_LAYER_EDIT_TEXT,
LABEL_LAYER_EDIT_ID,
LABEL_LAYER_RECOLOR
} LabelLayerState;
static int label_clipboard = 0;
static char label_clipboard_text[LABEL_LAYER_TEXT_MAX_SIZE];
static Color label_clipboard_color;
struct LabelLayer {
Lt *lt;
LabelLayerState state;
Dynarray ids;
Dynarray positions;
Dynarray colors;
Dynarray texts;
int selection;
ColorPicker color_picker;
Vec2f move_anchor;
Edit_field edit_field;
Vec2f inter_position;
Color inter_color;
int id_name_counter;
const char *id_name_prefix;
};
typedef enum {
LABEL_UNDO_ADD,
LABEL_UNDO_DELETE,
@ -167,42 +142,30 @@ LayerPtr label_layer_as_layer(LabelLayer *label_layer)
return layer;
}
LabelLayer *create_label_layer(const char *id_name_prefix)
LabelLayer create_label_layer(const char *id_name_prefix)
{
Lt *lt = create_lt();
LabelLayer *label_layer = PUSH_LT(
lt, nth_calloc(1, sizeof(LabelLayer)), free);
if (label_layer == NULL) {
RETURN_LT(lt, NULL);
}
label_layer->lt = lt;
label_layer->ids = create_dynarray(sizeof(char) * LABEL_LAYER_ID_MAX_SIZE);
label_layer->positions = create_dynarray(sizeof(Vec2f));
label_layer->colors = create_dynarray(sizeof(Color));
label_layer->texts = create_dynarray(sizeof(char) * LABEL_LAYER_TEXT_MAX_SIZE);
label_layer->color_picker = create_color_picker_from_rgba(COLOR_RED);
label_layer->selection = -1;
label_layer->edit_field.font_size = LABELS_SIZE;
label_layer->edit_field.font_color = COLOR_RED;
label_layer->id_name_prefix = id_name_prefix;
return label_layer;
LabelLayer result = {0};
result.ids = create_dynarray(sizeof(char) * LABEL_LAYER_ID_MAX_SIZE);
result.positions = create_dynarray(sizeof(Vec2f));
result.colors = create_dynarray(sizeof(Color));
result.texts = create_dynarray(sizeof(char) * LABEL_LAYER_TEXT_MAX_SIZE);
result.color_picker = create_color_picker_from_rgba(COLOR_RED);
result.selection = -1;
result.edit_field.font_size = LABELS_SIZE;
result.edit_field.font_color = COLOR_RED;
result.id_name_prefix = id_name_prefix;
return result;
}
LabelLayer *chop_label_layer(Memory *memory,
String *input,
const char *id_name_prefix)
LabelLayer chop_label_layer(Memory *memory,
String *input,
const char *id_name_prefix)
{
trace_assert(memory);
trace_assert(input);
trace_assert(id_name_prefix);
LabelLayer *label_layer = create_label_layer(id_name_prefix);
LabelLayer result = create_label_layer(id_name_prefix);
int n = atoi(string_to_cstr(memory, trim(chop_by_delim(input, '\n'))));
char id[LABEL_LAYER_ID_MAX_SIZE];
@ -231,25 +194,13 @@ LabelLayer *chop_label_layer(Memory *memory,
min_size_t(LABEL_LAYER_TEXT_MAX_SIZE - 1,
label_text_string.count));
dynarray_push(&label_layer->ids, id);
dynarray_push(&label_layer->positions, &position);
dynarray_push(&label_layer->colors, &color);
dynarray_push(&label_layer->texts, label_text);
dynarray_push(&result.ids, id);
dynarray_push(&result.positions, &position);
dynarray_push(&result.colors, &color);
dynarray_push(&result.texts, label_text);
}
return label_layer;
}
void destroy_label_layer(LabelLayer *label_layer)
{
trace_assert(label_layer);
free(label_layer->ids.data);
free(label_layer->positions.data);
free(label_layer->colors.data);
free(label_layer->texts.data);
destroy_lt(label_layer->lt);
return result;
}
static inline

View File

@ -9,17 +9,46 @@
#define LABEL_LAYER_ID_MAX_SIZE 36
#define LABEL_LAYER_TEXT_MAX_SIZE 256
typedef struct LabelLayer LabelLayer;
typedef enum {
LABEL_LAYER_IDLE = 0,
LABEL_LAYER_MOVE,
LABEL_LAYER_EDIT_TEXT,
LABEL_LAYER_EDIT_ID,
LABEL_LAYER_RECOLOR
} LabelLayerState;
typedef struct {
LabelLayerState state;
Dynarray ids;
Dynarray positions;
Dynarray colors;
Dynarray texts;
int selection;
ColorPicker color_picker;
Vec2f move_anchor;
Edit_field edit_field;
Vec2f inter_position;
Color inter_color;
int id_name_counter;
const char *id_name_prefix;
} LabelLayer;
LayerPtr label_layer_as_layer(LabelLayer *label_layer);
// NOTE: create_label_layer and create_label_layer_from_line_stream do
// not own id_name_prefix
LabelLayer *create_label_layer(const char *id_name_prefix);
LabelLayer *chop_label_layer(Memory *memory,
String *input,
const char *id_name_prefix);
void destroy_label_layer(LabelLayer *label_layer);
LabelLayer create_label_layer(const char *id_name_prefix);
LabelLayer chop_label_layer(Memory *memory,
String *input,
const char *id_name_prefix);
static inline
void destroy_label_layer(LabelLayer label_layer)
{
free(label_layer.ids.data);
free(label_layer.positions.data);
free(label_layer.colors.data);
free(label_layer.texts.data);
}
int label_layer_render(const LabelLayer *label_layer,
const Camera *camera,