]> git.lizzy.rs Git - nothing.git/commitdiff
(#892) Make slider correctly identify its changes
authorrexim <reximkut@gmail.com>
Sat, 20 Jul 2019 18:51:29 +0000 (01:51 +0700)
committerrexim <reximkut@gmail.com>
Sat, 20 Jul 2019 23:30:51 +0000 (06:30 +0700)
src/ui/slider.c

index a66576d7b28c482f57e4c882006a40df06af2c14..8a0fb76d3273a52b455b93b000d2d9dcb048a055 100644 (file)
@@ -39,28 +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;
-    } 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;