From 722a9d1e729aff2eb64f3c064c33d547ea980eb0 Mon Sep 17 00:00:00 2001 From: physick Date: Fri, 31 Jul 2026 18:36:22 +0500 Subject: Buttons GUI start --- src/scenes/puzzleScene.c | 64 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) (limited to 'src/scenes') diff --git a/src/scenes/puzzleScene.c b/src/scenes/puzzleScene.c index feeada8..67d3c86 100644 --- a/src/scenes/puzzleScene.c +++ b/src/scenes/puzzleScene.c @@ -7,6 +7,7 @@ typedef struct { Puzzle *PuzzlePtr; TextArea *EditorInfo; + Button *submitButton; int scroll; } puzzleSceneData; @@ -22,6 +23,32 @@ void DrawPuzzleName(char *name) { DrawTextEx(*GetMainFont(), name, pos, HEADER_FONT_SIZE, 1, COLORSCHEME_BROWN); } +void DrawControls(Scene *self, Rectangle rect) { + DrawRecBordered(rect, WHITE, COLORSCHEME_ORANGE, BORDER); + puzzleSceneData *data = ((Scene *)self)->data; + Rectangle panel = { + .x = rect.x + BORDER * 2, + .y = rect.y + BORDER * 2, + .width = rect.width - BORDER * 4, + .height = rect.height - BORDER * 4, + }; + + int acc = panel.width - panel.height + BORDER * 4; + + if (data->submitButton != NULL) { + Rectangle submit_trg = { + .x = acc, + .y = panel.y, + .width = panel.height, + .height = panel.height, + }; + // Hacky. Should find a way to update in update() + UpdateButton(data->submitButton, &submit_trg); + DrawButton(data->submitButton, &submit_trg); + acc -= (panel.height + PADDING); + } +} + Rectangle GetBodyRect() { int HeaderOffset = PADDING * 2 + HEADER_FONT_SIZE; Rectangle outp = { @@ -79,9 +106,26 @@ bool drawPuzzleScene(void *self) { GetMainFont(), 20, COLORSCHEME_BROWN, 3, &data->scroll); DrawTextArea(data->EditorInfo, pane2); + Rectangle controls_rect = { + .x = PADDING, + .y = body.y + body.height + PADDING, + .width = body.width, + .height = FOOTER_HEIGHT, + }; + DrawControls(self, controls_rect); + return true; } +void SubmitPuzzle(Scene *self) { + puzzleSceneData *data = ((Scene *)self)->data; + + char *script = GetText(data->EditorInfo); + SubmitionResult *res = SubmitSolution(data->PuzzlePtr, script); + if (res != NULL) + AddScene(CreateResultView(res)); +} + bool updatePuzzleScene(void *self) { puzzleSceneData *data = ((Scene *)self)->data; @@ -91,10 +135,7 @@ bool updatePuzzleScene(void *self) { UpdateTextArea(data->EditorInfo, pane2); if (IsKeyPressed(KEY_F5)) { - char *script = GetText(data->EditorInfo); - SubmitionResult *res = SubmitSolution(data->PuzzlePtr, script); - if (res != NULL) - AddScene(CreateResultView(res)); + SubmitPuzzle(self); } return true; @@ -104,6 +145,7 @@ void deinitPuzzleScene(void *self) { puzzleSceneData *data = ((Scene *)self)->data; TraceLog(LOG_INFO, "Deleting a puzzle scene"); FreeTextArea(data->EditorInfo); + if (data->submitButton != NULL) free(data->submitButton); free(data); free((Scene *)self); } @@ -128,6 +170,20 @@ Scene *CreatePuzzleScene(Puzzle *puzzle) { EditorDisplayParams->scroll_v = 0; } + Button *submitButton = malloc(sizeof(Button)); + if (submitButton != NULL) { + submitButton->parent = outp; + submitButton->OnClick = SubmitPuzzle; + submitButton->atlas = GetButtonsAtlas(); + submitButton->textrueLocation = (Rectangle) { + .x = 0, + .y = 0, + .width = 32, + .height = 32, + }; + } + data->submitButton = submitButton; + if (puzzle->InitialCode != NULL) { data->EditorInfo = CreateTextAreaFromText(EditorDisplayParams, puzzle->InitialCode); } else { -- cgit v1.3