diff --git a/Makefile b/Makefile index 604cdb2..9248495 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,7 @@ $(EXE): sdl_handmade.c libhandmade $(FRAMEWORKS) -o $@ run: - ./$(EXE) + @ ./$(EXE) tags: $(OBJS) ctags -R *.h *.c diff --git a/sdl_handmade.c b/sdl_handmade.c index 7eed8f6..84b4d08 100644 --- a/sdl_handmade.c +++ b/sdl_handmade.c @@ -254,6 +254,13 @@ static void SDLProcessInputDigitalButton(SDL_GameController *Controller, static void HandleEvent(SDL_Event *Event) { + /* TODO: Should this be below scopes? */ + SDL_Window *Window; + SDL_Renderer *Renderer; + + Window = SDL_GetWindowFromID(Event->window.windowID); + Renderer = SDL_GetRenderer(Window); + switch(Event->type) { case SDL_QUIT: { GlobalRunning = FALSE; @@ -262,13 +269,8 @@ static void HandleEvent(SDL_Event *Event) case SDL_WINDOWEVENT: { switch(Event->window.event) { case SDL_WINDOWEVENT_SIZE_CHANGED: { - SDL_Window *Window; - SDL_Renderer *Renderer; sdl_window_dimension Dimension; - Window = SDL_GetWindowFromID(Event->window.windowID); - Renderer = SDL_GetRenderer(Window); - Dimension = SDLGetWindowDimension(Window); SDLResizeTexture(&GlobalBackbuffer, Renderer, Dimension.Width, Dimension.Height); @@ -276,6 +278,18 @@ static void HandleEvent(SDL_Event *Event) case SDL_WINDOWEVENT_EXPOSED: { } break; + + case SDL_WINDOWEVENT_FOCUS_GAINED: { + if(SDL_SetWindowOpacity(Window, 1.0f) != 0) { + /* TODO: This didn't work . . . SDL_GetError() */ + } + } break; + + case SDL_WINDOWEVENT_FOCUS_LOST: { + if(SDL_SetWindowOpacity(Window, 0.5f) != 0) { + /* TODO: This didn't work . . . SDL_GetError() */ + } + } break; } } break; } @@ -611,9 +625,13 @@ S32 main(S32 argc, char *argv[]) SDLInitControllers(); + /* NOTE: Floating windows are not supported oficially by Wayland + * protocol. However, SDL_WINDOW_ALWAYS_ON_TOP does work on KDE + * under Wayland. I have not tested GNOME. */ Window = SDL_CreateWindow("Handmade Hero", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 700, 500, - SDL_WINDOW_RESIZABLE); + SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALWAYS_ON_TOP); + if(Window) { SDL_Renderer *Renderer;