+static
+int point_layer_idle_event(PointLayer *point_layer,
+ const SDL_Event *event,
+ const Camera *camera)
+{
+ trace_assert(point_layer);
+ trace_assert(event);
+ trace_assert(camera);
+
+ int selected = 0;
+ if (color_picker_event(
+ &point_layer->color_picker,
+ event,
+ &selected) < 0) {
+ return -1;
+ }
+
+ if (selected) {
+ return 0;
+ }
+
+ switch (event->type) {
+ case SDL_MOUSEBUTTONDOWN: {
+ switch (event->button.button) {
+ case SDL_BUTTON_LEFT: {
+ const int n = (int) dynarray_count(point_layer->points);
+ const Point *points = dynarray_data(point_layer->points);
+ const Point point = camera_map_screen(camera, event->button.x, event->button.y);
+ const Color color = color_picker_rgba(&point_layer->color_picker);
+
+ for (int i = 0; i < n; ++i) {
+ if (vec_length(vec_sub(points[i], point)) < POINT_LAYER_ELEMENT_RADIUS) {
+ point_layer->selected = i;
+ return 0;
+ }
+ }
+
+ char id[ID_MAX_SIZE];
+
+ for (size_t i = 0; i < ID_MAX_SIZE - 1; ++i) {
+ id[i] = (char) ('a' + rand() % ('z' - 'a' + 1));
+ }
+ id[ID_MAX_SIZE - 1] = '\0';