浏览代码

More controls

rexim 4 年之前
父节点
当前提交
dcfeb0f5a9
共有 1 个文件被更改,包括 36 次插入10 次删除
  1. 36 10
      main.c

+ 36 - 10
main.c

@@ -192,7 +192,9 @@ int main(void)
         SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT));
 
     int quit = 0;
+    int markers = 1;
     float t = 0.0f;
+    float bezier_sample_step = 0.05f;
     while (!quit) {
         SDL_Event event;
         while (SDL_PollEvent(&event)) {
@@ -201,6 +203,14 @@ int main(void)
                 quit = 1;
                 break;
 
+            case SDL_KEYDOWN: {
+                switch (event.key.keysym.sym) {
+                case SDLK_F1: {
+                    markers = !markers;
+                } break;
+                }
+            } break;
+
             case SDL_MOUSEBUTTONDOWN: {
                 switch (event.button.button) {
                 case SDL_BUTTON_LEFT: {
@@ -226,6 +236,14 @@ int main(void)
                     ps[ps_selected] = mouse_pos;
                 }
             } break;
+
+            case SDL_MOUSEWHEEL: {
+                if (event.wheel.y > 0) {
+                    bezier_sample_step = fminf(bezier_sample_step + 0.001f, 0.999f);
+                } else if (event.wheel.y < 0) {
+                    bezier_sample_step = fmaxf(bezier_sample_step - 0.001f, 0.001f);
+                }
+            } break;
             }
         }
 
@@ -237,22 +255,30 @@ int main(void)
         check_sdl_code(
             SDL_RenderClear(renderer));
 
-        for (size_t i = 0; i < ps_count; ++i) {
-            render_marker(renderer, ps[i], RED_COLOR);
-        }
-
         if (ps_count >= 4) {
+            if (markers) {
+                render_bezier_markers(
+                    renderer,
+                    ps[0], ps[1], ps[2], ps[3],
+                    bezier_sample_step,
+                    GREEN_COLOR);
+            } else {
+                render_bezier_curve(
+                    renderer,
+                    ps[0], ps[1], ps[2], ps[3],
+                    bezier_sample_step,
+                    GREEN_COLOR);
+            }
+
             render_line(renderer, ps[0], ps[1], RED_COLOR);
             render_line(renderer, ps[2], ps[3], RED_COLOR);
+        }
 
-            // TODO: switch between markers and lines at runtime
-            render_bezier_markers(
-                renderer,
-                ps[0], ps[1], ps[2], ps[3],
-                0.01f,
-                GREEN_COLOR);
+        for (size_t i = 0; i < ps_count; ++i) {
+            render_marker(renderer, ps[i], RED_COLOR);
         }
 
+
         SDL_RenderPresent(renderer);
 
         SDL_Delay(DELTA_TIME_MS);