From 203d0081c1bea543dc651d6a3fee69d99ffddda7 Mon Sep 17 00:00:00 2001 From: Nic Barker Date: Sat, 28 Dec 2024 19:08:49 +1300 Subject: [PATCH] Add scroll wheel detection to SDL2 example --- examples/SDL2-video-demo/main.c | 21 ++++++++++++++++++++- renderers/SDL2/README | 13 +++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 renderers/SDL2/README diff --git a/examples/SDL2-video-demo/main.c b/examples/SDL2-video-demo/main.c index d65147c..ab0e889 100644 --- a/examples/SDL2-video-demo/main.c +++ b/examples/SDL2-video-demo/main.c @@ -305,19 +305,38 @@ int main(void) { int windowHeight = 0; SDL_GetWindowSize(window, &windowWidth, &windowHeight); Clay_Initialize(clayMemory, (Clay_Dimensions) { (float)windowWidth, (float)windowHeight }, (Clay_ErrorHandler) { HandleClayErrors }); + Uint64 NOW = SDL_GetPerformanceCounter(); + Uint64 LAST = 0; + double deltaTime = 0; while (true) { + Clay_Vector2 scrollDelta = {}; SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { - case SDL_QUIT: goto quit; + case SDL_QUIT: { goto quit; } + case SDL_MOUSEWHEEL: { + scrollDelta.x = event.wheel.x; + scrollDelta.y = event.wheel.y; + break; + } } } + LAST = NOW; + NOW = SDL_GetPerformanceCounter(); + deltaTime = (double)((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() ); + int mouseX = 0; int mouseY = 0; Uint32 mouseState = SDL_GetMouseState(&mouseX, &mouseY); Clay_Vector2 mousePosition = (Clay_Vector2){ (float)mouseX, (float)mouseY }; Clay_SetPointerState(mousePosition, mouseState & SDL_BUTTON(1)); + + Clay_UpdateScrollContainers( + true, + (Clay_Vector2) { scrollDelta.x, scrollDelta.y }, + deltaTime + ); SDL_GetWindowSize(window, &windowWidth, &windowHeight); Clay_SetLayoutDimensions((Clay_Dimensions) { (float)windowWidth, (float)windowHeight }); diff --git a/renderers/SDL2/README b/renderers/SDL2/README new file mode 100644 index 0000000..582e4db --- /dev/null +++ b/renderers/SDL2/README @@ -0,0 +1,13 @@ +Please note, the SDL2 renderer is not 100% feature complete. It is currently missing: + +- Border rendering +- Image rendering +- Rounded rectangle corners + +Note: on Mac OSX, SDL2 for some reason decides to automatically disable momentum scrolling on macbook trackpads. +You can re enable it in objective C using: + +```C +[[NSUserDefaults standardUserDefaults] setBool: YES + forKey: @"AppleMomentumScrollSupported"]; +``` \ No newline at end of file