X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flevel_editor%2Fbackground_layer.c;h=3ac3c5da4646b2e1891ccc5be1c940bc41cf0927;hb=f95f6c77920df1cd11145385a6061afbac9e705f;hp=7df40b14586cb95ff66a1e9e22b70db658ed6ce1;hpb=7b8dc62789278f036fd1122a391c8aef5e30ab91;p=nothing.git diff --git a/src/game/level/level_editor/background_layer.c b/src/game/level/level_editor/background_layer.c index 7df40b14..3ac3c5da 100644 --- a/src/game/level/level_editor/background_layer.c +++ b/src/game/level/level_editor/background_layer.c @@ -8,7 +8,6 @@ #include "background_layer.h" #include "undo_history.h" - BackgroundLayer create_background_layer(Color color) { BackgroundLayer layer = { @@ -18,22 +17,14 @@ BackgroundLayer create_background_layer(Color color) return layer; } -int background_layer_read_from_line_stream(BackgroundLayer *layer, - LineStream *line_stream) +BackgroundLayer chop_background_layer(String *input) { - if (color_picker_read_from_line_stream( - &layer->color_picker, - line_stream) < 0) { - return -1; - } - - layer->prev_color = color_picker_rgba(&layer->color_picker); - - return 0; + String line = trim(chop_by_delim(input, '\n')); + return create_background_layer(hexs(line)); } int background_layer_render(BackgroundLayer *layer, - Camera *camera, + const Camera *camera, int active) { trace_assert(layer); @@ -48,16 +39,21 @@ int background_layer_render(BackgroundLayer *layer, return 0; } +typedef struct { + BackgroundLayer *layer; + Color color; +} BackgroundUndoContext; + static -void background_undo_color(void *layer, Context context) +void background_undo_color(void *context, size_t context_size) { - trace_assert(layer); - BackgroundLayer *background_layer = layer; + trace_assert(context); + trace_assert(sizeof(BackgroundUndoContext) == context_size); - trace_assert(sizeof(Color) < CONTEXT_SIZE); - Color *color = (Color *)context.data; + BackgroundUndoContext *undo_context = context; + BackgroundLayer *background_layer = undo_context->layer; - background_layer->color_picker = create_color_picker_from_rgba(*color); + background_layer->color_picker = create_color_picker_from_rgba(undo_context->color); } int background_layer_event(BackgroundLayer *layer, @@ -81,11 +77,15 @@ int background_layer_event(BackgroundLayer *layer, } if (selected && !color_picker_drag(&layer->color_picker)) { + BackgroundUndoContext context = { + .layer = layer, + .color = layer->prev_color + }; + undo_history_push( undo_history, - layer, background_undo_color, - &layer->prev_color, sizeof(layer->prev_color)); + &context, sizeof(context)); layer->prev_color = color_picker_rgba(&layer->color_picker); } @@ -102,5 +102,5 @@ int background_layer_dump_stream(BackgroundLayer *layer, color_picker_rgba(&layer->color_picker), stream); - return fprintf(stream, "\n");; + return fprintf(stream, "\n"); }