OSDN Git Service

SDL_SetEventFilter サンプルコードを追加 https://github.com/libsdl-org/sdlwiki/commit/f6f45060dd...
authormaruhiro <maruhiro@bridge.ocn.ne.jp>
Sat, 30 Oct 2021 14:44:46 +0000 (23:44 +0900)
committermaruhiro <maruhiro@bridge.ocn.ne.jp>
Sat, 30 Oct 2021 14:44:46 +0000 (23:44 +0900)
SDL_SetEventFilter.html

index bbbce74..18d801a 100644 (file)
 <tr><td>filter</td><td>\83C\83x\83\93\83g\94­\90\8e\9e\82É\8cÄ\82Î\82ê\82é\8aÖ\90\94 (\8fÚ\8d×\82ð\8eQ\8fÆ\82·\82é\82±\82Æ)</td></tr>\r
 <tr><td>userdata</td><td>filter\82Ö\93n\82³\82ê\82é\83|\83C\83\93\83^</td></tr>\r
 </table>\r
+<h2>\83T\83\93\83v\83\8b\83R\81[\83h</h2>\r
+<code>\r
+<pre>\r
+#include "SDL.h"\r
+\r
+\r
+// \82Ü\82¸\8cx\8d\90\82±\82ê\82Í\83o\83J\82°\82½\82â\82è\95û\82Å\82 \82é. \82µ\82©\82µ, \83C\83x\83\93\83g\83t\83B\83\8b\83^\82ª\r
+// \82Ç\82Ì\82æ\82¤\82É\93­\82­\82©\82ð\8e¦\82µ\82Ä\82¢\82é. \8eÀ\8dÛ\82Ì\8fê\8d\87\82Í, \83\81\83C\83\93\83\8b\81[\83v\82Å\r
+// SDL_PollEvent\82©\82ç\93¾\82½\83C\83x\83\93\83g\82ð\82½\82¾\8f\88\97\9d\82·\82ê\82Î\82æ\82¢. \88ê\94Ê\93I\82É, \83C\83x\r
+// \83\93\83g\83t\83B\83\8b\83^\82ð\8eg\82¨\82¤\82Æ\8ev\82Á\82½\82Æ\82«\82Í, \97§\82¿\8e~\82Ü\82è, \8c´\93_\82É\8bA\82Á\82Ä\82»\82ê\r
+// \82ª\82æ\82¢\95û\96@\82©\82æ\82­\8dl\82¦\82é\82×\82«\82Å\82 \82é.\r
+\r
+\r
+// \82±\82Ì\8aÖ\90\94\82ðSDL_SetEventFilter\82É\93n\82·. \83\86\81[\83U\82ª\83L\81[\83{\81[\83h\82Ì\83X\83y\81[\83X\r
+// \83o\81[\82ð\89\9f\82µ\82½\82Æ\82«, `userdata`\83|\83C\83\93\83^\82ª\8e¦\82·\92l\82ð\90Ø\82è\91Ö\82¦\82é. \82±\82ê\82Í\r
+// \90Â\90F\82ð\82 \82ç\82í\82µ\82Ä\82¢\82Ä, 255\82Æ0\82Ì\8aÔ\82Ì\92l\82Å\82 \82é. \83\81\83C\83\93\83v\83\8d\83O\83\89\83\80\82Í\83X\r
+// \83y\81[\83X\83o\81[\82ð\89\9f\82·\82½\82Ñ\82É\82±\82Ì\92l\82Ì\90F\82Å\83E\83B\83\93\83h\83E\82ð\83N\83\8a\83A\82·\82é.\r
+static int SDLCALL my_event_filter(void *userdata, SDL_Event * event)\r
+{\r
+    if ((event->type == SDL_KEYDOWN) && (event->key.keysym.sym == SDLK_SPACE)) {\r
+        Uint8 *blue = (Uint8 *) userdata;\r
+        if (*blue == 0) {\r
+            *blue = 255;\r
+        } else {\r
+            *blue = 0;\r
+        }\r
+    }\r
+    return 1;  // \83C\83x\83\93\83g\82ð\83L\83\85\81[\82É\92Ç\89Á\82·\82é\8fê\8d\87\82Í1\82ð\96ß\82·\r
+}\r
+\r
+int main(int argc, char **argv)\r
+{\r
+    Uint8 blue = 0;\r
+    int quit = 0;\r
+\r
+    // \92P\82É\83E\83B\83\93\83h\83E\82ð\90\90¬\82µ\82Ä\8d\95\90F\82Å\83N\83\8a\83A\82·\82é.\r
+    // \8eÀ\8dÛ\82Ì\8fê\8d\87\82Í\83G\83\89\81[\82ð\83`\83F\83b\83N\82·\82é\82±\82Æ!\r
+    SDL_Init(SDL_INIT_VIDEO);\r
+    SDL_Window *window = SDL_CreateWindow("Hello SDL", SDL_WINDOWPOS_UNDEFINED,\r
+                                          SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);\r
+    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC);\r
+    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);\r
+    SDL_RenderClear(renderer);\r
+    SDL_RenderPresent(renderer);\r
+\r
+    // \83C\83x\83\93\83g\83t\83B\83\8b\83^\82ð\90Ý\92è\82·\82é...\r
+    SDL_SetEventFilter(my_event_filter, &blue);\r
+\r
+    // \83C\83x\83\93\83g\83\8b\81[\83v\82ð\96³\8cÀ\82É\8eÀ\8ds\82·\82é. \91S\82Ä\82Ì\83C\83x\83\93\83g\82Í\82±\82±\82É\93\9e\92B\82·\82é\91O\82É\r
+    // my_event_filter\8aÖ\90\94\82ð\92Ê\89ß\82·\82é. \83t\83\8c\81[\83\80\82²\82Æ\82É\83E\83B\83\93\83h\83E\82ð`blue`\82É\90Ý\92è\82³\r
+    // \82ê\82½\90F\82Å\93h\82è\82Â\82Ô\82·. \82»\82Ì\92l\82Ì\83A\83h\83\8c\83X\82Íuserdata\82Å\83t\83B\83\8b\83^\8aÖ\90\94\82É\93n\82³\82ê,\r
+    // \82»\82±\82Å\95Ï\82¦\82ç\82ê\82é.\r
+    while (!quit) {\r
+        SDL_Event e;\r
+        while (SDL_PollEvent(&e)) {\r
+            if (e.type == SDL_QUIT) {\r
+                quit = 1;\r
+            }\r
+        }\r
+\r
+        SDL_SetRenderDrawColor(renderer, 0, 0, blue, 255);\r
+        SDL_RenderClear(renderer);\r
+        SDL_RenderPresent(renderer);\r
+    }\r
+\r
+    SDL_Quit();\r
+    return 0;\r
+}\r
+</pre>\r
+</code>\r
 <h2>\8fÚ\8d×</h2>\r
 <p>\r
 filter\82Ì\8aÖ\90\94\83v\83\8d\83g\83^\83C\83v\82Í\r