This commit is contained in:
Thomas Peterson 2025-11-20 13:53:13 +01:00
parent c38bffd4f9
commit cb148dfb7c
21 changed files with 430 additions and 226 deletions

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) Thomas Peterson
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -395,6 +395,14 @@ class ServerListTab
$serverListTab->table->setData($serverListTab->currentServerData, false); $serverListTab->table->setData($serverListTab->currentServerData, false);
$serverListTab->statusLabel->setText('Server geladen: ' . $result['count'] . ' gefunden'); $serverListTab->statusLabel->setText('Server geladen: ' . $result['count'] . ' gefunden');
if (function_exists('desktop_notify')) {
desktop_notify(
'Serverliste aktualisiert',
'Es wurden ' . $result['count'] . ' Server geladen.',
['timeout' => 4000, 'urgency' => 'normal'],
);
}
// Danach: pro Server asynchron Docker-Infos und Systemstatus nachladen // Danach: pro Server asynchron Docker-Infos und Systemstatus nachladen
foreach ($serverListTab->currentServerData as $index => $row) { foreach ($serverListTab->currentServerData as $index => $row) {
$ip = $row['ipv4'] ?? ''; $ip = $row['ipv4'] ?? '';
@ -655,8 +663,22 @@ class ServerListTab
if ($result['success']) { if ($result['success']) {
$serverListTab->statusLabel->setText('Reboot ausgelöst für ' . $name); $serverListTab->statusLabel->setText('Reboot ausgelöst für ' . $name);
if (function_exists('desktop_notify')) {
desktop_notify(
'Reboot gestartet',
'Reboot ausgelöst für ' . $name,
['timeout' => 4000, 'urgency' => 'normal'],
);
}
} elseif (isset($result['error'])) { } elseif (isset($result['error'])) {
$serverListTab->statusLabel->setText('Reboot Fehler bei ' . $name . ': ' . $result['error']); $serverListTab->statusLabel->setText('Reboot Fehler bei ' . $name . ': ' . $result['error']);
if (function_exists('desktop_notify')) {
desktop_notify(
'Reboot fehlgeschlagen',
'Fehler bei ' . $name . ': ' . $result['error'],
['timeout' => 6000, 'urgency' => 'critical'],
);
}
} }
}); });
} }
@ -757,8 +779,22 @@ class ServerListTab
if ($result['success']) { if ($result['success']) {
$serverListTab->statusLabel->setText('Updates ausgeführt für ' . $name); $serverListTab->statusLabel->setText('Updates ausgeführt für ' . $name);
if (function_exists('desktop_notify')) {
desktop_notify(
'Update erfolgreich',
'Updates ausgeführt für ' . $name,
['timeout' => 5000, 'urgency' => 'normal'],
);
}
} elseif (isset($result['error'])) { } elseif (isset($result['error'])) {
$serverListTab->statusLabel->setText('Update Fehler bei ' . $name . ': ' . $result['error']); $serverListTab->statusLabel->setText('Update Fehler bei ' . $name . ': ' . $result['error']);
if (function_exists('desktop_notify')) {
desktop_notify(
'Update fehlgeschlagen',
'Fehler bei ' . $name . ': ' . $result['error'],
['timeout' => 6000, 'urgency' => 'critical'],
);
}
} }
}); });
} }

View File

@ -14,7 +14,7 @@ library_names='sdl3.so sdl3.so sdl3.so'
old_library='' old_library=''
# Libraries that this one depends upon. # Libraries that this one depends upon.
dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3_image -lSDL3_ttf -lSDL3' dependency_libs=' -L/usr/local/lib -lSDL3_image -lSDL3_ttf -lSDL3 -lharfbuzz -latomic -lsysprof-capture-4 -lpcre2-8 -lgraphite2 -lfreetype -lbz2 -lpng16 -lm -lz -lbrotlidec -lbrotlicommon -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0'
# Version information for sdl3. # Version information for sdl3.
current=0 current=0

Binary file not shown.

Binary file not shown.

View File

@ -18,7 +18,7 @@ exec_prefix = $(prefix)
libdir = ${exec_prefix}/lib libdir = ${exec_prefix}/lib
phpincludedir = /usr/local/include/php phpincludedir = /usr/local/include/php
CC = cc CC = cc
CFLAGS = -g -O2 -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -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 = -g -O2 -I/usr/local/include -I/usr/local/include -I/usr/local/include -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 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/sysprof-6 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu -I/usr/include/webp -I/usr/include/libmount -I/usr/include/blkid -pthread
CFLAGS_CLEAN = $(CFLAGS) -D_GNU_SOURCE CFLAGS_CLEAN = $(CFLAGS) -D_GNU_SOURCE
CPP = cc -E CPP = cc -E
CPPFLAGS = -DHAVE_CONFIG_H CPPFLAGS = -DHAVE_CONFIG_H
@ -30,7 +30,7 @@ PHP_EXECUTABLE = /usr/local/bin/php
EXTRA_LDFLAGS = EXTRA_LDFLAGS =
EXTRA_LIBS = 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 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 = -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 -L/usr/local/lib -lSDL3_gfx -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 -L/usr/local/lib -lSDL3_image -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 -L/usr/local/lib -lSDL3_ttf -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 LDFLAGS = -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 -pthread -lm -L/usr/local/lib -lSDL3_image -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 -pthread -lm -L/usr/local/lib -lSDL3_ttf -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL3 -pthread -lm -lharfbuzz -pthread -lm -lz -lz -lm -lz -lbrotlicommon -lglib-2.0 -latomic -lm -pthread -lsysprof-capture-4 -pthread -lpcre2-8 -lgraphite2 -lfreetype -lz -lbz2 -lpng16 -lz -lm -lz -lbrotlidec -lbrotlicommon -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
LIBTOOL = $(SHELL) $(top_builddir)/libtool LIBTOOL = $(SHELL) $(top_builddir)/libtool
SHELL = /bin/bash SHELL = /bin/bash
INSTALL_HEADERS = INSTALL_HEADERS =

View File

