From a1fabd362368f6db81139294d67206ddd94dabd3 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Sun, 26 Oct 2025 13:39:25 +0100 Subject: [PATCH] Fixes --- examples/ButtonExample.php | 75 ----- examples/FlexLayout.php | 72 ----- examples/OverflowScroll.php | 64 ---- examples/SimpleButtonExample.php | 71 ----- examples/TestStack.php | 29 -- examples/Todo.php | 43 --- examples/advanced_multi_window_example.php | 185 ----------- examples/async_button_example.php | 75 ----- examples/async_http_example.php | 126 -------- examples/multi_process_windows.php | 160 ---------- examples/multi_window_example.php | 161 ---------- examples/simple_two_windows.php | 135 -------- examples/simple_window_example.php | 65 ---- examples/test_flex_col.php | 42 +++ examples/test_textinput.php | 47 +++ examples/test_textinput_simple.php | 39 +++ examples/threaded_framework_windows.php | 153 --------- examples/threaded_two_windows.php | 170 ---------- examples/todo_app.php | 129 ++++++++ php-sdl3/.libs/sdl3.lai | 2 +- php-sdl3/.libs/sdl3.o | Bin 134320 -> 183912 bytes php-sdl3/.libs/sdl3.so | Bin 89896 -> 202200 bytes php-sdl3/.libs/sdl3_events.o | Bin 0 -> 118352 bytes php-sdl3/.libs/sdl3_image.o | Bin 0 -> 55432 bytes php-sdl3/.libs/sdl3_ttf.o | Bin 0 -> 67704 bytes php-sdl3/Makefile | 15 +- php-sdl3/Makefile.objects | 9 + php-sdl3/button_example.php | 148 +++++++++ php-sdl3/button_with_text.php | 166 ++++++++++ php-sdl3/config.m4 | 38 ++- php-sdl3/config.nice | 3 + php-sdl3/config.status | 4 +- php-sdl3/configure | 338 ++++++++++++++++++-- php-sdl3/draw_rounded_ex.php | 8 +- php-sdl3/helper.h | 45 ++- php-sdl3/libtool | 2 +- php-sdl3/modules/sdl3.la | 2 +- php-sdl3/modules/sdl3.so | Bin 89896 -> 202200 bytes php-sdl3/multi_window_example.php | 243 ++++++++++++++ php-sdl3/php_sdl3.h | 6 + php-sdl3/sdl3.c | 355 ++++++++++++++++++++- php-sdl3/sdl3.dep | 5 +- php-sdl3/sdl3.la | 2 +- php-sdl3/sdl3_events.c | 175 ++++++++++ php-sdl3/sdl3_events.dep | 95 ++++++ php-sdl3/sdl3_events.h | 26 ++ php-sdl3/sdl3_events.lo | 12 + php-sdl3/sdl3_image.c | 66 ++++ php-sdl3/sdl3_image.dep | 95 ++++++ php-sdl3/sdl3_image.h | 31 ++ php-sdl3/sdl3_image.lo | 12 + php-sdl3/sdl3_ttf.c | 170 ++++++++++ php-sdl3/sdl3_ttf.dep | 96 ++++++ php-sdl3/sdl3_ttf.h | 71 +++++ php-sdl3/sdl3_ttf.lo | 12 + php-sdl3/test_functions.php | 35 ++ src/Framework/Application.php | 81 ++++- src/Framework/TextRenderer.php | 106 +++--- src/Tailwind/Parser/Flex.php | 4 + src/Tailwind/Parser/Height.php | 3 +- src/Tailwind/Parser/Margin.php | 24 +- src/Tailwind/Parser/Padding.php | 25 +- src/Tailwind/Parser/Width.php | 3 +- src/Tailwind/Style/FlexTypeEnum.php | 3 +- src/Ui/Component.php | 90 ++++-- src/Ui/Widget/Checkbox.php | 110 +++++++ src/Ui/Widget/Container.php | 143 +++++---- src/Ui/Widget/Label.php | 4 +- src/Ui/Widget/TextInput.php | 246 ++++++++++++++ src/Ui/Window.php | 210 +++++++----- test_multi_window.php | 43 +++ test_queue_events.php | 75 ----- 72 files changed, 3317 insertions(+), 1981 deletions(-) delete mode 100644 examples/ButtonExample.php delete mode 100644 examples/FlexLayout.php delete mode 100644 examples/OverflowScroll.php delete mode 100644 examples/SimpleButtonExample.php delete mode 100644 examples/TestStack.php delete mode 100644 examples/Todo.php delete mode 100644 examples/advanced_multi_window_example.php delete mode 100644 examples/async_button_example.php delete mode 100644 examples/async_http_example.php delete mode 100644 examples/multi_process_windows.php delete mode 100644 examples/multi_window_example.php delete mode 100644 examples/simple_two_windows.php delete mode 100644 examples/simple_window_example.php create mode 100644 examples/test_flex_col.php create mode 100644 examples/test_textinput.php create mode 100644 examples/test_textinput_simple.php delete mode 100644 examples/threaded_framework_windows.php delete mode 100644 examples/threaded_two_windows.php create mode 100644 examples/todo_app.php create mode 100644 php-sdl3/.libs/sdl3_events.o create mode 100644 php-sdl3/.libs/sdl3_image.o create mode 100644 php-sdl3/.libs/sdl3_ttf.o create mode 100644 php-sdl3/button_example.php create mode 100644 php-sdl3/button_with_text.php create mode 100644 php-sdl3/multi_window_example.php create mode 100644 php-sdl3/sdl3_events.c create mode 100644 php-sdl3/sdl3_events.dep create mode 100644 php-sdl3/sdl3_events.h create mode 100644 php-sdl3/sdl3_events.lo create mode 100644 php-sdl3/sdl3_image.c create mode 100644 php-sdl3/sdl3_image.dep create mode 100644 php-sdl3/sdl3_image.h create mode 100644 php-sdl3/sdl3_image.lo create mode 100644 php-sdl3/sdl3_ttf.c create mode 100644 php-sdl3/sdl3_ttf.dep create mode 100644 php-sdl3/sdl3_ttf.h create mode 100644 php-sdl3/sdl3_ttf.lo create mode 100644 php-sdl3/test_functions.php create mode 100644 src/Ui/Widget/Checkbox.php create mode 100644 src/Ui/Widget/TextInput.php create mode 100644 test_multi_window.php delete mode 100644 test_queue_events.php diff --git a/examples/ButtonExample.php b/examples/ButtonExample.php deleted file mode 100644 index 5d0c9b9..0000000 --- a/examples/ButtonExample.php +++ /dev/null @@ -1,75 +0,0 @@ -addComponent($title); - -// Button with m-10 p-10, should be: 12 (text) + 10 (padding-top) + 10 (padding-bottom) = 32px height -$button1 = new Button( - text: 'Click Me', - style: 'm-10 p-10 bg-blue-500 rounded-lg', -); -$mainContainer->addComponent($button1); - -// Button with different padding -$button2 = new Button( - text: 'Another Button', - style: 'm-5 p-15 bg-green-500 hover:bg-green-200 rounded-lg', - onClick: function () { - echo 'test2'; - }, -); -$mainContainer->addComponent($button2); - -// Button with no padding -$button3 = new Button( - text: 'No Padding', - style: 'm-10 bg-red-500 rounded-lg', -); -$mainContainer->addComponent($button3); - -// Container with multiple labels (should stack) -$labelContainer = new Container(style: 'm-10 p-10 bg-white rounded-lg'); -$labelContainer->addComponent(new Label( - text: 'Label 1', - style: 'text-black', -)); -$labelContainer->addComponent(new Label( - text: 'Label 2', - style: 'text-black', -)); -$labelContainer->addComponent(new Label( - text: 'Label 3', - style: 'text-black', -)); -$mainContainer->addComponent($labelContainer); - -// Info text -$info = new Label( - text: 'Containers should auto-size to their content', - style: 'text-black m-10', -); -$mainContainer->addComponent($info); - -$app->setRoot($mainContainer); -$app->run(); diff --git a/examples/FlexLayout.php b/examples/FlexLayout.php deleted file mode 100644 index b0446b6..0000000 --- a/examples/FlexLayout.php +++ /dev/null @@ -1,72 +0,0 @@ -addComponent($label1); - -$box2 = new Container(style: 'basis-1/3 bg-green-500 p-4'); -$label2 = new Label(text: '33% Basis', style: 'text-white'); -$box2->addComponent($label2); - -$box3 = new Container(style: 'basis-1/3 bg-red-500 p-4'); -$label3 = new Label(text: '33% Basis', style: 'text-white'); -$box3->addComponent($label3); - -$row1->addComponent($box1); -$row1->addComponent($box2); -$row1->addComponent($box3); - -// Example 2: Flex Row with flex-grow -$row2 = new Container(style: 'flex flex-row bg-white m-2 p-2'); - -$fixedBox = new Container(style: 'w-200 bg-purple-500 p-4'); -$fixedLabel = new Label(text: 'Fixed 200px', style: 'text-white'); -$fixedBox->addComponent($fixedLabel); - -$growBox = new Container(style: 'flex-1 bg-yellow-500 p-4'); -$growLabel = new Label(text: 'Flex Grow (rest)', style: 'text-black'); -$growBox->addComponent($growLabel); - -$row2->addComponent($fixedBox); -$row2->addComponent($growBox); - -// Example 3: Flex Column -$col1 = new Container(style: 'flex flex-col bg-white m-2 p-2 h-200'); - -$colBox1 = new Container(style: 'basis-1/2 bg-cyan-500 p-4'); -$colLabel1 = new Label(text: '50% Height', style: 'text-white'); -$colBox1->addComponent($colLabel1); - -$colBox2 = new Container(style: 'basis-1/2 bg-orange-500 p-4'); -$colLabel2 = new Label(text: '50% Height', style: 'text-white'); -$colBox2->addComponent($colLabel2); - -$col1->addComponent($colBox1); -$col1->addComponent($colBox2); - -// Add all examples to main container -$mainContainer->addComponent($row1); -$mainContainer->addComponent($row2); -$mainContainer->addComponent($col1); - -$app->setRoot($mainContainer); -$app->run(); diff --git a/examples/OverflowScroll.php b/examples/OverflowScroll.php deleted file mode 100644 index 44c2270..0000000 --- a/examples/OverflowScroll.php +++ /dev/null @@ -1,64 +0,0 @@ -addComponent($title); - -// Example 1: Vertical scroll with overflow-y-auto -$scrollContainer = new Container(style: 'overflow-y-auto bg-white m-4 p-4 h-200'); - -// Add many items to trigger overflow -for ($i = 1; $i <= 20; $i++) { - $item = new Container(style: 'bg-blue-500 m-2 p-3 rounded-lg'); - $label = new Label( - text: "Item {$i} - Scroll vertically with mouse wheel or drag the scrollbar", - style: 'text-white' - ); - $item->addComponent($label); - $scrollContainer->addComponent($item); -} - -$mainContainer->addComponent($scrollContainer); - -// Example 2: Horizontal scroll with overflow-x-auto -$label2 = new Label(text: 'Horizontal Scroll:', style: 'text-black p-2'); -$mainContainer->addComponent($label2); - -$horizontalScroll = new Container(style: 'flex flex-row overflow-x-auto bg-white m-4 p-4 h-100'); - -for ($i = 1; $i <= 10; $i++) { - $box = new Container(style: 'w-150 bg-green-500 m-2 p-3 rounded-lg'); - $boxLabel = new Label(text: "Box {$i}", style: 'text-white'); - $box->addComponent($boxLabel); - $horizontalScroll->addComponent($box); -} - -$mainContainer->addComponent($horizontalScroll); - -// Instructions -$instructions = new Container(style: 'bg-yellow-200 p-4 m-4 rounded-lg'); -$instructionText = new Label( - text: 'Use mouse wheel to scroll. Click and drag scrollbars.', - style: 'text-black' -); -$instructions->addComponent($instructionText); -$mainContainer->addComponent($instructions); - -$app->setRoot($mainContainer); -$app->run(); diff --git a/examples/SimpleButtonExample.php b/examples/SimpleButtonExample.php deleted file mode 100644 index 5a7af29..0000000 --- a/examples/SimpleButtonExample.php +++ /dev/null @@ -1,71 +0,0 @@ -setOnClickAsync( - onClickAsync: function () { - // Fetch data from API (example: JSON placeholder) - $url = 'https://jsonplaceholder.typicode.com/todos/1'; - - $context = stream_context_create([ - 'http' => [ - 'timeout' => 10, - 'method' => 'GET', - ], - ]); - - $response = file_get_contents($url, false, $context); - - if ($response === false) { - throw new \Exception('Failed to fetch data'); - } - - return json_decode($response, true); - }, - - onComplete: function ($data) use ($container) { - $statusLabel = new Label( - text: 'Klicken Sie den Button, um Daten zu laden...', - style: 'text-base text-gray-700', - ); - - $resultLabel = new Label( - text: '', - style: 'text-sm text-blue-600', - ); - - $statusLabel->setText('✓ Daten erfolgreich geladen!'); - - $formatted = 'ID: ' . ($data['id'] ?? 'N/A') . "\n"; - $formatted .= 'Titel: ' . ($data['title'] ?? 'N/A') . "\n"; - $formatted .= 'Erledigt: ' . (($data['completed'] ?? false) ? 'Ja' : 'Nein'); - - $resultLabel->setText($formatted); - $container->addComponent($statusLabel); - $container->addComponent($resultLabel); - }, - - onError: function ($error) {}, -); -$container->addComponent($button2); -$app->setRoot($container); -$app->run(); diff --git a/examples/TestStack.php b/examples/TestStack.php deleted file mode 100644 index 709e685..0000000 --- a/examples/TestStack.php +++ /dev/null @@ -1,29 +0,0 @@ -addComponent($label); - $scrollContainer->addComponent($item); -} -$container->addComponent($scrollContainer); -$app->setRoot($container); -$app->run(); diff --git a/examples/Todo.php b/examples/Todo.php deleted file mode 100644 index 55a928c..0000000 --- a/examples/Todo.php +++ /dev/null @@ -1,43 +0,0 @@ -addComponent($labelContent); -$container->addComponent($containerContent); -$containerMenu = new \PHPNative\Ui\Widget\Container(style: 'w-200 bg-lime-200'); -$label = new Label( - text: 'Menu App', - style: 'text-red-500', -); -$containerMenu->addComponent($label); -$scrollContainer = new Container(style: 'overflow-y-auto bg-red m-4 p-4'); - -// Add many items to trigger overflow -for ($i = 1; $i <= 100; $i++) { - $item = new Container(style: 'bg-blue-500 m-2 p-3'); - $label = new Label( - text: "Item {$i}", - style: 'text-green-500', - ); - $item->addComponent($label); - $scrollContainer->addComponent($item); -} -$containerMenu->addComponent($scrollContainer); -$container->addComponent($containerMenu); -$app->setRoot($container); -$app->run(); diff --git a/examples/advanced_multi_window_example.php b/examples/advanced_multi_window_example.php deleted file mode 100644 index e7c1693..0000000 --- a/examples/advanced_multi_window_example.php +++ /dev/null @@ -1,185 +0,0 @@ -createWindow('Advanced Multi-Window Demo', 700, 500, 100, 100); - -$windowCounter = 1; - -// Main UI -$mainContainer = new Container('flex flex-col p-6 gap-4 bg-gray-50'); - -$title = new Label( - text: 'Advanced Multi-Window Demo', - style: 'text-2xl text-gray-900', -); - -$subtitle = new Label( - text: 'Windows mit asynchronen Operationen', - style: 'text-base text-gray-600', -); - -// Button to create window with async data loading -$createAsyncWindowButton = new Button( - text: 'Window mit Async-Datenladung', - style: 'bg-purple-500 hover:bg-purple-700 text-white p-4 rounded-lg', -); - -$createAsyncWindowButton->setOnClickAsync( - onClickAsync: function () use (&$windowCounter) { - // Simulate loading data in background - sleep(1); - - return [ - 'windowId' => $windowCounter++, - 'data' => 'Daten erfolgreich geladen!', - 'timestamp' => date('H:i:s'), - 'items' => ['Item 1', 'Item 2', 'Item 3'], - ]; - }, - - onComplete: function ($result) use ($app) { - // Create window with loaded data - $windowId = $result['windowId']; - $newWindow = $app->createWindow( - "Data Window #{$windowId}", - 500, - 350, - 150 + ($windowId * 30), - 150 + ($windowId * 30), - ); - - $container = new Container('flex flex-col p-6 gap-3 bg-green-50'); - - $titleLabel = new Label( - text: "Data Window #{$windowId}", - style: 'text-xl text-gray-900', - ); - - $dataLabel = new Label( - text: $result['data'], - style: 'text-base text-green-700 p-2 bg-white rounded', - ); - - $timeLabel = new Label( - text: 'Geladen um: ' . $result['timestamp'], - style: 'text-sm text-gray-600', - ); - - $itemsLabel = new Label( - text: "Items:\n" . implode("\n", $result['items']), - style: 'text-sm text-gray-700 p-2 bg-white rounded', - ); - - $closeButton = new Button( - text: 'Schließen', - style: 'bg-red-500 hover:bg-red-700 text-white p-3 rounded', - ); - - $closeButton->setOnClick(function () use ($newWindow) { - $newWindow->close(); - }); - - $container->addComponent($titleLabel); - $container->addComponent($dataLabel); - $container->addComponent($timeLabel); - $container->addComponent($itemsLabel); - $container->addComponent($closeButton); - - $newWindow->setRoot($container); - }, - - onError: function ($error) { - error_log('Error creating window: ' . $error->getMessage()); - }, -); - -// Button to create multiple windows at once -$createMultipleButton = new Button( - text: '3 Windows auf einmal erstellen', - style: 'bg-orange-500 hover:bg-orange-700 text-white p-4 rounded-lg', -); - -$createMultipleButton->setOnClick(function () use ($app, &$windowCounter) { - for ($i = 0; $i < 3; $i++) { - $currentId = $windowCounter++; - $offset = $currentId * 40; - - $newWindow = $app->createWindow("Batch Window #{$currentId}", 400, 250, 200 + $offset, 200 + ($i * 50)); - - $container = new Container('flex flex-col p-4 gap-2 bg-yellow-50'); - - $label = new Label( - text: "Batch Window #{$currentId}", - style: 'text-lg text-gray-900', - ); - - $info = new Label( - text: "Teil einer Batch-Erstellung ({$i}/3)", - style: 'text-sm text-gray-600', - ); - - $closeButton = new Button( - text: 'X', - style: 'bg-red-500 hover:bg-red-700 text-white p-2 rounded', - ); - - $closeButton->setOnClick(function () use ($newWindow) { - $newWindow->close(); - }); - - $container->addComponent($label); - $container->addComponent($info); - $container->addComponent($closeButton); - - $newWindow->setRoot($container); - } -}); - -// Window count label -$windowCountLabel = new Label( - text: 'Offene Windows: 1', - style: 'text-sm text-blue-600 p-2 bg-white rounded', -); - -// Update window count periodically -$mainContainer->addComponent($title); -$mainContainer->addComponent($subtitle); -$mainContainer->addComponent($windowCountLabel); -$mainContainer->addComponent($createAsyncWindowButton); -$mainContainer->addComponent($createMultipleButton); - -// Info -$info = new Label( - text: 'Die UI bleibt responsive während des Ladens!', - style: 'text-xs text-gray-500 italic mt-4', -); -$mainContainer->addComponent($info); - -// Quit button -$quitButton = new Button( - text: 'Beenden', - style: 'bg-red-600 hover:bg-red-800 text-white p-4 rounded-lg', -); - -$quitButton->setOnClick(function () use ($app) { - $app->quit(); -}); - -$mainContainer->addComponent($quitButton); - -$mainWindow->setRoot($mainContainer); - -// Run application -$app->run(); diff --git a/examples/async_button_example.php b/examples/async_button_example.php deleted file mode 100644 index 20e1a7b..0000000 --- a/examples/async_button_example.php +++ /dev/null @@ -1,75 +0,0 @@ -setOnClickAsync( - // Task that runs in background thread - onClickAsync: function() { - // Simulate web request (or use real HTTP client) - sleep(2); // Simulates network delay - - // In production, you would use something like: - // $response = file_get_contents('https://api.example.com/data'); - // return json_decode($response, true); - - return [ - 'status' => 'success', - 'data' => 'Daten erfolgreich geladen!', - 'timestamp' => date('H:i:s') - ]; - }, - - // Callback when task completes successfully - onComplete: function($result) use ($statusLabel, $resultLabel) { - $statusLabel->setText('✓ Laden abgeschlossen!'); - $resultLabel->setText( - 'Status: ' . $result['status'] . "\n" . - 'Daten: ' . $result['data'] . "\n" . - 'Zeit: ' . $result['timestamp'] - ); - }, - - // Callback when task fails - onError: function($error) use ($statusLabel, $resultLabel) { - $statusLabel->setText('✗ Fehler beim Laden!'); - $resultLabel->setText('Error: ' . $error->getMessage()); - } -); - -// Add components to container -$container->addComponent($statusLabel); -$container->addComponent($button); -$container->addComponent($resultLabel); - -// Set root component and run -$app->setRoot($container)->run(); diff --git a/examples/async_http_example.php b/examples/async_http_example.php deleted file mode 100644 index c6cbc5f..0000000 --- a/examples/async_http_example.php +++ /dev/null @@ -1,126 +0,0 @@ -setOnClickAsync( - onClickAsync: function() { - // Fetch data from API (example: JSON placeholder) - $url = 'https://jsonplaceholder.typicode.com/todos/1'; - - $context = stream_context_create([ - 'http' => [ - 'timeout' => 10, - 'method' => 'GET', - ] - ]); - - $response = @file_get_contents($url, false, $context); - - if ($response === false) { - throw new \Exception('Failed to fetch data'); - } - - return json_decode($response, true); - }, - - onComplete: function($data) use ($statusLabel, $resultLabel) { - $statusLabel->setText('✓ Daten erfolgreich geladen!'); - - $formatted = "ID: " . ($data['id'] ?? 'N/A') . "\n"; - $formatted .= "Titel: " . ($data['title'] ?? 'N/A') . "\n"; - $formatted .= "Erledigt: " . (($data['completed'] ?? false) ? 'Ja' : 'Nein'); - - $resultLabel->setText($formatted); - }, - - onError: function($error) use ($statusLabel, $resultLabel) { - $statusLabel->setText('✗ Fehler aufgetreten'); - $resultLabel->setText('Error: ' . $error->getMessage()); - } -); - -// Button for simulating slow operation -$slowButton = new Button( - text: 'Langsame Operation (5s)', - style: 'bg-orange-500 hover:bg-orange-700 text-white p-3 rounded-lg' -); - -$slowButton->setOnClickAsync( - onClickAsync: function() { - $startTime = microtime(true); - - // Simulate heavy computation - sleep(5); - - $endTime = microtime(true); - $duration = round($endTime - $startTime, 2); - - return [ - 'message' => 'Operation abgeschlossen', - 'duration' => $duration . ' Sekunden' - ]; - }, - - onComplete: function($result) use ($statusLabel, $resultLabel) { - $statusLabel->setText('✓ Operation abgeschlossen!'); - $resultLabel->setText( - $result['message'] . "\n" . - 'Dauer: ' . $result['duration'] - ); - }, - - onError: function($error) use ($statusLabel, $resultLabel) { - $statusLabel->setText('✗ Fehler bei Operation'); - $resultLabel->setText('Error: ' . $error->getMessage()); - } -); - -// Add all components -$container->addComponent($title); -$container->addComponent($statusLabel); -$container->addComponent($fetchButton); -$container->addComponent($slowButton); -$container->addComponent($resultLabel); - -// Info label -$infoLabel = new Label( - text: 'Die UI bleibt während der Requests responsive!', - style: 'text-xs text-gray-500 mt-4 italic' -); -$container->addComponent($infoLabel); - -// Run application -$app->setRoot($container)->run(); diff --git a/examples/multi_process_windows.php b/examples/multi_process_windows.php deleted file mode 100644 index 1e97034..0000000 --- a/examples/multi_process_windows.php +++ /dev/null @@ -1,160 +0,0 @@ -createWindow($title, 400, 350, $x, $y); - - // Create UI - $container = new Container("flex flex-col p-6 gap-4 bg-$bgColor-100"); - - $titleLabel = new Label( - text: $title, - style: "text-2xl text-$bgColor-900" - ); - - $processLabel = new Label( - text: 'Process ID: ' . getmypid(), - style: "text-sm text-$bgColor-700" - ); - - $frameLabel = new Label( - text: 'Frame: 0', - style: "text-base text-$bgColor-600" - ); - - $button = new Button( - text: 'Click Me!', - style: "bg-$bgColor-500 hover:bg-$bgColor-700 text-white p-4 rounded-lg" - ); - - $clickCount = 0; - $button->setOnClick(function() use (&$clickCount, $button, $title) { - $clickCount++; - $button->setText("Clicked $clickCount times"); - echo "$title - Button clicked! Count: $clickCount\n"; - }); - - $closeButton = new Button( - text: 'Close Window', - style: "bg-red-500 hover:bg-red-700 text-white p-3 rounded" - ); - - $closeButton->setOnClick(function() use ($window) { - echo "Close button clicked!\n"; - $window->close(); - }); - - $container->addComponent($titleLabel); - $container->addComponent($processLabel); - $container->addComponent($frameLabel); - $container->addComponent($button); - $container->addComponent($closeButton); - - $window->setRoot($container); - - echo "Process $id: Starting event loop\n"; - - // Run the window - $frameCount = 0; - while (!$window->shouldClose()) { - $frameCount++; - $frameLabel->setText("Frame: $frameCount"); - - $window->layout(); - - // Poll events - rgfw_pollEvents(); - $window->handleEvents(); - - // Update - \PHPNative\Async\TaskManager::getInstance()->update(); - $window->update(); - - // Render - $window->render(); - - // ~60 FPS - usleep(16666); - } - - // Cleanup - echo "Process $id: Window closed after $frameCount frames\n"; - $window->cleanup(); -} diff --git a/examples/multi_window_example.php b/examples/multi_window_example.php deleted file mode 100644 index 046ce76..0000000 --- a/examples/multi_window_example.php +++ /dev/null @@ -1,161 +0,0 @@ -createWindow('Main Window - Multi-Window Demo', 600, 400, 100, 100); - -// Counter for new windows -$windowCounter = 1; - -// Create main window UI -$mainContainer = new Container('flex flex-col p-6 gap-4 bg-gray-100'); - -$title = new Label( - text: 'Multi-Window Demo', - style: 'text-2xl text-gray-900' -); - -$description = new Label( - text: 'Klicken Sie auf die Buttons, um neue Windows zu erstellen!', - style: 'text-base text-gray-700' -); - -$windowCountLabel = new Label( - text: 'Offene Windows: 1', - style: 'text-sm text-blue-600 p-2 bg-white rounded' -); - -// Button to create a simple new window -$createSimpleButton = new Button( - text: 'Neues Fenster erstellen', - style: 'bg-blue-500 hover:bg-blue-700 text-white p-4 rounded-lg' -); - -$createSimpleButton->setOnClick(function() use ($app, &$windowCounter, $windowCountLabel) { - // Create new window with offset position - $offset = $windowCounter * 30; - $newWindow = $app->createWindow( - "Window #$windowCounter", - 500, - 300, - 150 + $offset, - 150 + $offset - ); - - // Create UI for new window - $container = new Container('flex flex-col p-6 gap-3 bg-gradient-to-br from-purple-400 to-pink-400'); - - $label = new Label( - text: "Dies ist Window #$windowCounter", - style: 'text-xl text-white' - ); - - $closeButton = new Button( - text: 'Fenster schließen', - style: 'bg-red-500 hover:bg-red-700 text-white p-3 rounded' - ); - - $closeButton->setOnClick(function() use ($newWindow) { - $newWindow->close(); - }); - - $container->addComponent($label); - $container->addComponent($closeButton); - $newWindow->setRoot($container); - - $windowCounter++; - - // Update counter - $windowCountLabel->setText('Offene Windows: ' . $app->getWindowCount()); -}); - -// Button to create a window with interactive content -$createInteractiveButton = new Button( - text: 'Interaktives Fenster erstellen', - style: 'bg-green-500 hover:bg-green-700 text-white p-4 rounded-lg' -); - -$createInteractiveButton->setOnClick(function() use ($app, &$windowCounter, $windowCountLabel) { - $offset = $windowCounter * 30; - $newWindow = $app->createWindow( - "Interactive Window #$windowCounter", - 600, - 400, - 150 + $offset, - 150 + $offset - ); - - // Create interactive UI - $container = new Container('flex flex-col p-6 gap-3 bg-blue-50'); - - $title = new Label( - text: "Interaktives Window #$windowCounter", - style: 'text-xl text-gray-900' - ); - - $counter = 0; - $counterLabel = new Label( - text: "Zähler: $counter", - style: 'text-lg text-blue-600 p-2 bg-white rounded' - ); - - $incrementButton = new Button( - text: 'Zähler erhöhen', - style: 'bg-blue-500 hover:bg-blue-700 text-white p-3 rounded' - ); - - $incrementButton->setOnClick(function() use (&$counter, $counterLabel) { - $counter++; - $counterLabel->setText("Zähler: $counter"); - }); - - $closeButton = new Button( - text: 'Fenster schließen', - style: 'bg-red-500 hover:bg-red-700 text-white p-3 rounded' - ); - - $closeButton->setOnClick(function() use ($newWindow) { - $newWindow->close(); - }); - - $container->addComponent($title); - $container->addComponent($counterLabel); - $container->addComponent($incrementButton); - $container->addComponent($closeButton); - $newWindow->setRoot($container); - - $windowCounter++; - $windowCountLabel->setText('Offene Windows: ' . $app->getWindowCount()); -}); - -// Button to quit application -$quitButton = new Button( - text: 'Alle Fenster schließen und beenden', - style: 'bg-red-600 hover:bg-red-800 text-white p-4 rounded-lg mt-4' -); - -$quitButton->setOnClick(function() use ($app) { - $app->quit(); -}); - -// Add all components to main container -$mainContainer->addComponent($title); -$mainContainer->addComponent($description); -$mainContainer->addComponent($windowCountLabel); -$mainContainer->addComponent($createSimpleButton); -$mainContainer->addComponent($createInteractiveButton); -$mainContainer->addComponent($quitButton); - -$mainWindow->setRoot($mainContainer); - -// Run application -$app->run(); diff --git a/examples/simple_two_windows.php b/examples/simple_two_windows.php deleted file mode 100644 index 70c84b1..0000000 --- a/examples/simple_two_windows.php +++ /dev/null @@ -1,135 +0,0 @@ -createWindow('Window 1', 400, 300, 100, 100); -$container1 = new Container('flex flex-col p-6 gap-4 bg-blue-100'); - -$title1 = new Label( - text: 'Window 1', - style: 'text-2xl text-blue-900', -); - -$frameLabel1 = new Label( - text: 'Frame: 0', - style: 'text-base text-blue-700', -); - -$button1 = new Button( - text: 'Click Me (Window 1)', - style: 'bg-blue-500 hover:bg-blue-700 text-white p-4 rounded', -); - -$clickCount1 = 0; -$button1->setOnClick(function () use (&$clickCount1, $button1) { - $clickCount1++; - $button1->setText("Clicked {$clickCount1} times"); - echo "Window 1 button clicked! Count: {$clickCount1}\n"; -}); - -$container1->addComponent($title1); -$container1->addComponent($frameLabel1); -$container1->addComponent($button1); -$window1->setRoot($container1); - -// Frame counter for window 2 -$window2FrameCount = 0; - -echo "Creating Window 2...\n"; -$window2 = $app->createWindow('Window 2', 400, 300, 520, 100); -$container2 = new Container('flex flex-col p-6 gap-4 bg-green-100'); - -$title2 = new Label( - text: 'Window 2', - style: 'text-2xl text-green-900', -); - -$frameLabel2 = new Label( - text: 'Frame: 0', - style: 'text-base text-green-700', -); - -$button2 = new Button( - text: 'Click Me (Window 2)', - style: 'bg-green-500 hover:bg-green-700 text-white p-4 rounded', -); - -$clickCount2 = 0; -$button2->setOnClick(function () use (&$clickCount2, $button2) { - $clickCount2++; - $button2->setText("Clicked {$clickCount2} times"); - echo "Window 2 button clicked! Count: {$clickCount2}\n"; -}); - -$container2->addComponent($title2); -$container2->addComponent($frameLabel2); -$container2->addComponent($button2); -$window2->setRoot($container2); - -echo "Starting main loop...\n"; -echo "Click the buttons to test interaction!\n"; -echo "Close all windows to exit.\n\n"; - -// Custom run loop with frame counter updates -$running = true; -while ($running && count($app->getWindows()) > 0) { - // Update frame counters - $window1FrameCount++; - $window2FrameCount++; - $frameLabel1->setText("Frame: {$window1FrameCount}"); - $frameLabel2->setText("Frame: {$window2FrameCount}"); - - // Layout all windows FIRST (sets window references and calculates positions) - foreach ($app->getWindows() as $windowId => $window) { - $window->layout(); - } - - // Handle events for all windows (now that layout is done) - foreach ($app->getWindows() as $windowId => $window) { - $window->handleEvents(); - } - - // Update async tasks (global) - PHPNative\Async\TaskManager::getInstance()->update(); - - // Update all windows - foreach ($app->getWindows() as $windowId => $window) { - $window->update(); - } - - // Render all windows - foreach ($app->getWindows() as $windowId => $window) { - $window->render(); - } - - // Remove closed windows - $windowsCopy = $app->getWindows(); - foreach ($windowsCopy as $windowId => $window) { - if ($window->shouldClose()) { - echo "Window {$windowId} closing...\n"; - } - } - - // Limit frame rate to ~60 FPS - usleep(16666); -} - -echo "Application exited.\n"; diff --git a/examples/simple_window_example.php b/examples/simple_window_example.php deleted file mode 100644 index 03f532a..0000000 --- a/examples/simple_window_example.php +++ /dev/null @@ -1,65 +0,0 @@ -createWindow('Simple Window Example', 800, 600); - -// Create UI -$container = new Container('flex flex-col p-6 gap-4 bg-gradient-to-br from-blue-400 to-purple-500'); - -$title = new Label( - text: 'Willkommen zu PHPNative!', - style: 'text-3xl text-white' -); - -$description = new Label( - text: 'Dies ist ein einfaches Beispiel mit einem Window.', - style: 'text-lg text-white' -); - -$button = new Button( - text: 'Klick mich!', - style: 'bg-white hover:bg-gray-100 text-blue-600 p-4 rounded-lg' -); - -$statusLabel = new Label( - text: '', - style: 'text-base text-white' -); - -$clickCount = 0; -$button->setOnClick(function() use ($statusLabel, &$clickCount) { - $clickCount++; - $statusLabel->setText("Button wurde $clickCount mal geklickt!"); -}); - -$quitButton = new Button( - text: 'Beenden', - style: 'bg-red-500 hover:bg-red-700 text-white p-4 rounded-lg mt-4' -); - -$quitButton->setOnClick(function() use ($app) { - $app->quit(); -}); - -// Add components -$container->addComponent($title); -$container->addComponent($description); -$container->addComponent($button); -$container->addComponent($statusLabel); -$container->addComponent($quitButton); - -// Set window root -$window->setRoot($container); - -// Run application -$app->run(); diff --git a/examples/test_flex_col.php b/examples/test_flex_col.php new file mode 100644 index 0000000..7134f31 --- /dev/null +++ b/examples/test_flex_col.php @@ -0,0 +1,42 @@ +addComponent($label1); +$mainContainer->addComponent($container1); + +// Container 2 - Mit flex-grow (sollte verfügbaren Platz einnehmen) +$container2 = new Container('flex-grow bg-blue-500 p-4'); +$label2 = new Label('Container 2 - Flex Grow (flex-grow)', 'text-white text-xl'); +$container2->addComponent($label2); +$mainContainer->addComponent($container2); + +// Container 3 - Natürliche Höhe (basierend auf Inhalt) +$container3 = new Container('bg-green-500 p-4'); +$label3 = new Label('Container 3 - Natural Height', 'text-white text-xl'); +$container3->addComponent($label3); +$mainContainer->addComponent($container3); + +$window->setRoot($mainContainer); +$app->addWindow($window); + +echo "Flex-Col Test started!\n"; +echo "- Red: Fixed height (80px)\n"; +echo "- Blue: Should grow to fill available space\n"; +echo "- Green: Natural height based on content\n\n"; + +$app->run(); diff --git a/examples/test_textinput.php b/examples/test_textinput.php new file mode 100644 index 0000000..8dbd3a7 --- /dev/null +++ b/examples/test_textinput.php @@ -0,0 +1,47 @@ +addComponent($container1); + +// Container 2 - Mit TextInput und Button (flex-row) +$inputContainer = new Container('flex flex-row mb-4 bg-blue-200'); + +$input = new TextInput( + placeholder: 'Type something...', + style: 'flex-1 p-2 border border-gray-300 rounded mr-2 h-10', +); + +$button = new Button('Submit', 'bg-green-500 text-white p-2 rounded'); + +$inputContainer->addComponent($input); +$inputContainer->addComponent($button); +$mainContainer->addComponent($inputContainer); + +// Container 3 - Green background mit fester Höhe +$container3 = new Container('bg-green-500 h-20 p-2'); +$mainContainer->addComponent($container3); + +$window->setRoot($mainContainer); +$app->addWindow($window); + +echo "TextInput Test started!\n"; +echo "- Red container (80px)\n"; +echo "- Blue container with TextInput and Button (40px)\n"; +echo "- Green container (80px)\n\n"; + +$app->run(); diff --git a/examples/test_textinput_simple.php b/examples/test_textinput_simple.php new file mode 100644 index 0000000..efc41c9 --- /dev/null +++ b/examples/test_textinput_simple.php @@ -0,0 +1,39 @@ +addComponent($input); +$inputContainer->addComponent($button); +$mainContainer->addComponent($inputContainer); + +$window->setRoot($mainContainer); +$app->addWindow($window); + +echo "TextInput Test started!\n"; +echo "- Red container (80px)\n"; +echo "- Blue container with TextInput and Button (40px)\n"; +echo "- Green container (80px)\n\n"; + +$app->run(); diff --git a/examples/threaded_framework_windows.php b/examples/threaded_framework_windows.php deleted file mode 100644 index 83819c1..0000000 --- a/examples/threaded_framework_windows.php +++ /dev/null @@ -1,153 +0,0 @@ -createWindow($title, 400, 350, $x, $y); - - // Create UI - $container = new \PHPNative\Ui\Widget\Container("flex flex-col p-6 gap-4 bg-$bgColor-100"); - - $titleLabel = new \PHPNative\Ui\Widget\Label( - text: $title, - style: "text-2xl text-$bgColor-900" - ); - - $infoLabel = new \PHPNative\Ui\Widget\Label( - text: 'Running in separate thread', - style: "text-sm text-$bgColor-700" - ); - - $frameLabel = new \PHPNative\Ui\Widget\Label( - text: 'Frame: 0', - style: "text-base text-$bgColor-600" - ); - - $button = new \PHPNative\Ui\Widget\Button( - text: 'Click Me!', - style: "bg-$bgColor-500 hover:bg-$bgColor-700 text-white p-4 rounded-lg" - ); - - $clickCount = 0; - $button->setOnClick(function() use (&$clickCount, $button, $title) { - $clickCount++; - $button->setText("Clicked $clickCount times"); - echo "$title - Button clicked! Count: $clickCount\n"; - }); - - $closeButton = new \PHPNative\Ui\Widget\Button( - text: 'Close Window', - style: "bg-red-500 hover:bg-red-700 text-white p-3 rounded" - ); - - $closeButton->setOnClick(function() use ($window) { - $window->close(); - }); - - $container->addComponent($titleLabel); - $container->addComponent($infoLabel); - $container->addComponent($frameLabel); - $container->addComponent($button); - $container->addComponent($closeButton); - - $window->setRoot($container); - - // Custom run loop with frame counter - $frameCount = 0; - while (!$window->shouldClose()) { - $frameCount++; - $frameLabel->setText("Frame: $frameCount"); - - $window->layout(); - - // Poll events - rgfw_pollEvents(); - $window->handleEvents(); - - // Update - \PHPNative\Async\TaskManager::getInstance()->update(); - $window->update(); - - // Render - $window->render(); - - // ~60 FPS - usleep(16666); - } - - // Cleanup - $window->cleanup(); - - return "$title closed after $frameCount frames"; -}; - -try { - // Launch Window 1 (Blue) in thread - echo "Launching Window 1 (Blue) in thread...\n"; - $runtime1 = new Runtime(); - $future1 = $runtime1->run($windowRunner, [ - 'Window 1 - Blue', - 100, - 100, - 'blue' - ]); - - // Launch Window 2 (Green) in thread - echo "Launching Window 2 (Green) in thread...\n"; - $runtime2 = new Runtime(); - $future2 = $runtime2->run($windowRunner, [ - 'Window 2 - Green', - 550, - 100, - 'green' - ]); - - echo "\nBoth windows launched in parallel threads!\n"; - echo "Each window has its own event loop\n"; - echo "Try clicking the buttons and closing windows\n"; - echo "Main thread waiting for windows to close...\n\n"; - - // Wait for both windows to complete - echo "Waiting for Window 1...\n"; - $result1 = $future1->value(); - echo $result1 . "\n"; - - echo "Waiting for Window 2...\n"; - $result2 = $future2->value(); - echo $result2 . "\n"; - - echo "\nAll windows closed. Application exiting.\n"; - -} catch (\Throwable $e) { - echo "Error: " . $e->getMessage() . "\n"; - echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; -} diff --git a/examples/threaded_two_windows.php b/examples/threaded_two_windows.php deleted file mode 100644 index 5f102d7..0000000 --- a/examples/threaded_two_windows.php +++ /dev/null @@ -1,170 +0,0 @@ -= $rectX && $mouseX <= ($rectX + $rectSize) && - $mouseY >= $rectY && $mouseY <= ($rectY + $rectSize); - break; - - case RGFW_mouseButtonPressed: - if ($isHovering) { - echo "$title - Rectangle clicked!\n"; - } - break; - } - } - - // Check if window should close - if (rgfw_window_shouldClose($window)) { - $running = false; - } - - // Clear with background color - rsgl_clear($window, $r, $g, $b, 255); - - // Draw center rectangle - $rectSize = 100; - $rectX = ($width / 2) - ($rectSize / 2); - $rectY = ($height / 2) - ($rectSize / 2); - - // White or yellow depending on hover state - if ($isHovering) { - rsgl_setColor($window, 255, 255, 100, 255); // Yellow on hover - } else { - rsgl_setColor($window, 255, 255, 255, 255); // White - } - rsgl_drawRectF($window, (int) $rectX, (int) $rectY, $rectSize, $rectSize); - - // Draw text showing frame count (if possible) - $frameCount++; - - // Render and swap buffers - rsgl_render($window); - rgfw_window_swapBuffers($window); - - // ~60 FPS - usleep(16666); - } - - // Cleanup - rsgl_close($window); - rgfw_window_close($window); - - return "$title closed after $frameCount frames"; -}; - -try { - // Create first window in a thread (Red background) - echo "Launching Window 1 (Red) in thread...\n"; - $runtime1 = new Runtime(); - $future1 = $runtime1->run($windowFunction, [ - 'Window 1 - Red', - 100, - 100, - 400, - 300, - [255, 100, 100] - ]); - - // Create second window in a thread (Blue background) - echo "Launching Window 2 (Blue) in thread...\n"; - $runtime2 = new Runtime(); - $future2 = $runtime2->run($windowFunction, [ - 'Window 2 - Blue', - 550, - 100, - 400, - 300, - [100, 100, 255] - ]); - - echo "\nBoth windows launched!\n"; - echo "Hover over the center rectangles to see them change color\n"; - echo "Click on them to see messages in the console\n"; - echo "Main thread waiting for windows to close...\n\n"; - - // Wait for first window - echo "Waiting for Window 1...\n"; - $result1 = $future1->value(); - echo $result1 . "\n"; - - // Wait for second window - echo "Waiting for Window 2...\n"; - $result2 = $future2->value(); - echo $result2 . "\n"; - - echo "\nAll windows closed. Application exiting.\n"; - -} catch (\Throwable $e) { - echo "Error: " . $e->getMessage() . "\n"; - echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; -} diff --git a/examples/todo_app.php b/examples/todo_app.php new file mode 100644 index 0000000..dd00f73 --- /dev/null +++ b/examples/todo_app.php @@ -0,0 +1,129 @@ +addComponent($title); + +// Input section +$inputContainer = new Container('flex flex-row mb-4'); + +$input = new TextInput( + placeholder: 'What needs to be done?', + style: 'flex-1 p-2 border border-gray-300 rounded mr-2', +); + +$addButton = new Button('Add', 'bg-blue-500 text-white p-2 rounded-lg hover:bg-blue-600'); + +$inputContainer->addComponent($input); +$inputContainer->addComponent($addButton); +$mainContainer->addComponent($inputContainer); + +// Todo list container +$todoListContainer = new Container('flex flex-col'); +$mainContainer->addComponent($todoListContainer); + +// Stats +$statsLabel = new Label('0 items', 'mt-4 text-gray-600 text-sm h-10'); +$mainContainer->addComponent($statsLabel); + +// Todos array +$todos = []; + +// Function to update stats +$updateStats = function () use (&$todos, $statsLabel) { + $total = count($todos); + $completed = count(array_filter($todos, fn($t) => $t['completed'])); + $statsLabel->setText("{$total} items ({$completed} completed)"); +}; + +// Function to render todos - use a reference so it can be used in closures +$renderTodos = null; +$renderTodos = function () use (&$todos, $todoListContainer, $updateStats, &$renderTodos, $window) { + // Clear existing todos + $todoListContainer->clearChildren(); + + foreach ($todos as $index => $todo) { + $todoItem = new Container('flex flex-row items-center p-2 mb-2 bg-white border border-gray-200 rounded h-12'); + + // Checkbox + $checkbox = new Checkbox( + label: '', + checked: $todo['completed'], + style: 'mr-2 w-6 h-6', + ); + + $checkbox->setOnChange(function ($checked) use (&$todos, $index, &$renderTodos, $updateStats) { + $todos[$index]['completed'] = $checked; + $updateStats(); + }); + + // Text + $textStyle = $todo['completed'] ? 'flex-1 text-gray-400 line-through' : 'flex-1 text-gray-800'; + $todoText = new Label($todo['text'], $textStyle); + + // Delete button + $deleteButton = new Button('Delete', 'bg-red-500 text-white px-2 py-1 rounded text-sm hover:bg-red-600'); + $deleteButton->setOnClick(function () use (&$todos, $index, &$renderTodos, $updateStats) { + array_splice($todos, $index, 1); + $renderTodos(); + $updateStats(); + }); + + $todoItem->addComponent($checkbox); + $todoItem->addComponent($todoText); + $todoItem->addComponent($deleteButton); + + $todoListContainer->addComponent($todoItem); + } + + $updateStats(); + + // Trigger re-layout after adding new components + $window->setShouldBeReLayouted(true); +}; + +// Add button click handler +$addButton->setOnClick(function () use ($input, &$todos, &$renderTodos) { + $text = trim($input->getValue()); + + if (!empty($text)) { + $todos[] = [ + 'text' => $text, + 'completed' => false, + ]; + + $input->setValue(''); // Clear input + $renderTodos(); + } +}); + +// Handle Enter key in input +$input->setOnChange(function ($value) { + // Could add live validation here +}); + +$window->setRoot($mainContainer); +$app->addWindow($window); + +echo "Todo App started!\n"; +echo "- Type in the input field and click 'Add' or press Enter\n"; +echo "- Click checkboxes to mark todos as complete\n"; +echo "- Click 'Delete' to remove a todo\n\n"; + +$app->run(); diff --git a/php-sdl3/.libs/sdl3.lai b/php-sdl3/.libs/sdl3.lai index 53cf407..b031f4b 100644 --- a/php-sdl3/.libs/sdl3.lai +++ b/php-sdl3/.libs/sdl3.lai @@ -14,7 +14,7 @@ library_names='sdl3.so sdl3.so sdl3.so' old_library='' # Libraries that this one depends upon. -dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3' +dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3_image -lSDL3_ttf -lSDL3' # Version information for sdl3. current=0 diff --git a/php-sdl3/.libs/sdl3.o b/php-sdl3/.libs/sdl3.o index 20339f9d3134e686035469476f0f1cb2b72184b9..dc00efc6b167300af8a7ad01eaef6af01a3a9a6b 100644 GIT binary patch literal 183912 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

