#include "background_layer.h"
#include "undo_history.h"
-
BackgroundLayer create_background_layer(Color color)
{
BackgroundLayer layer = {
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);
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,
}
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);
}
color_picker_rgba(&layer->color_picker),
stream);
- return fprintf(stream, "\n");;
+ return fprintf(stream, "\n");
}