@ -10,6 +10,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1 #define HAVE_INTTYPES_H 1
/* Enable libnotify for desktop_notify() */
#define HAVE_LIBNOTIFY 1
/* Define to 1 if you have the <stdint.h> header file. */ /* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1 #define HAVE_STDINT_H 1

View File

@ -9,6 +9,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H
/* Enable libnotify for desktop_notify() */
#undef HAVE_LIBNOTIFY
/* Define to 1 if you have the <stdint.h> header file. */ /* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H #undef HAVE_STDINT_H

View File

@ -2,10 +2,6 @@ PHP_ARG_WITH(sdl3, [for sdl3 support], [
AS_HELP_STRING([--with-sdl3[=DIR]], [Enable sdl3 support. DIR is the prefix for SDL3 installation.]) AS_HELP_STRING([--with-sdl3[=DIR]], [Enable sdl3 support. DIR is the prefix for SDL3 installation.])
]) ])
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], [ 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.]) AS_HELP_STRING([--with-sdl3-image[=DIR]], [Enable sdl3_image support. DIR is the prefix for SDL3_image installation.])
]) ])
@ -21,22 +17,19 @@ if test "$PHP_SDL3" != "no"; then
PKG_CHECK_MODULES([SDL3], [sdl3 >= 3.0.0], [ PKG_CHECK_MODULES([SDL3], [sdl3 >= 3.0.0], [
CFLAGS="$CFLAGS $SDL3_CFLAGS" CFLAGS="$CFLAGS $SDL3_CFLAGS"
LDFLAGS="$LDFLAGS $SDL3_LIBS"
],[ ],[
AC_MSG_ERROR([SDL3 not found. Please check your installation or use --with-sdl3=/path/to/sdl3]) AC_MSG_ERROR([SDL3 not found. Please check your installation or use --with-sdl3=/path/to/sdl3])
]) ])
if test "$PHP_SDL3_GFX" != "no"; then dnl Prefer static SDL3 libs if available
if test -d "$PHP_SDL3_GFX"; then AC_MSG_CHECKING([for static SDL3 libs])
PKG_CONFIG_PATH="$PHP_SDL3_GFX/lib/pkgconfig:$PHP_SDL3_GFX/share/pkgconfig:$PKG_CONFIG_PATH" SDL3_STATIC_LIBS=`$PKG_CONFIG --libs --static sdl3 2>/dev/null`
fi if test "x$SDL3_STATIC_LIBS" != "x"; then
AC_MSG_RESULT([$SDL3_STATIC_LIBS])
PKG_CHECK_MODULES([SDL3_GFX], [sdl3-gfx >= 1.0.0], [ LDFLAGS="$LDFLAGS $SDL3_STATIC_LIBS"
CFLAGS="$CFLAGS $SDL3_GFX_CFLAGS" else
LDFLAGS="$LDFLAGS $SDL3_GFX_LIBS" AC_MSG_RESULT([not found, using shared SDL3 libs])
],[ LDFLAGS="$LDFLAGS $SDL3_LIBS"
AC_MSG_ERROR([SDL3_gfx not found. Please check your installation or use --with-sdl3-gfx=/path/to/sdl3_gfx])
])
fi fi
if test "$PHP_SDL3_IMAGE" != "no"; then if test "$PHP_SDL3_IMAGE" != "no"; then
@ -46,10 +39,20 @@ if test "$PHP_SDL3" != "no"; then
PKG_CHECK_MODULES([SDL3_IMAGE], [sdl3-image >= 3.0.0], [ PKG_CHECK_MODULES([SDL3_IMAGE], [sdl3-image >= 3.0.0], [
CFLAGS="$CFLAGS $SDL3_IMAGE_CFLAGS" 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]) AC_MSG_ERROR([SDL3_image not found. Please check your installation or use --with-sdl3-image=/path/to/sdl3_image])
]) ])
dnl Prefer static SDL3_image libs if available
AC_MSG_CHECKING([for static SDL3_image libs])
SDL3_IMAGE_STATIC_LIBS=`$PKG_CONFIG --libs --static sdl3-image 2>/dev/null`
if test "x$SDL3_IMAGE_STATIC_LIBS" != "x"; then
AC_MSG_RESULT([$SDL3_IMAGE_STATIC_LIBS])
LDFLAGS="$LDFLAGS $SDL3_IMAGE_STATIC_LIBS"
else
AC_MSG_RESULT([not found, using shared SDL3_image libs])
LDFLAGS="$LDFLAGS $SDL3_IMAGE_LIBS"
fi
fi fi
if test "$PHP_SDL3_TTF" != "no"; then if test "$PHP_SDL3_TTF" != "no"; then
@ -59,12 +62,31 @@ if test "$PHP_SDL3" != "no"; then
PKG_CHECK_MODULES([SDL3_TTF], [sdl3-ttf >= 3.0.0], [ PKG_CHECK_MODULES([SDL3_TTF], [sdl3-ttf >= 3.0.0], [
CFLAGS="$CFLAGS $SDL3_TTF_CFLAGS" 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]) AC_MSG_ERROR([SDL3_ttf not found. Please check your installation or use --with-sdl3-ttf=/path/to/sdl3_ttf])
]) ])
dnl Prefer static SDL3_ttf libs if available
AC_MSG_CHECKING([for static SDL3_ttf libs])
SDL3_TTF_STATIC_LIBS=`$PKG_CONFIG --libs --static sdl3-ttf 2>/dev/null`
if test "x$SDL3_TTF_STATIC_LIBS" != "x"; then
AC_MSG_RESULT([$SDL3_TTF_STATIC_LIBS])
LDFLAGS="$LDFLAGS $SDL3_TTF_STATIC_LIBS"
else
AC_MSG_RESULT([not found, using shared SDL3_ttf libs])
LDFLAGS="$LDFLAGS $SDL3_TTF_LIBS"
fi
fi fi
dnl Optional libnotify support for desktop notifications
PKG_CHECK_MODULES([LIBNOTIFY], [libnotify], [
AC_DEFINE([HAVE_LIBNOTIFY], [1], [Enable libnotify for desktop_notify()])
CFLAGS="$CFLAGS $LIBNOTIFY_CFLAGS"
LDFLAGS="$LDFLAGS $LIBNOTIFY_LIBS"
], [
AC_MSG_WARN([libnotify not found via pkg-config, desktop_notify() will be disabled])
])
SDL_SOURCE_FILES="sdl3.c helper.c sdl3_image.c sdl3_ttf.c sdl3_events.c" 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) PHP_NEW_EXTENSION(sdl3, $SDL_SOURCE_FILES, $ext_shared)

View File

@ -3,5 +3,7 @@
# Created by configure # Created by configure
'./configure' \ './configure' \
'--enable-sdl3' \ '--with-sdl3' \
'--with-sdl3-image' \
'--with-sdl3-ttf' \
"$@" "$@"

View File

@ -413,7 +413,7 @@ $config_headers
Report bugs to the package provider." Report bugs to the package provider."
ac_cs_config='--enable-sdl3' ac_cs_config='--with-sdl3 --with-sdl3-image --with-sdl3-ttf'
ac_cs_version="\ ac_cs_version="\
config.status config.status
configured by ./configure, generated by GNU Autoconf 2.72, configured by ./configure, generated by GNU Autoconf 2.72,
@ -494,7 +494,7 @@ if $ac_cs_silent; then
fi fi
if $ac_cs_recheck; then if $ac_cs_recheck; then
set X /bin/bash './configure' '--enable-sdl3' $ac_configure_extra_args --no-create --no-recursion set X /bin/bash './configure' '--with-sdl3' '--with-sdl3-image' '--with-sdl3-ttf' $ac_configure_extra_args --no-create --no-recursion
shift shift
\printf "%s\n" "running CONFIG_SHELL=/bin/bash $*" >&6 \printf "%s\n" "running CONFIG_SHELL=/bin/bash $*" >&6
CONFIG_SHELL='/bin/bash' CONFIG_SHELL='/bin/bash'
@ -570,6 +570,7 @@ D["PACKAGE_VERSION"]=" \"\""
D["PACKAGE_STRING"]=" \"\"" D["PACKAGE_STRING"]=" \"\""
D["PACKAGE_BUGREPORT"]=" \"\"" D["PACKAGE_BUGREPORT"]=" \"\""
D["PACKAGE_URL"]=" \"\"" D["PACKAGE_URL"]=" \"\""
D["HAVE_LIBNOTIFY"]=" 1"
D["COMPILE_DL_SDL3"]=" 1" D["COMPILE_DL_SDL3"]=" 1"
D["HAVE_STDIO_H"]=" 1" D["HAVE_STDIO_H"]=" 1"
D["HAVE_STDLIB_H"]=" 1" D["HAVE_STDLIB_H"]=" 1"

321
php-sdl3/configure vendored
View File

@ -802,12 +802,12 @@ RANLIB
AR AR
ECHO ECHO
LN_S LN_S
LIBNOTIFY_LIBS
LIBNOTIFY_CFLAGS
SDL3_TTF_LIBS SDL3_TTF_LIBS
SDL3_TTF_CFLAGS SDL3_TTF_CFLAGS
SDL3_IMAGE_LIBS SDL3_IMAGE_LIBS
SDL3_IMAGE_CFLAGS SDL3_IMAGE_CFLAGS
SDL3_GFX_LIBS
SDL3_GFX_CFLAGS
SDL3_LIBS SDL3_LIBS
SDL3_CFLAGS SDL3_CFLAGS
SHLIB_DL_SUFFIX_NAME SHLIB_DL_SUFFIX_NAME
@ -887,7 +887,6 @@ with_libdir
with_php_config with_php_config
enable_ enable_
with_sdl3 with_sdl3
with_sdl3_gfx
with_sdl3_image with_sdl3_image
with_sdl3_ttf with_sdl3_ttf
enable_shared enable_shared
@ -912,12 +911,12 @@ CPPFLAGS
CPP CPP
SDL3_CFLAGS SDL3_CFLAGS
SDL3_LIBS SDL3_LIBS
SDL3_GFX_CFLAGS
SDL3_GFX_LIBS
SDL3_IMAGE_CFLAGS SDL3_IMAGE_CFLAGS
SDL3_IMAGE_LIBS SDL3_IMAGE_LIBS
SDL3_TTF_CFLAGS SDL3_TTF_CFLAGS
SDL3_TTF_LIBS' SDL3_TTF_LIBS
LIBNOTIFY_CFLAGS
LIBNOTIFY_LIBS'
# Initialize some variables set by options. # Initialize some variables set by options.
@ -1550,10 +1549,6 @@ Extension:
installation. installation.
--with-sdl3-gfx=DIR Enable sdl3_gfx support. DIR is the prefix for
SDL3_gfx installation.
--with-sdl3-image=DIR Enable sdl3_image support. DIR is the prefix for --with-sdl3-image=DIR Enable sdl3_image support. DIR is the prefix for
SDL3_image installation. SDL3_image installation.
@ -1589,10 +1584,6 @@ Some influential environment variables:
CPP C preprocessor CPP C preprocessor
SDL3_CFLAGS C compiler flags for SDL3, overriding pkg-config SDL3_CFLAGS C compiler flags for SDL3, overriding pkg-config
SDL3_LIBS linker flags for SDL3, overriding pkg-config SDL3_LIBS linker flags for SDL3, overriding pkg-config
SDL3_GFX_CFLAGS
C compiler flags for SDL3_GFX, overriding pkg-config
SDL3_GFX_LIBS
linker flags for SDL3_GFX, overriding pkg-config
SDL3_IMAGE_CFLAGS SDL3_IMAGE_CFLAGS
C compiler flags for SDL3_IMAGE, overriding pkg-config C compiler flags for SDL3_IMAGE, overriding pkg-config
SDL3_IMAGE_LIBS SDL3_IMAGE_LIBS
@ -1601,6 +1592,10 @@ Some influential environment variables:
C compiler flags for SDL3_TTF, overriding pkg-config C compiler flags for SDL3_TTF, overriding pkg-config
SDL3_TTF_LIBS SDL3_TTF_LIBS
linker flags for SDL3_TTF, overriding pkg-config linker flags for SDL3_TTF, overriding pkg-config
LIBNOTIFY_CFLAGS
C compiler flags for LIBNOTIFY, overriding pkg-config
LIBNOTIFY_LIBS
linker flags for LIBNOTIFY, overriding pkg-config
Use these variables to override the choices made by 'configure' or to help Use these variables to override the choices made by 'configure' or to help
it to find libraries and programs with nonstandard names/locations. it to find libraries and programs with nonstandard names/locations.
@ -4777,57 +4772,6 @@ printf "%s\n" "$ext_output" >&6; }
php_with_sdl3_gfx=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3_gfx support" >&5
printf %s "checking for sdl3_gfx support... " >&6; }
# Check whether --with-sdl3_gfx was given.
if test ${with_sdl3_gfx+y}
then :
withval=$with_sdl3_gfx; PHP_SDL3_GFX=$withval
else case e in #(
e)
PHP_SDL3_GFX=no
test "$PHP_ENABLE_ALL" && PHP_SDL3_GFX=$PHP_ENABLE_ALL
;;
esac
fi
ext_output="yes, shared"
ext_shared=yes
case $PHP_SDL3_GFX in
shared,*)
PHP_SDL3_GFX=$(echo "$PHP_SDL3_GFX"|$SED 's/^shared,//')
;;
shared)
PHP_SDL3_GFX=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_GFX" = "no" && PHP_SDL3_GFX=yes
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ext_output" >&5
printf "%s\n" "$ext_output" >&6; }
php_with_sdl3_image=no php_with_sdl3_image=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3_image support" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3_image support" >&5
@ -5009,93 +4953,20 @@ else
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
CFLAGS="$CFLAGS $SDL3_CFLAGS" CFLAGS="$CFLAGS $SDL3_CFLAGS"
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static SDL3 libs" >&5
printf %s "checking for static SDL3 libs... " >&6; }
SDL3_STATIC_LIBS=`$PKG_CONFIG --libs --static sdl3 2>/dev/null`
if test "x$SDL3_STATIC_LIBS" != "x"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SDL3_STATIC_LIBS" >&5
printf "%s\n" "$SDL3_STATIC_LIBS" >&6; }
LDFLAGS="$LDFLAGS $SDL3_STATIC_LIBS"
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found, using shared SDL3 libs" >&5
printf "%s\n" "not found, using shared SDL3 libs" >&6; }
LDFLAGS="$LDFLAGS $SDL3_LIBS" LDFLAGS="$LDFLAGS $SDL3_LIBS"
fi
if test "$PHP_SDL3_GFX" != "no"; then
if test -d "$PHP_SDL3_GFX"; then
PKG_CONFIG_PATH="$PHP_SDL3_GFX/lib/pkgconfig:$PHP_SDL3_GFX/share/pkgconfig:$PKG_CONFIG_PATH"
fi
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sdl3-gfx >= 1.0.0" >&5
printf %s "checking for sdl3-gfx >= 1.0.0... " >&6; }
if test -n "$SDL3_GFX_CFLAGS"; then
pkg_cv_SDL3_GFX_CFLAGS="$SDL3_GFX_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-gfx >= 1.0.0\""; } >&5
($PKG_CONFIG --exists --print-errors "sdl3-gfx >= 1.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_GFX_CFLAGS=`$PKG_CONFIG --cflags "sdl3-gfx >= 1.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_GFX_LIBS"; then
pkg_cv_SDL3_GFX_LIBS="$SDL3_GFX_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-gfx >= 1.0.0\""; } >&5
($PKG_CONFIG --exists --print-errors "sdl3-gfx >= 1.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_GFX_LIBS=`$PKG_CONFIG --libs "sdl3-gfx >= 1.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_GFX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl3-gfx >= 1.0.0" 2>&1`
else
SDL3_GFX_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl3-gfx >= 1.0.0" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$SDL3_GFX_PKG_ERRORS" >&5
as_fn_error $? "SDL3_gfx not found. Please check your installation or use --with-sdl3-gfx=/path/to/sdl3_gfx" "$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_gfx not found. Please check your installation or use --with-sdl3-gfx=/path/to/sdl3_gfx" "$LINENO" 5
else
SDL3_GFX_CFLAGS=$pkg_cv_SDL3_GFX_CFLAGS
SDL3_GFX_LIBS=$pkg_cv_SDL3_GFX_LIBS
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
CFLAGS="$CFLAGS $SDL3_GFX_CFLAGS"
LDFLAGS="$LDFLAGS $SDL3_GFX_LIBS"
fi
fi fi
if test "$PHP_SDL3_IMAGE" != "no"; then if test "$PHP_SDL3_IMAGE" != "no"; then
@ -5178,9 +5049,21 @@ else
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
CFLAGS="$CFLAGS $SDL3_IMAGE_CFLAGS" CFLAGS="$CFLAGS $SDL3_IMAGE_CFLAGS"
LDFLAGS="$LDFLAGS $SDL3_IMAGE_LIBS"
fi fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static SDL3_image libs" >&5
printf %s "checking for static SDL3_image libs... " >&6; }
SDL3_IMAGE_STATIC_LIBS=`$PKG_CONFIG --libs --static sdl3-image 2>/dev/null`
if test "x$SDL3_IMAGE_STATIC_LIBS" != "x"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SDL3_IMAGE_STATIC_LIBS" >&5
printf "%s\n" "$SDL3_IMAGE_STATIC_LIBS" >&6; }
LDFLAGS="$LDFLAGS $SDL3_IMAGE_STATIC_LIBS"
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found, using shared SDL3_image libs" >&5
printf "%s\n" "not found, using shared SDL3_image libs" >&6; }
LDFLAGS="$LDFLAGS $SDL3_IMAGE_LIBS"
fi
fi fi
if test "$PHP_SDL3_TTF" != "no"; then if test "$PHP_SDL3_TTF" != "no"; then
@ -5263,11 +5146,107 @@ else
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
CFLAGS="$CFLAGS $SDL3_TTF_CFLAGS" CFLAGS="$CFLAGS $SDL3_TTF_CFLAGS"
LDFLAGS="$LDFLAGS $SDL3_TTF_LIBS"
fi fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static SDL3_ttf libs" >&5
printf %s "checking for static SDL3_ttf libs... " >&6; }
SDL3_TTF_STATIC_LIBS=`$PKG_CONFIG --libs --static sdl3-ttf 2>/dev/null`
if test "x$SDL3_TTF_STATIC_LIBS" != "x"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SDL3_TTF_STATIC_LIBS" >&5
printf "%s\n" "$SDL3_TTF_STATIC_LIBS" >&6; }
LDFLAGS="$LDFLAGS $SDL3_TTF_STATIC_LIBS"
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found, using shared SDL3_ttf libs" >&5
printf "%s\n" "not found, using shared SDL3_ttf libs" >&6; }
LDFLAGS="$LDFLAGS $SDL3_TTF_LIBS"
fi
fi fi
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libnotify" >&5
printf %s "checking for libnotify... " >&6; }
if test -n "$LIBNOTIFY_CFLAGS"; then
pkg_cv_LIBNOTIFY_CFLAGS="$LIBNOTIFY_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 \"libnotify\""; } >&5
($PKG_CONFIG --exists --print-errors "libnotify") 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_LIBNOTIFY_CFLAGS=`$PKG_CONFIG --cflags "libnotify" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test -n "$LIBNOTIFY_LIBS"; then
pkg_cv_LIBNOTIFY_LIBS="$LIBNOTIFY_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 \"libnotify\""; } >&5
($PKG_CONFIG --exists --print-errors "libnotify") 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_LIBNOTIFY_LIBS=`$PKG_CONFIG --libs "libnotify" 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
LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify" 2>&1`
else
LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$LIBNOTIFY_PKG_ERRORS" >&5
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libnotify not found via pkg-config, desktop_notify() will be disabled" >&5
printf "%s\n" "$as_me: WARNING: libnotify not found via pkg-config, desktop_notify() will be disabled" >&2;}
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libnotify not found via pkg-config, desktop_notify() will be disabled" >&5
printf "%s\n" "$as_me: WARNING: libnotify not found via pkg-config, desktop_notify() will be disabled" >&2;}
else
LIBNOTIFY_CFLAGS=$pkg_cv_LIBNOTIFY_CFLAGS
LIBNOTIFY_LIBS=$pkg_cv_LIBNOTIFY_LIBS
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_LIBNOTIFY 1" >>confdefs.h
CFLAGS="$CFLAGS $LIBNOTIFY_CFLAGS"
LDFLAGS="$LDFLAGS $LIBNOTIFY_LIBS"
fi
SDL_SOURCE_FILES="sdl3.c helper.c sdl3_image.c sdl3_ttf.c sdl3_events.c" SDL_SOURCE_FILES="sdl3.c helper.c sdl3_image.c sdl3_ttf.c sdl3_events.c"
@ -6123,7 +6102,7 @@ ia64-*-hpux*)
;; ;;
*-*-irix6*) *-*-irix6*)
# Find out which ABI we are using. # Find out which ABI we are using.
echo '#line 6126 "configure"' > conftest.$ac_ext echo '#line 6105 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5 (eval $ac_compile) 2>&5
ac_status=$? ac_status=$?
@ -7502,7 +7481,7 @@ else case e in #(
LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 7505 "configure" #line 7484 "configure"
#include "confdefs.h" #include "confdefs.h"
int main(void) { int main(void) {
; return 0; } ; return 0; }
@ -7664,11 +7643,11 @@ else case e in #(
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"configure:7667: $lt_compile\"" >&5) (eval echo "\"configure:7646: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err) (eval "$lt_compile" 2>conftest.err)
ac_status=$? ac_status=$?
cat conftest.err >&5 cat conftest.err >&5
echo "configure:7671: \$? = $ac_status" >&5 echo "configure:7650: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output. # So say no if there are warnings other than the usual output.
@ -7964,11 +7943,11 @@ else case e in #(
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"configure:7967: $lt_compile\"" >&5) (eval echo "\"configure:7946: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err) (eval "$lt_compile" 2>conftest.err)
ac_status=$? ac_status=$?
cat conftest.err >&5 cat conftest.err >&5
echo "configure:7971: \$? = $ac_status" >&5 echo "configure:7950: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output. # So say no if there are warnings other than the usual output.
@ -8072,11 +8051,11 @@ else case e in #(
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"configure:8075: $lt_compile\"" >&5) (eval echo "\"configure:8054: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err) (eval "$lt_compile" 2>out/conftest.err)
ac_status=$? ac_status=$?
cat out/conftest.err >&5 cat out/conftest.err >&5
echo "configure:8079: \$? = $ac_status" >&5 echo "configure:8058: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext if (exit $ac_status) && test -s out/conftest2.$ac_objext
then then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
@ -8537,7 +8516,7 @@ _LT_EOF
# Determine the default libpath from the value encoded in an empty executable. # Determine the default libpath from the value encoded in an empty executable.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 8540 "configure" #line 8519 "configure"
#include "confdefs.h" #include "confdefs.h"
int main(void) { int main(void) {
; return 0; } ; return 0; }
@ -8579,7 +8558,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# Determine the default libpath from the value encoded in an empty executable. # Determine the default libpath from the value encoded in an empty executable.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 8582 "configure" #line 8561 "configure"
#include "confdefs.h" #include "confdefs.h"
int main(void) { int main(void) {
; return 0; } ; return 0; }
@ -10160,7 +10139,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 10163 "configure" #line 10142 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
@ -10259,7 +10238,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 10262 "configure" #line 10241 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
@ -11328,7 +11307,7 @@ case $host_os in
# Determine the default libpath from the value encoded in an empty executable. # Determine the default libpath from the value encoded in an empty executable.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 11331 "configure" #line 11310 "configure"
#include "confdefs.h" #include "confdefs.h"
int main(void) { int main(void) {
; return 0; } ; return 0; }
@ -11371,7 +11350,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# Determine the default libpath from the value encoded in an empty executable. # Determine the default libpath from the value encoded in an empty executable.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 11374 "configure" #line 11353 "configure"
#include "confdefs.h" #include "confdefs.h"
int main(void) { int main(void) {
; return 0; } ; return 0; }
@ -12624,11 +12603,11 @@ else case e in #(
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"configure:12627: $lt_compile\"" >&5) (eval echo "\"configure:12606: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err) (eval "$lt_compile" 2>conftest.err)
ac_status=$? ac_status=$?
cat conftest.err >&5 cat conftest.err >&5
echo "configure:12631: \$? = $ac_status" >&5 echo "configure:12610: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output. # So say no if there are warnings other than the usual output.
@ -12732,11 +12711,11 @@ else case e in #(
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"configure:12735: $lt_compile\"" >&5) (eval echo "\"configure:12714: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err) (eval "$lt_compile" 2>out/conftest.err)
ac_status=$? ac_status=$?
cat out/conftest.err >&5 cat out/conftest.err >&5
echo "configure:12739: \$? = $ac_status" >&5 echo "configure:12718: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext if (exit $ac_status) && test -s out/conftest2.$ac_objext
then then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized

View File

@ -2,7 +2,6 @@
#define PHP_SDL3_HELPER #define PHP_SDL3_HELPER
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#include <SDL3_gfx/SDL3_gfxPrimitives.h>
#include "math.h" #include "math.h"
// Zeichnet einen gefüllten Viertel-Kreis mit Anti-Aliasing (filled quarter circle). // Zeichnet einen gefüllten Viertel-Kreis mit Anti-Aliasing (filled quarter circle).

View File

@ -85,7 +85,7 @@ AR_FLAGS="cru"
LTCC="cc" LTCC="cc"
# LTCC compiler flags. # LTCC compiler flags.
LTCFLAGS="-g -O2 -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -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 " LTCFLAGS="-g -O2 -I/usr/local/include -I/usr/local/include -I/usr/local/include -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 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/sysprof-6 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu -I/usr/include/webp -I/usr/include/libmount -I/usr/include/blkid -pthread "
# A language-specific compiler. # A language-specific compiler.
CC="cc" CC="cc"

View File

@ -14,7 +14,7 @@ library_names='sdl3.so sdl3.so sdl3.so'
old_library='' old_library=''
# Libraries that this one depends upon. # Libraries that this one depends upon.
dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3_image -lSDL3_ttf -lSDL3' dependency_libs=' -L/usr/local/lib -lSDL3_image -lSDL3_ttf -lSDL3 -lharfbuzz -latomic -lsysprof-capture-4 -lpcre2-8 -lgraphite2 -lfreetype -lbz2 -lpng16 -lm -lz -lbrotlidec -lbrotlicommon -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0'
# Version information for sdl3. # Version information for sdl3.
current=0 current=0

Binary file not shown.

View File

@ -10,9 +10,12 @@
#include "sdl3_ttf.h" #include "sdl3_ttf.h"
#include "sdl3_events.h" #include "sdl3_events.h"
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#include <SDL3_gfx/SDL3_gfxPrimitives.h>
#include <math.h> #include <math.h>
#ifdef HAVE_LIBNOTIFY
#include <libnotify/notify.h>
#endif
// Resource handles (nicht static, damit sie in anderen Modulen verfügbar sind) // Resource handles (nicht static, damit sie in anderen Modulen verfügbar sind)
int le_sdl_window; int le_sdl_window;
int le_sdl_renderer; int le_sdl_renderer;
@ -526,6 +529,68 @@ PHP_FUNCTION(sdl_set_texture_alpha_mod) {
RETURN_TRUE; RETURN_TRUE;
} }
PHP_FUNCTION(desktop_notify)
{
char *title, *body;
size_t title_len, body_len;
zval *options = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|a", &title, &title_len, &body, &body_len, &options) == FAILURE) {
RETURN_THROWS();
}
#ifdef HAVE_LIBNOTIFY
if (!notify_is_initted()) {
if (!notify_init("PHPNative")) {
php_error_docref(NULL, E_WARNING, "Failed to initialize libnotify");
RETURN_FALSE;
}
}
NotifyNotification *n = notify_notification_new(title, body, NULL);
if (!n) {
php_error_docref(NULL, E_WARNING, "Failed to create notification");
RETURN_FALSE;
}
if (options && Z_TYPE_P(options) == IS_ARRAY) {
zval *timeout = zend_hash_str_find(Z_ARRVAL_P(options), "timeout", sizeof("timeout") - 1);
if (timeout && Z_TYPE_P(timeout) == IS_LONG) {
notify_notification_set_timeout(n, (int) Z_LVAL_P(timeout));
}
zval *urgency = zend_hash_str_find(Z_ARRVAL_P(options), "urgency", sizeof("urgency") - 1);
if (urgency && Z_TYPE_P(urgency) == IS_STRING) {
const char *u = Z_STRVAL_P(urgency);
if (strcmp(u, "low") == 0) {
notify_notification_set_urgency(n, NOTIFY_URGENCY_LOW);
} else if (strcmp(u, "critical") == 0) {
notify_notification_set_urgency(n, NOTIFY_URGENCY_CRITICAL);
} else {
notify_notification_set_urgency(n, NOTIFY_URGENCY_NORMAL);
}
}
}
GError *error = NULL;
gboolean res = notify_notification_show(n, &error);
if (!res) {
if (error) {
php_error_docref(NULL, E_WARNING, "Notification error: %s", error->message);
g_error_free(error);
}
g_object_unref(G_OBJECT(n));
RETURN_FALSE;
}
g_object_unref(G_OBJECT(n));
RETURN_TRUE;
#else
php_error_docref(NULL, E_WARNING, "desktop_notify() not available (libnotify not found at build time)");
RETURN_FALSE;
#endif
}
PHP_FUNCTION(sdl_create_box_shadow_texture) { PHP_FUNCTION(sdl_create_box_shadow_texture) {
zval *ren_res; zval *ren_res;
SDL_Renderer *renderer; SDL_Renderer *renderer;
@ -743,10 +808,46 @@ PHP_FUNCTION(sdl_rounded_box)
RETURN_FALSE; RETURN_FALSE;
} }
if (roundedBoxRGBA(ren, (Sint16)x1, (Sint16)y1, (Sint16)x2, (Sint16)y2, (Sint16)rad, (Uint8)r, (Uint8)g, (Uint8)b, (Uint8)a) == 0) { // Zeichne eine Box mit gleichen Radien an allen Ecken (Wrapper um die erweiterte Variante)
RETURN_TRUE; SDL_SetRenderDrawColor(ren, (Uint8)r, (Uint8)g, (Uint8)b, (Uint8)a);
}
RETURN_FALSE; int halfw = ((Sint16)x2 - (Sint16)x1) / 2;
int halfh = ((Sint16)y2 - (Sint16)y1) / 2;
int rad_tl = (int)rad;
int rad_tr = (int)rad;
int rad_br = (int)rad;
int rad_bl = (int)rad;
if (rad_tl > halfw) rad_tl = halfw; if (rad_tl > halfh) rad_tl = halfh;
if (rad_tr > halfw) rad_tr = halfw; if (rad_tr > halfh) rad_tr = halfh;
if (rad_br > halfw) rad_br = halfw; if (rad_br > halfh) rad_br = halfh;
if (rad_bl > halfw) rad_bl = halfw; if (rad_bl > halfh) rad_bl = halfh;
SDL_FRect topRect = { x1 + rad_tl, y1, x2 - x1 - rad_tl - rad_tr, rad_tl > rad_tr ? rad_tl : rad_tr };
if (topRect.w > 0 && topRect.h > 0) SDL_RenderFillRect(ren, &topRect);
int maxBottomRad = rad_bl > rad_br ? rad_bl : rad_br;
SDL_FRect bottomRect = { x1 + rad_bl, y2 - maxBottomRad, x2 - x1 - rad_bl - rad_br, maxBottomRad };
if (bottomRect.w > 0 && bottomRect.h > 0) SDL_RenderFillRect(ren, &bottomRect);
SDL_FRect leftRect = { x1, y1 + rad_tl, rad_tl > rad_bl ? rad_tl : rad_bl, y2 - y1 - rad_tl - rad_bl };
if (leftRect.w > 0 && leftRect.h > 0) SDL_RenderFillRect(ren, &leftRect);
int maxRightRad = rad_tr > rad_br ? rad_tr : rad_br;
SDL_FRect rightRect = { x2 - maxRightRad, y1 + rad_tr, maxRightRad, y2 - y1 - rad_tr - rad_br };
if (rightRect.w > 0 && rightRect.h > 0) SDL_RenderFillRect(ren, &rightRect);
int maxLeftRad = rad_tl > rad_bl ? rad_tl : rad_bl;
maxRightRad = rad_tr > rad_br ? rad_tr : rad_br;
SDL_FRect centerRect = { x1 + maxLeftRad, y1, x2 - x1 - maxLeftRad - maxRightRad, y2 - y1 };
if (centerRect.w > 0 && centerRect.h > 0) SDL_RenderFillRect(ren, &centerRect);
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 - 1, y1 + rad_tr, rad_tr, 1);
if (rad_br > 0) filled_quarter_circle(ren, x2 - rad_br - 1, y2 - rad_br - 1, rad_br, 2);
if (rad_bl > 0) filled_quarter_circle(ren, x1 + rad_bl, y2 - rad_bl - 1, rad_bl, 3);
RETURN_TRUE;
} }
#include <math.h> #include <math.h>
@ -1141,6 +1242,11 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_set_texture_alpha_mod, 0, 0, 2)
ZEND_ARG_INFO(0, alpha) ZEND_ARG_INFO(0, alpha)
ZEND_END_ARG_INFO() ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_desktop_notify, 0, 0, 2)
ZEND_ARG_INFO(0, title)
ZEND_ARG_INFO(0, body)
ZEND_ARG_ARRAY_INFO(0, options, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_create_box_shadow_texture, 0, 0, 8) ZEND_BEGIN_ARG_INFO_EX(arginfo_sdl_create_box_shadow_texture, 0, 0, 8)
ZEND_ARG_INFO(0, renderer) ZEND_ARG_INFO(0, renderer)
ZEND_ARG_INFO(0, width) ZEND_ARG_INFO(0, width)
@ -1259,6 +1365,7 @@ const zend_function_entry sdl3_functions[] = {
PHP_FE(sdl_update_texture, arginfo_sdl_update_texture) PHP_FE(sdl_update_texture, arginfo_sdl_update_texture)
PHP_FE(sdl_set_texture_blend_mode, arginfo_sdl_set_texture_blend_mode) PHP_FE(sdl_set_texture_blend_mode, arginfo_sdl_set_texture_blend_mode)
PHP_FE(sdl_set_texture_alpha_mod, arginfo_sdl_set_texture_alpha_mod) PHP_FE(sdl_set_texture_alpha_mod, arginfo_sdl_set_texture_alpha_mod)
PHP_FE(desktop_notify, arginfo_desktop_notify)
PHP_FE(sdl_create_box_shadow_texture, arginfo_sdl_create_box_shadow_texture) PHP_FE(sdl_create_box_shadow_texture, arginfo_sdl_create_box_shadow_texture)
PHP_FE(sdl_get_render_target, arginfo_sdl_get_render_target) PHP_FE(sdl_get_render_target, arginfo_sdl_get_render_target)
PHP_FE(sdl_set_render_target, arginfo_sdl_set_render_target) PHP_FE(sdl_set_render_target, arginfo_sdl_set_render_target)

View File

@ -14,7 +14,7 @@ library_names='sdl3.so sdl3.so sdl3.so'
old_library='' old_library=''
# Libraries that this one depends upon. # Libraries that this one depends upon.
dependency_libs=' -L/usr/local/lib -lSDL3_gfx -lSDL3_image -lSDL3_ttf -lSDL3' dependency_libs=' -L/usr/local/lib -lSDL3_image -lSDL3_ttf -lSDL3 -lharfbuzz -latomic -lsysprof-capture-4 -lpcre2-8 -lgraphite2 -lfreetype -lbz2 -lpng16 -lm -lz -lbrotlidec -lbrotlicommon -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0'
# Version information for sdl3. # Version information for sdl3.
current=0 current=0

View File

@ -36,20 +36,29 @@ class StyleCollection extends TypedCollection
$tmp = []; $tmp = [];
foreach($styles as $style) { foreach($styles as $style) {
if(isset($tmp[$style->style::class]) && $style->style::class === Padding::class) { $className = $style->style::class;
\PHPNative\Tailwind\Parser\Padding::merge($tmp[$style->style::class], $style->style);
}elseif(isset($tmp[$style->style::class]) && $style->style::class === Margin::class) { // Ensure we always work on cloned styles in the merged result
\PHPNative\Tailwind\Parser\Margin::merge($tmp[$style->style::class], $style->style); if (!isset($tmp[$className])) {
}elseif(isset($tmp[$style->style::class]) && $style->style::class === Border::class) { $tmp[$className] = clone $style->style;
\PHPNative\Tailwind\Parser\Border::merge($tmp[$style->style::class], $style->style); continue;
}elseif(isset($tmp[$style->style::class]) && $style->style::class === Text::class) { }
\PHPNative\Tailwind\Parser\Text::merge($tmp[$style->style::class], $style->style);
}elseif(isset($tmp[$style->style::class]) && $style->style::class === Flex::class) { if ($className === Padding::class) {
\PHPNative\Tailwind\Parser\Flex::merge($tmp[$style->style::class], $style->style); \PHPNative\Tailwind\Parser\Padding::merge($tmp[$className], $style->style);
}elseif(isset($tmp[$style->style::class]) && $style->style::class === \PHPNative\Tailwind\Style\Shadow::class) { } elseif ($className === Margin::class) {
\PHPNative\Tailwind\Parser\Shadow::merge($tmp[$style->style::class], $style->style); \PHPNative\Tailwind\Parser\Margin::merge($tmp[$className], $style->style);
}else{ } elseif ($className === Border::class) {
$tmp[$style->style::class] = $style->style; \PHPNative\Tailwind\Parser\Border::merge($tmp[$className], $style->style);
} elseif ($className === Text::class) {
\PHPNative\Tailwind\Parser\Text::merge($tmp[$className], $style->style);
} elseif ($className === Flex::class) {
\PHPNative\Tailwind\Parser\Flex::merge($tmp[$className], $style->style);
} elseif ($className === \PHPNative\Tailwind\Style\Shadow::class) {
\PHPNative\Tailwind\Parser\Shadow::merge($tmp[$className], $style->style);
} else {
// Default: overwrite with cloned instance
$tmp[$className] = clone $style->style;
} }
} }

View File

@ -11,4 +11,9 @@ class Shadow implements Style
public Color $color = new Color(), public Color $color = new Color(),
public ?int $opacity = null, // 0-100, null means use default public ?int $opacity = null, // 0-100, null means use default
) {} ) {}
public function __clone()
{
$this->color = clone $this->color;
}
} }

View File

@ -37,8 +37,10 @@ abstract class Component
protected bool $useTextureCache = false; protected bool $useTextureCache = false;
protected bool $textureCacheValid = false; protected bool $textureCacheValid = false;
protected $cachedShadowTexture = null; // Cached shadow texture protected $cachedShadowTexture = null; // Cached shadow texture (normal state)
protected $cachedShadowHoverTexture = null; // Cached shadow texture (hover state)
protected bool $shadowCacheValid = false; protected bool $shadowCacheValid = false;
protected bool $shadowHoverCacheValid = false;
protected Viewport $viewport; protected Viewport $viewport;
@ -191,8 +193,13 @@ abstract class Component
sdl_destroy_texture($this->cachedShadowTexture); sdl_destroy_texture($this->cachedShadowTexture);
$this->cachedShadowTexture = null; $this->cachedShadowTexture = null;
} }
if ($this->cachedShadowHoverTexture !== null) {
sdl_destroy_texture($this->cachedShadowHoverTexture);
$this->cachedShadowHoverTexture = null;
}
$this->textureCacheValid = false; $this->textureCacheValid = false;
$this->shadowCacheValid = false; $this->shadowCacheValid = false;
$this->shadowHoverCacheValid = false;
$this->renderDirty = true; $this->renderDirty = true;
} }
@ -1020,11 +1027,15 @@ abstract class Component
$g = $shadow->color->green >= 0 ? $shadow->color->green : 0; $g = $shadow->color->green >= 0 ? $shadow->color->green : 0;
$b = $shadow->color->blue >= 0 ? $shadow->color->blue : 0; $b = $shadow->color->blue >= 0 ? $shadow->color->blue : 0;
// Use cached shadow texture if available and valid // Choose cache based on current state (normal vs hover)
if ($this->shadowCacheValid && $this->cachedShadowTexture !== null) { $isHover = $this->currentState === \PHPNative\Tailwind\Style\StateEnum::hover;
$shadowTexture = $this->cachedShadowTexture; $cacheTexture = $isHover ? $this->cachedShadowHoverTexture : $this->cachedShadowTexture;
$cacheValid = $isHover ? $this->shadowHoverCacheValid : $this->shadowCacheValid;
if ($cacheValid && $cacheTexture !== null) {
$shadowTexture = $cacheTexture;
} else { } else {
// Create shadow texture with blur // Create shadow texture with blur based on current state's styles
$shadowTexture = $this->createShadowTexture( $shadowTexture = $this->createShadowTexture(
$renderer, $renderer,
(int) $this->viewport->width, (int) $this->viewport->width,
@ -1040,9 +1051,14 @@ abstract class Component
return; return;
} }
// Cache the shadow texture // Cache per state
$this->cachedShadowTexture = $shadowTexture; if ($isHover) {
$this->shadowCacheValid = true; $this->cachedShadowHoverTexture = $shadowTexture;
$this->shadowHoverCacheValid = true;
} else {
$this->cachedShadowTexture = $shadowTexture;
$this->shadowCacheValid = true;
}
} }
// Render shadow texture with offset // Render shadow texture with offset