X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fslider.c;h=0d43055c795c969747d330f7512a9168e9b8410b;hb=084cbc507bce7ba7e459e2c92627c7c4d7091f14;hp=a412b4a9f104b1750e45fbe9f72653296b4b2ec6;hpb=6c48bc6475e109fd08d3c28978bae5907682feca;p=nothing.git diff --git a/src/ui/slider.c b/src/ui/slider.c index a412b4a9..0d43055c 100644 --- a/src/ui/slider.c +++ b/src/ui/slider.c @@ -3,7 +3,7 @@ #include "game/camera.h" #include "./slider.h" -int slider_render(const Slider *slider, Camera *camera, Rect boundary) +int slider_render(const Slider *slider, const Camera *camera, Rect boundary) { trace_assert(slider); trace_assert(camera); @@ -26,7 +26,7 @@ int slider_render(const Slider *slider, Camera *camera, Rect boundary) boundary.y, cursor_width, boundary.h); - const Color cursor_color = rgba(1.0f, 0.0f, 0.0f, 0.5f); + const Color cursor_color = rgba(1.0f, 0.0f, 0.0f, 1.0f); if (camera_fill_rect_screen(camera, cursor, cursor_color) < 0) { return -1; } @@ -39,34 +39,36 @@ int slider_event(Slider *slider, const SDL_Event *event, Rect boundary, int *sel trace_assert(slider); trace_assert(event); - switch (event->type) { - case SDL_MOUSEBUTTONDOWN: { - Point position = vec((float) event->button.x, (float) event->button.y); - if (rect_contains_point(boundary, position)) { - slider->drag = 1; + if (!slider->drag) { + switch (event->type) { + case SDL_MOUSEBUTTONDOWN: { + Point position = vec((float) event->button.x, (float) event->button.y); + if (rect_contains_point(boundary, position)) { + slider->drag = 1; + if (selected) { + *selected = 1; + } + } + } break; + } + } else { + switch (event->type) { + case SDL_MOUSEBUTTONUP: { + slider->drag = 0; if (selected) { *selected = 1; } - } - } break; - - case SDL_MOUSEBUTTONUP: { - slider->drag = 0; - if (selected) { - *selected = 1; - } - } break; + } break; - case SDL_MOUSEMOTION: { - if (slider->drag) { + case SDL_MOUSEMOTION: { const float x = fminf(fmaxf((float) event->button.x - boundary.x, 0.0f), (float) boundary.w); const float ratio = x / (float) boundary.w; slider->value = ratio * slider->max_value; if (selected) { *selected = 1; } + } break; } - } break; } return 0;