23void syncWindowPixelSize() {
24 auto *win = eve::ModuleManager::getInstance<eve::window::Window>(
"Window");
26 auto *sdlWin =
dynamic_cast<Window *
>(win);
28 SDL_Window *native =
static_cast<SDL_Window *
>(sdlWin->getHandle());
31 int lw = 0, lh = 0, pw = 0, ph = 0;
32 SDL_GetWindowSize(native, &lw, &lh);
33 SDL_Vulkan_GetDrawableSize(native, &pw, &ph);
34 if (pw <= 0 || ph <= 0) {
39 s.
width =
static_cast<uint16_t
>(std::max(lw, 1));
40 s.height =
static_cast<uint16_t
>(std::max(lh, 1));
42 sdlWin->updateSettings(
s,
true);
51int SDLCALL watchAppEvents(
void * , SDL_Event *event) {
53 if (!surfaceHost)
return 1;
55 switch (event->type) {
56 case SDL_APP_DIDENTERBACKGROUND:
58 surfaceHost->setActive(
false);
60 case SDL_APP_WILLENTERFOREGROUND:
61 case SDL_APP_DIDENTERFOREGROUND:
64 surfaceHost->requestSurfaceRecreate();
65 surfaceHost->setActive(
true);
66 syncWindowPixelSize();
76 bool observePlatformEvent(
const void *nativeEvent)
override {
77 const auto &e = *
static_cast<const SDL_Event *
>(nativeEvent);
78 if (e.type == SDL_WINDOWEVENT && (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED ||
79 e.window.event == SDL_WINDOWEVENT_RESIZED))
80 syncWindowPixelSize();
86 void onPumpFinished()
override {
89 if (watchInstalled_)
return;
90 watchInstalled_ =
true;
91 SDL_AddEventWatch(watchAppEvents,
nullptr);
95 bool watchInstalled_ =
false;
100 static WindowEventSink sink;