|
@@ -192,7 +192,9 @@ int main(void)
|
|
SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT));
|
|
SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT));
|
|
|
|
|
|
int quit = 0;
|
|
int quit = 0;
|
|
|
|
+ int markers = 1;
|
|
float t = 0.0f;
|
|
float t = 0.0f;
|
|
|
|
+ float bezier_sample_step = 0.05f;
|
|
while (!quit) {
|
|
while (!quit) {
|
|
SDL_Event event;
|
|
SDL_Event event;
|
|
while (SDL_PollEvent(&event)) {
|
|
while (SDL_PollEvent(&event)) {
|
|
@@ -201,6 +203,14 @@ int main(void)
|
|
quit = 1;
|
|
quit = 1;
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case SDL_KEYDOWN: {
|
|
|
|
+ switch (event.key.keysym.sym) {
|
|
|
|
+ case SDLK_F1: {
|
|
|
|
+ markers = !markers;
|
|
|
|
+ } break;
|
|
|
|
+ }
|
|
|
|
+ } break;
|
|
|
|
+
|
|
case SDL_MOUSEBUTTONDOWN: {
|
|
case SDL_MOUSEBUTTONDOWN: {
|
|
switch (event.button.button) {
|
|
switch (event.button.button) {
|
|
case SDL_BUTTON_LEFT: {
|
|
case SDL_BUTTON_LEFT: {
|
|
@@ -226,6 +236,14 @@ int main(void)
|
|
ps[ps_selected] = mouse_pos;
|
|
ps[ps_selected] = mouse_pos;
|
|
}
|
|
}
|
|
} break;
|
|
} 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(
|
|
check_sdl_code(
|
|
SDL_RenderClear(renderer));
|
|
SDL_RenderClear(renderer));
|
|
|
|
|
|
- for (size_t i = 0; i < ps_count; ++i) {
|
|
|
|
- render_marker(renderer, ps[i], RED_COLOR);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (ps_count >= 4) {
|
|
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[0], ps[1], RED_COLOR);
|
|
render_line(renderer, ps[2], ps[3], 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_RenderPresent(renderer);
|
|
|
|
|
|
SDL_Delay(DELTA_TIME_MS);
|
|
SDL_Delay(DELTA_TIME_MS);
|