diff options
| author | nathan <nathansmith@disroot.org> | 2025-11-16 05:10:55 +0000 |
|---|---|---|
| committer | nathan <nathansmith@disroot.org> | 2025-11-16 05:10:55 +0000 |
| commit | 7bb57d60f8d8249eb48c9c7a7e7d3760127a0c3c (patch) | |
| tree | b6daaa6d121625a6de0b7f2e50e15d6f04a319e5 /src/ui.c | |
| parent | 52d1a04b30b5ce8da9b9dcce02e829a35f664dcb (diff) | |
| download | FindThings-7bb57d60f8d8249eb48c9c7a7e7d3760127a0c3c.tar.gz FindThings-7bb57d60f8d8249eb48c9c7a7e7d3760127a0c3c.tar.bz2 FindThings-7bb57d60f8d8249eb48c9c7a7e7d3760127a0c3c.zip | |
Working on window focus
Diffstat (limited to 'src/ui.c')
| -rw-r--r-- | src/ui.c | 69 |
1 files changed, 58 insertions, 11 deletions
@@ -1,9 +1,9 @@ #include "ui.h" -FloatingWindow createFloatingWindow(const char* title) +FloatingWindow createFloatingWindow(const char* title, Rectangle rect) { FloatingWindow window = (FloatingWindow){ - .rect = (Rectangle){0.0, 0.0, 100.0, 100.0}, + .rect = rect, .minimized = false, .moving = false, .resizing = false, @@ -187,15 +187,24 @@ void updateFloatingWindowNotMinimized(FloatingWindow* window) window->rect.y + window->rect.height - 20, 1, GREEN); } -void updateFloatingWindow(FloatingWindow* window) +bool updateFloatingWindow(FloatingWindow* window) { + bool focusOnThisWindow = false; + bool isMouseLeftClick = IsMouseButtonPressed(MOUSE_LEFT_BUTTON); + // Window movement and resize input and collision check. - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !window->moving - && !window->resizing) + if (isMouseLeftClick && !window->moving && !window->resizing) { floatingWindowTransformCollisionCheck(window); } + // Focus on window. + if (isMouseLeftClick && CheckCollisionPointRec(GetMousePosition(), + window->rect)) + { + focusOnThisWindow = true; + } + // Window movement and resize update. if (window->moving) { @@ -206,7 +215,7 @@ void updateFloatingWindow(FloatingWindow* window) updateFloatingWindowResizing(window); } - // window and content drawing with scissor and scroll area + // Window and content drawing with scissor and scroll area. if(window->minimized) { updateFloatingWindowMinimized(window); @@ -215,17 +224,55 @@ void updateFloatingWindow(FloatingWindow* window) { updateFloatingWindowNotMinimized(window); } + + return focusOnThisWindow; +} + +void initWindowManager(WindowManager* wm) +{ + memset(wm, 0, sizeof(WindowManager)); +} + +void updateWindowManager(WindowManager* wm) +{ + int focusOnto = -1; + + for (int index = 0; index < wm->windowCount; ++index) + { + if (updateFloatingWindow(&wm->windows[index]) + && index != wm->windowCount - 1) + { + focusOnto = index; + } + } + + if (focusOnto != -1) + { + focusOnWindow(wm, focusOnto); + } } -void initWindowManager(WindowManager* windowManager) +void addWindowToWindowManager(WindowManager* wm, FloatingWindow window) { - memset(windowManager, 0, sizeof(WindowManager)); + if (wm->windowCount < UI_WINDOW_MAX) + { + wm->windows[wm->windowCount] = window; + ++wm->windowCount; + } + else + { + TraceLog(LOG_ERROR, "'wm->windowCount' went over the limit"); + } } -void updateWindowManager(WindowManager* windowManager) +void focusOnWindow(WindowManager* wm, int windowIndex) { - for (int index = 0; index < windowManager->windowCount; ++index) + FloatingWindow window = wm->windows[windowIndex]; + + for (int index = windowIndex + 1; index < wm->windowCount; ++index) { - updateFloatingWindow(&windowManager->windows[index]); + wm->windows[index - 1] = wm->windows[index]; } + + wm->windows[wm->windowCount - 1] = window; } |
