Remove Lt from LabelLayer
parent
56e308932f
commit
30f119c094
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue