aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authornathan <nathansmith@disroot.org>2025-11-17 05:50:31 +0000
committernathan <nathansmith@disroot.org>2025-11-17 05:50:31 +0000
commitf6922dc12deb981cf95498afeb939f24171a5fc4 (patch)
tree4add44cdcdc1d4801d43cb4a557f7332fc6eef56 /src
parentfe39cc897fbc8d8470d790df5306550c841d95d4 (diff)
downloadFindThings-f6922dc12deb981cf95498afeb939f24171a5fc4.tar.gz
FindThings-f6922dc12deb981cf95498afeb939f24171a5fc4.tar.bz2
FindThings-f6922dc12deb981cf95498afeb939f24171a5fc4.zip
Testing widgets in the wm
Diffstat (limited to 'src')
-rw-r--r--src/game.c23
-rw-r--r--src/ui.c23
-rw-r--r--src/ui.h18
3 files changed, 42 insertions, 22 deletions
diff --git a/src/game.c b/src/game.c
index a8c4d4a..36b1d94 100644
--- a/src/game.c
+++ b/src/game.c
@@ -45,6 +45,21 @@ void resetScreenScale(Game* game)
}
}
+FocusCommand testFloatingWindowCallback(FloatingWindow* window, Game* game)
+{
+ DrawText("test", window->rect.x + 10,
+ window->rect.y + 10 + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, 15, BLUE);
+
+ if (GuiButton((Rectangle){window->rect.x + 10.0, window->rect.y + 50.0,
+ 40.0, 20.0}, "A"))
+ {
+ puts("hi");
+ return DEMAND_FOCUS;
+ }
+
+ return NO_FOCUS_ACTION;
+}
+
void initGame(Game* game)
{
game->sceneId = GAME_SCENE;
@@ -91,6 +106,7 @@ void initGame(Game* game)
window = createFloatingWindow("test2",
(Rectangle){200.0, 200.0, 100.0, 100.0});
+ window.callback = testFloatingWindowCallback;
addWindowToWindowManager(&game->wm, window);
window = createFloatingWindow("test3",
@@ -142,11 +158,6 @@ void drawGameScreen(Game* game)
}
}
-void updateGameUI(Game* game)
-{
- updateWindowManager(&game->wm);
-}
-
void updateGameScene(Game* game)
{
// Handle toggle cursor.
@@ -183,7 +194,7 @@ void updateGameScene(Game* game)
drawGameScreen(game);
- updateGameUI(game);
+ updateWindowManager(&game->wm, game);
}
void handleGameResize(Game* game)
diff --git a/src/ui.c b/src/ui.c
index 9faabcd..6fbc250 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -10,7 +10,8 @@ FloatingWindow createFloatingWindow(const char* title, Rectangle rect)
.callback = NULL,
.contentSize = Vector2Zero(),
.scroll = Vector2Zero(),
- .hasFocus = false
+ .hasFocus = false,
+ .data = NULL
};
memcpy(window.title, title, UI_WINDOW_TITLE_MAX * sizeof(char));
@@ -144,8 +145,11 @@ void updateFloatingWindowMinimized(FloatingWindow* window)
}
}
-void updateFloatingWindowNotMinimized(FloatingWindow* window)
+FocusCommand updateFloatingWindowNotMinimized(FloatingWindow* window,
+ Game* game)
{
+ FocusCommand focus = NO_FOCUS_ACTION;
+
window->minimized = GuiWindowBox(
(Rectangle){window->rect.x, window->rect.y, window->rect.width,
window->rect.height}, window->title) & window->hasFocus;
@@ -175,8 +179,7 @@ void updateFloatingWindowNotMinimized(FloatingWindow* window)
BeginScissorMode(scissor.x, scissor.y, scissor.width, scissor.height);
}
- window->callback((Vector2){window->rect.x, window->rect.y},
- window->scroll);
+ focus = window->callback(window, game);
if (requireScissor)
{
@@ -187,9 +190,11 @@ void updateFloatingWindowNotMinimized(FloatingWindow* window)
// Draw the resize button/icon.
GuiDrawIcon(71, window->rect.x + window->rect.width - 20,
window->rect.y + window->rect.height - 20, 1, GREEN);
+
+ return focus;
}
-FocusCommand updateFloatingWindow(FloatingWindow* window)
+FocusCommand updateFloatingWindow(FloatingWindow* window, Game* game)
{
FocusCommand focus = NO_FOCUS_ACTION;
bool isMouseLeftClick = IsMouseButtonPressed(MOUSE_LEFT_BUTTON);
@@ -224,7 +229,8 @@ FocusCommand updateFloatingWindow(FloatingWindow* window)
}
else
{
- updateFloatingWindowNotMinimized(window);
+ FocusCommand result = updateFloatingWindowNotMinimized(window, game);
+ focus = result == NO_FOCUS_ACTION ? focus : result;
}
return focus;
@@ -235,14 +241,14 @@ void initWindowManager(WindowManager* wm)
memset(wm, 0, sizeof(WindowManager));
}
-void updateWindowManager(WindowManager* wm)
+void updateWindowManager(WindowManager* wm, Game* game)
{
Vector2 mousePosition = GetMousePosition();
int focusOnto = -1;
for (int index = 0; index < wm->windowCount; ++index)
{
- FocusCommand focus = updateFloatingWindow(&wm->windows[index]);
+ FocusCommand focus = updateFloatingWindow(&wm->windows[index], game);
if (focusOnto != -1)
{
@@ -255,7 +261,6 @@ void updateWindowManager(WindowManager* wm)
break;
case REQUEST_FOCUS:
{
- puts("hi");
bool canFocus = true;
// Windows ontop of it prevent focus.
diff --git a/src/ui.h b/src/ui.h
index 76d9b1f..95e250a 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -14,15 +14,18 @@
#define UI_WINDOW_TITLE_MAX 32
#define UI_WINDOW_MAX 4
-typedef void (*DrawWindowContentCallback)(Vector2 position, Vector2 scroll);
+typedef struct FloatingWindow FloatingWindow;
+typedef enum FocusCommand FocusCommand;
+typedef FocusCommand (*DrawWindowContentCallback)(FloatingWindow* window,
+ Game* game);
-typedef enum {
+enum FocusCommand {
NO_FOCUS_ACTION,
REQUEST_FOCUS,
DEMAND_FOCUS
-} FocusCommand;
+};
-typedef struct {
+struct FloatingWindow {
char title[UI_WINDOW_TITLE_MAX];
Rectangle rect;
bool minimized;
@@ -32,7 +35,8 @@ typedef struct {
Vector2 contentSize;
Vector2 scroll;
bool hasFocus;
-} FloatingWindow;
+ void* data;
+};
typedef struct {
FloatingWindow windows[UI_WINDOW_MAX];
@@ -40,10 +44,10 @@ typedef struct {
} WindowManager;
FloatingWindow createFloatingWindow(const char* title, Rectangle rect);
-FocusCommand updateFloatingWindow(FloatingWindow* window);
+FocusCommand updateFloatingWindow(FloatingWindow* window, Game* game);
void initWindowManager(WindowManager* wm);
-void updateWindowManager(WindowManager* wm);
+void updateWindowManager(WindowManager* wm, Game* game);
void addWindowToWindowManager(WindowManager* wm, FloatingWindow window);
void focusOnWindow(WindowManager* wm, int windowIndex);