From bfafdb290061ee57dc3da94505c79fe539056c2d Mon Sep 17 00:00:00 2001 From: lenn Date: Sat, 20 Sep 2025 23:41:39 +0800 Subject: [PATCH] add source code --- CMakeLists.txt | 14 ++++++++ main.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 main.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..99ddfb7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.16) + +project(sdl-event LANGUAGES C) +find_package(SDL2 REQUIRED) + +add_executable(sdl-event main.c) + +include(GNUInstallDirs) +install(TARGETS sdl-event + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2) diff --git a/main.c b/main.c new file mode 100644 index 0000000..321a044 --- /dev/null +++ b/main.c @@ -0,0 +1,92 @@ +#include +#include +#define FF_QUIT_EVENT (SDL_USEREVENT + 2) + +int main() +{ + SDL_Window *window = NULL; + SDL_Renderer *renderer = NULL; + + SDL_Init(SDL_INIT_VIDEO); + window = SDL_CreateWindow("SDL2 Event", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + 640, + 480, + SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS); + + if (window == NULL) { + printf("Could not create window: %s\n", SDL_GetError()); + return 1; + } + + renderer = SDL_CreateRenderer(window, -1, 0); + + SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255); + + SDL_RenderClear(renderer); + + SDL_RenderPresent(renderer); + + SDL_Event event; + int b_exit = 0; + for (;;) { + SDL_WaitEvent(&event); + switch (event.type) + { + case SDL_KEYDOWN: + switch (event.key.keysym.sym) + { + case SDLK_a: + printf("user press a\n"); + break; + case SDLK_s: + printf("user press s\n"); + break; + case SDLK_q: + printf("user press q\n"); + SDL_Event event_quit; + event_quit.type = FF_QUIT_EVENT; + SDL_PushEvent(&event_quit); + break; + default: + printf("key down 0x%x\n", event.key.keysym.sym); + break; + } + break; + case SDL_MOUSEBUTTONDOWN: + if (event.button.button == SDL_BUTTON_LEFT) { + printf("mouse left press\n"); + } + else if (event.button.button == SDL_BUTTON_RIGHT) { + printf("mouse right press\n"); + } + else { + printf("mouse down %d\n", event.button.button); + } + break; + case SDL_MOUSEMOTION: + printf("mouse movie pos(%d,%d)\n", event.button.x, event.button.y); + break; + case FF_QUIT_EVENT: + printf("receive quit event\n"); + b_exit = 1; + break; + default: + break; + } + + if (b_exit) + break; + + } + + if (renderer) + SDL_DestroyRenderer(renderer); + + if (window) + SDL_DestroyWindow(window); + + SDL_Quit(); + return 0; +}