ClRmbiyT)h>1=`WoqCR*(-x}7~6b657IP9XqjSF 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

Bl9#%Z!1}BHpt@USpQyRIRov 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 SRQm6YO8R%p!{i%sTK@<5M<=uZ diff --git a/php-sdl3/.libs/sdl3_events.o b/php-sdl3/.libs/sdl3_events.o new file mode 100644 index 0000000000000000000000000000000000000000..a5aa2577e8ada55feba4086f27551d0d25160132 GIT binary patch literal 118352 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 Q(z!lC8M;=OUY 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�m_SA)Z^&A7i~E#5cgli|>F>6#oqVg7^{m zOX3INv*66P8S-7>x#hbR+xHXCjTpb%E8p_v_4C7?ThV`Fy~o7=fd3+X7k*y+ANW=A z?C6iz#WTbIhBMz@$TutA;4`;;cOl>6o*OYf4$ko^7q;)io?FpzSZ^KiSa=ih>hKog zRpIT#IUndG-Wc)S;LP_aF2p0KRklJ1ZV&H8tZ*U{44l8@$cbpiXVh87ry|1Py8Hw4LnJZ zi`Bmy^4;yZ<;(H;xaWTSSva?E4=XTOu6u5)ypHwW62Asd)-C+9d*ckphg9Ns5T98* z2kM_)JPSMz+^Ux}xQ&I!c^)3B!asuZ8_)gtW^m>^2>EvM+^QIh^1F(cf%g-y3QrWT z41YqrF?_5z_uHr8%=dM~&-UC><@LH1o+k~Q@gKsO?-=B}!*k2G6UzTWyaRlncyIVY z@t*J>#mB%;iI0Mxg)`re;CDQ?e0jYtWB1@eurR(Yt{apP{}km^f?GS-jqkrdDDhUN zEiEOU=cgS#w|1L}^1Fynh4+;5i-k)Mg~oWE3}$z4c%C$PTnEps_8h5(pZU&ni|>l~ zvz{jl3?Fw5rS9PZ*ltfDzJTWzUmRZ3b1Q#7yp`t`UlTsubBo^uf8KM8$J=M2cRjcG zBZ&XRbBpKuL?=DB_`eYUr{@+w8J@GJ`-S=DuwR0uwC5JTD6GNfNj!x({qbYVLyW92hS~@?Qq+33oVNHEWPbj zuD@ISb11*O=N4KE@eMq;cz$lDkLMQJ8SzhgZt0)(1P_A6UT&cq5nsS_i~kGd*YMmzzeoHdo?Cnx_+ZbC_V)!_d2X~E@moAM>V^2@o*V5#{8i75__>iB{elOZ=(J`inBhcQr};GxN`*busFAS zqByrZ(h83aX!3Bu{QDux3snhwk?>D9mZS@QACAYx#h2o7jQCMJjuq$oIOWCpdHBlW zwXI^oQr+E!>u>ep`7GzBHjbHd9#vc7`FZ2|;#*OEg7{uIJ}!N4y%*v5*u_1+1;=IM zd!8DN+Fi=e2FKy_UVMJ|K#7lr4;3#1e?pwc<#FP55kEov5%_cBUEnW>_l3_8=kf7X z@#hggS9}J1q4<3GV)5nh<>DM?R*7@mSS$V|%Gn^!c^A(ExL|&;)URc#Q8b5AH-`T{-k&d_%Gu8zR(Ne!w`R2{CPOfSJ)17;5Q|npX0hCz83Mx z&_7ttPIzkZ!|)8^XW?1J`8g=QpT_du{|+}4J8bm8;lb6y z*kQwmy8Ax-ZD`K{U1Nv$95p-?+oNl6fjPF@uwkLtp@Zy!g_nyhcmKnx!9#mZkDlE| z^zPg@vDcvBmEqsJcI!5@=g9k>9x$l;fWE_qTZ#XBP1m7a6MOdz%)M-AV()*)4CtHK zlL0|3_^WZ}@Z;`-1`h0*7}Pp((D0tI4Vpb#cG&Q)-TUKl@5B+YgNF_p+;iyg(O7rS zKAn3F?K-e0+UWo1E-HAjZA#8ZSXMlK;oncvIX~g!e8DfatHcv}UvJUef3wFDE&y)#%voil*UtcbGt(D37Pw;Da;reSy!CXJ@ z%U{02T%W3`_H)RURQFnySMhX zDJ|E}_U{tdf35$C(ZLhJG6my+d-U(vVZjss_4>O{x>vl<6`}x*wd;-lRsRi}T;vS2 zztz`v2^PotPYF!R3@Ee;6Q?+P;4K>aOz_-)t-s+XE|Rae^`#GPy8hXLX_*0qe#H7e zmnY?6__~0az5Z=WELhe`KhRj4@Bdf*N1^`9(6O!l))lq>8v?U3nP>28cxm&ByD#1Z zfIF_A_uB*iuh)+|;ap_j`#Z`yuRg!iy{ckc5_xgJ4rvJ75qISBPcERgx`{fL7e7!xk z<-gW#-U1WOws=9Fz#0TMeSMn1WQYqS`259h;k(doNzB#CJ!e0&1h@Zs{nMy_MtOle G4E-OE&FXLf literal 0 HcmV?d00001 diff --git a/php-sdl3/.libs/sdl3_image.o b/php-sdl3/.libs/sdl3_image.o new file mode 100644 index 0000000000000000000000000000000000000000..c337a46c49e675363731d954013686fcde4ab351 GIT binary patch literal 55432 zcmchA33!y%_4oU}lY|L@WU?m&$OHm}09jbWY61ijWQhb2L>wl`ghaAAGhuTV7Z4X* z>Q<{(+e%w)EiP4S6?d&m)z$@c-{O-Bu z-h1x3=bn4-%;fa?rHdTfw#;K&^Q<^!P|Mo&LOfkd$y%$x%C|nx82RspJ*O8mobzoo z?E}nc&nRAKSr2CvpMezR@BG-i`^$zsa}lWiXTycLn0Oyw8un0nx6`om5igV>{^o|= zpEq1Mjq-PX?B8?x#I}Y#Nn^^8fA_-Dg6abe7cMRJHC(u=)Jsx!9{x7EsA113LN@Gv zyy2V!(b|SR$tYt_6)`=&z?%v^YuN2+*aJe^8YZyF{%ok*zy4uvH?e;72EEaXwDx`n zBvpUgu=~O414bM|AMI~%ugEAq8!NK@NA34E?0$Rcg$ql4Bo4ZearX5fLmDmp-{XUx zmp1IF;kIzcHaF~vCU&*r|FEkK+|}>xSYm%bYt+rVWIUI8J)P?C7G&=NHcl7j{4katmUD9~U6k{HNvE!$ZaFuDguMOm;;DlyE89mB zvVEjJN)Im1dK&UGv4^iif|@hP@*?{aX~VpkU{C;CR+>NK04A6yNv(r)Efb@B*pUV+ zZ#Xb}P(PM~<*0%obA}>o8KT~y1%sL)V<-|shYi9EP8X$8F)A^1WZooT%Jrt#I6EOh zm88!~M=c96JN+q0Ct10^^rM_RVmx(&QKIn7CnAYUFUZ7ty;xwe^KPs_qg&__7Rm*V zHU<3YE1W8i5qgZfz)E+4W~$E1rB`MD724rrVl@#3Sa;B~DkiFRD0P{6+KBL4#lG|t zQnmmOsU8RFx)g>H8pJ)vrQec0gCLkW;j?hvjvKT zAwhjdzlSowKk%E6-XI$|{h7l+0;fx|&WCg+deC2+!r7MZdPvt0^OkJH@tK*NR0nTa zv(w)Mq>wOlNY?2rD{G$T5y&9!tlDA7#ObwTz2KXD{{o7AMfNk^_25>h8`*!%K&e7J zKjJM|8MwFEFO2va2%Z_)e;Vl>X;}qa=FcU|iY&{|#ET_&0#U}qOC{$5QN_f|quv3c zhKX0k4jyjYQ1(IpOduLK=hc!+foNjlwUQ1X)-v(>sJnsK$iy2Z2Z88d;x8jFfVTB9 z@#d%lKx|{;t&%cm=ow5L8Wsj(7ZY!nTnofrCjMITB}lu9iFb-0gPa?fc(>?VAoelw zo_~C?W!=Wa--a)PoV%HLzjPB+dO&o%ZtNz|=y=qm*U7moZLnxG=kh^l7#5Yu`9a1r z>A+CFG~XaUOsRw10?xiR?KDUXXW}}_@iTEf5v5Gr;Jpi`T^SQUCZdXo8y(E4VdADC z=lhJpbACd^HqQAe5!|Vqo1NTY5HxbmK7ScB?NcUxQ9KNC4%51xb4%u@&~%Ge`J7vc z@(T4UqI^RAny3PyZX?Ps)NhC?6KX$ERYKiPRE}GObomSc9~(9wz+FN;p1mHZy+ZxLdnr&? z3H6ls5uk1m>KPikeL_7;)Gb2&k*M2*dXA_&>`y>FC)8_0Pk|o2BGels>@A`GLV52C^%fc1r$T+4^f|bU!?xJ#abxqrL}#OET6XSo zXHW-_Ly*c{;S6pE17M=b8HzT^M9@jvGsY0Dj_(J4L$o=Cr$LSgUq3bq(sEE*Q|>0m zYo}oV08eg*lfQN>B$(=S^51~2v5U+-(aA^aWlx#A*~v$PD`3tpCm)6Qnd;_pRZR6b z`7Z!x4O6{N{+Zx(YMJWeyas95hLS9h;zLo?I$zcb+uLYbm(^tFe1S%u)?aO9t+$hw zWhXZ+jm! zd|QMst;5RNYUf;rt~sqM)MI6BvvVq-yf1A_u*=HYZs)W>UV+pbEP2MrtI0as_8t%8 zLiL_w!w7u!j%LK|4CS$pjq8o=_e03)SjUBM8mHtR~JhI8IkOtGS~u4bx~^RBUT z&V$C3G4(?`=NcHUDrs6vNjEgchb$T-T(rWWHc1OBnHrMT8nUvg zoSctf2-pa+svVlY($dLJ4%)u7Z3?(qpvt8F){^&4)&8vMj<*8ZMyi>SP<4$%eUPeW zIyrTu?7nCi7H%i!E1-uNFL^i#JosWcC^*-bwKMfiAk(Rl=XtS>yq;w3 zqUrAyA?JI32W)g=4CF&z#?toe4%>zr=4 z7T7t5h(8jw7TP)QVS2|FtKQDRE*4;)7TK(K82`mK4L?`gVCRqv*t*qPYA1a}8o|lx z;B<3vE;(p!4qBOmEggJ*bQ#XO*2)NOKrbAi}5?e^OSn?ZJu8 zrU^JYzeLJTgJ}gh4zM{^QPMHC!`=WTtz?}RY_X2Bld%F|INo-?j8(P4_QhOi)(LJR z;3hV@iJ+TkaTBd>qRmZ&+(bJQ(3UPR2AKM+(r&Q^vTASEiM9_dnY+H(&Sp!2&i2?z z*nuR`VK3+q_+&1eV*5@7ip~F2I|r@QLQi%Ydoo|z=FoO4>vXXck#UCYSp=ncP|mW4 zqbCFHpJ#i}TX7S1C1_tLJ0Z_WpghpQb8QEG8w|jOcJh^w;;vpKU7hRAy2N%SfvaHr zQadwFTxMrZj^$i#XY#Z|H8|KsZfvOoJ&UavV;vuQp|p;ul{JpjR$5OrP> zcai&$%@HMYKFpM?ppV!T4iunY&3%+7mY*3PvxlHZDP!t!dwBoo*aG^5o%L^sa%-(3 z?*b>4oEc8ih0aK9EbFk|8FB^A67JO^$AhiSwqc)WS@YT;om-F>N&PV-(p&q(R$i2X zR4W}$s;sa!cnpFaq7$zgB)f>Il_*g)d*7Y@axwTUIv=8y7i0STN{ntCpzg&60%1_*9be)-^E z0pVk|s?>*pC}3g=mGLt%orp3fW)i_+c>dgskDyGAm3Jn*dGN(@_G8De_Q4-Pi?BAy z*n=3_9abvX^^nZNdWn|B;C5t0(>oN)pwxRnS`_#@b(nerXx8354=T*}DZDse!wc!L zDu1!B1vJF%ZlG{kh(;nr3rmO)EgVgRXkjT4qJ?Ed$SRz_+>-*LsUClRlkc`zJ;xB6 z)U%QZsi&C;sb>`tvI6I?_Vj=N>PybbF;74mwrmDy9(T|HRG%+rwJ!w@y{TV0YiM2w zaV$>~k+jzH7bqxYj`Pimm09mDb9_RX4W2Au<9_7?d?&}sY#fQ@rJf*7RPIVnO9pZk zSea4Edf0f*aoM7Py%jAp-kIy67h7B+r#`0TJJ@JR=}Fl$;n# z>n9h$n$Fomp}a`j%FaP_vd!~~k><4ac@qq z2tk^9Qx{*-2aW5Fu^3z&{B*30qgrg?@Cles2FoM99APV*g}d zE90EK{y9KYais-0XZnT%$ysO7W?6`xq_rf@IhzNSiE~)F(uH$9*lK4TzF_yA86eL= zp_$lh+_B35j=K^!j4)xrU0;=pnVi1bha+u`d+7XF_QP3M$I_3a?uWEB7^5UaJy_Cm zka=(&q%fB-$+!;aaesOVURnH~^Wy0jb8x$8IVi$GqtEr_{MD0LU^MU!8J%e0T^e@L z`+KsTg97h+ro{?;FzzNuOMwrI{|;M4FRQkyV6^W#!&gw6z5&>nuV74iW2qU?g0W@W zDvZ-C7{{hcdM+poMVWnVPYi_wM;Y<(ZIy2)Rj=CiHX%DdMy)cQXxZ5t_s(t9}83m=NzAkNAG=1 zY#?GA6DRoo2D{-im}jj ze@lKVW=bC=qp4U9It>R`bq5y&2fg)RT&?g3giR4$3ExLJ;{hCu@i-oda4y-qvluh# zK;CJXK_w`)3&{)N#d3DStJ8xi)QWQ-*0vEaDt0gOQ86@U50S{`d4S6HV~J<5#FZ%J zS$siv>AZp|bgT}ZT^xnWs`EBrwS$s&K$)Ch+v#373E+cLdbK%V$=PpvJ_bhiSHq_G zs(_6&IBXi7jEP$tHr{XfTAnlw0FSLB)se=b6w+Ge22hN0% zJ9fT;CXuA2(sf>)Y?czVhOW7_5wpV>ELK8Wm(8FoBUb=5;K%b)Ob9NbqU4M^tgnEGwP9j39@4z9?^aedw)h0*|!^ZJl=J+ z10_gnxB0F^&YR#R5083XLS5CL?0W>coN5h`RGS8bbcvkQ3 z=FPs3G5<4o$-|?2citV8$8zo}$bksoDTEhVj_|oX#PIrywz|%7~{m0<>1K^ zSNwSX3&{Dh;l$kv%ftoJLnJ8@HzJmU%H@Jj=B2?|zT<-zvI0EW=YsJ#nmM1!pN5>X zkQ1A|7CG@;Al^aO6fG($Z370dIq@k?MZqNO>9iHlu}cJ5v}1Lj3L_YxvTFx#a>jAY_6 zB8nmY7``p_Y}1zE+g*oL!*`He2^)u>?AZuxKIEky=1wpEF{I~P_}IB$+TK0Ta^9GJ zWs`WJzP1PZAl~5PfZT5q_QC&2*av^hn_bxl!v#0mfSe@T4mC$M!VXh>z?tiDGW}44 zY>Sf|3X$cMIoWa0BgrXqibKI;ZQ3d;cM!{H;5K_5+DtbwmFCd;yq2jUOdZeEP%gKT zsSGD=OeuI)rhJZrJH0-pGPxz&n96c|w}NG#!Bmbj1dlUzF_p(P>}4vSsmqxvaI(uw z;r@cDLT6YdP&Y7D#QoXF)NpRuZA^_|>JFxgS?1kL`8n@Crb-;z%^zTDjFUCB6s|Ft z8s~Ut0`(k!x*#ccVFp?##U{D+bW$>QOE7HZF5+}gf47ypn9|JC;7Tv0wAjxv9yA!5 z5Wd`7e52tcgKhIx8fYPYMFa^{E`+Jrq&AH!G31yrgfK59MU@#E4Se8HcknOu2aMs1!HU(-z{gn@6yqxzA=M`AK z9l(!KzLoo~?LoqKH@t|v_idjC)X8N&VCxs^!vuLBaUOo83`Koxd;S1YGSQi#t&_)b z;6w`24tf>`yX>GAojzpz3Q9E^#$=H)*%`S83#^Biyv^|9!FwEbiPXRwa;G}J=or($ z>3pRm4V>Y)Cvpv&kQ`{uWJ45Xz==G@guWzd`|N~?JcrBqId3jgGLh#w!?5x)&O0h$ zBG)ENDK0H_ld-=2w-A0*EpB3Uh zuu7=UsrIQt{gZlBBh+CU=~|(_B&tEEe`j3<Xk7We@%l$UMN5W0Or ztcIz;4<`>42LCkAw;8t_?DYIc zdC<>MU{X+0=tJ8jwvu6FfmV97x6djWHlz+pB&Bx;w*f()pz|_Y5e<)Ajg$=c?1)Jl zRp~?PBeqdhKHTiEv{BU@i*U|lA~^0JHH9h_X``lko-opUqeuEsYgA@*F;yyrpN2>x z_t7PuJYXxq4i?uGplc)NUfk$!0o>UHFWlMEm%Y~lLH#Rzg+fBU`YAm~1oyA>RUbM_ zX;JYK|2`w2VN9iWC0GizXiODF+Co%2KZS}}z?jLbAZD9FL;(|1iSRQqjRcf2F`bAi zCT67G3({(sm`Mt%WnwmMJQgxBhlqM6<`S{U@?mpX0Y{g%LThRJ$H3CzQ3GV+0RS#u zv^Ex74$=-TmJWVK#z948V%&w()C6N^LO`F1FF2P7%&?qeA?Kz6hp#~QAb8ML&4s}_DTZmwN6>cSh*Vn>rbfgGj<|`-{)$O1R+V0{(C?8d}SPllggHZ~On+H88ACF;JNgqGv z7p~`2EQ~|Kj12w)=n~+z#--6z;q(w!dMKqSzAbykrn}mOSb$G-#+N$jmsXo29r$bj zJhm@W5`IZIzTu2Gen}+xvKUG7a{@j+pG}DE&CH>MGbAfl5-TNM2woNW@hCb60mo&sM!)$S>%;jQ(XM3qT2nZ!m;K&fG-6epmRNmQ9clSypk z#E^}?A}TdxV=X6qXZTH`$|RahVk0Nkt*M?&r5e|*UPFm>tJg8Idfl3JjI3F=ni9(m z^YS&5s|jhUs;;8Miuz_hC6+B|T1<%~|3Hlm&}zXN(O7}eynA$bBQ^eh$MY%JH%;mC zTHjwGO;ft6e5ZHBWSP?C=j2@v2F&xj{M=l$=A`tkR{44SvFY>Vs62k4<(qJhcbjR>g!8Bc7PMdj zSDOSan81~?tC_Hen0gtF;(1t@39_y^0K2kp=1m1%eoU zK9+a;+NNppEuV=tZ6_pS1inwS>5Nt&JYNMJBII1sREktZHmcD)#88>`4baXdYl*5F z0<8mTBeBoULe-n6$|UfT37;FM!dJWkfgM(zyIS1i(1RmljS<2+7pOl$fed?9e3&!r zW1wjn_DZNf!(I#Z#tVE4RsXjxV8x^#gzOlBgBYs`M|v7)DZ^fES3!05WT+-yXS@`S zW=zE78PHPFdQnX4`=#;rwWmxMtrrc{deK0w4^L3)hybbGi{p%XO#e530=!BwbIh&rFp;)=ERx?)nV4m7>Q*=>`IvV1kT<4L8-G}o87%~m)9L8<>Sg2@5t~CxcS>smjaIlh@N%p+7 zG?*B16P`r_4vWcb>OXc@hGtGoAp*>mkpxn7Hg6hP=22K3cD~jnUkcSFfm(H?^JA(N zt_3ncK!S!ruL~2330M78Yq2!l0evn?R5hE);ur`MX&e|7Dz*WQ`7FB-?YR*LVNPLB zI!+ra9ae>8j^fCLB<*#6=Gd!~eg4RXE{_4wdP9uCL5&RWdGa-5wF{C0fo}9weNsprVajT$gG}c zuS}Y^EM7+v?8#Rrc?(^LHxrPoLU7I)-oZW*9*S)#g)d*n*3TG3i92ai>9yuSzHQrI zfggi6WM-gvNFx9Lo^tGBCxcedc$L&5iX)Ry09Xk4^TZS_Cvl8of8wK;crJD8|MG>T z{Ey0F8!bBTQZJMNhYFILmORl)WxWIBNw-t%yqu1UnS2-IY-bL zDVa->^D3jsIhK=Tzm#lWl3b8-HnN_ZT+o-Cx;(j{2E=@xodbpKWG`~PLvoUHlZTU# zCzDz9ammTKFm5SPo94@U!d}A?-D5P*%GyFpge=4Ks6&r%G#IkZB9zRZAa~7 z|6y#zu4KPw2e35Z`y6UWw!0}_KNPBP;U{OMoyhmf3 zJpFsQ(HT+rF1u~-fX_Dv;L8x9)@Wc;C>rPs_x6Rt(d_~F05$zZ=?nW!jceh@Ay%wh zR<|m!cID#vQ{k}!RJgOJBNXn8276jVf!1JaM<@{LiH5gZ$JH-i7-(9#qAAd{dS%m! z=K8>r<`v7WNav1FAZqn2@9$n63AI`975(W`0U%k?aIiBP=nh3YdfNiwP&@oa0Eo2$ zfzC)I6t%j0+dA7jgDqVlX7B3l*#ti+5N@@0vzTEp#yE9_F#WkOoN@F2ndZgHMnED=s5x+d&ANNQGI7L6b=F! zXz%Z7jTmKY2ZcskI|8AuP&X*mV)Z~jgAw@33iP?Ry&d#|s^PKVMs@bI_gbycUGC}t zoz#I+rc91C7(3Y63R>@O3589ggP`zmw6nJ-Vzq~Z-Oz$agc^rf0BeX?f&L!QN1GLb zo9{piD3uhky-&K<+66)as%Nbr5o{%DVMj?;4@kHAd!Q46wod3~1S((!umH}7)&yKC zhf%=6_u~&d=pn}=6Vb=5DY-Lzb|Tm^+!4*QBZflv^4^$ zeyC_`D7YDnG6FUXNE`gnMJIF{z8~qDB;B14z zk}9B;J;AQnKv=FRiw4);E7sZ7xg`_`2YWV!jxZ1FR<5jD7g$i&yo$ww;dO%nwDk6Z z#aQ9crv9#AIM4-JfTj(!jR5)uF8Lj%A%@EH*jl`NwSPhN41e|1ipdpK{z=`@{+`g> zO`#re8?8VF!>t{2x7AFaG<~Xn(kB0;6_fpw+M5~|z-utFy{EM!+}qRJADPtOv$eCQ zZ4ynY2xLOrS~pJuhZP0q)f=7!YDAMT8E8EnCL3%DGFsbRwAI^(gBY<^!{CF4QI*D6 zK?&_V=6X0_>P)S%B0=y@G>gMlpaJSxg)_ZTCNcW75d9R2%;e6VPH~En?cLOV_LMk< z;maoA^we9Bl6dFE^mQjmsC-udNvXhetGF=7}`%V&Kle z-Lh#0TDwBQp8h^wU7!=Nj(|UDgQW)+k$!L+t+2-Oyj)q|yn5-Xz=9PE>#f$_?ru;e z3uaF0FSQt*5&k+3Eu1Ub>v=_pSTcGGaS*kw;yPUuShRFSolNwYvLkU<3+5A3UI1?Q zw2=C>tLj%SuUi^`Gi9__{GME-b5jreyiaQfeEO*$jI0KPaI<6K1Fb<$lQfE8- zJP`SHT&1i?Z-2NI7c`7TVoo+#ZjxYq7wkoXWO^TKXl~ z9>RqcCJxoj*{;MeMDG%$z<-0K833A`_R45~>qjfO1I3X$Ll*!d_cTim=Ar{U=XpziHD=;6H z23YRG;UoEE|GCJG8LOacpUT(&r{6n^=MoJ68;48XDrQ?m=hFRd!E z9$Cqt)ns9DevA@K*#NHMVQgg~brg#MUw0e)6nSmp0GG zXeojsVY!lD|I)m5pkP=vdU~M|;4v{01P?bbuI7o>-GOE|g*(8DM0Y>0uH+S6LrbW1 zo-GEZ!$4mL?y0VNvT>QvUg&jCuhrMlCu(l%Z3W%MbPPc@?ssS_F>~_dDN|-lu9`Bv zX4=#lGp5y44O~u8{hFh)pqqpE%tn7+vJuI57-!u z`E&S0d4QrF2@_z7O2ptc7g1v$u4ydbdv;COGZTo5FAj%-Z3!!BM?8dteN!j+nXc^+ z`SF~W$-aofIao5HR!0!R6WMTE;eMWR5*p%cfrY2n>H-66>w=|9CJn6CUHxq^;baFut|^@`JIM|pZVqjuL0%k+*5l5V2;+YASmDibY{W5o2?uEn2LBd> z05B4d7!v0c>r+c34=@=$fO3?)3i@L!EO_MD%CQP+g$3j{6T-cVLSsliQMIKJZZ&Kd%qmj2EzFzYtUn0i+$b=JMY(_TpT3$NYT zny_B<3+)i!!oJwFkw!j%rwZWs!u_pg1J7fo#esd*!AS^*YdRC=V`3=h+Or*T@`4+c z?YZn76MQ}!dwg4hexJOUYjy@WV2|y|L6zYUj7g7)VmkxqtpZ(<78oTAUSRV9lN5sz ziVE=rY2fahef)QH6EjUDqE&!-)!;qBXTfINoQX&vA`>#Uf5YV%CcyUY7TD9WL+M$C zOM5fM9T0W}`=h<&cG$W(fD|7<6DwgUA+^Mui*6Z)wcr_WnT4gRcMGfvKA&+xB-*llmcA;_#`zkIp`5vmW0ey5>9w1=SY6!y#91Kc2yvKy^S{ zan`}u=^=#?jYWDo4~xX3gxG#X%nW=0S|K=;ZL!dWgJN80!Nau%`_Qw+cItt)emrap zL|R+>s9$ny(hlYcaXZbi7Fa@9JrZ&bj06V+g1zC+O?<+{C#G!w%W#tc?LbF(q+Zw2 z;>|}RCU6C}jeF);jPG_59AUeigv=H3w>Yv8Yq9_9h2uq7hhV+mdW1dr>g7i-Uvcd6 z_>K$L19x4t+?w^$cyV4@8;jLq zrxma^$pNwj{39xL}^tfQ;Nk>iS z7jUC%wLwh~OhHHS*T(oXgts_+h7XNz?dXzISZHPhR$&ZNLNE<62*Tc>2wf8%YQ^U< z?I7vYBIa;9`lD^VTYK2!3@8ouL+zALwdr!#cX5Z~Y(Nsd`FAzGp{0Xj<1jHuaIfN@fPCrHOB%}d|F+nR;-^H(os z`%E}048(hCZcpNoCzvp-SmYFN<)WLG){f1Ab~wpkS*{4X3r7Wwo{lE?`~X8l>M?Bm zdRyU0rJHU(%)(A%!7~Rh9AG~}mk+$c(<&woU+hu>GjS4;gb^Ls<;C@@0xRY(sb8=v zu%>Qhvqh^j7*IRham3~ldtf#(2z$1XRm$!n81f z>C~FN3`|dm$6Wp6YaJTNgnfbAsSfa@a6r`$#t@C2oKs_3(%bxZWiF;R3FZ{{56c!fUD5~Izb;4o0Hr}8iRzbaX@|+op)jbWS}FVz!)7J z-9f?<3M*lhPubdN2NE;9n0H4j1OJE=d zv6Af~ha)CNfGr)Izsb35?3~0n13Zp1@g%F>73uPc93E`bt}-^C*opBGGpL&ba|=TL z__ZZRuzZoCg9&r3qg95V+{TH$s$u1dV_k=m0|uLRL9rt$+3~_s1D+HPY}o^lVe|5A zrn7%ly9 zvy*rL#Pdbl3HVUha0MdUBXs_XFWDI)l5bH{BCKgg+rQSd5tIo1*niBSlf7qtT_rv44wn}XwLL>~p4n#cnBCNrk-{2Jzoe8<@mXsJj(1Bib!}%0`P6R$E&?YDA zaM6y@)4=lpoMyB~R(lZeEU^zXbYjdKzvoLBLGlZ7Svjy*&GjoA>y|biS8qx57CXO| z{R8zwO-eA_eyA_7xf8alY(=iqAF~?4yrVUdPnT$Y33R|=y)`h>(XIur{3)8^+TEYn z;Z1i!Sn68hVjr1<8&bGihB@2X3o~0bGbBw%18~6$kv80IN8oHsG-qyer~r?g>kvU4 zYV6Yu5|NuV(X~yXqE<8#?j{?+D`mW_qIgfP5RN?Hv?tYC0i{fVV=}PTgs?CcnbPi= zcAa>qV-}QE9i6cI;Y(@r`3x-?zw!pn3{Xf1BMTR7=vcqo@#Dw&STDTm!y$m*G1qc& zsUq8DBSDjr7{IuHC^nG?RQG$l?c?6X>qc!4&;?dRy1*8gn-!8TfgkG- zyaR#YSX}2d<`W6D8P;9E?-vfJj?RCp>8QCK&KW5v68A?T3VILM6=HmAjrU!!#U(jN&|c6GK?Zfb3~?-AQAUF-(Uj*zrqYl<~8;S!2@%!!Fm z6b^U^!IRfO!Uu){#%{w~JPbir^VuOz!zC~$c&`X)nq(L*nl!1~5Hcmjhhk5V-{j(j zJsc_-a#O2GnG-ToAW+xTX!3Z+8_RJ=K8A(oyrBkut`l-%x}f$Ox6mDI4fn=G3u@%> zEv2Doi)aWFM!K3AKN>VlvWYSzI1ZDEh2Ac?Mt#tl`11bIqTDXJDug}RZeJdy00$XyEx6lFAR1Ohh@>1Y-2oonWqlED)l`N ze(@y9`s~{yv3U5a-2<{b{H>HD;PkDLBjEH!k|W^sO_3wuNB$;_$HFf%4SYQC&+qiZ zob-j5ge>@86gv%drX8Q_^@tt<#_6rVfc59MP$_>g_U`$O<|B>As= z2Y%=~@WbDM4+eufl6?Hq@{#be@4#mQj_v1P6A;^nI+uS3{|VoLi_lDoliKH`IT5&Rka4Fusq9M>6xzk?t=*nae`2LA#-ddb`Vo zyY=vU!LdEKYMAys>*9Co;WHQR*8gD_?$*CqKd@h!F8O8!91NIyRYKk3gE;cEVnKMa z_>FM)Dw(J7TA|GkAYikwZ{|UL;e+z&i=srqH?-y5)O(W9xE|qS@YBRO9?ftJzgH?* zsc`%!C-|)6w;2CKSwKSyzYZ&c$JB4?Es;*2%GohFmx%(-R`@hg@NR_{pfSR8CBMbw z;D5Qp=URS?;pa-Yv`^u8a^PUyq43611`a5^V>AO#D}3}A2F(05{l$M=iO)Oy7HiK{ z5-5DC@R4F@9Qqsc`&9K=|CL@ELxBt@{+d6rC|V4=Q|)OrSRu z{vT$yK2-SeGMWCR@I}&|B$*#ZZ_mm&j#Bu!Wn4jp!XFVm%vSiPe&%1S@Yf{-UZwB{ z#6CL}UOSfMY*F}af?ud`{4I8Tu2J~;euAx=6@EzcO#eq6Sd1P_y-z8AQ|~JZH*!8v zxRLXnx_;O0l;**`OKx>T+)XXoYW)I2+s)$zX5{?curKf zN5<<6h5u_b^Ixd&Sz=e$DE!bU=Kqbt=L&tl!bgdpc~RlJWg&W7;dhp>{7)2qaWdm6 zN&If~dDUp9vlRYYv8#~^zen^oUEvRj{mfVR)3`Xpvs~fH!hf8?$CNVv84ABz^nank zi$o9CD14gq|7L|hC+i6R40+tn8wGzz@#l*jKCAGE=Wci0g1=j6uwl}@sku@A^2$uKT726 zQTVAczphgFA4UH^RrvklXZ9=nJn`=jDExTQ=hF(mSnTki!oL+gyr=LCvCq#Hj{hl! z9vOc#j<<^+9;)y&#h&?>A>)4F9Fa3l@joQ%{#1qIzt_U2PT}8*Jug@I10Lo#@rY^X ze@lGWq4@tT?dex|i^w@k;ZMuBT(0nZvHKq@{06~)rSKbNzWh$%eX<@sq3|U(_v=N4 zeL7d?Ef@aLspsS=+Wz14~R zR`@+*xWDTZUN7tWCWU`l#{B&Xe@y1xPK7s%eO{vQpRyS1dWFxB@w!#v|CaXrPT@0U z-}I!y-xvS~pfhkCT4Y zD*PsC=W>PLD){jVH|xrY3jadZQ?p)~_IJyE>RiRYQ1tmjh4;ul?&k`>Rp!NS6+T?_ z`KZEYNq_&O@P!WR|B%A*-=E?0iNb#<_%{lFLFV-k(Ua-#<>JQ*6h2et=QxEMzcf|h zhh^QYQ}`Z{vs~dH%KTlgaO0Od74DaQ^((wt{Kig&;}84ebBV%F7dyUQ;ge(?F?NL6 z$a=P!Uy6T28A`XTCl&sT=>27dzajG9RrvYhA3j(3Xt6^_><+WBJ^VB6@C%Fz4~iX@ zD7;DJE>ZYMS!dTMe2~nGu);INo=;QwFT_7Tr0`$K`u(iJYbB2QLg62Z9IyB})8B2V zWO(uv{u{BYQiXpgdY-KCPec#33O^um_;Q7}$$Z(M@N2{#dKBI#_O@H$_&@ycxl-Zy z36KZVn4+SKSk=D zsBrqfr_i363V&Yoe4E0J-}tA(|19G;MCQF|&#khamMYxnf3m_K7kgf#@Ko``TNS=a z#^r2Hu=tIS z6>jwA5r1j)Y4nh(@K40=6f4}s&$AT%jM z#BYyP_{%~sQTR@or)w3y+0Wy z{D9cQdkX(j{Osone^2J8S>H^(<{UX){D;9uNc)QvK3?LDGKGI2b~{bsE5xqmEBrIr z$E{HKQdviiSNJ?xFFO@(&IdkIxVax4B=MB#*Du9xa}>Ty#=S)0kMpow6$(F1*00$L zuMqhS3g0RHTCMOC%DIA8g|87m)2r}(;@?hD_##;!cPsp98TTs`{yQ1Rn-qS5_`}~Q z{0*u1_X-~*?_O2-+hweWHx>Sh+#`IfaN{?=RJie*gJc~u<9?;+ zGh5*s#18!m?~rksr0|<${?1nTZn2Za3g08`Tcz+dat;$z_-Er-P>;g*%Q#-3@S)QF zs}z2<==rA#H}&pUxKH}^fW}dQ@I0gNj#|MGAjd{KGhfH;ezDs&HdJ%N2gL=>Ir{*LzqG?Fyg6uoY3biR&&<_-5(<)f!J_ zK|fRYw=yqoSNPN7e-0@8=Yl_@@J~b!uPOWq@dNKG+^nZxDBQ%EW?ePowMG11hSX#5 zoubbX3g>^vW?5!@48PG&K=F^4I5Vv9OGH1XDf|WTOZO{$wdm&$3jd+B|3ihFe*H_~ z??}9wB<(Wo4@kX53ZEtZzf9o=upm6s6@Ig<;|mmig7}jrg|G6H7;A&VC&>7nsPGEm z->PsEr=6|v(c(WZQMifIey;FZiFfZ(_!+W}Jgo2&#cw>P@b}HQDEwLJ*S{2gp~Nlx zPu}DA3ueA&$~text5VLpMk@Ss!6zvEJy~aK6n>+OOTEIggPxhD7;eqQmW|NjMv{p&tEJ2b{Tg^-VOf+qR&)?PZjxj3jc@f<3=ldxA=`}g|~{F zxeCA4PwKRmEBpr0!+8p?mi7HEg`Xhn^1BMpkoZ1L#^3apYlVMd5q{`yu$x1?O(3&zl#1N3g0hw{v(CAi#{J$_|;;U^kG&|m1)nv$Fttb zW&Rm_zVv6E!ZXU5Kcw&z#BNVi_$IN3tqMO&{KF**e^mN)hr)+Rd~!hHh0^}#6<#a$ z{1=6r^*7ni{V@GC^=2tNB=fFV;U>PCsPH`T8#5J-|C|_~MSgmV>AytU->mQhvM!&f zaMS*+3O8}WISQYdWYKel!uNj48845RXyZIb}k$=Cmr&;maGA==dzbt;ZSK*%s zeyYNs75oB)PnPxQYK8YX7Ck0@H0?C^0#7RbABf+3N#TtWZ@sPXt)(pg6NTqV9Qd`u zzZ8FxDt2eubG7IvPvPsu4oek&h0XO=Dg5`MpCt-6=c^%wzu;jxCoB91e#Unz-0Tak zRJid=KUMe!*}vbT@R`_gc%D-D4)GfY6>jSNo5D@KUntzvnxjO>fM z6mIq*I}~o}-KB8jhp$k$@xwn+xbegL6>j|S0fies{H(%_AAVio#t(m}aN~y$E8O_u z6d4DjH{*wM6mI-*g~E*=o}+NHZZ1){+1IaCxYi4su)@uFrN}%s`Zwd1qi{1`qZDq&t4iT!yp|~3 zj8~7s=SjT1L*X5=uAQs!A;N!|!e5d&_6CJ}WM6cv!h4f>9Pd^5FC|WULg7!zdis*W z&F59#QTS?E2mf2)KT73#%@=cx{%;ijpDz72_z3aC!xe5mA6TyNyTs4bDEtCBw^^j{ zJH)T8Qur!42WV0FG|@w!!k?G*=ro1@x9Ir-g+DI!UZe1NGG6->{s-|RcPacYvaUU% z@V&AwzM$|-nZIu-yj;fp?+TwO`-`-jQcKy|5n!7D-^!7ocsF|g`4ly>{s{~ z5=S0T_^o0;&nmoG#{G4Lzbt;>LxulQ#_6!a4|=(sDKgGxyu#A29EJbGVg6AHk4k^5 z6kaC#zIh5CEAxM;!ha(C$0__=vF8qjPnWoEi^5x^pJyxlo)m8Xr3z0HJ=~!1e~6v@ zO5s0~ak)?7=3M#@3NH}7y`u0MS%=Vn|qUAD}1-u z`R^4zQ|9%P3NI3W{*uD~BXT}fxT*IWg})_!CT(J(o+pW&=PNwb?E4gM*6(VCr^tGA zl)}5j-i}syK{_bIg?+`nA zPT|kVynaLBuL%C3!hbh}_5Lq~8+%KdlsGQaWL{?~e2}bo@*8UFB!*1h38AWu~OmU#;o-UKT-BI zZ3?$#{pwcu?V^V*3Lh_WPFMJUM9waSo9`=LqVO|i-d&^cYsA0Zr113;SKp%Wg<@BC zDtyCG9`E}Ve!b}JafLr8^Y=N0UoZ3Spu)}P-riPty3F5?6keOo75qct8zkQNM&U1t zzfGx1wA&BFZu#H7$M2Pf%DPja_@9*imMHui@k`|j|3@m_^C3F!U})H#19HzEc57Wg+DFhb)mwq6ggKYe23uI zD?BKA*r)Kus18OIkDeuJzFe^K~1qPM>({3Dr< zpDO$$v7av$UMTa?sZO-dhaINV6n?G8o^g@Jl5AIYZ%H;sJ<0lGV zDeKge3XjNqe@)?6i9b9fIO+#oiTQoL!;1gke%6aKmEW=1=;DpqQWP$3&q{OQ=o-xT zD05vn$|;9GddI{5^~|#uj531r@~hW-Xplt|9RraE>Qeo;oqz9KEZ#W20hY$R) zI6X$r7s3xe*O-8RE%-5lB8N1 zzQ={5oF54P#R|Vr@XKAe+YWD3xUs|A6yB1}g6?(USnu5;|9*w<7yMztjh?R+{E*^* zPVjdX{;c31DmlLp{IJ5$5q#)$PGG$_?#6G7cHwA0mouAHrSKO8pR4fK1z)1@LxLZx z@Gk`qyKroen2&X;;Kr`na=5@w7eBVs&#-lk;y33QKXKtWE`JgJeF}d?@LQGqqXfU- zg&QA?SW4*>c zhr4i;GYAa;9>2oP@8yjV9NDm)S;!2}6c<0rUoYo!Grj}Iy70mFCsB%Dj1G-_lQl{b z$d6mKh|psd{xhM=6@F0Y3WYn;UkO8~Jt%*S;G+H*zF6>CN=~2P^Avun;PVy!W5E|G z-2Bew5{3U!_?IjEZ-TE?xCaLZo(=pKYrjwM7KM)xe3Qb*3f`q~^SgT|DSW!{Z&7%y z;3q45x!`9ge7)etKbdhqQSkE>e?;($6@H4~#%~!pmkEBg;y1t3cb&q`ed0|Dzg^_) zQ}}&?->UE@1ULTPwCB%)|5ouI68t`e9~S&Ug?}sfV+v0fC-juU3j{aoiD}Px!Hr)x z_*B7PRdN;x{-(l@75p8AhXnsX;in7!cZKf~{Bwn0C-`B7-zxYw3jdwpX5O2AJt4U9 ze+GX|aPxZ}2LCU?&F^g({AMslnc(;)CP;Gq^vakUmvEJM5jT8he}EYN zHNhV~ef$>VH~S;2g8%gkyu*KH3AVs{he?G)UBL?cM`~6@TQC~5Dq12Dt0LTs1hQ9G z!0(R}Q~Y0P0c)tGe^VgX(t`gjMkx5-9{6+NSQ=#tOE}oG3H}v`8^ix;W(q+KCQ1M5 zjA-*uTPu2cqoE4;4+xX!*T5~N;a{3m#Qt9q%MEn|_@8x&0{$Q0{7@dpC`HMs723q_ zCflsXhQ?zD9P(NN$onhe@Nd9DgC`gMupW#B@G0OoYb?AYF4II%%bFwQVt^!&*ZoWc z0%d+zc`?UW5l!PU4azj@yVwoX1z$-KS$ynlc#xWA>&B;+qRuc zymAb`qyBJ=wEi$#%fu3Yn2E3O`_!t#nl}JE8pCp5&c#=V=TxR5ttjwl49lfSKwO1{ z>(RWukawj1H_5_e%47f0C+Yt00!+&U$eJzn-=pkE^X>%RBh`O~)PJ{}$7B7t2h#Op z9Dy=TJ0VHWKkE4XmU02)&D3w+uLt}{$L9}KU4nK-%);~1Y+j=z_h}YGw*jx zd6RG6>!rM*&ATaQ=qDgC2>z6stp+LYH;nRb^k?9=Ab~P<`3@<+*D%VvF8>Ncg&Q+6iL5rf28tP ON&7!!F|k)&{(k{S=L)$1 literal 0 HcmV?d00001 diff --git a/php-sdl3/.libs/sdl3_ttf.o b/php-sdl3/.libs/sdl3_ttf.o new file mode 100644 index 0000000000000000000000000000000000000000..04225ea51f7d4f2de42a7f0657004638cf67f0a0 GIT binary patch literal 67704 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 EFFQL=X8-^I literal 0 HcmV?d00001 diff --git a/php-sdl3/Makefile b/php-sdl3/Makefile index 5def62b..6c0d65b 100644 --- a/php-sdl3/Makefile +++ b/php-sdl3/Makefile @@ -7,7 +7,7 @@ SED = /usr/bin/sed AWK = nawk SHLIB_SUFFIX_NAME = so SHLIB_DL_SUFFIX_NAME = so -shared_objects_sdl3 = sdl3.lo helper.lo +shared_objects_sdl3 = sdl3.lo helper.lo sdl3_image.lo sdl3_ttf.lo sdl3_events.lo PHP_PECL_EXTENSION = sdl3 PHP_MODULES = $(phplibdir)/sdl3.la PHP_ZEND_EX = @@ -18,7 +18,7 @@ exec_prefix = $(prefix) libdir = ${exec_prefix}/lib phpincludedir = /usr/local/include/php CC = cc -CFLAGS = -g -O2 -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/local/include -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 +CFLAGS = -g -O2 -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/local/include -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu -I/usr/include/webp -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/sysprof-6 -pthread CFLAGS_CLEAN = $(CFLAGS) -D_GNU_SOURCE CPP = cc -E CPPFLAGS = -DHAVE_CONFIG_H @@ -30,7 +30,7 @@ PHP_EXECUTABLE = /usr/local/bin/php EXTRA_LDFLAGS = EXTRA_LIBS = INCLUDES = -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -LDFLAGS = -lSDL3 -L/usr/local/lib -lSDL3_gfx -lSDL3 +LDFLAGS = -lSDL3 -L/usr/local/lib -lSDL3_gfx -lSDL3 -lSDL3_image -lSDL3 -lSDL3_ttf -lSDL3 LIBTOOL = $(SHELL) $(top_builddir)/libtool SHELL = /bin/bash INSTALL_HEADERS = @@ -208,6 +208,15 @@ sdl3.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3.c -include helper.dep helper.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/helper.c $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/helper.c -o helper.lo -MMD -MF helper.dep -MT helper.lo +-include sdl3_image.dep +sdl3_image.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.c + $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.c -o sdl3_image.lo -MMD -MF sdl3_image.dep -MT sdl3_image.lo +-include sdl3_ttf.dep +sdl3_ttf.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.c + $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.c -o sdl3_ttf.lo -MMD -MF sdl3_ttf.dep -MT sdl3_ttf.lo +-include sdl3_events.dep +sdl3_events.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.c + $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.c -o sdl3_events.lo -MMD -MF sdl3_events.dep -MT sdl3_events.lo $(phplibdir)/sdl3.la: ./sdl3.la $(LIBTOOL) --tag=CC --mode=install cp ./sdl3.la $(phplibdir) diff --git a/php-sdl3/Makefile.objects b/php-sdl3/Makefile.objects index b2b6eab..6f30c55 100644 --- a/php-sdl3/Makefile.objects +++ b/php-sdl3/Makefile.objects @@ -4,6 +4,15 @@ sdl3.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3.c -include helper.dep helper.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/helper.c $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/helper.c -o helper.lo -MMD -MF helper.dep -MT helper.lo +-include sdl3_image.dep +sdl3_image.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.c + $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.c -o sdl3_image.lo -MMD -MF sdl3_image.dep -MT sdl3_image.lo +-include sdl3_ttf.dep +sdl3_ttf.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.c + $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.c -o sdl3_ttf.lo -MMD -MF sdl3_ttf.dep -MT sdl3_ttf.lo +-include sdl3_events.dep +sdl3_events.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.c + $(LIBTOOL) --tag=CC --mode=compile $(CC) -I. -I/home/thomas/projekte/phpnative/framework/php-sdl3 $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -DZEND_COMPILE_DL_EXT=1 -c /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.c -o sdl3_events.lo -MMD -MF sdl3_events.dep -MT sdl3_events.lo $(phplibdir)/sdl3.la: ./sdl3.la $(LIBTOOL) --tag=CC --mode=install cp ./sdl3.la $(phplibdir) diff --git a/php-sdl3/button_example.php b/php-sdl3/button_example.php new file mode 100644 index 0000000..262c1d4 --- /dev/null +++ b/php-sdl3/button_example.php @@ -0,0 +1,148 @@ + 220, + 'y' => 200, + 'w' => 200, + 'h' => 80, + 'hovered' => false +]; + +// Hilfsfunktion: Prüft ob Punkt in Rechteck ist +function point_in_rect($x, $y, $rect) { + return $x >= $rect['x'] && + $x <= $rect['x'] + $rect['w'] && + $y >= $rect['y'] && + $y <= $rect['y'] + $rect['h']; +} + +// Zeichnet den Button +function draw_button($renderer, $button) { + // Button-Hintergrund (grün wenn hovered, blau sonst) + if ($button['hovered']) { + sdl_set_render_draw_color($renderer, 50, 150, 50, 255); + } else { + sdl_set_render_draw_color($renderer, 70, 130, 180, 255); + } + + // Abgerundeter Button + sdl_rounded_box($renderer, + $button['x'], $button['y'], + $button['x'] + $button['w'], $button['y'] + $button['h'], + 15, + $button['hovered'] ? 50 : 70, + $button['hovered'] ? 150 : 130, + $button['hovered'] ? 50 : 180, + 255 + ); + + // Button-Rahmen (dunkler) + sdl_set_render_draw_color($renderer, 40, 80, 120, 255); + sdl_render_fill_rect($renderer, [ + 'x' => $button['x'], + 'y' => $button['y'], + 'w' => $button['w'], + 'h' => 3 + ]); + sdl_render_fill_rect($renderer, [ + 'x' => $button['x'], + 'y' => $button['y'] + $button['h'] - 3, + 'w' => $button['w'], + 'h' => 3 + ]); +} + +echo "Button-Beispiel läuft!\n"; +echo "Bewege die Maus über den blauen Button.\n"; +echo "Klicke auf den Button um das Fenster zu schließen.\n"; + +// Hauptschleife +$running = true; +while ($running) { + // Events verarbeiten + while ($event = sdl_poll_event()) { + // Quit-Event + if ($event['type'] === SDL_EVENT_QUIT) { + $running = false; + } + + // Window Close Button + if ($event['type'] === SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + $running = false; + } + + // Maus-Bewegung + if ($event['type'] === SDL_EVENT_MOUSE_MOTION) { + $button['hovered'] = point_in_rect($event['x'], $event['y'], $button); + } + + // Maus-Klick + if ($event['type'] === SDL_EVENT_MOUSE_BUTTON_DOWN) { + if ($event['button'] === SDL_BUTTON_LEFT) { + // Prüfe ob auf Button geklickt wurde + if (point_in_rect($event['x'], $event['y'], $button)) { + echo "Button wurde geklickt! Fenster wird geschlossen...\n"; + $running = false; + } + } + } + } + + // Hintergrund zeichnen (hellgrau) + sdl_set_render_draw_color($renderer, 220, 220, 220, 255); + sdl_render_clear($renderer); + + // Button zeichnen + draw_button($renderer, $button); + + // Text-Bereich für "X Schließen" simulieren (schwarzes Rechteck in der Mitte) + $text_x = $button['x'] + ($button['w'] - 100) / 2; + $text_y = $button['y'] + ($button['h'] - 20) / 2; + sdl_set_render_draw_color($renderer, 255, 255, 255, 255); + sdl_render_fill_rect($renderer, [ + 'x' => $text_x, + 'y' => $text_y, + 'w' => 100, + 'h' => 20 + ]); + + // Anzeigen + sdl_render_present($renderer); + + // Kurze Pause um CPU zu schonen + sdl_delay(16); // ~60 FPS +} + +echo "Fenster geschlossen.\n"; +sdl_quit(); diff --git a/php-sdl3/button_with_text.php b/php-sdl3/button_with_text.php new file mode 100644 index 0000000..3e64c8d --- /dev/null +++ b/php-sdl3/button_with_text.php @@ -0,0 +1,166 @@ + 220, + 'y' => 200, + 'w' => 200, + 'h' => 80, + 'hovered' => false +]; + +// Hilfsfunktion: Prüft ob Punkt in Rechteck ist +function point_in_rect($x, $y, $rect) { + return $x >= $rect['x'] && + $x <= $rect['x'] + $rect['w'] && + $y >= $rect['y'] && + $y <= $rect['y'] + $rect['h']; +} + +// Zeichnet den Button +function draw_button($renderer, $button, $text_texture, $text_size) { + // Button-Hintergrund (grün wenn hovered, blau sonst) + if ($button['hovered']) { + sdl_rounded_box($renderer, + $button['x'], $button['y'], + $button['x'] + $button['w'], $button['y'] + $button['h'], + 15, + 60, 180, 60, 255 + ); + } else { + sdl_rounded_box($renderer, + $button['x'], $button['y'], + $button['x'] + $button['w'], $button['y'] + $button['h'], + 15, + 70, 130, 180, 255 + ); + } + + // Text zentriert auf Button rendern + $text_x = $button['x'] + ($button['w'] - $text_size['w']) / 2; + $text_y = $button['y'] + ($button['h'] - $text_size['h']) / 2; + + sdl_render_texture($renderer, $text_texture, [ + 'x' => (int)$text_x, + 'y' => (int)$text_y, + 'w' => $text_size['w'], + 'h' => $text_size['h'] + ]); +} + +echo "Button-Beispiel mit Text läuft!\n"; +echo "Bewege die Maus über den Button.\n"; +echo "Klicke auf den 'Schließen'-Button um das Fenster zu schließen.\n"; + +// Hauptschleife +$running = true; +while ($running) { + // Events verarbeiten + while ($event = sdl_poll_event()) { + // Quit-Event + if ($event['type'] === SDL_EVENT_QUIT) { + $running = false; + } + + // Window Close Button + if ($event['type'] === SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + $running = false; + } + + // Maus-Bewegung + if ($event['type'] === SDL_EVENT_MOUSE_MOTION) { + $button['hovered'] = point_in_rect($event['x'], $event['y'], $button); + } + + // Maus-Klick + if ($event['type'] === SDL_EVENT_MOUSE_BUTTON_DOWN) { + if ($event['button'] === SDL_BUTTON_LEFT) { + // Prüfe ob auf Button geklickt wurde + if (point_in_rect($event['x'], $event['y'], $button)) { + echo "Button wurde geklickt! Fenster wird geschlossen...\n"; + $running = false; + } + } + } + } + + // Hintergrund zeichnen (dunkelgrau) + sdl_set_render_draw_color($renderer, 45, 45, 48, 255); + sdl_render_clear($renderer); + + // Button zeichnen + draw_button($renderer, $button, $text_texture, $text_size); + + // Anzeigen + sdl_render_present($renderer); + + // Kurze Pause um CPU zu schonen + sdl_delay(16); // ~60 FPS +} + +echo "Fenster geschlossen.\n"; +sdl_quit(); diff --git a/php-sdl3/config.m4 b/php-sdl3/config.m4 index fbd95ad..84e1352 100644 --- a/php-sdl3/config.m4 +++ b/php-sdl3/config.m4 @@ -6,6 +6,14 @@ PHP_ARG_WITH(sdl3_gfx, [for sdl3_gfx support], [ AS_HELP_STRING([--with-sdl3-gfx[=DIR]], [Enable sdl3_gfx support. DIR is the prefix for SDL3_gfx installation.]) ]) +PHP_ARG_WITH(sdl3_image, [for sdl3_image support], [ +AS_HELP_STRING([--with-sdl3-image[=DIR]], [Enable sdl3_image support. DIR is the prefix for SDL3_image installation.]) +]) + +PHP_ARG_WITH(sdl3_ttf, [for sdl3_ttf support], [ +AS_HELP_STRING([--with-sdl3-ttf[=DIR]], [Enable sdl3_ttf support. DIR is the prefix for SDL3_ttf installation.]) +]) + if test "$PHP_SDL3" != "no"; then if test -d "$PHP_SDL3"; then PKG_CONFIG_PATH="$PHP_SDL3/lib/pkgconfig:$PHP_SDL3/share/pkgconfig:$PKG_CONFIG_PATH" @@ -31,7 +39,33 @@ if test "$PHP_SDL3" != "no"; then ]) fi - SDL_SOURCE_FILES="sdl3.c helper.c" - + if test "$PHP_SDL3_IMAGE" != "no"; then + if test -d "$PHP_SDL3_IMAGE"; then + PKG_CONFIG_PATH="$PHP_SDL3_IMAGE/lib/pkgconfig:$PHP_SDL3_IMAGE/share/pkgconfig:$PKG_CONFIG_PATH" + fi + + PKG_CHECK_MODULES([SDL3_IMAGE], [sdl3-image >= 3.0.0], [ + CFLAGS="$CFLAGS $SDL3_IMAGE_CFLAGS" + LDFLAGS="$LDFLAGS $SDL3_IMAGE_LIBS" + ],[ + AC_MSG_ERROR([SDL3_image not found. Please check your installation or use --with-sdl3-image=/path/to/sdl3_image]) + ]) + fi + + if test "$PHP_SDL3_TTF" != "no"; then + if test -d "$PHP_SDL3_TTF"; then + PKG_CONFIG_PATH="$PHP_SDL3_TTF/lib/pkgconfig:$PHP_SDL3_TTF/share/pkgconfig:$PKG_CONFIG_PATH" + fi + + PKG_CHECK_MODULES([SDL3_TTF], [sdl3-ttf >= 3.0.0], [ + CFLAGS="$CFLAGS $SDL3_TTF_CFLAGS" + LDFLAGS="$LDFLAGS $SDL3_TTF_LIBS" + ],[ + AC_MSG_ERROR([SDL3_ttf not found. Please check your installation or use --with-sdl3-ttf=/path/to/sdl3_ttf]) + ]) + fi + + SDL_SOURCE_FILES="sdl3.c helper.c sdl3_image.c sdl3_ttf.c sdl3_events.c" + PHP_NEW_EXTENSION(sdl3, $SDL_SOURCE_FILES, $ext_shared) fi diff --git a/php-sdl3/config.nice b/php-sdl3/config.nice index d19f769..855d245 100755 --- a/php-sdl3/config.nice +++ b/php-sdl3/config.nice @@ -3,5 +3,8 @@ # Created by configure './configure' \ +'--with-sdl3=/usr/local' \ '--with-sdl3-gfx=/usr/local' \ +'--with-sdl3-image=/usr/local' \ +'--with-sdl3-ttf=/usr/local' \ "$@" diff --git a/php-sdl3/config.status b/php-sdl3/config.status index 3b780be..4c8b12a 100755 --- a/php-sdl3/config.status +++ b/php-sdl3/config.status @@ -413,7 +413,7 @@ $config_headers Report bugs to the package provider." -ac_cs_config='--with-sdl3-gfx=/usr/local' +ac_cs_config='--with-sdl3=/usr/local --with-sdl3-gfx=/usr/local --with-sdl3-image=/usr/local --with-sdl3-ttf=/usr/local' ac_cs_version="\ config.status configured by ./configure, generated by GNU Autoconf 2.72, @@ -494,7 +494,7 @@ if $ac_cs_silent; then fi if $ac_cs_recheck; then - set X /bin/bash './configure' '--with-sdl3-gfx=/usr/local' $ac_configure_extra_args --no-create --no-recursion + set X /bin/bash './configure' '--with-sdl3=/usr/local' '--with-sdl3-gfx=/usr/local' '--with-sdl3-image=/usr/local' '--with-sdl3-ttf=/usr/local' $ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=/bin/bash $*" >&6 CONFIG_SHELL='/bin/bash' diff --git a/php-sdl3/configure b/php-sdl3/configure index 007479b..e7a3047 100755 --- a/php-sdl3/configure +++ b/php-sdl3/configure @@ -802,6 +802,10 @@ RANLIB AR ECHO LN_S +SDL3_TTF_LIBS +SDL3_TTF_CFLAGS +SDL3_IMAGE_LIBS +SDL3_IMAGE_CFLAGS SDL3_GFX_LIBS SDL3_GFX_CFLAGS SDL3_LIBS @@ -884,6 +888,8 @@ with_php_config enable_ with_sdl3 with_sdl3_gfx +with_sdl3_image +with_sdl3_ttf enable_shared enable_static enable_fast_install @@ -907,7 +913,11 @@ CPP SDL3_CFLAGS SDL3_LIBS SDL3_GFX_CFLAGS -SDL3_GFX_LIBS' +SDL3_GFX_LIBS +SDL3_IMAGE_CFLAGS +SDL3_IMAGE_LIBS +SDL3_TTF_CFLAGS +SDL3_TTF_LIBS' # Initialize some variables set by options. @@ -1544,6 +1554,14 @@ Extension: SDL3_gfx installation. + --with-sdl3-image=DIR Enable sdl3_image support. DIR is the prefix for + SDL3_image installation. + + + --with-sdl3-ttf=DIR Enable sdl3_ttf support. DIR is the prefix for + SDL3_ttf installation. + + Libtool: --enable-shared=PKGS Build shared libraries default=yes --enable-static=PKGS Build static libraries default=yes @@ -1575,6 +1593,14 @@ Some influential environment variables: C compiler flags for SDL3_GFX, overriding pkg-config SDL3_GFX_LIBS linker flags for SDL3_GFX, overriding pkg-config + SDL3_IMAGE_CFLAGS + C compiler flags for SDL3_IMAGE, overriding pkg-config + SDL3_IMAGE_LIBS + linker flags for SDL3_IMAGE, overriding pkg-config + SDL3_TTF_CFLAGS + C compiler flags for SDL3_TTF, overriding pkg-config + SDL3_TTF_LIBS + linker flags for SDL3_TTF, overriding pkg-config Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -4801,6 +4827,108 @@ printf "%s\n" "$ext_output" >&6; } + +php_with_sdl3_image=no + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3_image support" >&5 +printf %s "checking for sdl3_image support... " >&6; } + +# Check whether --with-sdl3_image was given. +if test ${with_sdl3_image+y} +then : + withval=$with_sdl3_image; PHP_SDL3_IMAGE=$withval +else case e in #( + e) + PHP_SDL3_IMAGE=no + test "$PHP_ENABLE_ALL" && PHP_SDL3_IMAGE=$PHP_ENABLE_ALL + ;; +esac +fi + + + +ext_output="yes, shared" +ext_shared=yes +case $PHP_SDL3_IMAGE in +shared,*) + PHP_SDL3_IMAGE=$(echo "$PHP_SDL3_IMAGE"|$SED 's/^shared,//') + ;; +shared) + PHP_SDL3_IMAGE=yes + ;; +no) + ext_output=no + ext_shared=no + ;; +*) + ext_output=yes + ext_shared=no + ;; +esac + + + ext_output="yes, shared" + ext_shared=yes + test "$PHP_SDL3_IMAGE" = "no" && PHP_SDL3_IMAGE=yes + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ext_output" >&5 +printf "%s\n" "$ext_output" >&6; } + + + + + +php_with_sdl3_ttf=no + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3_ttf support" >&5 +printf %s "checking for sdl3_ttf support... " >&6; } + +# Check whether --with-sdl3_ttf was given. +if test ${with_sdl3_ttf+y} +then : + withval=$with_sdl3_ttf; PHP_SDL3_TTF=$withval +else case e in #( + e) + PHP_SDL3_TTF=no + test "$PHP_ENABLE_ALL" && PHP_SDL3_TTF=$PHP_ENABLE_ALL + ;; +esac +fi + + + +ext_output="yes, shared" +ext_shared=yes +case $PHP_SDL3_TTF in +shared,*) + PHP_SDL3_TTF=$(echo "$PHP_SDL3_TTF"|$SED 's/^shared,//') + ;; +shared) + PHP_SDL3_TTF=yes + ;; +no) + ext_output=no + ext_shared=no + ;; +*) + ext_output=yes + ext_shared=no + ;; +esac + + + ext_output="yes, shared" + ext_shared=yes + test "$PHP_SDL3_TTF" = "no" && PHP_SDL3_TTF=yes + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ext_output" >&5 +printf "%s\n" "$ext_output" >&6; } + + + + if test "$PHP_SDL3" != "no"; then if test -d "$PHP_SDL3"; then PKG_CONFIG_PATH="$PHP_SDL3/lib/pkgconfig:$PHP_SDL3/share/pkgconfig:$PKG_CONFIG_PATH" @@ -4970,7 +5098,177 @@ printf "%s\n" "yes" >&6; } fi fi - SDL_SOURCE_FILES="sdl3.c helper.c" + if test "$PHP_SDL3_IMAGE" != "no"; then + if test -d "$PHP_SDL3_IMAGE"; then + PKG_CONFIG_PATH="$PHP_SDL3_IMAGE/lib/pkgconfig:$PHP_SDL3_IMAGE/share/pkgconfig:$PKG_CONFIG_PATH" + fi + + +pkg_failed=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3-image >= 3.0.0" >&5 +printf %s "checking for sdl3-image >= 3.0.0... " >&6; } + +if test -n "$SDL3_IMAGE_CFLAGS"; then + pkg_cv_SDL3_IMAGE_CFLAGS="$SDL3_IMAGE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl3-image >= 3.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sdl3-image >= 3.0.0") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SDL3_IMAGE_CFLAGS=`$PKG_CONFIG --cflags "sdl3-image >= 3.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$SDL3_IMAGE_LIBS"; then + pkg_cv_SDL3_IMAGE_LIBS="$SDL3_IMAGE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl3-image >= 3.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sdl3-image >= 3.0.0") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SDL3_IMAGE_LIBS=`$PKG_CONFIG --libs "sdl3-image >= 3.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SDL3_IMAGE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl3-image >= 3.0.0" 2>&1` + else + SDL3_IMAGE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl3-image >= 3.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$SDL3_IMAGE_PKG_ERRORS" >&5 + + + as_fn_error $? "SDL3_image not found. Please check your installation or use --with-sdl3-image=/path/to/sdl3_image" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + as_fn_error $? "SDL3_image not found. Please check your installation or use --with-sdl3-image=/path/to/sdl3_image" "$LINENO" 5 + +else + SDL3_IMAGE_CFLAGS=$pkg_cv_SDL3_IMAGE_CFLAGS + SDL3_IMAGE_LIBS=$pkg_cv_SDL3_IMAGE_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + + CFLAGS="$CFLAGS $SDL3_IMAGE_CFLAGS" + LDFLAGS="$LDFLAGS $SDL3_IMAGE_LIBS" + +fi + fi + + if test "$PHP_SDL3_TTF" != "no"; then + if test -d "$PHP_SDL3_TTF"; then + PKG_CONFIG_PATH="$PHP_SDL3_TTF/lib/pkgconfig:$PHP_SDL3_TTF/share/pkgconfig:$PKG_CONFIG_PATH" + fi + + +pkg_failed=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3-ttf >= 3.0.0" >&5 +printf %s "checking for sdl3-ttf >= 3.0.0... " >&6; } + +if test -n "$SDL3_TTF_CFLAGS"; then + pkg_cv_SDL3_TTF_CFLAGS="$SDL3_TTF_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl3-ttf >= 3.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sdl3-ttf >= 3.0.0") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SDL3_TTF_CFLAGS=`$PKG_CONFIG --cflags "sdl3-ttf >= 3.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$SDL3_TTF_LIBS"; then + pkg_cv_SDL3_TTF_LIBS="$SDL3_TTF_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl3-ttf >= 3.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sdl3-ttf >= 3.0.0") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SDL3_TTF_LIBS=`$PKG_CONFIG --libs "sdl3-ttf >= 3.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SDL3_TTF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl3-ttf >= 3.0.0" 2>&1` + else + SDL3_TTF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl3-ttf >= 3.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$SDL3_TTF_PKG_ERRORS" >&5 + + + as_fn_error $? "SDL3_ttf not found. Please check your installation or use --with-sdl3-ttf=/path/to/sdl3_ttf" "$LINENO" 5 + +elif test $pkg_failed = untried; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + as_fn_error $? "SDL3_ttf not found. Please check your installation or use --with-sdl3-ttf=/path/to/sdl3_ttf" "$LINENO" 5 + +else + SDL3_TTF_CFLAGS=$pkg_cv_SDL3_TTF_CFLAGS + SDL3_TTF_LIBS=$pkg_cv_SDL3_TTF_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + + CFLAGS="$CFLAGS $SDL3_TTF_CFLAGS" + LDFLAGS="$LDFLAGS $SDL3_TTF_LIBS" + +fi + fi + + SDL_SOURCE_FILES="sdl3.c helper.c sdl3_image.c sdl3_ttf.c sdl3_events.c" ext_builddir=. @@ -5825,7 +6123,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5828 "configure"' > conftest.$ac_ext + echo '#line 6126 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -7204,7 +7502,7 @@ else case e in #( LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat > conftest.$ac_ext <&5) + (eval echo "\"configure:7667: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "configure:7373: \$? = $ac_status" >&5 + echo "configure:7671: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7666,11 +7964,11 @@ else case e in #( -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:7669: $lt_compile\"" >&5) + (eval echo "\"configure:7967: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "configure:7673: \$? = $ac_status" >&5 + echo "configure:7971: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7774,11 +8072,11 @@ else case e in #( -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:7777: $lt_compile\"" >&5) + (eval echo "\"configure:8075: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "configure:7781: \$? = $ac_status" >&5 + echo "configure:8079: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8239,7 +8537,7 @@ _LT_EOF # Determine the default libpath from the value encoded in an empty executable. cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"configure:12627: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "configure:12333: \$? = $ac_status" >&5 + echo "configure:12631: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -12434,11 +12732,11 @@ else case e in #( -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:12437: $lt_compile\"" >&5) + (eval echo "\"configure:12735: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "configure:12441: \$? = $ac_status" >&5 + echo "configure:12739: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized diff --git a/php-sdl3/draw_rounded_ex.php b/php-sdl3/draw_rounded_ex.php index 9487a85..ffdf36a 100644 --- a/php-sdl3/draw_rounded_ex.php +++ b/php-sdl3/draw_rounded_ex.php @@ -33,10 +33,10 @@ sdl_render_clear($renderer); // Ein grünes, abgerundetes Rechteck mit verschiedenen Radien zeichnen // Radien: Oben-Links, Oben-Rechts, Unten-Rechts, Unten-Links -$rad_tl = 20; -$rad_tr = 20; -$rad_br = 20; -$rad_bl = 20; +$rad_tl = 40; +$rad_tr = 10; +$rad_br = 40; +$rad_bl = 10; sdl_rounded_box_ex($renderer, 100, 100, 200, 200, $rad_tl, $rad_tr, $rad_br, $rad_bl, 30, 200, 70, 255); // Alles auf dem Bildschirm anzeigen diff --git a/php-sdl3/helper.h b/php-sdl3/helper.h index eb22e68..9bb85f4 100644 --- a/php-sdl3/helper.h +++ b/php-sdl3/helper.h @@ -2,34 +2,33 @@ #define PHP_SDL3_HELPER #include +#include #include "math.h" -static void draw_hline(SDL_Renderer *renderer, int x1, int x2, int y) { - if (x2 < x1) return; - SDL_RenderLine(renderer, x1, y, x2, y); -} -// Zeichnet einen gefüllten Viertel-Kreis (filled quarter circle). +// Zeichnet einen gefüllten Viertel-Kreis mit Anti-Aliasing (filled quarter circle). // quadrant: 0 = top-left, 1 = top-right, 2 = bottom-right, 3 = bottom-left static void filled_quarter_circle(SDL_Renderer *renderer, int cx, int cy, int r, int quadrant) { if (r <= 0) return; - int r2 = r * r; - for (int dy = 0; dy <= r; ++dy) { - // dy ist vertikale Distanz vom Kreiszentrum (0..r) - int dx = (int)floor(sqrt((double)r2 - (double)dy * dy)); - switch (quadrant) { - case 0: // top-left: y = cy - dy, x in [cx - dx, cx] - draw_hline(renderer, cx - dx, cx, cy - dy); - break; - case 1: // top-right: y = cy - dy, x in [cx, cx + dx] - draw_hline(renderer, cx, cx + dx, cy - dy); - break; - case 2: // bottom-right: y = cy + dy, x in [cx, cx + dx] - draw_hline(renderer, cx, cx + dx, cy + dy); - break; - case 3: // bottom-left: y = cy + dy, x in [cx - dx, cx] - draw_hline(renderer, cx - dx, cx, cy + dy); - break; - } + + // Get current draw color + Uint8 r_col, g_col, b_col, a_col; + SDL_GetRenderDrawColor(renderer, &r_col, &g_col, &b_col, &a_col); + + // Use SDL_gfx filledCircle with proper quadrant rendering + // We'll draw the arc using the primitives library + switch (quadrant) { + case 0: // top-left + filledPieRGBA(renderer, cx, cy, r, 180, 270, r_col, g_col, b_col, a_col); + break; + case 1: // top-right + filledPieRGBA(renderer, cx, cy, r, 270, 360, r_col, g_col, b_col, a_col); + break; + case 2: // bottom-right + filledPieRGBA(renderer, cx, cy, r, 0, 90, r_col, g_col, b_col, a_col); + break; + case 3: // bottom-left + filledPieRGBA(renderer, cx, cy, r, 90, 180, r_col, g_col, b_col, a_col); + break; } } diff --git a/php-sdl3/libtool b/php-sdl3/libtool index 2658e46..1e0e0e4 100755 --- a/php-sdl3/libtool +++ b/php-sdl3/libtool @@ -85,7 +85,7 @@ AR_FLAGS="cru" LTCC="cc" # LTCC compiler flags. -LTCFLAGS="-g -O2 -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/local/include -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 " +LTCFLAGS="-g -O2 -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/local/include -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu -I/usr/include/webp -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/sysprof-6 -pthread " # A language-specific compiler. CC="cc" diff --git a/php-sdl3/modules/sdl3.la b/php-sdl3/modules/sdl3.la index 53cf407..b031f4b 100644 --- a/php-sdl3/modules/sdl3.la +++ b/php-sdl3/modules/sdl3.la @@ -14,7 +14,7 @@ library_names='sdl3.so sdl3.so sdl3.so' old_library='' # Libraries that this one depends upon. -dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3' +dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3_image -lSDL3_ttf -lSDL3' # Version information for sdl3. current=0 diff --git a/php-sdl3/modules/sdl3.so b/php-sdl3/modules/sdl3.so index fe3f36430b060255727c3e44a7274137eceaff14..dd5a381f35f7a78905231010d0a45820671ba2b2 100755 GIT binary patch literal 202200 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

