comparison libmlk-core/mlk/core/event.c @ 614:281608524dd1

misc: implement dark/light theming
author David Demelier <markand@malikania.fr>
date Sun, 20 Aug 2023 14:45:10 +0200
parents f76cada0bbb2
children 3930234ab1f5
comparison
equal deleted inserted replaced
613:f76cada0bbb2 614:281608524dd1
285 break; 285 break;
286 } 286 }
287 } 287 }
288 } 288 }
289 289
290 static void
291 convert_theme(union mlk_event *ev)
292 {
293 ev->type = MLK_EVENT_THEME;
294
295 switch (SDL_GetSystemTheme()) {
296 case SDL_SYSTEM_THEME_DARK:
297 ev->theme.theme = MLK_WINDOW_THEME_DARK;
298 break;
299 default:
300 ev->theme.theme = MLK_WINDOW_THEME_LIGHT;
301 break;
302 }
303
304 mlk_window.theme_effective = ev->theme.theme;
305 }
306
290 int 307 int
291 mlk_event_poll(union mlk_event *ev) 308 mlk_event_poll(union mlk_event *ev)
292 { 309 {
293 SDL_Event event; 310 SDL_Event event;
294 311
319 convert_pad(&event, ev); 336 convert_pad(&event, ev);
320 return 1; 337 return 1;
321 case SDL_EVENT_GAMEPAD_AXIS_MOTION: 338 case SDL_EVENT_GAMEPAD_AXIS_MOTION:
322 convert_axis(&event, ev); 339 convert_axis(&event, ev);
323 return 1; 340 return 1;
341 case SDL_EVENT_SYSTEM_THEME_CHANGED:
342 /*
343 * We only report the event if the user preferrence is
344 * set to auto because we don't need it otherwise.
345 */
346 if (mlk_window.theme_user == MLK_WINDOW_THEME_AUTO) {
347 convert_theme(ev);
348 return 1;
349 }
350 break;
324 default: 351 default:
325 continue; 352 break;
326 } 353 }
327 } 354 }
328 355
329 return 0; 356 return 0;
330 } 357 }