]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/background_layer.c
(#1050) Replace system clipboard with internal one
[nothing.git] / src / game / level / level_editor / background_layer.c
index 6eef5a4a6c29bf68ba0e048de676828420c45eff..d605144831ac9d0c6d523308e2e7658808e44260 100644 (file)
@@ -8,7 +8,6 @@
 #include "background_layer.h"
 #include "undo_history.h"
 
-// TODO(#1012): UndoHistory is not support in BackgroundLayer
 
 BackgroundLayer create_background_layer(Color color)
 {
@@ -49,16 +48,21 @@ int background_layer_render(BackgroundLayer *layer,
     return 0;
 }
 
+typedef struct {
+    BackgroundLayer *layer;
+    Color color;
+} UndoContext;
+
 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(UndoContext) == context_size);
 
-    trace_assert(sizeof(Color) < CONTEXT_SIZE);
-    Color *color = (Color *)context.data;
+    UndoContext *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,
@@ -82,12 +86,15 @@ int background_layer_event(BackgroundLayer *layer,
     }
 
     if (selected && !color_picker_drag(&layer->color_picker)) {
+        UndoContext context = {
+            .layer = layer,
+            .color = layer->prev_color
+        };
+
         undo_history_push(
             undo_history,
-            create_action(
-                layer,
-                background_undo_color,
-                &layer->prev_color, sizeof(layer->prev_color)));
+            background_undo_color,
+            &context, sizeof(context));
         layer->prev_color = color_picker_rgba(&layer->color_picker);
     }
 
@@ -104,5 +111,5 @@ int background_layer_dump_stream(BackgroundLayer *layer,
         color_picker_rgba(&layer->color_picker),
         stream);
 
-    return fprintf(stream, "\n");;
+    return fprintf(stream, "\n");
 }