]> git.lizzy.rs Git - nothing.git/blobdiff - src/ui/slider.c
Merge pull request #1055 from tsoding/1045
[nothing.git] / src / ui / slider.c
index a412b4a9f104b1750e45fbe9f72653296b4b2ec6..0d43055c795c969747d330f7512a9168e9b8410b 100644 (file)
@@ -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;