diff --git a/examples/kanban_app.php b/examples/kanban_app.php index af29dd0..701e332 100644 --- a/examples/kanban_app.php +++ b/examples/kanban_app.php @@ -347,6 +347,20 @@ $root->addComponent($subTitle); $statusLabel = new Label('Bereit.', 'text-sm text-gray-600'); $kanbanView = new KanbanBoardView($storagePath, $boards, $statusLabel); +// SDL_Window PixelDensity und DisplayScale im Status anzeigen (falls verfügbar) +$densityText = ''; +if (function_exists('sdl_get_window_pixel_density')) { + $density = sdl_get_window_pixel_density($window->getWindowResource()); + $densityText .= sprintf('PixelDensity: %.2f', $density); +} +if (function_exists('sdl_get_window_display_scale')) { + $scale = sdl_get_window_display_scale($window->getWindowResource()); + $densityText .= ($densityText !== '' ? ' | ' : '') . sprintf('DisplayScale: %.2f', $scale); +} +if ($densityText !== '') { + $statusLabel->setText('Bereit. ' . $densityText); +} + $scaleInput = new TextInput('Scale (z.B. 1.0 oder 2.0)', 'w-40 border border-gray-300 rounded px-3 py-2 bg-white text-black'); $scaleInput->setOnChange(function (string $value) use ($statusLabel): void { $value = trim($value); diff --git a/php-sdl3/.libs/sdl3.o b/php-sdl3/.libs/sdl3.o index 52af146..7062c30 100644 Binary files a/php-sdl3/.libs/sdl3.o and b/php-sdl3/.libs/sdl3.o differ diff --git a/php-sdl3/.libs/sdl3.so b/php-sdl3/.libs/sdl3.so index b628ba3..936d612 100755 Binary files a/php-sdl3/.libs/sdl3.so and b/php-sdl3/.libs/sdl3.so differ diff --git a/php-sdl3/modules/sdl3.so b/php-sdl3/modules/sdl3.so index b628ba3..936d612 100755 Binary files a/php-sdl3/modules/sdl3.so and b/php-sdl3/modules/sdl3.so differ diff --git a/php-sdl3/sdl3.c b/php-sdl3/sdl3.c index 861cd99..fd17760 100644 --- a/php-sdl3/sdl3.c +++ b/php-sdl3/sdl3.c @@ -769,6 +769,23 @@ PHP_FUNCTION(sdl_get_window_size_in_pixels) { add_index_long(return_value, 1, h); } +PHP_FUNCTION(sdl_get_window_pixel_density) { + 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; + } + + float density = SDL_GetWindowPixelDensity(win); + RETURN_DOUBLE(density); +} + PHP_FUNCTION(sdl_get_renderer_output_size) { zval *ren_res; SDL_Renderer *ren; @@ -793,6 +810,23 @@ PHP_FUNCTION(sdl_get_renderer_output_size) { add_index_long(return_value, 1, h); } +PHP_FUNCTION(sdl_get_window_display_scale) { + 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; + } + + float scale = SDL_GetWindowDisplayScale(win); + RETURN_DOUBLE(scale); +} + PHP_FUNCTION(sdl_start_text_input) { zval *win_res; SDL_Window *win; @@ -987,6 +1021,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_window_size_in_pixels, 0, 0, 1) ZEND_ARG_INFO(0, window) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_window_pixel_density, 0, 0, 1) + ZEND_ARG_INFO(0, window) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_window_display_scale, 0, 0, 1) + ZEND_ARG_INFO(0, window) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_get_renderer_output_size, 0, 0, 1) ZEND_ARG_INFO(0, renderer) ZEND_END_ARG_INFO() @@ -1030,6 +1072,8 @@ const zend_function_entry sdl3_functions[] = { 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_get_window_size_in_pixels, arginfo_sdl_get_window_size_in_pixels) + PHP_FE(sdl_get_window_pixel_density, arginfo_sdl_get_window_pixel_density) + PHP_FE(sdl_get_window_display_scale, arginfo_sdl_get_window_display_scale) PHP_FE(sdl_get_renderer_output_size, arginfo_sdl_get_renderer_output_size) PHP_FE(sdl_start_text_input, arginfo_sdl_start_text_input) PHP_FE(sdl_stop_text_input, arginfo_sdl_stop_text_input) diff --git a/src/Ui/Window.php b/src/Ui/Window.php index 8caafe4..625cba5 100644 --- a/src/Ui/Window.php +++ b/src/Ui/Window.php @@ -48,7 +48,7 @@ class Window } // Create window with resizable flag for normal window decorations - $flags = SDL_WINDOW_RESIZABLE; + $flags = SDL_WINDOW_HIGH_PIXEL_DENSITY | SDL_WINDOW_RESIZABLE; $this->window = sdl_create_window($title, $width, $height, $flags); if (!$this->window) {