3 #include "game/level/boxes.h"
4 #include "system/stacktrace.h"
5 #include "system/line_stream.h"
6 #include "system/log.h"
7 #include "game/camera.h"
8 #include "proto_rect.h"
9 #include "color_picker.h"
12 #define COLOR_SLIDER_HEIGHT 50.0f
13 #define COLOR_SLIDER_WIDTH 300.0f
15 LayerPtr color_picker_as_layer(ColorPicker *color_picker)
19 .type = LAYER_COLOR_PICKER
24 ColorPicker create_color_picker_from_rgba(Color color)
26 Color color_hsla = rgba_to_hsla(color);
27 ColorPicker color_picker = {
28 .hue = {0, color_hsla.r, 360.0f},
29 .saturation = {0, color_hsla.g, 1.0f},
30 .lightness = {0, color_hsla.b, 1.0f}
35 int color_picker_read_from_line_stream(ColorPicker *color_picker,
36 LineStream *line_stream)
39 const char *line = line_stream_next(line_stream);
44 if (sscanf(line, "%6s", color) == EOF) {
45 log_fail("Could not read color\n");
48 *color_picker = create_color_picker_from_rgba(hexstr(color));
53 // TODO: Color Picker doesn't have any visual indication about the current color
54 int color_picker_render(const ColorPicker *color_picker,
57 trace_assert(color_picker);
60 /* TODO: Color Picker sliders don't have any labels */
65 rect(0.0f, COLOR_SLIDER_HEIGHT,
66 COLOR_SLIDER_WIDTH, COLOR_SLIDER_HEIGHT)) < 0) {
71 &color_picker->saturation,
73 rect(0.0f, COLOR_SLIDER_HEIGHT * 2.0f,
74 COLOR_SLIDER_WIDTH, COLOR_SLIDER_HEIGHT)) < 0) {
79 &color_picker->lightness,
81 rect(0.0f, COLOR_SLIDER_HEIGHT * 3.0f,
82 COLOR_SLIDER_WIDTH, COLOR_SLIDER_HEIGHT)) < 0) {
90 // TODO: the `selected` event propagation control is cumbersome
91 int color_picker_event(ColorPicker *color_picker, const SDL_Event *event, int *selected_out)
93 trace_assert(color_picker);
98 if (slider_event(&color_picker->hue,
100 rect(0.0f, COLOR_SLIDER_HEIGHT,
101 COLOR_SLIDER_WIDTH, COLOR_SLIDER_HEIGHT),
107 if (slider_event(&color_picker->saturation,
109 rect(0.0f, COLOR_SLIDER_HEIGHT * 2.0f,
110 COLOR_SLIDER_WIDTH, COLOR_SLIDER_HEIGHT),
117 if (slider_event(&color_picker->lightness,
119 rect(0.0f, COLOR_SLIDER_HEIGHT * 3.0f,
120 COLOR_SLIDER_WIDTH, COLOR_SLIDER_HEIGHT),
127 *selected_out = selected;
133 Color color_picker_rgba(const ColorPicker *color_picker)
136 color_picker->hue.value,
137 color_picker->saturation.value,
138 color_picker->lightness.value,