Bl9#%Z!1}BHpt@USpQyRIRov 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 SRQm6YO8R%p!{i%sTK@<5M<=uZ diff --git a/php-sdl3/multi_window_example.php b/php-sdl3/multi_window_example.php new file mode 100644 index 0000000..0990fea --- /dev/null +++ b/php-sdl3/multi_window_example.php @@ -0,0 +1,243 @@ += $rect['x'] && + $x <= $rect['x'] + $rect['w'] && + $y >= $rect['y'] && + $y <= $rect['y'] + $rect['h']; +} + +// Zeichnet einen Button +function draw_button($renderer, $button, $text_texture, $text_size) { + // Button-Hintergrund (grün wenn hovered, blau sonst) + if ($button['hovered']) { + sdl_rounded_box($renderer, + $button['x'], $button['y'], + $button['x'] + $button['w'], $button['y'] + $button['h'], + 15, + 60, 180, 60, 255 + ); + } else { + sdl_rounded_box($renderer, + $button['x'], $button['y'], + $button['x'] + $button['w'], $button['y'] + $button['h'], + 15, + 70, 130, 180, 255 + ); + } + + // Text zentriert auf Button rendern + $text_x = $button['x'] + ($button['w'] - $text_size['w']) / 2; + $text_y = $button['y'] + ($button['h'] - $text_size['h']) / 2; + + sdl_render_texture($renderer, $text_texture, [ + 'x' => (int)$text_x, + 'y' => (int)$text_y, + 'w' => $text_size['w'], + 'h' => $text_size['h'] + ]); +} + +// Button-Eigenschaften Hauptfenster +$main_button = [ + 'x' => 200, + 'y' => 200, + 'w' => 240, + 'h' => 80, + 'hovered' => false +]; + +// Button-Eigenschaften zweites Fenster +$second_button = [ + 'x' => 100, + 'y' => 150, + 'w' => 200, + 'h' => 80, + 'hovered' => false +]; + +echo "Multi-Window Beispiel läuft!\n"; +echo "Hauptfenster: Klicke auf 'Fenster öffnen' um ein zweites Fenster zu öffnen.\n"; +echo "Zweites Fenster: Klicke auf 'Schließen' um es zu schließen.\n"; + +// Hauptschleife +$main_running = true; +$second_running = false; + +while ($main_running) { + // Events verarbeiten + while ($event = sdl_poll_event()) { + // Quit-Event schließt alle Fenster + if ($event['type'] === SDL_EVENT_QUIT) { + $main_running = false; + $second_running = false; + } + + // Window Close Event - prüfe welches Fenster + if ($event['type'] === SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + if (isset($event['window_id'])) { + if ($event['window_id'] === $main_window_id) { + echo "Hauptfenster schließen-Anfrage\n"; + $main_running = false; + $second_running = false; + } elseif ($second_running && $event['window_id'] === $second_window_id) { + echo "Zweites Fenster schließen-Anfrage\n"; + $second_running = false; + $second_window = null; + $second_window_id = null; + $second_renderer = null; + $second_text_texture = null; + $second_button['hovered'] = false; + } + } + } + + // Maus-Bewegung + if ($event['type'] === SDL_EVENT_MOUSE_MOTION) { + if (isset($event['window_id'])) { + // Hauptfenster + if ($event['window_id'] === $main_window_id) { + $main_button['hovered'] = point_in_rect($event['x'], $event['y'], $main_button); + } + // Zweites Fenster + elseif ($second_running && $event['window_id'] === $second_window_id) { + $second_button['hovered'] = point_in_rect($event['x'], $event['y'], $second_button); + } + } + } + + // Maus-Klick + if ($event['type'] === SDL_EVENT_MOUSE_BUTTON_DOWN) { + if ($event['button'] === SDL_BUTTON_LEFT && isset($event['window_id'])) { + // Hauptfenster-Button: Öffne zweites Fenster + if ($event['window_id'] === $main_window_id && + point_in_rect($event['x'], $event['y'], $main_button)) { + if (!$second_running) { + echo "Öffne zweites Fenster...\n"; + + $second_window = sdl_create_window('Zweites Fenster', 400, 300); + if ($second_window) { + $second_window_id = sdl_get_window_id($second_window); + $second_renderer = sdl_create_renderer($second_window); + if ($second_renderer) { + $second_text_texture = create_text_texture($second_renderer, $font, 'Schließen'); + $second_text_size = ttf_size_text($font, 'Schließen'); + $second_running = true; + } + } + } + } + + // Zweites Fenster-Button: Schließe zweites Fenster + if ($second_running && $event['window_id'] === $second_window_id && + point_in_rect($event['x'], $event['y'], $second_button)) { + echo "Schließe zweites Fenster...\n"; + $second_running = false; + $second_window = null; + $second_window_id = null; + $second_renderer = null; + $second_text_texture = null; + $second_button['hovered'] = false; + } + } + } + } + + // Hauptfenster rendern + sdl_set_render_draw_color($main_renderer, 45, 45, 48, 255); + sdl_render_clear($main_renderer); + draw_button($main_renderer, $main_button, $main_text_texture, $main_text_size); + + // Info-Text (weißes Rechteck als Platzhalter) + sdl_set_render_draw_color($main_renderer, 80, 80, 80, 255); + sdl_render_fill_rect($main_renderer, ['x' => 50, 'y' => 50, 'w' => 540, 'h' => 100]); + + sdl_render_present($main_renderer); + + // Zweites Fenster rendern (wenn offen) + if ($second_running && $second_renderer) { + sdl_set_render_draw_color($second_renderer, 60, 60, 65, 255); + sdl_render_clear($second_renderer); + draw_button($second_renderer, $second_button, $second_text_texture, $second_text_size); + + // Info-Text + sdl_set_render_draw_color($second_renderer, 100, 100, 100, 255); + sdl_render_fill_rect($second_renderer, ['x' => 50, 'y' => 50, 'w' => 300, 'h' => 60]); + + sdl_render_present($second_renderer); + } + + // CPU schonen + sdl_delay(16); // ~60 FPS +} + +echo "Programm beendet.\n"; +sdl_quit(); diff --git a/php-sdl3/php_sdl3.h b/php-sdl3/php_sdl3.h index ab0ca69..ab5a5c7 100644 --- a/php-sdl3/php_sdl3.h +++ b/php-sdl3/php_sdl3.h @@ -6,4 +6,10 @@ extern zend_module_entry sdl3_module_entry; #define PHP_SDL3_VERSION "0.1.0" +// Resource handles exportieren, damit sie in anderen Modulen verfügbar sind +extern int le_sdl_window; +extern int le_sdl_renderer; +extern int le_sdl_texture; +extern int le_sdl_surface; + #endif diff --git a/php-sdl3/sdl3.c b/php-sdl3/sdl3.c index 22e2592..f32270f 100644 --- a/php-sdl3/sdl3.c +++ b/php-sdl3/sdl3.c @@ -6,13 +6,17 @@ #include "php.h" #include "php_sdl3.h" #include "helper.h" +#include "sdl3_image.h" +#include "sdl3_ttf.h" +#include "sdl3_events.h" #include #include #include -// Resource handles -static int le_sdl_window; -static int le_sdl_renderer; +// Resource handles (nicht static, damit sie in anderen Modulen verfügbar sind) +int le_sdl_window; +int le_sdl_renderer; +int le_sdl_texture; // Destructor for window resource static void sdl_window_dtor(zend_resource *rsrc) { @@ -30,9 +34,41 @@ static void sdl_renderer_dtor(zend_resource *rsrc) { } } +// Destructor for texture resource +static void sdl_texture_dtor(zend_resource *rsrc) { + SDL_Texture *tex = (SDL_Texture *)rsrc->ptr; + if (tex) { + SDL_DestroyTexture(tex); + } +} + PHP_MINIT_FUNCTION(sdl3) { le_sdl_window = zend_register_list_destructors_ex(sdl_window_dtor, NULL, "SDL_Window", module_number); le_sdl_renderer = zend_register_list_destructors_ex(sdl_renderer_dtor, NULL, "SDL_Renderer", module_number); + le_sdl_texture = zend_register_list_destructors_ex(sdl_texture_dtor, NULL, "SDL_Texture", module_number); + + // Registriere SDL3_image und SDL3_ttf Resources + sdl3_image_register_resources(module_number); + sdl3_ttf_register_resources(module_number); + + // Registriere Event-Konstanten + sdl3_events_register_constants(module_number); + + // SDL Init Flags + REGISTER_LONG_CONSTANT("SDL_INIT_VIDEO", SDL_INIT_VIDEO, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_INIT_AUDIO", SDL_INIT_AUDIO, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_INIT_EVENTS", SDL_INIT_EVENTS, CONST_CS | CONST_PERSISTENT); + + // SDL Window Flags + REGISTER_LONG_CONSTANT("SDL_WINDOW_FULLSCREEN", SDL_WINDOW_FULLSCREEN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_OPENGL", SDL_WINDOW_OPENGL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_HIDDEN", SDL_WINDOW_HIDDEN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_BORDERLESS", SDL_WINDOW_BORDERLESS, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_RESIZABLE", SDL_WINDOW_RESIZABLE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_MINIMIZED", SDL_WINDOW_MINIMIZED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_MAXIMIZED", SDL_WINDOW_MAXIMIZED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_WINDOW_HIGH_PIXEL_DENSITY", SDL_WINDOW_HIGH_PIXEL_DENSITY, CONST_CS | CONST_PERSISTENT); + return SUCCESS; } @@ -54,19 +90,60 @@ PHP_FUNCTION(sdl_quit) { PHP_FUNCTION(sdl_create_window) { char *title; size_t title_len; - zend_long w, h; + zend_long w, h, flags = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll", &title, &title_len, &w, &h) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|l", &title, &title_len, &w, &h, &flags) == FAILURE) { RETURN_THROWS(); } - SDL_Window *win = SDL_CreateWindow(title, (int)w, (int)h, 0); + SDL_Window *win = SDL_CreateWindow(title, (int)w, (int)h, (SDL_WindowFlags)flags); if (!win) { RETURN_FALSE; } RETURN_RES(zend_register_resource(win, le_sdl_window)); } +PHP_FUNCTION(sdl_destroy_window) { + zval *win_res; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &win_res) == FAILURE) { + RETURN_THROWS(); + } + + // This will call the destructor and free the resource + zend_list_close(Z_RES_P(win_res)); + RETURN_TRUE; +} + +PHP_FUNCTION(sdl_destroy_renderer) { + zval *ren_res; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &ren_res) == FAILURE) { + RETURN_THROWS(); + } + + // This will call the destructor and free the resource + zend_list_close(Z_RES_P(ren_res)); + RETURN_TRUE; +} + +PHP_FUNCTION(sdl_get_window_id) { + zval *win_res; + SDL_Window *win; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &win_res) == FAILURE) { + RETURN_THROWS(); + } + + win = (SDL_Window *)zend_fetch_resource(Z_RES_P(win_res), "SDL_Window", le_sdl_window); + if (!win) { + RETURN_FALSE; + } + + SDL_WindowID window_id = SDL_GetWindowID(win); + RETURN_LONG(window_id); +} + PHP_FUNCTION(sdl_create_renderer) { zval *win_res; SDL_Window *win; @@ -185,6 +262,79 @@ PHP_FUNCTION(sdl_get_error) { RETURN_STRING(error); } +PHP_FUNCTION(sdl_create_texture_from_surface) { + zval *ren_res, *surf_res; + SDL_Renderer *renderer; + SDL_Surface *surface; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rr", &ren_res, &surf_res) == FAILURE) { + RETURN_THROWS(); + } + + renderer = (SDL_Renderer *)zend_fetch_resource(Z_RES_P(ren_res), "SDL_Renderer", le_sdl_renderer); + if (!renderer) { + RETURN_FALSE; + } + + surface = (SDL_Surface *)zend_fetch_resource(Z_RES_P(surf_res), "SDL_Surface", le_sdl_surface); + if (!surface) { + RETURN_FALSE; + } + + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface); + if (!texture) { + php_error_docref(NULL, E_WARNING, "Failed to create texture: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(texture, le_sdl_texture)); +} + +PHP_FUNCTION(sdl_render_texture) { + zval *ren_res, *tex_res; + SDL_Renderer *renderer; + SDL_Texture *texture; + zval *dst_arr = NULL; + HashTable *dst_ht; + zval *data; + zend_long x, y, w, h; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rr|a", &ren_res, &tex_res, &dst_arr) == FAILURE) { + RETURN_THROWS(); + } + + renderer = (SDL_Renderer *)zend_fetch_resource(Z_RES_P(ren_res), "SDL_Renderer", le_sdl_renderer); + if (!renderer) { + RETURN_FALSE; + } + + texture = (SDL_Texture *)zend_fetch_resource(Z_RES_P(tex_res), "SDL_Texture", le_sdl_texture); + if (!texture) { + RETURN_FALSE; + } + + if (dst_arr != NULL) { + // Mit Zielrechteck + dst_ht = Z_ARRVAL_P(dst_arr); + if (((data = zend_hash_str_find(dst_ht, "x", 1)) != NULL && (x = zval_get_long(data), true)) && + ((data = zend_hash_str_find(dst_ht, "y", 1)) != NULL && (y = zval_get_long(data), true)) && + ((data = zend_hash_str_find(dst_ht, "w", 1)) != NULL && (w = zval_get_long(data), true)) && + ((data = zend_hash_str_find(dst_ht, "h", 1)) != NULL && (h = zval_get_long(data), true))) { + + SDL_FRect dstrect = {(float)x, (float)y, (float)w, (float)h}; + SDL_RenderTexture(renderer, texture, NULL, &dstrect); + RETURN_TRUE; + } + + zend_throw_error(NULL, "Invalid destination rectangle. Expected ['x'=>int, 'y'=>int, 'w'=>int, 'h'=>int]"); + RETURN_THROWS(); + } else { + // Ohne Zielrechteck - volle Größe + SDL_RenderTexture(renderer, texture, NULL, NULL); + RETURN_TRUE; + } +} + PHP_FUNCTION(sdl_rounded_box) { zval *ren_res; @@ -237,18 +387,40 @@ PHP_FUNCTION(sdl_rounded_box_ex) int r_right = (rad_tr > rad_br) ? rad_tr : rad_br; // 1) center vertical band (zwischen links und rechts Radien), ganze Höhe - SDL_FRect center = { x1 + rad_tl, y1, x2 - x1-rad_tl-rad_br, y2-y1 }; + SDL_FRect center = { x1 + r_left, y1, x2 - x1-r_left-r_right, y2-y1 }; if (center.w > 0 && center.h > 0) SDL_RenderFillRect(ren, ¢er); // 2) left vertical rectangle (zwischen oberen und unteren Ecken links) - SDL_FRect leftRect = { x1, y1 + rad_tl, rad_bl, y2-rad_tl-rad_bl-y1 }; + SDL_FRect leftRect = { x1, y1 + rad_tl, r_left, y2 - y1 - rad_tl - rad_bl }; if (leftRect.w > 0 && leftRect.h > 0) SDL_RenderFillRect(ren, &leftRect); // 3) right vertical rectangle (zwischen oberen und unteren Ecken rechts) - SDL_FRect rightRect = { x2 - r_right, y1 + rad_tr, r_right, y2-y1-rad_tr - rad_br }; + SDL_FRect rightRect = { x2 - r_right, y1 + rad_tr, r_right, y2 - y1 - rad_tr - rad_br }; if (rightRect.w > 0 && rightRect.h > 0) SDL_RenderFillRect(ren, &rightRect); - // 4) vier gefüllte Viertel-Kreise in den Ecken + // 4) Horizontale Füllrechtecke für Lücken zwischen Ecken und vertikalen Rechtecken + // Oben links: wenn rad_tl < r_left + if (rad_tl < r_left) { + SDL_FRect topLeft = { x1 + rad_tl, y1, r_left - rad_tl, rad_tl }; + if (topLeft.w > 0 && topLeft.h > 0) SDL_RenderFillRect(ren, &topLeft); + } + // Oben rechts: wenn rad_tr < r_right + if (rad_tr < r_right) { + SDL_FRect topRight = { x2 - r_right, y1, r_right - rad_tr, rad_tr }; + if (topRight.w > 0 && topRight.h > 0) SDL_RenderFillRect(ren, &topRight); + } + // Unten rechts: wenn rad_br < r_right + if (rad_br < r_right) { + SDL_FRect bottomRight = { x2 - r_right, y2 - rad_br, r_right - rad_br, rad_br }; + if (bottomRight.w > 0 && bottomRight.h > 0) SDL_RenderFillRect(ren, &bottomRight); + } + // Unten links: wenn rad_bl < r_left + if (rad_bl < r_left) { + SDL_FRect bottomLeft = { x1 + rad_bl, y2 - rad_bl, r_left - rad_bl, rad_bl }; + if (bottomLeft.w > 0 && bottomLeft.h > 0) SDL_RenderFillRect(ren, &bottomLeft); + } + + // 5) vier gefüllte Viertel-Kreise in den Ecken if (rad_tl > 0) filled_quarter_circle(ren, x1 + rad_tl, y1 + rad_tl, rad_tl, 0); if (rad_tr > 0) filled_quarter_circle(ren, x2 - rad_tr, y1 + rad_tr, rad_tr, 1); if (rad_br > 0) filled_quarter_circle(ren, x2 - rad_br, y2- rad_br, rad_br, 2); @@ -257,6 +429,99 @@ PHP_FUNCTION(sdl_rounded_box_ex) RETURN_TRUE; } +PHP_FUNCTION(sdl_set_render_clip_rect) { + zval *ren_res; + SDL_Renderer *ren; + zval *rect_arr = NULL; + HashTable *rect_ht; + zval *data; + zend_long x, y, w, h; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|a!", &ren_res, &rect_arr) == FAILURE) { + RETURN_THROWS(); + } + + ren = (SDL_Renderer *)zend_fetch_resource(Z_RES_P(ren_res), "SDL_Renderer", le_sdl_renderer); + if (!ren) { + RETURN_FALSE; + } + + if (rect_arr == NULL || Z_TYPE_P(rect_arr) == IS_NULL) { + // Disable clipping + SDL_SetRenderClipRect(ren, NULL); + RETURN_TRUE; + } + + rect_ht = Z_ARRVAL_P(rect_arr); + if (((data = zend_hash_str_find(rect_ht, "x", 1)) != NULL && (x = zval_get_long(data), true)) && + ((data = zend_hash_str_find(rect_ht, "y", 1)) != NULL && (y = zval_get_long(data), true)) && + ((data = zend_hash_str_find(rect_ht, "w", 1)) != NULL && (w = zval_get_long(data), true)) && + ((data = zend_hash_str_find(rect_ht, "h", 1)) != NULL && (h = zval_get_long(data), true))) { + + SDL_Rect rect = {(int)x, (int)y, (int)w, (int)h}; + SDL_SetRenderClipRect(ren, &rect); + RETURN_TRUE; + } + + zend_throw_error(NULL, "Invalid rectangle array passed to sdl_set_render_clip_rect. Expected ['x'=>int, 'y'=>int, 'w'=>int, 'h'=>int] or null"); + RETURN_THROWS(); +} + +PHP_FUNCTION(sdl_get_window_size) { + zval *win_res; + SDL_Window *win; + int w, h; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &win_res) == FAILURE) { + RETURN_THROWS(); + } + + win = (SDL_Window *)zend_fetch_resource(Z_RES_P(win_res), "SDL_Window", le_sdl_window); + if (!win) { + RETURN_FALSE; + } + + SDL_GetWindowSize(win, &w, &h); + + array_init(return_value); + add_index_long(return_value, 0, w); + add_index_long(return_value, 1, h); +} + +PHP_FUNCTION(sdl_start_text_input) { + zval *win_res; + SDL_Window *win; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &win_res) == FAILURE) { + RETURN_THROWS(); + } + + win = (SDL_Window *)zend_fetch_resource(Z_RES_P(win_res), "SDL_Window", le_sdl_window); + if (!win) { + RETURN_FALSE; + } + + SDL_StartTextInput(win); + RETURN_TRUE; +} + +PHP_FUNCTION(sdl_stop_text_input) { + zval *win_res; + SDL_Window *win; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &win_res) == FAILURE) { + RETURN_THROWS(); + } + + win = (SDL_Window *)zend_fetch_resource(Z_RES_P(win_res), "SDL_Window", le_sdl_window); + if (!win) { + RETURN_FALSE; + } + + SDL_StopTextInput(win); + RETURN_TRUE; +} + ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_init, 0, 0, 1) ZEND_ARG_INFO(0, flags) ZEND_END_ARG_INFO() @@ -268,6 +533,19 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_create_window, 0, 0, 3) ZEND_ARG_INFO(0, title) ZEND_ARG_INFO(0, w) ZEND_ARG_INFO(0, h) + ZEND_ARG_INFO(0, flags) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_destroy_window, 0, 0, 1) + ZEND_ARG_INFO(0, window) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_destroy_renderer, 0, 0, 1) + ZEND_ARG_INFO(0, renderer) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_window_id, 0, 0, 1) + ZEND_ARG_INFO(0, window) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_create_renderer, 0, 0, 1) @@ -302,6 +580,17 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_error, 0, 0, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_create_texture_from_surface, 0, 0, 2) + ZEND_ARG_INFO(0, renderer) + ZEND_ARG_INFO(0, surface) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_render_texture, 0, 0, 2) + ZEND_ARG_INFO(0, renderer) + ZEND_ARG_INFO(0, texture) + ZEND_ARG_INFO(0, dstrect) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_rounded_box, 0, 0, 10) ZEND_ARG_INFO(0, renderer) ZEND_ARG_INFO(0, x1) @@ -331,10 +620,31 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_rounded_box_ex, 0, 0, 13) ZEND_ARG_INFO(0, a) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_set_render_clip_rect, 0, 0, 1) + ZEND_ARG_INFO(0, renderer) + ZEND_ARG_INFO(0, rect) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_window_size, 0, 0, 1) + ZEND_ARG_INFO(0, window) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_start_text_input, 0, 0, 1) + ZEND_ARG_INFO(0, window) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_stop_text_input, 0, 0, 1) + ZEND_ARG_INFO(0, window) +ZEND_END_ARG_INFO() + const zend_function_entry sdl3_functions[] = { + // SDL3 Core PHP_FE(sdl_init, arginfo_sdl_init) PHP_FE(sdl_quit, arginfo_sdl_quit) PHP_FE(sdl_create_window, arginfo_sdl_create_window) + PHP_FE(sdl_destroy_window, arginfo_sdl_destroy_window) + PHP_FE(sdl_destroy_renderer, arginfo_sdl_destroy_renderer) + PHP_FE(sdl_get_window_id, arginfo_sdl_get_window_id) PHP_FE(sdl_create_renderer, arginfo_sdl_create_renderer) PHP_FE(sdl_set_render_draw_color, arginfo_sdl_set_render_draw_color) PHP_FE(sdl_render_clear, arginfo_sdl_render_clear) @@ -342,8 +652,33 @@ const zend_function_entry sdl3_functions[] = { PHP_FE(sdl_render_present, arginfo_sdl_render_present) PHP_FE(sdl_delay, arginfo_sdl_delay) PHP_FE(sdl_get_error, arginfo_sdl_get_error) + PHP_FE(sdl_create_texture_from_surface, arginfo_sdl_create_texture_from_surface) + PHP_FE(sdl_render_texture, arginfo_sdl_render_texture) PHP_FE(sdl_rounded_box, arginfo_sdl_rounded_box) PHP_FE(sdl_rounded_box_ex, arginfo_sdl_rounded_box_ex) + PHP_FE(sdl_set_render_clip_rect, arginfo_sdl_set_render_clip_rect) + PHP_FE(sdl_get_window_size, arginfo_sdl_get_window_size) + PHP_FE(sdl_start_text_input, arginfo_sdl_start_text_input) + PHP_FE(sdl_stop_text_input, arginfo_sdl_stop_text_input) + + // SDL3_image + PHP_FE(img_load, arginfo_img_load) + PHP_FE(img_load_texture, arginfo_img_load_texture) + + // SDL3_ttf + PHP_FE(ttf_init, arginfo_ttf_init) + PHP_FE(ttf_open_font, arginfo_ttf_open_font) + PHP_FE(ttf_close_font, arginfo_ttf_close_font) + PHP_FE(ttf_render_text_solid, arginfo_ttf_render_text_solid) + PHP_FE(ttf_render_text_blended, arginfo_ttf_render_text_blended) + PHP_FE(ttf_render_text_shaded, arginfo_ttf_render_text_shaded) + PHP_FE(ttf_size_text, arginfo_ttf_size_text) + + // SDL3 Events + PHP_FE(sdl_poll_event, arginfo_sdl_poll_event) + PHP_FE(sdl_wait_event, arginfo_sdl_wait_event) + PHP_FE(sdl_wait_event_timeout, arginfo_sdl_wait_event_timeout) + PHP_FE_END }; diff --git a/php-sdl3/sdl3.dep b/php-sdl3/sdl3.dep index ed877e9..febfc8e 100644 --- a/php-sdl3/sdl3.dep +++ b/php-sdl3/sdl3.dep @@ -91,4 +91,7 @@ sdl3.lo: /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3.c \ /usr/local/include/php/Zend/zend_constants.h \ /usr/local/include/php/main/php_reentrancy.h \ /home/thomas/projekte/phpnative/framework/php-sdl3/php_sdl3.h \ - /home/thomas/projekte/phpnative/framework/php-sdl3/helper.h + /home/thomas/projekte/phpnative/framework/php-sdl3/helper.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.h diff --git a/php-sdl3/sdl3.la b/php-sdl3/sdl3.la index f39669b..db718ad 100644 --- a/php-sdl3/sdl3.la +++ b/php-sdl3/sdl3.la @@ -14,7 +14,7 @@ library_names='sdl3.so sdl3.so sdl3.so' old_library='' # Libraries that this one depends upon. -dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3' +dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3_image -lSDL3_ttf -lSDL3' # Version information for sdl3. current=0 diff --git a/php-sdl3/sdl3_events.c b/php-sdl3/sdl3_events.c new file mode 100644 index 0000000..9f632aa --- /dev/null +++ b/php-sdl3/sdl3_events.c @@ -0,0 +1,175 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_sdl3.h" +#include "sdl3_events.h" +#include + +// Registriert Event-Konstanten +void sdl3_events_register_constants(int module_number) { + // Event Types + REGISTER_LONG_CONSTANT("SDL_EVENT_QUIT", SDL_EVENT_QUIT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_CLOSE_REQUESTED", SDL_EVENT_WINDOW_CLOSE_REQUESTED, CONST_CS | CONST_PERSISTENT); + + // Window Events + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_SHOWN", SDL_EVENT_WINDOW_SHOWN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_HIDDEN", SDL_EVENT_WINDOW_HIDDEN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_EXPOSED", SDL_EVENT_WINDOW_EXPOSED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_MOVED", SDL_EVENT_WINDOW_MOVED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_RESIZED", SDL_EVENT_WINDOW_RESIZED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_MINIMIZED", SDL_EVENT_WINDOW_MINIMIZED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_MAXIMIZED", SDL_EVENT_WINDOW_MAXIMIZED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_RESTORED", SDL_EVENT_WINDOW_RESTORED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_MOUSE_ENTER", SDL_EVENT_WINDOW_MOUSE_ENTER, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_MOUSE_LEAVE", SDL_EVENT_WINDOW_MOUSE_LEAVE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_FOCUS_GAINED", SDL_EVENT_WINDOW_FOCUS_GAINED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_WINDOW_FOCUS_LOST", SDL_EVENT_WINDOW_FOCUS_LOST, CONST_CS | CONST_PERSISTENT); + + // Keyboard Events + REGISTER_LONG_CONSTANT("SDL_EVENT_KEY_DOWN", SDL_EVENT_KEY_DOWN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_KEY_UP", SDL_EVENT_KEY_UP, CONST_CS | CONST_PERSISTENT); + + // Mouse Events + REGISTER_LONG_CONSTANT("SDL_EVENT_MOUSE_MOTION", SDL_EVENT_MOUSE_MOTION, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_MOUSE_BUTTON_DOWN", SDL_EVENT_MOUSE_BUTTON_DOWN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_MOUSE_BUTTON_UP", SDL_EVENT_MOUSE_BUTTON_UP, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_MOUSE_WHEEL", SDL_EVENT_MOUSE_WHEEL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_EVENT_TEXT_INPUT", SDL_EVENT_TEXT_INPUT, CONST_CS | CONST_PERSISTENT); + + // Mouse Buttons + REGISTER_LONG_CONSTANT("SDL_BUTTON_LEFT", SDL_BUTTON_LEFT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_BUTTON_MIDDLE", SDL_BUTTON_MIDDLE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_BUTTON_RIGHT", SDL_BUTTON_RIGHT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_BUTTON_X1", SDL_BUTTON_X1, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDL_BUTTON_X2", SDL_BUTTON_X2, CONST_CS | CONST_PERSISTENT); + + // Common Keycodes + REGISTER_LONG_CONSTANT("SDLK_RETURN", SDLK_RETURN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_ESCAPE", SDLK_ESCAPE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_BACKSPACE", SDLK_BACKSPACE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_TAB", SDLK_TAB, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_DELETE", SDLK_DELETE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_LEFT", SDLK_LEFT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_RIGHT", SDLK_RIGHT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_UP", SDLK_UP, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SDLK_DOWN", SDLK_DOWN, CONST_CS | CONST_PERSISTENT); +} + +PHP_FUNCTION(sdl_poll_event) { + SDL_Event event; + + if (!SDL_PollEvent(&event)) { + RETURN_FALSE; + } + + // Event als Array zurückgeben + array_init(return_value); + add_assoc_long(return_value, "type", event.type); + add_assoc_long(return_value, "timestamp", event.common.timestamp); + + switch (event.type) { + case SDL_EVENT_QUIT: + // Keine zusätzlichen Daten + break; + + case SDL_EVENT_WINDOW_CLOSE_REQUESTED: + case SDL_EVENT_WINDOW_SHOWN: + case SDL_EVENT_WINDOW_HIDDEN: + case SDL_EVENT_WINDOW_EXPOSED: + case SDL_EVENT_WINDOW_MOVED: + case SDL_EVENT_WINDOW_RESIZED: + case SDL_EVENT_WINDOW_MINIMIZED: + case SDL_EVENT_WINDOW_MAXIMIZED: + case SDL_EVENT_WINDOW_RESTORED: + case SDL_EVENT_WINDOW_MOUSE_ENTER: + case SDL_EVENT_WINDOW_MOUSE_LEAVE: + case SDL_EVENT_WINDOW_FOCUS_GAINED: + case SDL_EVENT_WINDOW_FOCUS_LOST: + add_assoc_long(return_value, "window_id", event.window.windowID); + if (event.type == SDL_EVENT_WINDOW_MOVED || event.type == SDL_EVENT_WINDOW_RESIZED) { + add_assoc_long(return_value, "data1", event.window.data1); + add_assoc_long(return_value, "data2", event.window.data2); + } + break; + + case SDL_EVENT_KEY_DOWN: + case SDL_EVENT_KEY_UP: + add_assoc_long(return_value, "window_id", event.key.windowID); + add_assoc_long(return_value, "scancode", event.key.scancode); + add_assoc_long(return_value, "keycode", event.key.key); + add_assoc_long(return_value, "mod", event.key.mod); + add_assoc_bool(return_value, "repeat", event.key.repeat); + add_assoc_bool(return_value, "down", event.key.down); + break; + + case SDL_EVENT_MOUSE_MOTION: + add_assoc_long(return_value, "window_id", event.motion.windowID); + add_assoc_long(return_value, "which", event.motion.which); + add_assoc_double(return_value, "x", event.motion.x); + add_assoc_double(return_value, "y", event.motion.y); + add_assoc_double(return_value, "xrel", event.motion.xrel); + add_assoc_double(return_value, "yrel", event.motion.yrel); + add_assoc_long(return_value, "state", event.motion.state); + break; + + case SDL_EVENT_MOUSE_BUTTON_DOWN: + case SDL_EVENT_MOUSE_BUTTON_UP: + add_assoc_long(return_value, "window_id", event.button.windowID); + add_assoc_long(return_value, "which", event.button.which); + add_assoc_long(return_value, "button", event.button.button); + add_assoc_bool(return_value, "down", event.button.down); + add_assoc_long(return_value, "clicks", event.button.clicks); + add_assoc_double(return_value, "x", event.button.x); + add_assoc_double(return_value, "y", event.button.y); + break; + + case SDL_EVENT_MOUSE_WHEEL: + add_assoc_long(return_value, "window_id", event.wheel.windowID); + add_assoc_long(return_value, "which", event.wheel.which); + add_assoc_double(return_value, "x", event.wheel.x); + add_assoc_double(return_value, "y", event.wheel.y); + add_assoc_long(return_value, "direction", event.wheel.direction); + add_assoc_double(return_value, "mouse_x", event.wheel.mouse_x); + add_assoc_double(return_value, "mouse_y", event.wheel.mouse_y); + break; + + case SDL_EVENT_TEXT_INPUT: + add_assoc_long(return_value, "window_id", event.text.windowID); + add_assoc_string(return_value, "text", event.text.text); + break; + } +} + +PHP_FUNCTION(sdl_wait_event) { + SDL_Event event; + + if (!SDL_WaitEvent(&event)) { + php_error_docref(NULL, E_WARNING, "SDL_WaitEvent failed: %s", SDL_GetError()); + RETURN_FALSE; + } + + // Event als Array zurückgeben (gleiche Logik wie poll_event) + array_init(return_value); + add_assoc_long(return_value, "type", event.type); + add_assoc_long(return_value, "timestamp", event.common.timestamp); +} + +PHP_FUNCTION(sdl_wait_event_timeout) { + zend_long timeout_ms; + SDL_Event event; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout_ms) == FAILURE) { + RETURN_THROWS(); + } + + if (!SDL_WaitEventTimeout(&event, (int)timeout_ms)) { + RETURN_FALSE; // Timeout oder Fehler + } + + // Event als Array zurückgeben + array_init(return_value); + add_assoc_long(return_value, "type", event.type); + add_assoc_long(return_value, "timestamp", event.common.timestamp); +} diff --git a/php-sdl3/sdl3_events.dep b/php-sdl3/sdl3_events.dep new file mode 100644 index 0000000..18a2b1c --- /dev/null +++ b/php-sdl3/sdl3_events.dep @@ -0,0 +1,95 @@ +sdl3_events.lo: \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.c \ + /home/thomas/projekte/phpnative/framework/php-sdl3/config.h \ + /usr/local/include/php/main/php.h \ + /usr/local/include/php/main/php_version.h \ + /usr/local/include/php/Zend/zend.h \ + /usr/local/include/php/Zend/zend_types.h \ + /usr/local/include/php/Zend/zend_portability.h \ + /usr/local/include/php/Zend/zend_config.h \ + /usr/local/include/php/main/../main/php_config.h \ + /usr/local/include/php/Zend/../TSRM/TSRM.h \ + /usr/local/include/php/main/php_config.h \ + /usr/local/include/php/Zend/zend_range_check.h \ + /usr/local/include/php/Zend/zend_long.h \ + /usr/local/include/php/Zend/zend_map_ptr.h \ + /usr/local/include/php/Zend/zend_errors.h \ + /usr/local/include/php/Zend/zend_alloc.h \ + /usr/local/include/php/Zend/zend_alloc_sizes.h \ + /usr/local/include/php/Zend/zend_llist.h \ + /usr/local/include/php/Zend/zend_string.h \ + /usr/local/include/php/Zend/zend_gc.h \ + /usr/local/include/php/Zend/zend_hrtime.h \ + /usr/local/include/php/Zend/zend_hash.h \ + /usr/local/include/php/Zend/zend_sort.h \ + /usr/local/include/php/Zend/zend_ast.h \ + /usr/local/include/php/Zend/zend_variables.h \ + /usr/local/include/php/Zend/zend_iterators.h \ + /usr/local/include/php/Zend/zend_stream.h \ + /usr/local/include/php/Zend/zend_smart_str_public.h \ + /usr/local/include/php/Zend/zend_smart_string_public.h \ + /usr/local/include/php/Zend/zend_signal.h \ + /usr/local/include/php/Zend/zend_max_execution_timer.h \ + /usr/local/include/php/Zend/zend_object_handlers.h \ + /usr/local/include/php/Zend/zend_property_hooks.h \ + /usr/local/include/php/Zend/zend_lazy_objects.h \ + /usr/local/include/php/Zend/zend_types.h \ + /usr/local/include/php/Zend/zend_operators.h \ + /usr/local/include/php/Zend/zend_strtod.h \ + /usr/local/include/php/Zend/zend_multiply.h \ + /usr/local/include/php/Zend/zend_sort.h \ + /usr/local/include/php/main/php_compat.h \ + /usr/local/include/php/main/php_config.h \ + /usr/local/include/php/Zend/zend_API.h \ + /usr/local/include/php/Zend/zend_modules.h \ + /usr/local/include/php/Zend/zend.h \ + /usr/local/include/php/Zend/zend_compile.h \ + /usr/local/include/php/Zend/zend_frameless_function.h \ + /usr/local/include/php/Zend/zend_globals.h \ + /usr/local/include/php/Zend/zend_globals_macros.h \ + /usr/local/include/php/Zend/zend_atomic.h \ + /usr/local/include/php/Zend/zend_stack.h \ + /usr/local/include/php/Zend/zend_ptr_stack.h \ + /usr/local/include/php/Zend/zend_objects.h \ + /usr/local/include/php/Zend/zend_objects_API.h \ + /usr/local/include/php/Zend/zend_float.h \ + /usr/local/include/php/Zend/zend_multibyte.h \ + /usr/local/include/php/Zend/zend_arena.h \ + /usr/local/include/php/Zend/zend_call_stack.h \ + /usr/local/include/php/Zend/zend_vm_opcodes.h \ + /usr/local/include/php/Zend/zend_build.h \ + /usr/local/include/php/Zend/zend_list.h \ + /usr/local/include/php/Zend/zend_execute.h \ + /usr/local/include/php/Zend/zend_type_info.h \ + /usr/local/include/php/main/build-defs.h \ + /usr/local/include/php/Zend/zend_hash.h \ + /usr/local/include/php/Zend/zend_alloc.h \ + /usr/local/include/php/Zend/zend_stack.h \ + /usr/local/include/php/main/snprintf.h \ + /usr/local/include/php/main/spprintf.h \ + /usr/local/include/php/Zend/zend_smart_str_public.h \ + /usr/local/include/php/Zend/zend_smart_string_public.h \ + /usr/local/include/php/main/php_syslog.h \ + /usr/local/include/php/main/php.h \ + /usr/local/include/php/main/php_output.h \ + /usr/local/include/php/main/php_streams.h \ + /usr/local/include/php/Zend/zend_stream.h \ + /usr/local/include/php/main/streams/php_stream_context.h \ + /usr/local/include/php/main/streams/php_stream_filter_api.h \ + /usr/local/include/php/main/streams/php_stream_transport.h \ + /usr/local/include/php/main/streams/php_stream_plain_wrapper.h \ + /usr/local/include/php/main/streams/php_stream_glob_wrapper.h \ + /usr/local/include/php/main/streams/php_stream_userspace.h \ + /usr/local/include/php/main/streams/php_stream_mmap.h \ + /usr/local/include/php/main/php_memory_streams.h \ + /usr/local/include/php/main/fopen_wrappers.h \ + /usr/local/include/php/main/php_globals.h \ + /usr/local/include/php/Zend/zend_globals.h \ + /usr/local/include/php/main/php_ini.h \ + /usr/local/include/php/Zend/zend_ini.h \ + /usr/local/include/php/Zend/zend_virtual_cwd.h \ + /usr/local/include/php/TSRM/TSRM.h \ + /usr/local/include/php/Zend/zend_constants.h \ + /usr/local/include/php/main/php_reentrancy.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/php_sdl3.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_events.h diff --git a/php-sdl3/sdl3_events.h b/php-sdl3/sdl3_events.h new file mode 100644 index 0000000..3c94642 --- /dev/null +++ b/php-sdl3/sdl3_events.h @@ -0,0 +1,26 @@ +#ifndef PHP_SDL3_EVENTS_H +#define PHP_SDL3_EVENTS_H + +#include "php.h" +#include + +// PHP Funktionen für SDL3 Events +PHP_FUNCTION(sdl_poll_event); +PHP_FUNCTION(sdl_wait_event); +PHP_FUNCTION(sdl_wait_event_timeout); + +// Argument Info +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_poll_event, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_wait_event, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_wait_event_timeout, 0, 0, 1) + ZEND_ARG_INFO(0, timeout_ms) +ZEND_END_ARG_INFO() + +// Funktion zum Registrieren von Event-Konstanten +void sdl3_events_register_constants(int module_number); + +#endif diff --git a/php-sdl3/sdl3_events.lo b/php-sdl3/sdl3_events.lo new file mode 100644 index 0000000..7634471 --- /dev/null +++ b/php-sdl3/sdl3_events.lo @@ -0,0 +1,12 @@ +# sdl3_events.lo - a libtool object file +# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.492 2008/01/30 06:40:56) +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/sdl3_events.o' + +# Name of the non-PIC object. +non_pic_object=none + diff --git a/php-sdl3/sdl3_image.c b/php-sdl3/sdl3_image.c new file mode 100644 index 0000000..47bda16 --- /dev/null +++ b/php-sdl3/sdl3_image.c @@ -0,0 +1,66 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_sdl3.h" +#include "sdl3_image.h" +#include +#include + +// Resource handles +int le_sdl_surface; + +// Destructor für Surface +void sdl_surface_dtor(zend_resource *rsrc) { + SDL_Surface *surface = (SDL_Surface *)rsrc->ptr; + if (surface) { + SDL_DestroySurface(surface); + } +} + +// Registriert die Resource-Typen +void sdl3_image_register_resources(int module_number) { + le_sdl_surface = zend_register_list_destructors_ex(sdl_surface_dtor, NULL, "SDL_Surface", module_number); +} + +PHP_FUNCTION(img_load) { + char *file; + size_t file_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &file, &file_len) == FAILURE) { + RETURN_THROWS(); + } + + SDL_Surface *surface = IMG_Load(file); + if (!surface) { + php_error_docref(NULL, E_WARNING, "Failed to load image: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(surface, le_sdl_surface)); +} + +PHP_FUNCTION(img_load_texture) { + zval *ren_res; + SDL_Renderer *renderer; + char *file; + size_t file_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &ren_res, &file, &file_len) == FAILURE) { + RETURN_THROWS(); + } + + renderer = (SDL_Renderer *)zend_fetch_resource(Z_RES_P(ren_res), "SDL_Renderer", le_sdl_renderer); + if (!renderer) { + RETURN_FALSE; + } + + SDL_Texture *texture = IMG_LoadTexture(renderer, file); + if (!texture) { + php_error_docref(NULL, E_WARNING, "Failed to load texture: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(texture, le_sdl_texture)); +} diff --git a/php-sdl3/sdl3_image.dep b/php-sdl3/sdl3_image.dep new file mode 100644 index 0000000..4f51eca --- /dev/null +++ b/php-sdl3/sdl3_image.dep @@ -0,0 +1,95 @@ +sdl3_image.lo: \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.c \ + /home/thomas/projekte/phpnative/framework/php-sdl3/config.h \ + /usr/local/include/php/main/php.h \ + /usr/local/include/php/main/php_version.h \ + /usr/local/include/php/Zend/zend.h \ + /usr/local/include/php/Zend/zend_types.h \ + /usr/local/include/php/Zend/zend_portability.h \ + /usr/local/include/php/Zend/zend_config.h \ + /usr/local/include/php/main/../main/php_config.h \ + /usr/local/include/php/Zend/../TSRM/TSRM.h \ + /usr/local/include/php/main/php_config.h \ + /usr/local/include/php/Zend/zend_range_check.h \ + /usr/local/include/php/Zend/zend_long.h \ + /usr/local/include/php/Zend/zend_map_ptr.h \ + /usr/local/include/php/Zend/zend_errors.h \ + /usr/local/include/php/Zend/zend_alloc.h \ + /usr/local/include/php/Zend/zend_alloc_sizes.h \ + /usr/local/include/php/Zend/zend_llist.h \ + /usr/local/include/php/Zend/zend_string.h \ + /usr/local/include/php/Zend/zend_gc.h \ + /usr/local/include/php/Zend/zend_hrtime.h \ + /usr/local/include/php/Zend/zend_hash.h \ + /usr/local/include/php/Zend/zend_sort.h \ + /usr/local/include/php/Zend/zend_ast.h \ + /usr/local/include/php/Zend/zend_variables.h \ + /usr/local/include/php/Zend/zend_iterators.h \ + /usr/local/include/php/Zend/zend_stream.h \ + /usr/local/include/php/Zend/zend_smart_str_public.h \ + /usr/local/include/php/Zend/zend_smart_string_public.h \ + /usr/local/include/php/Zend/zend_signal.h \ + /usr/local/include/php/Zend/zend_max_execution_timer.h \ + /usr/local/include/php/Zend/zend_object_handlers.h \ + /usr/local/include/php/Zend/zend_property_hooks.h \ + /usr/local/include/php/Zend/zend_lazy_objects.h \ + /usr/local/include/php/Zend/zend_types.h \ + /usr/local/include/php/Zend/zend_operators.h \ + /usr/local/include/php/Zend/zend_strtod.h \ + /usr/local/include/php/Zend/zend_multiply.h \ + /usr/local/include/php/Zend/zend_sort.h \ + /usr/local/include/php/main/php_compat.h \ + /usr/local/include/php/main/php_config.h \ + /usr/local/include/php/Zend/zend_API.h \ + /usr/local/include/php/Zend/zend_modules.h \ + /usr/local/include/php/Zend/zend.h \ + /usr/local/include/php/Zend/zend_compile.h \ + /usr/local/include/php/Zend/zend_frameless_function.h \ + /usr/local/include/php/Zend/zend_globals.h \ + /usr/local/include/php/Zend/zend_globals_macros.h \ + /usr/local/include/php/Zend/zend_atomic.h \ + /usr/local/include/php/Zend/zend_stack.h \ + /usr/local/include/php/Zend/zend_ptr_stack.h \ + /usr/local/include/php/Zend/zend_objects.h \ + /usr/local/include/php/Zend/zend_objects_API.h \ + /usr/local/include/php/Zend/zend_float.h \ + /usr/local/include/php/Zend/zend_multibyte.h \ + /usr/local/include/php/Zend/zend_arena.h \ + /usr/local/include/php/Zend/zend_call_stack.h \ + /usr/local/include/php/Zend/zend_vm_opcodes.h \ + /usr/local/include/php/Zend/zend_build.h \ + /usr/local/include/php/Zend/zend_list.h \ + /usr/local/include/php/Zend/zend_execute.h \ + /usr/local/include/php/Zend/zend_type_info.h \ + /usr/local/include/php/main/build-defs.h \ + /usr/local/include/php/Zend/zend_hash.h \ + /usr/local/include/php/Zend/zend_alloc.h \ + /usr/local/include/php/Zend/zend_stack.h \ + /usr/local/include/php/main/snprintf.h \ + /usr/local/include/php/main/spprintf.h \ + /usr/local/include/php/Zend/zend_smart_str_public.h \ + /usr/local/include/php/Zend/zend_smart_string_public.h \ + /usr/local/include/php/main/php_syslog.h \ + /usr/local/include/php/main/php.h \ + /usr/local/include/php/main/php_output.h \ + /usr/local/include/php/main/php_streams.h \ + /usr/local/include/php/Zend/zend_stream.h \ + /usr/local/include/php/main/streams/php_stream_context.h \ + /usr/local/include/php/main/streams/php_stream_filter_api.h \ + /usr/local/include/php/main/streams/php_stream_transport.h \ + /usr/local/include/php/main/streams/php_stream_plain_wrapper.h \ + /usr/local/include/php/main/streams/php_stream_glob_wrapper.h \ + /usr/local/include/php/main/streams/php_stream_userspace.h \ + /usr/local/include/php/main/streams/php_stream_mmap.h \ + /usr/local/include/php/main/php_memory_streams.h \ + /usr/local/include/php/main/fopen_wrappers.h \ + /usr/local/include/php/main/php_globals.h \ + /usr/local/include/php/Zend/zend_globals.h \ + /usr/local/include/php/main/php_ini.h \ + /usr/local/include/php/Zend/zend_ini.h \ + /usr/local/include/php/Zend/zend_virtual_cwd.h \ + /usr/local/include/php/TSRM/TSRM.h \ + /usr/local/include/php/Zend/zend_constants.h \ + /usr/local/include/php/main/php_reentrancy.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/php_sdl3.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.h diff --git a/php-sdl3/sdl3_image.h b/php-sdl3/sdl3_image.h new file mode 100644 index 0000000..e15b0c1 --- /dev/null +++ b/php-sdl3/sdl3_image.h @@ -0,0 +1,31 @@ +#ifndef PHP_SDL3_IMAGE_H +#define PHP_SDL3_IMAGE_H + +#include "php.h" +#include +#include + +// Resource handle für SDL_Surface +extern int le_sdl_surface; + +// Destructor +void sdl_surface_dtor(zend_resource *rsrc); + +// PHP Funktionen für SDL3_image +PHP_FUNCTION(img_load); +PHP_FUNCTION(img_load_texture); + +// Argument Info +ZEND_BEGIN_ARG_INFO_EX(arginfo_img_load, 0, 0, 1) + ZEND_ARG_INFO(0, file) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_img_load_texture, 0, 0, 2) + ZEND_ARG_INFO(0, renderer) + ZEND_ARG_INFO(0, file) +ZEND_END_ARG_INFO() + +// Funktion zum Registrieren der Resource-Typen +void sdl3_image_register_resources(int module_number); + +#endif diff --git a/php-sdl3/sdl3_image.lo b/php-sdl3/sdl3_image.lo new file mode 100644 index 0000000..34a8cba --- /dev/null +++ b/php-sdl3/sdl3_image.lo @@ -0,0 +1,12 @@ +# sdl3_image.lo - a libtool object file +# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.492 2008/01/30 06:40:56) +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/sdl3_image.o' + +# Name of the non-PIC object. +non_pic_object=none + diff --git a/php-sdl3/sdl3_ttf.c b/php-sdl3/sdl3_ttf.c new file mode 100644 index 0000000..3bb6ef9 --- /dev/null +++ b/php-sdl3/sdl3_ttf.c @@ -0,0 +1,170 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_sdl3.h" +#include "sdl3_ttf.h" +#include "sdl3_image.h" +#include +#include + +// Resource handles +int le_ttf_font; + +// Destructor für Font +void ttf_font_dtor(zend_resource *rsrc) { + TTF_Font *font = (TTF_Font *)rsrc->ptr; + if (font) { + TTF_CloseFont(font); + } +} + +// Registriert die Resource-Typen +void sdl3_ttf_register_resources(int module_number) { + le_ttf_font = zend_register_list_destructors_ex(ttf_font_dtor, NULL, "TTF_Font", module_number); +} + +PHP_FUNCTION(ttf_init) { + if (!TTF_Init()) { + php_error_docref(NULL, E_WARNING, "TTF_Init failed: %s", SDL_GetError()); + RETURN_FALSE; + } + RETURN_TRUE; +} + +PHP_FUNCTION(ttf_open_font) { + char *file; + size_t file_len; + zend_long ptsize; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl", &file, &file_len, &ptsize) == FAILURE) { + RETURN_THROWS(); + } + + TTF_Font *font = TTF_OpenFont(file, (float)ptsize); + if (!font) { + php_error_docref(NULL, E_WARNING, "Failed to open font: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(font, le_ttf_font)); +} + +PHP_FUNCTION(ttf_close_font) { + zval *font_res; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &font_res) == FAILURE) { + RETURN_THROWS(); + } + + // Resource wird automatisch durch den Destructor freigegeben + zend_list_close(Z_RES_P(font_res)); + RETURN_TRUE; +} + +PHP_FUNCTION(ttf_render_text_solid) { + zval *font_res; + TTF_Font *font; + char *text; + size_t text_len; + zend_long r, g, b; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rslll", &font_res, &text, &text_len, &r, &g, &b) == FAILURE) { + RETURN_THROWS(); + } + + font = (TTF_Font *)zend_fetch_resource(Z_RES_P(font_res), "TTF_Font", le_ttf_font); + if (!font) { + RETURN_FALSE; + } + + SDL_Color color = {(Uint8)r, (Uint8)g, (Uint8)b, 255}; + SDL_Surface *surface = TTF_RenderText_Solid(font, text, text_len, color); + if (!surface) { + php_error_docref(NULL, E_WARNING, "Failed to render text: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(surface, le_sdl_surface)); +} + +PHP_FUNCTION(ttf_render_text_blended) { + zval *font_res; + TTF_Font *font; + char *text; + size_t text_len; + zend_long r, g, b; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rslll", &font_res, &text, &text_len, &r, &g, &b) == FAILURE) { + RETURN_THROWS(); + } + + font = (TTF_Font *)zend_fetch_resource(Z_RES_P(font_res), "TTF_Font", le_ttf_font); + if (!font) { + RETURN_FALSE; + } + + SDL_Color color = {(Uint8)r, (Uint8)g, (Uint8)b, 255}; + SDL_Surface *surface = TTF_RenderText_Blended(font, text, text_len, color); + if (!surface) { + php_error_docref(NULL, E_WARNING, "Failed to render text: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(surface, le_sdl_surface)); +} + +PHP_FUNCTION(ttf_render_text_shaded) { + zval *font_res; + TTF_Font *font; + char *text; + size_t text_len; + zend_long fg_r, fg_g, fg_b, bg_r, bg_g, bg_b; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsllllll", &font_res, &text, &text_len, + &fg_r, &fg_g, &fg_b, &bg_r, &bg_g, &bg_b) == FAILURE) { + RETURN_THROWS(); + } + + font = (TTF_Font *)zend_fetch_resource(Z_RES_P(font_res), "TTF_Font", le_ttf_font); + if (!font) { + RETURN_FALSE; + } + + SDL_Color fg_color = {(Uint8)fg_r, (Uint8)fg_g, (Uint8)fg_b, 255}; + SDL_Color bg_color = {(Uint8)bg_r, (Uint8)bg_g, (Uint8)bg_b, 255}; + SDL_Surface *surface = TTF_RenderText_Shaded(font, text, text_len, fg_color, bg_color); + if (!surface) { + php_error_docref(NULL, E_WARNING, "Failed to render text: %s", SDL_GetError()); + RETURN_FALSE; + } + + RETURN_RES(zend_register_resource(surface, le_sdl_surface)); +} + +PHP_FUNCTION(ttf_size_text) { + zval *font_res; + TTF_Font *font; + char *text; + size_t text_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &font_res, &text, &text_len) == FAILURE) { + RETURN_THROWS(); + } + + font = (TTF_Font *)zend_fetch_resource(Z_RES_P(font_res), "TTF_Font", le_ttf_font); + if (!font) { + RETURN_FALSE; + } + + int w, h; + if (!TTF_GetStringSize(font, text, text_len, &w, &h)) { + php_error_docref(NULL, E_WARNING, "Failed to get text size: %s", SDL_GetError()); + RETURN_FALSE; + } + + array_init(return_value); + add_assoc_long(return_value, "w", w); + add_assoc_long(return_value, "h", h); +} diff --git a/php-sdl3/sdl3_ttf.dep b/php-sdl3/sdl3_ttf.dep new file mode 100644 index 0000000..fdc3627 --- /dev/null +++ b/php-sdl3/sdl3_ttf.dep @@ -0,0 +1,96 @@ +sdl3_ttf.lo: \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.c \ + /home/thomas/projekte/phpnative/framework/php-sdl3/config.h \ + /usr/local/include/php/main/php.h \ + /usr/local/include/php/main/php_version.h \ + /usr/local/include/php/Zend/zend.h \ + /usr/local/include/php/Zend/zend_types.h \ + /usr/local/include/php/Zend/zend_portability.h \ + /usr/local/include/php/Zend/zend_config.h \ + /usr/local/include/php/main/../main/php_config.h \ + /usr/local/include/php/Zend/../TSRM/TSRM.h \ + /usr/local/include/php/main/php_config.h \ + /usr/local/include/php/Zend/zend_range_check.h \ + /usr/local/include/php/Zend/zend_long.h \ + /usr/local/include/php/Zend/zend_map_ptr.h \ + /usr/local/include/php/Zend/zend_errors.h \ + /usr/local/include/php/Zend/zend_alloc.h \ + /usr/local/include/php/Zend/zend_alloc_sizes.h \ + /usr/local/include/php/Zend/zend_llist.h \ + /usr/local/include/php/Zend/zend_string.h \ + /usr/local/include/php/Zend/zend_gc.h \ + /usr/local/include/php/Zend/zend_hrtime.h \ + /usr/local/include/php/Zend/zend_hash.h \ + /usr/local/include/php/Zend/zend_sort.h \ + /usr/local/include/php/Zend/zend_ast.h \ + /usr/local/include/php/Zend/zend_variables.h \ + /usr/local/include/php/Zend/zend_iterators.h \ + /usr/local/include/php/Zend/zend_stream.h \ + /usr/local/include/php/Zend/zend_smart_str_public.h \ + /usr/local/include/php/Zend/zend_smart_string_public.h \ + /usr/local/include/php/Zend/zend_signal.h \ + /usr/local/include/php/Zend/zend_max_execution_timer.h \ + /usr/local/include/php/Zend/zend_object_handlers.h \ + /usr/local/include/php/Zend/zend_property_hooks.h \ + /usr/local/include/php/Zend/zend_lazy_objects.h \ + /usr/local/include/php/Zend/zend_types.h \ + /usr/local/include/php/Zend/zend_operators.h \ + /usr/local/include/php/Zend/zend_strtod.h \ + /usr/local/include/php/Zend/zend_multiply.h \ + /usr/local/include/php/Zend/zend_sort.h \ + /usr/local/include/php/main/php_compat.h \ + /usr/local/include/php/main/php_config.h \ + /usr/local/include/php/Zend/zend_API.h \ + /usr/local/include/php/Zend/zend_modules.h \ + /usr/local/include/php/Zend/zend.h \ + /usr/local/include/php/Zend/zend_compile.h \ + /usr/local/include/php/Zend/zend_frameless_function.h \ + /usr/local/include/php/Zend/zend_globals.h \ + /usr/local/include/php/Zend/zend_globals_macros.h \ + /usr/local/include/php/Zend/zend_atomic.h \ + /usr/local/include/php/Zend/zend_stack.h \ + /usr/local/include/php/Zend/zend_ptr_stack.h \ + /usr/local/include/php/Zend/zend_objects.h \ + /usr/local/include/php/Zend/zend_objects_API.h \ + /usr/local/include/php/Zend/zend_float.h \ + /usr/local/include/php/Zend/zend_multibyte.h \ + /usr/local/include/php/Zend/zend_arena.h \ + /usr/local/include/php/Zend/zend_call_stack.h \ + /usr/local/include/php/Zend/zend_vm_opcodes.h \ + /usr/local/include/php/Zend/zend_build.h \ + /usr/local/include/php/Zend/zend_list.h \ + /usr/local/include/php/Zend/zend_execute.h \ + /usr/local/include/php/Zend/zend_type_info.h \ + /usr/local/include/php/main/build-defs.h \ + /usr/local/include/php/Zend/zend_hash.h \ + /usr/local/include/php/Zend/zend_alloc.h \ + /usr/local/include/php/Zend/zend_stack.h \ + /usr/local/include/php/main/snprintf.h \ + /usr/local/include/php/main/spprintf.h \ + /usr/local/include/php/Zend/zend_smart_str_public.h \ + /usr/local/include/php/Zend/zend_smart_string_public.h \ + /usr/local/include/php/main/php_syslog.h \ + /usr/local/include/php/main/php.h \ + /usr/local/include/php/main/php_output.h \ + /usr/local/include/php/main/php_streams.h \ + /usr/local/include/php/Zend/zend_stream.h \ + /usr/local/include/php/main/streams/php_stream_context.h \ + /usr/local/include/php/main/streams/php_stream_filter_api.h \ + /usr/local/include/php/main/streams/php_stream_transport.h \ + /usr/local/include/php/main/streams/php_stream_plain_wrapper.h \ + /usr/local/include/php/main/streams/php_stream_glob_wrapper.h \ + /usr/local/include/php/main/streams/php_stream_userspace.h \ + /usr/local/include/php/main/streams/php_stream_mmap.h \ + /usr/local/include/php/main/php_memory_streams.h \ + /usr/local/include/php/main/fopen_wrappers.h \ + /usr/local/include/php/main/php_globals.h \ + /usr/local/include/php/Zend/zend_globals.h \ + /usr/local/include/php/main/php_ini.h \ + /usr/local/include/php/Zend/zend_ini.h \ + /usr/local/include/php/Zend/zend_virtual_cwd.h \ + /usr/local/include/php/TSRM/TSRM.h \ + /usr/local/include/php/Zend/zend_constants.h \ + /usr/local/include/php/main/php_reentrancy.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/php_sdl3.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_ttf.h \ + /home/thomas/projekte/phpnative/framework/php-sdl3/sdl3_image.h diff --git a/php-sdl3/sdl3_ttf.h b/php-sdl3/sdl3_ttf.h new file mode 100644 index 0000000..5733e3c --- /dev/null +++ b/php-sdl3/sdl3_ttf.h @@ -0,0 +1,71 @@ +#ifndef PHP_SDL3_TTF_H +#define PHP_SDL3_TTF_H + +#include "php.h" +#include +#include + +// Resource handle für TTF_Font +extern int le_ttf_font; + +// Destructor +void ttf_font_dtor(zend_resource *rsrc); + +// PHP Funktionen für SDL3_ttf +PHP_FUNCTION(ttf_init); +PHP_FUNCTION(ttf_open_font); +PHP_FUNCTION(ttf_close_font); +PHP_FUNCTION(ttf_render_text_solid); +PHP_FUNCTION(ttf_render_text_blended); +PHP_FUNCTION(ttf_render_text_shaded); +PHP_FUNCTION(ttf_size_text); + +// Argument Info +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_init, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_open_font, 0, 0, 2) + ZEND_ARG_INFO(0, file) + ZEND_ARG_INFO(0, ptsize) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_close_font, 0, 0, 1) + ZEND_ARG_INFO(0, font) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_render_text_solid, 0, 0, 5) + ZEND_ARG_INFO(0, font) + ZEND_ARG_INFO(0, text) + ZEND_ARG_INFO(0, r) + ZEND_ARG_INFO(0, g) + ZEND_ARG_INFO(0, b) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_render_text_blended, 0, 0, 5) + ZEND_ARG_INFO(0, font) + ZEND_ARG_INFO(0, text) + ZEND_ARG_INFO(0, r) + ZEND_ARG_INFO(0, g) + ZEND_ARG_INFO(0, b) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_render_text_shaded, 0, 0, 8) + ZEND_ARG_INFO(0, font) + ZEND_ARG_INFO(0, text) + ZEND_ARG_INFO(0, fg_r) + ZEND_ARG_INFO(0, fg_g) + ZEND_ARG_INFO(0, fg_b) + ZEND_ARG_INFO(0, bg_r) + ZEND_ARG_INFO(0, bg_g) + ZEND_ARG_INFO(0, bg_b) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_ttf_size_text, 0, 0, 2) + ZEND_ARG_INFO(0, font) + ZEND_ARG_INFO(0, text) +ZEND_END_ARG_INFO() + +// Funktion zum Registrieren der Resource-Typen +void sdl3_ttf_register_resources(int module_number); + +#endif diff --git a/php-sdl3/sdl3_ttf.lo b/php-sdl3/sdl3_ttf.lo new file mode 100644 index 0000000..9ea4777 --- /dev/null +++ b/php-sdl3/sdl3_ttf.lo @@ -0,0 +1,12 @@ +# sdl3_ttf.lo - a libtool object file +# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.492 2008/01/30 06:40:56) +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/sdl3_ttf.o' + +# Name of the non-PIC object. +non_pic_object=none + diff --git a/php-sdl3/test_functions.php b/php-sdl3/test_functions.php new file mode 100644 index 0000000..9726395 --- /dev/null +++ b/php-sdl3/test_functions.php @@ -0,0 +1,35 @@ +nextWindowId++; + $this->windows[$windowId] = $window; + } + /** * Get all windows */ @@ -75,12 +88,52 @@ class Application echo 'Layoutout: ' . PHP_EOL; } } - // Poll events globally for all windows (event queue mode, if available) - rgfw_pollEvents(); + // SDL3: Poll all events globally and distribute to the correct windows + $events = []; + while ($event = sdl_poll_event()) { + $events[] = $event; + } - // Handle events for all windows (now that layout is done) - foreach ($this->windows as $windowId => $window) { - $window->handleEvents(); + // Distribute events to windows based on window_id + foreach ($events as $event) { + $eventWindowId = $event['window_id'] ?? null; + + // Debug event distribution + if (defined('DEBUG_EVENTS') && DEBUG_EVENTS && $eventWindowId !== null) { + $eventType = $event['type']; + error_log("[Application] Distributing event type={$eventType} to window_id={$eventWindowId}"); + } + + // Global events (like QUIT) go to all windows + if ($eventWindowId === null) { + foreach ($this->windows as $windowId => $window) { + $window->processEvent($event); + } + } else { + // Window-specific events go to the correct window + $delivered = false; + foreach ($this->windows as $windowId => $window) { + if ($window->getWindowId() === $eventWindowId) { + $window->processEvent($event); + $delivered = true; + break; + } + } + + if (!$delivered) { + // Check if this is a recently closed window (expected) + if (!in_array($eventWindowId, $this->closedWindowIds)) { + if (defined('DEBUG_EVENTS') && DEBUG_EVENTS) { + error_log("[Application] WARNING: Event for window_id={$eventWindowId} could not be delivered (window not found)"); + } + } else { + // This is a recently closed window, events are expected + if (defined('DEBUG_EVENTS') && DEBUG_EVENTS) { + error_log("[Application] Ignoring event for recently closed window_id={$eventWindowId}"); + } + } + } + } } // Update async tasks (global) @@ -98,13 +151,25 @@ class Application // Remove closed windows foreach ($this->windows as $windowId => $window) { if ($window->shouldClose()) { - $window->cleanup(); // Frees the TextRenderer to prevent "fat text" bug - rgfw_window_close($window->getWindowResource()); // Now, safely close the native window + // Track this window ID as recently closed + $sdlWindowId = $window->getWindowId(); + if (!in_array($sdlWindowId, $this->closedWindowIds)) { + $this->closedWindowIds[] = $sdlWindowId; + } + + // Explicitly destroy the window (closes SDL window, renderer, and text renderer) + $window->destroy(); unset($this->windows[$windowId]); $oneWindowIsClosed = true; } } + // Clean up old closed window IDs after 10 frames (to prevent memory leak) + // This gives SDL enough time to stop sending events for closed windows + if (count($this->closedWindowIds) > 10) { + array_shift($this->closedWindowIds); + } + if ($oneWindowIsClosed) { foreach ($this->windows as $windowId => $window) { $window->setShouldBeReLayouted(true); diff --git a/src/Framework/TextRenderer.php b/src/Framework/TextRenderer.php index df9bdaf..4d7ff44 100644 --- a/src/Framework/TextRenderer.php +++ b/src/Framework/TextRenderer.php @@ -8,28 +8,33 @@ namespace PHPNative\Framework; class TextRenderer { - private $window; + private $renderer; + private $font = null; private bool $initialized = false; private string $fontPath; private int $fontSize; + private float $colorR = 1.0; + private float $colorG = 1.0; + private float $colorB = 1.0; + private float $colorA = 1.0; /** * Constructor * - * @param resource $window RGFW window resource + * @param resource $renderer SDL Renderer resource */ - public function __construct($window) + public function __construct($renderer) { - $this->window = $window; + $this->renderer = $renderer; } /** - * Initialize RFont with a font file + * Initialize TTF with a font file * * @param string|null $fontPath Path to TTF font file * @param int $fontSize Default font size - * @param int $atlasWidth Font atlas texture width (default 512) - * @param int $atlasHeight Font atlas texture height (default 512) + * @param int $atlasWidth Font atlas texture width (ignored, for compatibility) + * @param int $atlasHeight Font atlas texture height (ignored, for compatibility) * @return bool Success */ public function init( @@ -51,13 +56,16 @@ class TextRenderer $this->fontPath = $fontPath; $this->fontSize = $fontSize; - $this->initialized = rfont_init($this->window, $fontPath, $fontSize, $atlasWidth, $atlasHeight); + $this->font = ttf_open_font($fontPath, $fontSize); - if (!$this->initialized) { - error_log("Failed to initialize RFont with font: {$fontPath}"); + if (!$this->font) { + error_log("Failed to open font: {$fontPath}"); + $this->initialized = false; return false; } + $this->initialized = true; + // Set default color to white $this->setColor(1.0, 1.0, 1.0, 1.0); @@ -103,15 +111,43 @@ class TextRenderer */ public function drawText(string $text, int $x, int $y, null|int $size = null): void { - if (!$this->initialized) { + if (!$this->initialized || !$this->font) { return; } - if ($size === null) { - $size = $this->fontSize; + // SDL_ttf doesn't support variable font sizes easily + // We use the font size that was set when the font was opened + // For different sizes, you'd need to open multiple font instances + + // Convert float color (0.0-1.0) to int (0-255) + $r = (int) ($this->colorR * 255); + $g = (int) ($this->colorG * 255); + $b = (int) ($this->colorB * 255); + + // Render text to surface with anti-aliasing (blended mode for smooth text) + $surface = ttf_render_text_blended($this->font, $text, $r, $g, $b); + if (!$surface) { + return; } - rfont_drawText($this->window, $text, $x, $y, $size); + // Create texture from surface + $texture = sdl_create_texture_from_surface($this->renderer, $surface); + if (!$texture) { + return; + } + + // Get text size + $textSize = ttf_size_text($this->font, $text); + + // Render texture + sdl_render_texture($this->renderer, $texture, [ + 'x' => $x, + 'y' => $y, + 'w' => $textSize['w'], + 'h' => $textSize['h'] + ]); + + // Note: Texture and surface are automatically cleaned up by PHP resource destructors } /** @@ -124,11 +160,10 @@ class TextRenderer */ public function setColor(float $r, float $g, float $b, float $a = 1.0): void { - if (!$this->initialized) { - return; - } - - rfont_setColor($this->window, $r, $g, $b, $a); + $this->colorR = $r; + $this->colorG = $g; + $this->colorB = $b; + $this->colorA = $a; } /** @@ -140,24 +175,13 @@ class TextRenderer */ public function measureText(string $text, null|int $size = null): array { - if (!$this->initialized) { + if (!$this->initialized || !$this->font) { return [0, 0]; } - if ($size === null) { - $size = $this->fontSize; - } - - // Try to use rfont_getTextSize if available, otherwise estimate - if (function_exists('rfont_getTextSize')) { - $dimensions = rfont_getTextSize($this->window, $text, $size); - return [(int) $dimensions[0], (int) $dimensions[1]]; - } - - // Fallback: estimate based on font size - $width = strlen($text) * ($size * 0.6); // Rough estimate - $height = $size * 1.2; // Line height - return [(int) $width, (int) $height]; + // Get text size using TTF + $dimensions = ttf_size_text($this->font, $text); + return [(int) $dimensions['w'], (int) $dimensions['h']]; } /** @@ -168,20 +192,18 @@ class TextRenderer */ public function updateFramebuffer(int $width, int $height): void { - if (!$this->initialized) { - return; - } - - rfont_setFramebuffer($this->window, $width, $height); + // SDL3 handles this automatically through the renderer + // This method is kept for compatibility but does nothing } /** - * Free RFont resources + * Free TTF resources */ public function free(): void { - if ($this->initialized) { - rfont_free($this->window); + if ($this->initialized && $this->font) { + ttf_close_font($this->font); + $this->font = null; $this->initialized = false; } } diff --git a/src/Tailwind/Parser/Flex.php b/src/Tailwind/Parser/Flex.php index 69bd18b..5652452 100644 --- a/src/Tailwind/Parser/Flex.php +++ b/src/Tailwind/Parser/Flex.php @@ -14,6 +14,10 @@ class Flex implements Parser if (count($output_array[0]) > 0) { return new \PHPNative\Tailwind\Style\Flex(type:FlexTypeEnum::none); } + preg_match_all('/flex-grow/', $style, $output_array); + if (count($output_array[0]) > 0) { + return new \PHPNative\Tailwind\Style\Flex(type:FlexTypeEnum::grow); + } preg_match_all('/flex-1/', $style, $output_array); if (count($output_array[0]) > 0) { return new \PHPNative\Tailwind\Style\Flex(type:FlexTypeEnum::one); diff --git a/src/Tailwind/Parser/Height.php b/src/Tailwind/Parser/Height.php index 06aaf58..1c8c78e 100644 --- a/src/Tailwind/Parser/Height.php +++ b/src/Tailwind/Parser/Height.php @@ -24,7 +24,8 @@ class Height implements Parser preg_match_all('/h-(\d*)/', $style, $output_array); if (!$found && count($output_array[0]) > 0) { - $value = (int)$output_array[1][0]; + // Tailwind uses a 4px scale: h-1 = 4px, h-10 = 40px, etc. + $value = (int)$output_array[1][0] * 4; } preg_match_all('/(h-full|h-screen)/', $style, $output_array); diff --git a/src/Tailwind/Parser/Margin.php b/src/Tailwind/Parser/Margin.php index 6ebbb68..1b4653d 100644 --- a/src/Tailwind/Parser/Margin.php +++ b/src/Tailwind/Parser/Margin.php @@ -15,42 +15,42 @@ class Margin implements Parser preg_match_all('/m-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $l = (int)$output_array[1][0]; - $r = (int)$output_array[1][0]; - $t = (int)$output_array[1][0]; - $b = (int)$output_array[1][0]; + $l = (int)$output_array[1][0] * 4; + $r = (int)$output_array[1][0] * 4; + $t = (int)$output_array[1][0] * 4; + $b = (int)$output_array[1][0] * 4; } preg_match_all('/mx-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $l = (int)$output_array[1][0]; - $r = (int)$output_array[1][0]; + $l = (int)$output_array[1][0] * 4; + $r = (int)$output_array[1][0] * 4; } preg_match_all('/my-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $t = (int)$output_array[1][0]; - $b = (int)$output_array[1][0]; + $t = (int)$output_array[1][0] * 4; + $b = (int)$output_array[1][0] * 4; } preg_match_all('/mt-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $t = (int)$output_array[1][0]; + $t = (int)$output_array[1][0] * 4; } preg_match_all('/mb-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $b = (int)$output_array[1][0]; + $b = (int)$output_array[1][0] * 4; } preg_match_all('/ml-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $l = (int)$output_array[1][0]; + $l = (int)$output_array[1][0] * 4; } preg_match_all('/mr-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $r = (int)$output_array[1][0]; + $r = (int)$output_array[1][0] * 4; } if($l != null || $r != null || $t != null || $b != null) { diff --git a/src/Tailwind/Parser/Padding.php b/src/Tailwind/Parser/Padding.php index ccb537a..7acb0fe 100644 --- a/src/Tailwind/Parser/Padding.php +++ b/src/Tailwind/Parser/Padding.php @@ -15,42 +15,43 @@ class Padding implements Parser preg_match_all('/p-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $l = (int)$output_array[1][0]; - $r = (int)$output_array[1][0]; - $t = (int)$output_array[1][0]; - $b = (int)$output_array[1][0]; + // Tailwind uses a 4px scale + $l = (int)$output_array[1][0] * 4; + $r = (int)$output_array[1][0] * 4; + $t = (int)$output_array[1][0] * 4; + $b = (int)$output_array[1][0] * 4; } preg_match_all('/px-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $l = (int)$output_array[1][0]; - $r = (int)$output_array[1][0]; + $l = (int)$output_array[1][0] * 4; + $r = (int)$output_array[1][0] * 4; } preg_match_all('/py-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $t = (int)$output_array[1][0]; - $b = (int)$output_array[1][0]; + $t = (int)$output_array[1][0] * 4; + $b = (int)$output_array[1][0] * 4; } preg_match_all('/pt-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $t = (int)$output_array[1][0]; + $t = (int)$output_array[1][0] * 4; } preg_match_all('/pb-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $b = (int)$output_array[1][0]; + $b = (int)$output_array[1][0] * 4; } preg_match_all('/pl-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $l = (int)$output_array[1][0]; + $l = (int)$output_array[1][0] * 4; } preg_match_all('/pr-(\d*)/', $style, $output_array); if (count($output_array[0]) > 0) { - $r = (int)$output_array[1][0]; + $r = (int)$output_array[1][0] * 4; } if($l != null || $r != null || $t != null || $b != null) { diff --git a/src/Tailwind/Parser/Width.php b/src/Tailwind/Parser/Width.php index 348c48f..9f3dce7 100644 --- a/src/Tailwind/Parser/Width.php +++ b/src/Tailwind/Parser/Width.php @@ -24,7 +24,8 @@ class Width implements Parser preg_match_all('/w-(\d*)/', $style, $output_array); if (!$found && count($output_array[0]) > 0) { - $value = (int)$output_array[1][0]; + // Tailwind uses a 4px scale: w-1 = 4px, w-10 = 40px, etc. + $value = (int)$output_array[1][0] * 4; } preg_match_all('/(w-screen|w-full)/', $style, $output_array); diff --git a/src/Tailwind/Style/FlexTypeEnum.php b/src/Tailwind/Style/FlexTypeEnum.php index d090c49..10bd7ec 100644 --- a/src/Tailwind/Style/FlexTypeEnum.php +++ b/src/Tailwind/Style/FlexTypeEnum.php @@ -3,10 +3,11 @@ declare(strict_types=1); namespace PHPNative\Tailwind\Style; -enum FlexTypeEnum +enum FlexTypeEnum { case none; case auto; case initial; case one; + case grow; } \ No newline at end of file diff --git a/src/Ui/Component.php b/src/Ui/Component.php index 8e2e8af..7b26eec 100644 --- a/src/Ui/Component.php +++ b/src/Ui/Component.php @@ -27,7 +27,19 @@ abstract class Component public function __construct( protected string $style = '', - ) {} + ) { + // Initialize viewports with default values + // These will be properly set during layout() + $this->viewport = new Viewport( + x: 0, + y: 0, + width: 0, + height: 0, + windowWidth: 800, + windowHeight: 600 + ); + $this->contentViewport = clone $this->viewport; + } public function setViewport(Viewport $viewport): void { @@ -101,7 +113,7 @@ abstract class Component } } - public function render(&$window, null|TextRenderer $textRenderer = null): void + public function render(&$renderer, null|TextRenderer $textRenderer = null): void { if (!$this->visible) { return; @@ -112,43 +124,49 @@ abstract class Component ($bg = $this->computedStyles[\PHPNative\Tailwind\Style\Background::class]) ) { if ($this->currentState == StateEnum::hover) { - rsgl_setColor($window, $bg->color->red, $bg->color->green, $bg->color->blue, 10); + sdl_set_render_draw_color($renderer, $bg->color->red, $bg->color->green, $bg->color->blue, 10); } else { - rsgl_setColor($window, $bg->color->red, $bg->color->green, $bg->color->blue, $bg->color->alpha); + sdl_set_render_draw_color($renderer, $bg->color->red, $bg->color->green, $bg->color->blue, $bg->color->alpha); } if ( isset($this->computedStyles[\PHPNative\Tailwind\Style\Border::class]) && ($border = $this->computedStyles[\PHPNative\Tailwind\Style\Border::class]) ) { - rsgl_drawRoundRectExF( - $window, + // SDL3: sdl_rounded_box_ex uses (x1, y1, x2, y2) instead of (x, y, w, h) + $x2 = $this->viewport->x + $this->viewport->width; + $y2 = $this->viewport->y + $this->viewport->height; + + sdl_rounded_box_ex( + $renderer, $this->viewport->x, $this->viewport->y, - $this->viewport->width, - $this->viewport->height, - $border->roundTopLeft ?? 0, + $x2, + $y2, $border->roundTopLeft ?? 0, $border->roundTopRight ?? 0, - $border->roundTopRight ?? 0, - $border->roundBottomLeft ?? 0, - $border->roundBottomLeft ?? 0, - $border->roundBottomRight ?? 0, $border->roundBottomRight ?? 0, + $border->roundBottomLeft ?? 0, + $bg->color->red, + $bg->color->green, + $bg->color->blue, + $bg->color->alpha, ); } else { - rsgl_drawRectF( - $window, - $this->viewport->x, - $this->viewport->y, - $this->viewport->width, - $this->viewport->height, + sdl_render_fill_rect( + $renderer, + [ + 'x' => $this->viewport->x, + 'y' => $this->viewport->y, + 'w' => $this->viewport->width, + 'h' => $this->viewport->height, + ] ); } } } - public function renderContent(&$window, null|TextRenderer $textRenderer = null): void + public function renderContent(&$renderer, null|TextRenderer $textRenderer = null): void { if (!$this->visible) { return; @@ -156,8 +174,8 @@ abstract class Component // Render children foreach ($this->children as $child) { - $child->render($window, $textRenderer); - $child->renderContent($window, $textRenderer); + $child->render($renderer, $textRenderer); + $child->renderContent($renderer, $textRenderer); } } @@ -234,4 +252,32 @@ abstract class Component } return false; } + + /** + * Handle text input event + * @param string $text The input text + */ + public function handleTextInput(string $text): void + { + // Default implementation: propagate to children + foreach ($this->children as $child) { + $child->handleTextInput($text); + } + } + + /** + * Handle key down event + * @param int $keycode SDL keycode + * @return bool True if event was handled + */ + public function handleKeyDown(int $keycode): bool + { + // Default implementation: propagate to children + foreach ($this->children as $child) { + if ($child->handleKeyDown($keycode)) { + return true; + } + } + return false; + } } diff --git a/src/Ui/Widget/Checkbox.php b/src/Ui/Widget/Checkbox.php new file mode 100644 index 0000000..7b82dff --- /dev/null +++ b/src/Ui/Widget/Checkbox.php @@ -0,0 +1,110 @@ +checked = $checked; + $this->onChange = $onChange; + $this->labelText = $label; + } + + public function isChecked(): bool + { + return $this->checked; + } + + public function setChecked(bool $checked): void + { + $this->checked = $checked; + + if ($this->onChange !== null) { + ($this->onChange)($checked); + } + } + + public function setOnChange(callable $onChange): void + { + $this->onChange = $onChange; + } + + public function handleMouseClick(float $mouseX, float $mouseY, int $button): bool + { + // Check if click is within checkbox bounds (not label) + $checkboxSize = 20; + if ( + $mouseX >= $this->viewport->x && + $mouseX <= ($this->viewport->x + $checkboxSize) && + $mouseY >= $this->viewport->y && + $mouseY <= ($this->viewport->y + $checkboxSize) + ) { + $this->checked = !$this->checked; + + if ($this->onChange !== null) { + ($this->onChange)($this->checked); + } + + return true; + } + + return parent::handleMouseClick($mouseX, $mouseY, $button); + } + + public function render(&$renderer, null|TextRenderer $textRenderer = null): void + { + $checkboxSize = 20; + + // Draw checkbox border + sdl_set_render_draw_color($renderer, 156, 163, 175, 255); // Gray-400 + sdl_render_fill_rect($renderer, [ + 'x' => $this->viewport->x, + 'y' => $this->viewport->y, + 'w' => $checkboxSize, + 'h' => $checkboxSize, + ]); + + // Draw white background + sdl_set_render_draw_color($renderer, 255, 255, 255, 255); + sdl_render_fill_rect($renderer, [ + 'x' => $this->viewport->x + 2, + 'y' => $this->viewport->y + 2, + 'w' => $checkboxSize - 4, + 'h' => $checkboxSize - 4, + ]); + + // Draw checkmark if checked + if ($this->checked) { + sdl_set_render_draw_color($renderer, 37, 99, 235, 255); // Blue-600 + sdl_render_fill_rect($renderer, [ + 'x' => $this->viewport->x + 4, + 'y' => $this->viewport->y + 4, + 'w' => $checkboxSize - 8, + 'h' => $checkboxSize - 8, + ]); + } + + // Render label text if present + if (!empty($this->labelText) && $textRenderer !== null && $textRenderer->isInitialized()) { + $textX = $this->viewport->x + $checkboxSize + 8; // Checkbox + margin + $textY = $this->viewport->y + 2; + + $textRenderer->setColor(0, 0, 0, 1.0); // Black + $textRenderer->drawText($this->labelText, (int) $textX, (int) $textY); + } + } +} diff --git a/src/Ui/Widget/Container.php b/src/Ui/Widget/Container.php index 9b0e4b0..1907eb3 100644 --- a/src/Ui/Widget/Container.php +++ b/src/Ui/Widget/Container.php @@ -38,6 +38,18 @@ class Container extends Component parent::__construct($style); } + /** + * Clear all child components + */ + public function clearChildren(): void + { + $this->children = []; + $this->contentWidth = 0; + $this->contentHeight = 0; + $this->scrollX = 0; + $this->scrollY = 0; + } + public function layout(null|TextRenderer $textRenderer = null): void { // Call parent to compute styles and setup viewports @@ -131,9 +143,10 @@ class Container extends Component } if (!$hasExplicitHeight) { - // Set viewport to min(contentSize + padding, availableSize) + // Set viewport to content height + padding (don't expand to fill available space unnecessarily) $desiredHeight = $this->contentHeight + $paddingY; - $this->viewport->height = (int) min($desiredHeight, $availableHeight); + // Only limit to availableHeight if we're not trying to measure natural size + $this->viewport->height = (int) $desiredHeight; $this->contentViewport->height = max(0, $this->viewport->height - ((int) $paddingY)); } } @@ -186,18 +199,20 @@ class Container extends Component if (!$hasExplicitSize) { // Need to measure natural size - do a temporary layout + // For flex-col without explicit height, give minimal space to measure intrinsic size + // For flex-row without explicit width, give minimal space to measure intrinsic size $tempViewport = new Viewport( x: $this->contentViewport->x, y: $this->contentViewport->y, - width: $isRow ? $availableSpace : $this->contentViewport->width, - height: $isRow ? $this->contentViewport->height : $availableSpace, + width: $isRow ? 9999 : $this->contentViewport->width, + height: $isRow ? $this->contentViewport->height : 9999, windowWidth: $this->contentViewport->windowWidth, windowHeight: $this->contentViewport->windowHeight, ); $child->setViewport($tempViewport); $child->layout($textRenderer); - // Get natural size + // Get natural size (the actual size the child computed after layout) $size = $isRow ? $child->getViewport()->width : $child->getViewport()->height; } @@ -309,7 +324,7 @@ class Container extends Component ]; } - public function renderContent(&$window, null|TextRenderer $textRenderer = null): void + public function renderContent(&$renderer, null|TextRenderer $textRenderer = null): void { if (!$this->visible) { return; @@ -322,25 +337,21 @@ class Container extends Component // Apply scroll offset to children if ($overflow['x'] || $overflow['y']) { - // Enable scissor test for clipping + // Enable clipping $scissorX = (int) $this->contentViewport->x; $scissorY = (int) $this->contentViewport->y; $scissorW = (int) $this->contentViewport->width; $scissorH = (int) $this->contentViewport->height; - // IMPORTANT: RSGL uses batch rendering! - // We need to flush the batch before/after scissor to ensure correct clipping + // SDL3: Set clip rect for clipping + sdl_set_render_clip_rect($renderer, [ + 'x' => $scissorX, + 'y' => $scissorY, + 'w' => $scissorW, + 'h' => $scissorH + ]); - // Step 1: Flush any pending draw calls before scissor - rsgl_render($window); - - // Step 2: Enable scissor test for clipping - $windowHeight = $this->contentViewport->windowHeight; - $invertedY = $windowHeight - ($scissorY + $scissorH); - - rsgl_scissorStart($window, $scissorX, $invertedY, $scissorW, $scissorH); - - // Step 3: Render children with scroll offset (batches draw calls) + // Render children with scroll offset foreach ($this->children as $child) { // Apply scroll offset recursively to child and all its descendants $child->applyScrollOffset((int) $this->scrollX, (int) $this->scrollY); @@ -354,30 +365,26 @@ class Container extends Component $childViewport->y < ($scissorY + $scissorH); if ($isVisible) { - // Render - batches draw calls - $child->render($textRenderer); - $child->renderContent($textRenderer); + $child->render($renderer, $textRenderer); + $child->renderContent($renderer, $textRenderer); } // Restore by applying negative offset $child->applyScrollOffset((int) -$this->scrollX, (int) -$this->scrollY); } - // Step 4: Flush the batch while scissor is still active - rsgl_render($window); - - // Step 5: Disable scissor test - rsgl_scissorEnd($window); + // Disable clipping + sdl_set_render_clip_rect($renderer, null); // Render scrollbars - $this->renderScrollbars($overflow); + $this->renderScrollbars($renderer, $overflow); } else { // No overflow, render normally - parent::renderContent($window, $textRenderer); + parent::renderContent($renderer, $textRenderer); } } - private function renderScrollbars(array $overflow): void + private function renderScrollbars(&$renderer, array $overflow): void { $scrollbarColor = [100, 100, 100, 200]; // Gray with some transparency @@ -394,32 +401,32 @@ class Container extends Component $scrollbarX = ($this->contentViewport->x + $this->contentViewport->width) - self::SCROLLBAR_WIDTH; // Track - rsgl_setColor($this->window, 200, 200, 200, 100); - rsgl_drawRectF( - $this->window, - (int) $scrollbarX, - (int) $this->contentViewport->y, - (int) self::SCROLLBAR_WIDTH, - (int) $scrollbarHeight, + sdl_set_render_draw_color($renderer, 200, 200, 200, 100); + sdl_render_fill_rect( + $renderer, + [ + 'x' => (int) $scrollbarX, + 'y' => (int) $this->contentViewport->y, + 'w' => (int) self::SCROLLBAR_WIDTH, + 'h' => (int) $scrollbarHeight, + ] ); - // Thumb - rsgl_setColor( - $this->window, + // Thumb - using sdl_rounded_box for rounded rectangle + $thumbX = (int) ($scrollbarX + 2); + $thumbW = (int) (self::SCROLLBAR_WIDTH - 4); + sdl_rounded_box( + $renderer, + $thumbX, + (int) $thumbY, + $thumbX + $thumbW, + (int) ($thumbY + $thumbHeight), + 4, $scrollbarColor[0], $scrollbarColor[1], $scrollbarColor[2], $scrollbarColor[3], ); - rsgl_drawRoundRectF( - $this->window, - (int) ($scrollbarX + 2), - (int) $thumbY, - (int) (self::SCROLLBAR_WIDTH - 4), - (int) $thumbHeight, - 4, - 4, - ); } // Horizontal scrollbar @@ -435,32 +442,32 @@ class Container extends Component $scrollbarY = ($this->contentViewport->y + $this->contentViewport->height) - self::SCROLLBAR_WIDTH; // Track - rsgl_setColor($this->window, 200, 200, 200, 100); - rsgl_drawRectF( - $this->window, - (int) $this->contentViewport->x, - (int) $scrollbarY, - (int) $scrollbarWidth, - (int) self::SCROLLBAR_WIDTH, + sdl_set_render_draw_color($renderer, 200, 200, 200, 100); + sdl_render_fill_rect( + $renderer, + [ + 'x' => (int) $this->contentViewport->x, + 'y' => (int) $scrollbarY, + 'w' => (int) $scrollbarWidth, + 'h' => (int) self::SCROLLBAR_WIDTH, + ] ); - // Thumb - rsgl_setColor( - $this->window, + // Thumb - using sdl_rounded_box for rounded rectangle + $thumbY = (int) ($scrollbarY + 2); + $thumbH = (int) (self::SCROLLBAR_WIDTH - 4); + sdl_rounded_box( + $renderer, + (int) $thumbX, + $thumbY, + (int) ($thumbX + $thumbWidth), + $thumbY + $thumbH, + 4, $scrollbarColor[0], $scrollbarColor[1], $scrollbarColor[2], $scrollbarColor[3], ); - rsgl_drawRoundRectF( - $this->window, - (int) $thumbX, - (int) ($scrollbarY + 2), - (int) $thumbWidth, - (int) (self::SCROLLBAR_WIDTH - 4), - 4, - 4, - ); } } diff --git a/src/Ui/Widget/Label.php b/src/Ui/Widget/Label.php index f19c5b8..3131007 100644 --- a/src/Ui/Widget/Label.php +++ b/src/Ui/Widget/Label.php @@ -14,7 +14,9 @@ class Label extends Component public function __construct( public string $text = '', public string $style = '', - ) {} + ) { + parent::__construct($style); + } public function setText(string $text): void { diff --git a/src/Ui/Widget/TextInput.php b/src/Ui/Widget/TextInput.php new file mode 100644 index 0000000..9d7a69d --- /dev/null +++ b/src/Ui/Widget/TextInput.php @@ -0,0 +1,246 @@ +placeholder = $placeholder; + $this->onChange = $onChange; + } + + public function layout(null|TextRenderer $textRenderer = null): void + { + // Parse styles first to get computed styles + $this->computedStyles = \PHPNative\Tailwind\StyleParser::parse($this->style)->getValidStyles( + \PHPNative\Tailwind\Style\MediaQueryEnum::normal, + \PHPNative\Tailwind\Style\StateEnum::normal, + ); + + // Call parent layout + parent::layout($textRenderer); + + // If no explicit height is set, calculate based on text size + padding + if (!isset($this->computedStyles[\PHPNative\Tailwind\Style\Height::class])) { + $padding = $this->computedStyles[\PHPNative\Tailwind\Style\Padding::class] ?? null; + $paddingY = $padding ? ($padding->top + $padding->bottom) : 0; + + // Calculate text height + $textHeight = 16; // Default font size + if ($textRenderer !== null && $textRenderer->isInitialized()) { + $displayText = empty($this->value) ? ($this->placeholder ?: 'A') : 'A'; + $size = $textRenderer->measureText($displayText); + $textHeight = $size[1] ?? 16; + } + + // Set height to text height + padding + borders (2px * 2) + $this->viewport->height = (int) ($textHeight + $paddingY + 4); + $this->contentViewport->height = max(0, (int) ($textHeight + $paddingY)); + } + } + + public function getValue(): string + { + return $this->value; + } + + public function setValue(string $value): void + { + $this->value = $value; + $this->cursorPosition = mb_strlen($value); + + if ($this->onChange !== null) { + ($this->onChange)($value); + } + } + + public function setOnChange(callable $onChange): void + { + $this->onChange = $onChange; + } + + public function handleMouseClick(float $mouseX, float $mouseY, int $button): bool + { + // Check if click is within bounds + if ( + $mouseX >= $this->viewport->x && + $mouseX <= ($this->viewport->x + $this->viewport->width) && + $mouseY >= $this->viewport->y && + $mouseY <= ($this->viewport->y + $this->viewport->height) + ) { + $this->focused = true; + return true; + } else { + $this->focused = false; + return false; + } + } + + public function handleTextInput(string $text): void + { + if (!$this->focused) { + return; + } + + // Insert text at cursor position + $before = mb_substr($this->value, 0, $this->cursorPosition); + $after = mb_substr($this->value, $this->cursorPosition); + $this->value = $before . $text . $after; + $this->cursorPosition += mb_strlen($text); + + if ($this->onChange !== null) { + ($this->onChange)($this->value); + } + } + + public function handleKeyDown(int $keycode): bool + { + if (!$this->focused) { + return false; + } + + switch ($keycode) { + case SDLK_BACKSPACE: + if ($this->cursorPosition > 0) { + $before = mb_substr($this->value, 0, $this->cursorPosition - 1); + $after = mb_substr($this->value, $this->cursorPosition); + $this->value = $before . $after; + $this->cursorPosition--; + + if ($this->onChange !== null) { + ($this->onChange)($this->value); + } + } + return true; + + case SDLK_DELETE: + if ($this->cursorPosition < mb_strlen($this->value)) { + $before = mb_substr($this->value, 0, $this->cursorPosition); + $after = mb_substr($this->value, $this->cursorPosition + 1); + $this->value = $before . $after; + + if ($this->onChange !== null) { + ($this->onChange)($this->value); + } + } + return true; + + case SDLK_LEFT: + if ($this->cursorPosition > 0) { + $this->cursorPosition--; + } + return true; + + case SDLK_RIGHT: + if ($this->cursorPosition < mb_strlen($this->value)) { + $this->cursorPosition++; + } + return true; + + case SDLK_RETURN: + // Enter key - can be handled by parent + return false; + } + + return false; + } + + public function isFocused(): bool + { + return $this->focused; + } + + public function focus(): void + { + $this->focused = true; + } + + public function blur(): void + { + $this->focused = false; + } + + public function render(&$renderer, null|TextRenderer $textRenderer = null): void + { + // Render background with focus indicator + if ($this->focused) { + // Focused: blue border + sdl_set_render_draw_color($renderer, 59, 130, 246, 255); // Blue-500 + } else { + // Not focused: gray border + sdl_set_render_draw_color($renderer, 209, 213, 219, 255); // Gray-300 + } + + // Draw border + sdl_render_fill_rect($renderer, [ + 'x' => $this->viewport->x, + 'y' => $this->viewport->y, + 'w' => $this->viewport->width, + 'h' => $this->viewport->height, + ]); + + // Draw white background inside + sdl_set_render_draw_color($renderer, 255, 255, 255, 255); + sdl_render_fill_rect($renderer, [ + 'x' => $this->viewport->x + 2, + 'y' => $this->viewport->y + 2, + 'w' => $this->viewport->width - 4, + 'h' => $this->viewport->height - 4, + ]); + + // Render text or placeholder + if ($textRenderer !== null && $textRenderer->isInitialized()) { + $displayText = empty($this->value) ? $this->placeholder : $this->value; + $textX = $this->viewport->x + 6; + $textY = $this->viewport->y + 6; + + // Set color: gray for placeholder, black for text + if (empty($this->value)) { + $textRenderer->setColor(156/255, 163/255, 175/255, 1.0); // Gray-400 + } else { + $textRenderer->setColor(0, 0, 0, 1.0); // Black + } + + $textRenderer->drawText($displayText, (int) $textX, (int) $textY); + } + + // Render cursor if focused + if ($this->focused && $this->cursorVisible && $textRenderer) { + // Calculate cursor position + $textBeforeCursor = mb_substr($this->value, 0, $this->cursorPosition); + $cursorX = $this->viewport->x + 6; // Left padding + + if (!empty($textBeforeCursor)) { + $size = $textRenderer->measureText($textBeforeCursor); + $cursorX += $size[0]; + } + + // Draw cursor + sdl_set_render_draw_color($renderer, 0, 0, 0, 255); + sdl_render_fill_rect($renderer, [ + 'x' => $cursorX, + 'y' => $this->viewport->y + 4, + 'w' => 2, + 'h' => $this->viewport->height - 8, + ]); + } + + // Don't render children - we handle text rendering directly + } +} diff --git a/src/Ui/Window.php b/src/Ui/Window.php index 3dc7ebc..43439f9 100644 --- a/src/Ui/Window.php +++ b/src/Ui/Window.php @@ -7,6 +7,8 @@ use PHPNative\Framework\TextRenderer; class Window { private mixed $window = null; + private mixed $renderer = null; + private int $windowId = 0; private null|Component $rootComponent = null; private ?TextRenderer $textRenderer; private float $mouseX = 0; @@ -24,25 +26,50 @@ class Window private int $x = 100, private int $y = 100, ) { - // Create window - $this->window = rgfw_createWindow($title, $x, $y, $width, $height, 0); - if (!$this->window) { - throw new \Exception('Failed to create window'); + // Initialize SDL if not already done + static $sdlInitialized = false; + if (!$sdlInitialized) { + if (!sdl_init(SDL_INIT_VIDEO)) { + throw new \Exception('Failed to initialize SDL: ' . sdl_get_error()); + } + + // Initialize TTF + if (!ttf_init()) { + throw new \Exception('Failed to initialize TTF: ' . sdl_get_error()); + } + + $sdlInitialized = true; } - // Initialize RSGL renderer - if (!rsgl_init($this->window)) { - throw new \Exception('Failed to initialize RSGL renderer'); + // Create window with resizable flag for normal window decorations + // SDL_WINDOW_RESIZABLE gives you the standard window controls (close, minimize, maximize) + $flags = SDL_WINDOW_RESIZABLE; + + $this->window = sdl_create_window($title, $width, $height, $flags); + if (!$this->window) { + throw new \Exception('Failed to create window: ' . sdl_get_error()); + } + + // Get window ID for event routing + $this->windowId = sdl_get_window_id($this->window); + + // Enable text input for this window + sdl_start_text_input($this->window); + + // Create renderer + $this->renderer = sdl_create_renderer($this->window); + if (!$this->renderer) { + throw new \Exception('Failed to create renderer: ' . sdl_get_error()); } // Initialize text renderer - $this->textRenderer = new TextRenderer($this->window); + $this->textRenderer = new TextRenderer($this->renderer); if (!$this->textRenderer->init()) { error_log('Warning: Failed to initialize text renderer. Text rendering will not be available.'); } // Get actual window size - $size = rgfw_window_getSize($this->window); + $size = sdl_get_window_size($this->window); $this->width = $size[0]; $this->height = $size[1]; $this->viewport = new Viewport( @@ -88,7 +115,7 @@ class Window public function shouldClose(): bool { - return $this->shouldClose || rgfw_window_shouldClose($this->window); + return $this->shouldClose; } public function close(): void @@ -101,48 +128,69 @@ class Window return $this->window; } - /** - * Handle window and input events - */ - public function handleEvents(): void + public function getRendererResource(): mixed { - while ($event = rgfw_window_checkQueuedEvent($this->window)) { - // Debug output - can be removed later - if (defined('DEBUG_EVENTS') && DEBUG_EVENTS) { - $eventTypes = [ - RGFW_quit => 'QUIT', - RGFW_keyPressed => 'KEY_PRESSED', - RGFW_mouseButtonPressed => 'MOUSE_PRESSED', - RGFW_mouseButtonReleased => 'MOUSE_RELEASED', - RGFW_mousePosChanged => 'MOUSE_MOVE', - ]; - $typeName = $eventTypes[$event['type']] ?? ('UNKNOWN(' . $event['type'] . ')'); - error_log("[{$this->title}] Event: {$typeName}"); - } + return $this->renderer; + } - switch ($event['type']) { - case RGFW_quit: + public function getWindowId(): int + { + return $this->windowId; + } + + /** + * Process a single event for this window + * Called by Application with pre-filtered events + */ + public function processEvent(array $event): void + { + // Debug output - can be removed later + if (defined('DEBUG_EVENTS') && DEBUG_EVENTS) { + $eventTypes = [ + SDL_EVENT_QUIT => 'QUIT', + SDL_EVENT_WINDOW_CLOSE_REQUESTED => 'WINDOW_CLOSE_REQUESTED', + SDL_EVENT_KEY_DOWN => 'KEY_DOWN', + SDL_EVENT_MOUSE_BUTTON_DOWN => 'MOUSE_BUTTON_DOWN', + SDL_EVENT_MOUSE_BUTTON_UP => 'MOUSE_BUTTON_UP', + SDL_EVENT_MOUSE_MOTION => 'MOUSE_MOTION', + SDL_EVENT_WINDOW_RESIZED => 'WINDOW_RESIZED', + ]; + $typeName = $eventTypes[$event['type']] ?? ('UNKNOWN(' . $event['type'] . ')'); + error_log("[{$this->title}] (ID:{$this->windowId}) Event: {$typeName}"); + } + + switch ($event['type']) { + case SDL_EVENT_QUIT: + case SDL_EVENT_WINDOW_CLOSE_REQUESTED: $this->shouldClose = true; break; - case RGFW_keyPressed: - $keyCode = $event['keyCode'] ?? 0; - if ($keyCode == RGFW_Escape) { - $this->shouldClose = true; + case SDL_EVENT_KEY_DOWN: + $keycode = $event['keycode'] ?? 0; + + // Propagate key event to root component + if ($this->rootComponent) { + $this->rootComponent->handleKeyDown($keycode); } break; - case RGFW_windowResized: + case SDL_EVENT_TEXT_INPUT: + $text = $event['text'] ?? ''; + + // Propagate text input to root component + if ($this->rootComponent && !empty($text)) { + $this->rootComponent->handleTextInput($text); + } + break; + + case SDL_EVENT_WINDOW_RESIZED: // Update window dimensions (from event data) - $newWidth = $event[0] ?? $this->width; - $newHeight = $event[1] ?? $this->height; + $newWidth = $event['data1'] ?? $this->width; + $newHeight = $event['data2'] ?? $this->height; $this->width = $newWidth; $this->height = $newHeight; - // Update RSGL renderer size and viewport - rsgl_updateRendererSize($this->window); - // Update text renderer framebuffer if ($this->textRenderer && $this->textRenderer->isInitialized()) { $this->textRenderer->updateFramebuffer($newWidth, $newHeight); @@ -157,9 +205,9 @@ class Window $this->shouldBeReLayouted = true; break; - case RGFW_mousePosChanged: - $this->mouseX = $event[0] ?? 0; - $this->mouseY = $event[1] ?? 0; + case SDL_EVENT_MOUSE_MOTION: + $this->mouseX = $event['x'] ?? 0; + $this->mouseY = $event['y'] ?? 0; // Propagate mouse move to root component if ($this->rootComponent) { @@ -167,7 +215,7 @@ class Window } break; - case RGFW_mouseButtonPressed: + case SDL_EVENT_MOUSE_BUTTON_DOWN: $button = $event['button'] ?? 0; // Propagate click to root component if ($this->rootComponent) { @@ -175,7 +223,7 @@ class Window } break; - case RGFW_mouseButtonReleased: + case SDL_EVENT_MOUSE_BUTTON_UP: $button = $event['button'] ?? 0; // Propagate release to root component @@ -184,8 +232,8 @@ class Window } break; - case RGFW_mouseScroll: - $deltaY = $event[1] ?? 0; + case SDL_EVENT_MOUSE_WHEEL: + $deltaY = $event['y'] ?? 0; // Propagate wheel to root component if ($this->rootComponent) { @@ -193,7 +241,6 @@ class Window } break; } - } } /** @@ -202,36 +249,9 @@ class Window */ public function updateMousePosition(): void { - if (!$this->rootComponent) { - return; - } - - // Try to get current mouse position relative to this window - if (function_exists('rgfw_window_getMousePoint')) { - $mousePos = rgfw_window_getMousePoint($this->window); - if ($mousePos !== false && is_array($mousePos)) { - $newX = $mousePos[0] ?? $this->mouseX; - $newY = $mousePos[1] ?? $this->mouseY; - - // Only update if position changed to avoid unnecessary updates - if ($newX !== $this->mouseX || $newY !== $this->mouseY) { - $this->mouseX = $newX; - $this->mouseY = $newY; - $this->rootComponent->handleMouseMove($this->mouseX, $this->mouseY); - } - } - } else { - // rgfw_window_getMousePoint() not available - // Hover will only work when window receives mouse events - // This is normal OS behavior - only focused windows get mouse events - static $warningShown = false; - if (!$warningShown && defined('DEBUG_EVENTS') && DEBUG_EVENTS) { - error_log( - 'Note: rgfw_window_getMousePoint() not available. Hover states will only work for focused windows.', - ); - $warningShown = true; - } - } + // With SDL3, mouse position is tracked through SDL_EVENT_MOUSE_MOTION events + // This method is kept for compatibility but does nothing + // Hover states are updated in handleEvents() via SDL_EVENT_MOUSE_MOTION } /** @@ -266,20 +286,19 @@ class Window */ public function render(): void { - // Always clear the window to prevent black screens (white background, fully opaque) + // Clear the window with white background + sdl_set_render_draw_color($this->renderer, 255, 255, 255, 255); + sdl_render_clear($this->renderer); // Only render content if window has been laid out // This can happen when windows are created during async callbacks if ($this->hasBeenLaidOut && $this->rootComponent) { - rgfw_window_makeCurrent($this->window); - rsgl_clear($this->window, 255, 255, 255, 255); - $this->rootComponent->render($this->window, $this->textRenderer); - $this->rootComponent->renderContent($this->window, $this->textRenderer); - rsgl_render($this->window); - rgfw_window_swapBuffers($this->window); + $this->rootComponent->render($this->renderer, $this->textRenderer); + $this->rootComponent->renderContent($this->renderer, $this->textRenderer); } - // Always swap buffers to display the cleared window + // Present the rendered content + sdl_render_present($this->renderer); } /** @@ -293,6 +312,27 @@ class Window } } + /** + * Destroy the window and all resources + * This explicitly closes the SDL window + */ + public function destroy(): void + { + // First clean up text renderer + $this->cleanup(); + + // Explicitly destroy SDL renderer and window + if ($this->renderer) { + sdl_destroy_renderer($this->renderer); + $this->renderer = null; + } + + if ($this->window) { + sdl_destroy_window($this->window); + $this->window = null; + } + } + public function setShouldBeReLayouted(bool $shouldBeReLayouted): void { $this->shouldBeReLayouted = $shouldBeReLayouted; diff --git a/test_multi_window.php b/test_multi_window.php new file mode 100644 index 0000000..0b5700a --- /dev/null +++ b/test_multi_window.php @@ -0,0 +1,43 @@ +setOnClick(function() use ($app) { + echo "Creating second window...\n"; + $secondWindow = new Window('Second Window', 400, 300); + $secondContainer = new Container('flex flex-col p-4 bg-green-100'); + + $closeButton = new Button('Close This Window', 'bg-red-500 text-white p-4 m-2 rounded hover:bg-red-600'); + $closeButton->setOnClick(function() use ($secondWindow) { + echo "Close button clicked in second window (ID: {$secondWindow->getWindowId()})\n"; + $secondWindow->close(); + }); + + $secondContainer->addComponent($closeButton); + $secondWindow->setRoot($secondContainer); + $app->addWindow($secondWindow); + + echo "Second window created with ID: {$secondWindow->getWindowId()}\n"; +}); + +$mainContainer->addComponent($openButton); +$mainWindow->setRoot($mainContainer); +$app->addWindow($mainWindow); + +echo "Main window ID: {$mainWindow->getWindowId()}\n"; + +$app->run(); diff --git a/test_queue_events.php b/test_queue_events.php deleted file mode 100644 index 9787922..0000000 --- a/test_queue_events.php +++ /dev/null @@ -1,75 +0,0 @@ -