diff --git a/.github/workflows/scripts/common/qtapng-cmake.patch b/.github/workflows/scripts/common/qtapng-cmake.patch new file mode 100644 index 0000000000..d47ce008bc --- /dev/null +++ b/.github/workflows/scripts/common/qtapng-cmake.patch @@ -0,0 +1,60 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index bace076..bfb1c66 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -21,6 +21,10 @@ endif () + + find_package(Qt${APNG_QT_VERSION} REQUIRED COMPONENTS Core Gui) + ++set(CMAKE_FIND_FRAMEWORK NEVER) ++find_package(PNG 1.6.40 REQUIRED) ++find_package(ZLIB REQUIRED) ++ + add_subdirectory(src) + + if(APNG_TESTS) +diff --git a/cmake/FindZLib.cmake b/cmake/FindZLib.cmake +deleted file mode 100644 +index f8e9220..0000000 +--- a/cmake/FindZLib.cmake ++++ /dev/null +@@ -1 +0,0 @@ +-add_library(ZLIB::ZLIB ALIAS zlibstatic) # use our zlib +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 697df95..0e89371 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -1,2 +1 @@ +-add_subdirectory(3rdparty EXCLUDE_FROM_ALL) + add_subdirectory(plugins) +diff --git a/src/plugins/imageformats/apng/CMakeLists.txt b/src/plugins/imageformats/apng/CMakeLists.txt +index e1b3fd9..72164fb 100644 +--- a/src/plugins/imageformats/apng/CMakeLists.txt ++++ b/src/plugins/imageformats/apng/CMakeLists.txt +@@ -14,13 +14,10 @@ target_sources(ApngImagePlugin PRIVATE ${APNG_SOURCES}) + target_link_libraries(ApngImagePlugin PRIVATE + Qt${APNG_QT_VERSION}::Core + Qt${APNG_QT_VERSION}::Gui +- png_static +- zlibstatic ++ PNG::PNG ++ ZLIB::ZLIB + ) + +-get_target_property(_png_include png_static INCLUDE_DIRECTORIES) +-target_include_directories(ApngImagePlugin PRIVATE ${_png_include}) +- + target_compile_definitions(ApngImagePlugin PRIVATE + QT_DEPRECATED_WARNINGS + QT_ASCII_CAST_WARNINGS +@@ -31,3 +28,10 @@ set_target_properties(ApngImagePlugin PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins/imageformats" + LIBRARY_OUTPUT_NAME qapng + ) ++ ++install(TARGETS ApngImagePlugin DESTINATION "plugins/imageformats") ++ ++if(WIN32 AND MSVC) ++ set_target_properties(ApngImagePlugin PROPERTIES DEBUG_POSTFIX d) ++ install(FILES $ DESTINATION "plugins/imageformats" OPTIONAL) ++endif() diff --git a/.github/workflows/scripts/linux/build-dependencies-qt.sh b/.github/workflows/scripts/linux/build-dependencies-qt.sh index e8b7ab5be1..df045f4602 100755 --- a/.github/workflows/scripts/linux/build-dependencies-qt.sh +++ b/.github/workflows/scripts/linux/build-dependencies-qt.sh @@ -22,6 +22,7 @@ LIBPNG=1.6.50 LIBWEBP=1.6.0 SDL=SDL3-3.2.22 QT=6.9.2 +QTAPNG=1.3.0 LZ4=1.10.0 ZSTD=1.5.7 KDDOCKWIDGETS=2.2.3 @@ -44,6 +45,7 @@ aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c libjpeg-turbo- 4df396518620a7aa3651443e87d1b2862e4e88cad135a8b93423e01706232307 libpng-$LIBPNG.tar.xz e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWEBP.tar.gz f29d00cbcee273c0a54f3f32f86bf5c595e8823a96b1d92a145aac40571ebfcc $SDL.tar.gz +687ddc0c7cb128a3ea58e159b5129252537c27ede0c32a93f11f03127f0c0165 libpng-$LIBPNG-apng.patch.gz 537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b lz4-$LZ4.tar.gz eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 zstd-$ZSTD.tar.gz 44be9c9ecfe04129c4dea0a7e1b36ad476c9cc07c292016ac98e7b41514f2440 qtbase-everywhere-src-$QT.tar.xz @@ -52,6 +54,7 @@ d984cab8f26334aa1c15e5b8f0cd9f1b7c0c1289fe0b68c1c84ab469b75605a5 qtsvg-everywhe d8b7f7e8e970cc0b975205fd6d5832ea917ef3e751df69b97439c1cddd67a489 qttools-everywhere-src-$QT.tar.xz c73bb6281ed365c0f954f4b1b6e1b13e1b3fefd94854f46fcd9a412f641f7ed6 qttranslations-everywhere-src-$QT.tar.xz cad79806565568f12f9983fed69219416abcee9d5deef4abdfcf94aa2eef7781 qtwayland-everywhere-src-$QT.tar.xz +f1d3be3489f758efe1a8f12118a212febbe611aa670af32e0159fa3c1feab2a6 QtApng-$QTAPNG.tar.gz a8e4a25e5c2686fd36981e527ed05e451fcfc226bddf350f4e76181371190937 shaderc-$SHADERC.tar.gz 9427deccbdf4bde6a269938df38c6bd75247493786a310d8d733a2c82065ef47 shaderc-glslang-$SHADERC_GLSLANG.tar.gz c2225a49c3d7efa5c4f4ce4a6b42081e6ea3daca376f3353d9d7c2722d77a28a shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz @@ -67,6 +70,7 @@ curl -L \ -O "https://github.com/ianlancetaylor/libbacktrace/archive/$LIBBACKTRACE.zip" \ -O "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$LIBJPEGTURBO/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" \ -O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.xz" \ + -O "https://download.sourceforge.net/libpng-apng/libpng-$LIBPNG-apng.patch.gz" \ -O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \ -O "https://github.com/lz4/lz4/releases/download/v$LZ4/lz4-$LZ4.tar.gz" \ -O "https://libsdl.org/release/$SDL.tar.gz" \ @@ -77,6 +81,7 @@ curl -L \ -O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttools-everywhere-src-$QT.tar.xz" \ -O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qttranslations-everywhere-src-$QT.tar.xz" \ -O "https://download.qt.io/official_releases/qt/${QT%.*}/$QT/submodules/qtwayland-everywhere-src-$QT.tar.xz" \ + -o "QtApng-$QTAPNG.tar.gz" "https://github.com/jurplel/QtApng/archive/refs/tags/$QTAPNG.tar.gz" \ -o "shaderc-$SHADERC.tar.gz" "https://github.com/google/shaderc/archive/refs/tags/v$SHADERC.tar.gz" \ -o "shaderc-glslang-$SHADERC_GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG.tar.gz" \ -o "shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS.tar.gz" \ @@ -99,7 +104,9 @@ cd .. echo "Building libpng..." rm -fr "libpng-$LIBPNG" tar xf "libpng-$LIBPNG.tar.xz" +gunzip -d -f "libpng-$LIBPNG-apng.patch.gz" cd "libpng-$LIBPNG" +patch -p1 < "../libpng-$LIBPNG-apng.patch" cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja cmake --build build --parallel ninja -C build install @@ -250,6 +257,16 @@ cmake --build . --parallel ninja install cd ../../ +echo "Building Qt APNG..." +rm -fr "QtApng-$QTAPNG" +tar xf "QtApng-$QTAPNG.tar.gz" +cd "QtApng-$QTAPNG" +patch -p1 < "$SCRIPTDIR/../common/qtapng-cmake.patch" +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -B build -G Ninja +cmake --build build --parallel +ninja -C build install +cd .. + echo "Building KDDockWidgets..." rm -fr "KDDockWidgets-$KDDOCKWIDGETS" tar xf "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" diff --git a/.github/workflows/scripts/linux/flatpak/modules/26-libpng.json b/.github/workflows/scripts/linux/flatpak/modules/26-libpng.json new file mode 100644 index 0000000000..97c47da265 --- /dev/null +++ b/.github/workflows/scripts/linux/flatpak/modules/26-libpng.json @@ -0,0 +1,46 @@ +{ + "name": "libpng", + "buildsystem": "cmake-ninja", + "builddir": true, + "config-opts": [ + "-DPNG_TESTS=OFF", + "-DPNG_STATIC=OFF", + "-DPNG_SHARED=ON", + "-DPNG_TOOLS=OFF" + ], + "build-options": { + "strip": true + }, + "sources": [ + { + "type": "archive", + "url": "https://downloads.sourceforge.net/project/libpng/libpng16/1.6.50/libpng-1.6.50.tar.xz", + "sha256": "4df396518620a7aa3651443e87d1b2862e4e88cad135a8b93423e01706232307" + }, + { + "type": "file", + "url": "https://download.sourceforge.net/libpng-apng/libpng-1.6.50-apng.patch.gz", + "dest-filename": "libpng-1.6.50-apng.patch.gz", + "sha256": "687ddc0c7cb128a3ea58e159b5129252537c27ede0c32a93f11f03127f0c0165" + }, + { + "type": "shell", + "commands": + [ + "gunzip -f libpng-1.6.50-apng.patch.gz", + "patch -p1 < \"libpng-1.6.50-apng.patch\"" + ] + } + ], + "cleanup": [ + "/bin", + "/include", + "/lib/*.a", + "/lib/*.la", + "/lib/cmake", + "/lib/libpng", + "/lib/pkgconfig", + "/share/man" + ] +} + diff --git a/.github/workflows/scripts/linux/flatpak/modules/27-qtapng.json b/.github/workflows/scripts/linux/flatpak/modules/27-qtapng.json new file mode 100644 index 0000000000..ff23d55c5d --- /dev/null +++ b/.github/workflows/scripts/linux/flatpak/modules/27-qtapng.json @@ -0,0 +1,29 @@ +{ + "name": "qtapng", + "buildsystem": "cmake-ninja", + "builddir": true, + "config-opts": [ + "-DCMAKE_PREFIX_PATH=\"${FLATPAK_DEST}\"" + ], + "build-options": { + "strip": true + }, + "sources": [ + { + "type": "git", + "url": "https://github.com/jurplel/QtApng.git", + "tag": "1.3.0", + "commit": "bd15516b281204e90ecd5b80b00d1274b062f5fc" + }, + { + "type": "patch", + "path": "../../../common/qtapng-cmake.patch" + } + ], + "cleanup": [ + "/plugins" + ], + "post-install": [ + "mv ${FLATPAK_DEST}/plugins/* ${FLATPAK_DEST}/bin/" + ] +} diff --git a/.github/workflows/scripts/linux/flatpak/net.pcsx2.PCSX2.json b/.github/workflows/scripts/linux/flatpak/net.pcsx2.PCSX2.json index 1971394a35..e0d8556a59 100644 --- a/.github/workflows/scripts/linux/flatpak/net.pcsx2.PCSX2.json +++ b/.github/workflows/scripts/linux/flatpak/net.pcsx2.PCSX2.json @@ -32,6 +32,8 @@ "modules/23-kddockwidgets.json", "modules/24-plutovg.json", "modules/25-plutosvg.json", + "modules/26-libpng.json", + "modules/27-qtapng.json", { "name": "pcsx2", "buildsystem": "cmake-ninja", @@ -45,6 +47,7 @@ "cxxflags": "", "cxxflags-override": true, "config-opts": [ + "-DCMAKE_PREFIX_PATH=\"${FLATPAK_DEST}\"", "-DCMAKE_BUILD_TYPE=Release", "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON", "-DCMAKE_C_COMPILER=/usr/lib/sdk/llvm18/bin/clang", diff --git a/.github/workflows/scripts/macos/build-dependencies-universal.sh b/.github/workflows/scripts/macos/build-dependencies-universal.sh index 61122e4a20..8d42c5df16 100755 --- a/.github/workflows/scripts/macos/build-dependencies-universal.sh +++ b/.github/workflows/scripts/macos/build-dependencies-universal.sh @@ -49,6 +49,7 @@ LIBWEBP=1.6.0 FFMPEG=6.0 MOLTENVK=1.2.9 QT=6.7.3 +QTAPNG=1.3.0 KDDOCKWIDGETS=2.2.3 PLUTOVG=1.3.0 PLUTOSVG=0.0.7 @@ -84,6 +85,7 @@ eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 zstd-$ZSTD.tar 537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b lz4-$LZ4.tar.gz 4df396518620a7aa3651443e87d1b2862e4e88cad135a8b93423e01706232307 libpng-$LIBPNG.tar.xz e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWEBP.tar.gz +687ddc0c7cb128a3ea58e159b5129252537c27ede0c32a93f11f03127f0c0165 libpng-$LIBPNG-apng.patch.gz aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c libjpeg-turbo-$LIBJPEGTURBO.tar.gz 57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082 ffmpeg-$FFMPEG.tar.xz f415a09385030c6510a936155ce211f617c31506db5fbc563e804345f1ecf56e v$MOLTENVK.tar.gz @@ -92,6 +94,7 @@ f415a09385030c6510a936155ce211f617c31506db5fbc563e804345f1ecf56e v$MOLTENVK.tar 40142cb71fb1e07ad612bc361b67f5d54cd9367f9979ae6b86124a064deda06b qtsvg-everywhere-src-$QT.tar.xz f03bb7df619cd9ac9dba110e30b7bcab5dd88eb8bdc9cc752563b4367233203f qttools-everywhere-src-$QT.tar.xz dcc762acac043b9bb5e4d369b6d6f53e0ecfcf76a408fe0db5f7ef071c9d6dc8 qttranslations-everywhere-src-$QT.tar.xz +f1d3be3489f758efe1a8f12118a212febbe611aa670af32e0159fa3c1feab2a6 QtApng-$QTAPNG.tar.gz a8e4a25e5c2686fd36981e527ed05e451fcfc226bddf350f4e76181371190937 shaderc-$SHADERC.tar.gz 9427deccbdf4bde6a269938df38c6bd75247493786a310d8d733a2c82065ef47 shaderc-glslang-$SHADERC_GLSLANG.tar.gz c2225a49c3d7efa5c4f4ce4a6b42081e6ea3daca376f3353d9d7c2722d77a28a shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz @@ -108,6 +111,7 @@ curl -C - -L \ -O "https://github.com/facebook/zstd/releases/download/v$ZSTD/zstd-$ZSTD.tar.gz" \ -O "https://github.com/lz4/lz4/releases/download/v$LZ4/lz4-$LZ4.tar.gz" \ -O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.xz" \ + -O "https://download.sourceforge.net/libpng-apng/libpng-$LIBPNG-apng.patch.gz" \ -O "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$LIBJPEGTURBO/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" \ -O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \ -O "https://ffmpeg.org/releases/ffmpeg-$FFMPEG.tar.xz" \ @@ -117,6 +121,7 @@ curl -C - -L \ -O "https://download.qt.io/archive/qt/${QT%.*}/$QT/submodules/qtsvg-everywhere-src-$QT.tar.xz" \ -O "https://download.qt.io/archive/qt/${QT%.*}/$QT/submodules/qttools-everywhere-src-$QT.tar.xz" \ -O "https://download.qt.io/archive/qt/${QT%.*}/$QT/submodules/qttranslations-everywhere-src-$QT.tar.xz" \ + -o "QtApng-$QTAPNG.tar.gz" "https://github.com/jurplel/QtApng/archive/refs/tags/$QTAPNG.tar.gz" \ -o "shaderc-$SHADERC.tar.gz" "https://github.com/google/shaderc/archive/refs/tags/v$SHADERC.tar.gz" \ -o "shaderc-glslang-$SHADERC_GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG.tar.gz" \ -o "shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS.tar.gz" \ @@ -200,7 +205,9 @@ cd .. echo "Installing libpng..." rm -fr "libpng-$LIBPNG" tar xf "libpng-$LIBPNG.tar.xz" +gunzip -d -f "libpng-$LIBPNG-apng.patch.gz" cd "libpng-$LIBPNG" +patch -p1 < "../libpng-$LIBPNG-apng.patch" cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_X64" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_FRAMEWORK=OFF -B build make -C build "-j$NPROCS" cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_ARM64" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_FRAMEWORK=OFF -DPNG_ARM_NEON=on -B build-arm64 @@ -369,6 +376,16 @@ make "-j$NPROCS" make install cd ../.. +echo "Building Qt APNG..." +rm -fr "QtApng-$QTAPNG" +tar xf "QtApng-$QTAPNG.tar.gz" +cd "QtApng-$QTAPNG" +patch -p1 < "$SCRIPTDIR/../common/qtapng-cmake.patch" +cmake "${CMAKE_COMMON[@]}" "$CMAKE_ARCH_UNIVERSAL" -B build +make -C build "-j$NPROCS" +make -C build install +cd .. + echo "Building KDDockWidgets..." rm -fr "KDDockWidgets-$KDDOCKWIDGETS" tar xf "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" diff --git a/.github/workflows/scripts/macos/build-dependencies.sh b/.github/workflows/scripts/macos/build-dependencies.sh index 022a0c61da..5dd6b7e4c3 100755 --- a/.github/workflows/scripts/macos/build-dependencies.sh +++ b/.github/workflows/scripts/macos/build-dependencies.sh @@ -31,6 +31,7 @@ LIBWEBP=1.6.0 FFMPEG=6.0 MOLTENVK=1.2.9 QT=6.7.3 +QTAPNG=1.3.0 KDDOCKWIDGETS=2.2.3 PLUTOVG=1.3.0 PLUTOSVG=0.0.7 @@ -64,6 +65,7 @@ eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 zstd-$ZSTD.tar 537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b lz4-$LZ4.tar.gz 4df396518620a7aa3651443e87d1b2862e4e88cad135a8b93423e01706232307 libpng-$LIBPNG.tar.xz e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWEBP.tar.gz +687ddc0c7cb128a3ea58e159b5129252537c27ede0c32a93f11f03127f0c0165 libpng-$LIBPNG-apng.patch.gz aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c libjpeg-turbo-$LIBJPEGTURBO.tar.gz 57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082 ffmpeg-$FFMPEG.tar.xz f415a09385030c6510a936155ce211f617c31506db5fbc563e804345f1ecf56e v$MOLTENVK.tar.gz @@ -72,6 +74,7 @@ f415a09385030c6510a936155ce211f617c31506db5fbc563e804345f1ecf56e v$MOLTENVK.tar 40142cb71fb1e07ad612bc361b67f5d54cd9367f9979ae6b86124a064deda06b qtsvg-everywhere-src-$QT.tar.xz f03bb7df619cd9ac9dba110e30b7bcab5dd88eb8bdc9cc752563b4367233203f qttools-everywhere-src-$QT.tar.xz dcc762acac043b9bb5e4d369b6d6f53e0ecfcf76a408fe0db5f7ef071c9d6dc8 qttranslations-everywhere-src-$QT.tar.xz +f1d3be3489f758efe1a8f12118a212febbe611aa670af32e0159fa3c1feab2a6 QtApng-$QTAPNG.tar.gz a8e4a25e5c2686fd36981e527ed05e451fcfc226bddf350f4e76181371190937 shaderc-$SHADERC.tar.gz 9427deccbdf4bde6a269938df38c6bd75247493786a310d8d733a2c82065ef47 shaderc-glslang-$SHADERC_GLSLANG.tar.gz c2225a49c3d7efa5c4f4ce4a6b42081e6ea3daca376f3353d9d7c2722d77a28a shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz @@ -88,6 +91,7 @@ curl -L \ -O "https://github.com/facebook/zstd/releases/download/v$ZSTD/zstd-$ZSTD.tar.gz" \ -O "https://github.com/lz4/lz4/releases/download/v$LZ4/lz4-$LZ4.tar.gz" \ -O "https://downloads.sourceforge.net/project/libpng/libpng16/$LIBPNG/libpng-$LIBPNG.tar.xz" \ + -O "https://download.sourceforge.net/libpng-apng/libpng-$LIBPNG-apng.patch.gz" \ -O "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$LIBJPEGTURBO/libjpeg-turbo-$LIBJPEGTURBO.tar.gz" \ -O "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP.tar.gz" \ -O "https://ffmpeg.org/releases/ffmpeg-$FFMPEG.tar.xz" \ @@ -97,6 +101,7 @@ curl -L \ -O "https://download.qt.io/archive/qt/${QT%.*}/$QT/submodules/qtsvg-everywhere-src-$QT.tar.xz" \ -O "https://download.qt.io/archive/qt/${QT%.*}/$QT/submodules/qttools-everywhere-src-$QT.tar.xz" \ -O "https://download.qt.io/archive/qt/${QT%.*}/$QT/submodules/qttranslations-everywhere-src-$QT.tar.xz" \ + -o "QtApng-$QTAPNG.tar.gz" "https://github.com/jurplel/QtApng/archive/refs/tags/$QTAPNG.tar.gz" \ -o "shaderc-$SHADERC.tar.gz" "https://github.com/google/shaderc/archive/refs/tags/v$SHADERC.tar.gz" \ -o "shaderc-glslang-$SHADERC_GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG.tar.gz" \ -o "shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS.tar.gz" \ @@ -156,7 +161,9 @@ cd .. echo "Installing libpng..." rm -fr "libpng-$LIBPNG" tar xf "libpng-$LIBPNG.tar.xz" +gunzip -d -f "libpng-$LIBPNG-apng.patch.gz" cd "libpng-$LIBPNG" +patch -p1 < "../libpng-$LIBPNG-apng.patch" cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_FRAMEWORK=OFF -B build make -C build "-j$NPROCS" make -C build install @@ -331,6 +338,16 @@ make "-j$NPROCS" make install cd ../.. +echo "Building Qt APNG..." +rm -fr "QtApng-$QTAPNG" +tar xf "QtApng-$QTAPNG.tar.gz" +cd "QtApng-$QTAPNG" +patch -p1 < "$SCRIPTDIR/../common/qtapng-cmake.patch" +cmake "${CMAKE_COMMON[@]}" -B build +make -C build "-j$NPROCS" +make -C build install +cd .. + echo "Building KDDockWidgets..." rm -fr "KDDockWidgets-$KDDOCKWIDGETS" tar xf "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" diff --git a/.github/workflows/scripts/windows/build-dependencies-arm64.bat b/.github/workflows/scripts/windows/build-dependencies-arm64.bat index cee3020411..1ba09c1660 100644 --- a/.github/workflows/scripts/windows/build-dependencies-arm64.bat +++ b/.github/workflows/scripts/windows/build-dependencies-arm64.bat @@ -48,7 +48,9 @@ set LIBJPEGTURBO=3.1.1 set LIBPNG=1650 set SDL=SDL3-3.2.22 set QT=6.9.2 +set LIBPNGLONG=1.6.50 set QTMINOR=6.9 +set QTAPNG=1.3.0 set LZ4=1.10.0 set WEBP=1.6.0 set ZLIB=1.3.1 @@ -66,6 +68,7 @@ set SHADERC_SPIRVTOOLS=33e02568181e3312f49a3cf33df470bf96ef293a call :downloadfile "freetype-%FREETYPE%.tar.gz" https://sourceforge.net/projects/freetype/files/freetype2/%FREETYPE%/freetype-%FREETYPE%.tar.gz/download 5c3a8e78f7b24c20b25b54ee575d6daa40007a5f4eea2845861c3409b3021747 || goto error call :downloadfile "harfbuzz-%HARFBUZZ%.zip" https://github.com/harfbuzz/harfbuzz/archive/refs/tags/%HARFBUZZ%.zip 850cb5e38e21106c0abba86c5b73f8f74b9a32d7725505901d081080b0d3f0b3 || goto error call :downloadfile "lpng%LIBPNG%.zip" https://download.sourceforge.net/libpng/lpng1650.zip 4be6938313b08d5921f9dede13f2789b653c96f4f8595d92ff3f09c9320e51c7 || goto error +call :downloadfile "lpng%LIBPNG%-apng.patch.gz" https://download.sourceforge.net/libpng-apng/libpng-%LIBPNGLONG%-apng.patch.gz 687ddc0c7cb128a3ea58e159b5129252537c27ede0c32a93f11f03127f0c0165 || goto error call :downloadfile "libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/%LIBJPEGTURBO%/libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c || goto error call :downloadfile "libwebp-%WEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%WEBP%.tar.gz" e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 || goto error call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" 3d60068b1e5c83c66bb14c325dfef46f8fcc380735b4591de6f5e7b9738929d1 || goto error @@ -74,6 +77,7 @@ call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" af80bb671ea0f66c0036ce7041a56b0e550fc94fb88d2c77b5b6a3e33e42139b || goto error call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttools-everywhere-src-%QT%.zip" d2f4c7a4a12630e879702353f944f96a5d8e764771b5a5f04163334ad61b39db || goto error call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" 3e168d1b081ee3a2175fe1bd97ad03bb40fe7ce38a37e99923a19f0e7ec4d81c || goto error +call :downloadfile "QtApng-%QTAPNG%.zip" "https://github.com/jurplel/QtApng/archive/refs/tags/%QTAPNG%.zip" 5176082cdd468047a7eb1ec1f106b032f57df207aa318d559b29606b00d159ac || goto error call :downloadfile "lz4-%LZ4%.zip" "https://github.com/lz4/lz4/archive/refs/tags/v%LZ4%.zip" 3224b4c80f351f194984526ef396f6079bd6332dd9825c72ac0d7a37b3cdc565 || goto error call :downloadfile "zlib%ZLIBSHORT%.zip" "https://zlib.net/zlib%ZLIBSHORT%.zip" 72af66d44fcc14c22013b46b814d5d2514673dda3d115e64b690c1ad636e7b17 || goto error call :downloadfile "zstd-%ZSTD%.zip" "https://github.com/facebook/zstd/archive/refs/tags/v%ZSTD%.zip" 7897bc5d620580d9b7cd3539c44b59d78f3657d33663fe97a145e07b4ebd69a4 || goto error @@ -107,7 +111,10 @@ cd .. || goto error echo Building libpng... rmdir /S /Q "lpng%LIBPNG%" %SEVENZIP% x "lpng%LIBPNG%.zip" || goto error +rem apng not in released libpng yet +%SEVENZIP% x "lpng%LIBPNG%-apng.patch.gz" -aoa || goto error cd "lpng%LIBPNG%" || goto error +%PATCH% -p1 < "../libpng-%LIBPNGLONG%-apng.patch" || goto error cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error @@ -246,6 +253,22 @@ cmake --build . --parallel || goto error ninja install || goto error cd ..\.. || goto error +if %DEBUG%==1 ( + set QTAPNGBUILDSPEC=-DCMAKE_CONFIGURATION_TYPES="Release;Debug" -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=Release -DCMAKE_DEFAULT_CONFIGS=all -G "Ninja Multi-Config" +) else ( + set QTAPNGBUILDSPEC=-DCMAKE_BUILD_TYPE=Release -G Ninja +) + +echo Building Qt APNG... +rmdir /S /Q "QtApng-%QTAPNG%" +%SEVENZIP% x "QtApng-%QTAPNG%.zip" || goto error +cd "QtApng-%QTAPNG%" || goto error +%PATCH% -p1 < "%SCRIPTDIR%\..\common\qtapng-cmake.patch" || goto error +cmake -B build -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" %FORCEPDB% %QTAPNGBUILDSPEC% || goto error +cmake --build build --parallel || goto error +ninja -C build install || goto error +cd .. || goto error + if %DEBUG%==1 ( set KDDOCKWIDGETSBUILDSPEC=-DCMAKE_CONFIGURATION_TYPES="Release;Debug" -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=Release -DCMAKE_DEFAULT_CONFIGS=all -G "Ninja Multi-Config" ) else ( diff --git a/.github/workflows/scripts/windows/build-dependencies.bat b/.github/workflows/scripts/windows/build-dependencies.bat index c01cbca3aa..e0b848c06c 100644 --- a/.github/workflows/scripts/windows/build-dependencies.bat +++ b/.github/workflows/scripts/windows/build-dependencies.bat @@ -45,8 +45,10 @@ set HARFBUZZ=11.2.0 set LIBJPEGTURBO=3.1.1 set LIBPNG=1650 set SDL=SDL3-3.2.22 +set LIBPNGLONG=1.6.50 set QT=6.9.2 set QTMINOR=6.9 +set QTAPNG=1.3.0 set LZ4=1.10.0 set WEBP=1.6.0 set ZLIB=1.3.1 @@ -64,6 +66,7 @@ set SHADERC_SPIRVTOOLS=33e02568181e3312f49a3cf33df470bf96ef293a call :downloadfile "freetype-%FREETYPE%.tar.gz" https://sourceforge.net/projects/freetype/files/freetype2/%FREETYPE%/freetype-%FREETYPE%.tar.gz/download 5c3a8e78f7b24c20b25b54ee575d6daa40007a5f4eea2845861c3409b3021747 || goto error call :downloadfile "harfbuzz-%HARFBUZZ%.zip" https://github.com/harfbuzz/harfbuzz/archive/refs/tags/%HARFBUZZ%.zip 850cb5e38e21106c0abba86c5b73f8f74b9a32d7725505901d081080b0d3f0b3 || goto error call :downloadfile "lpng%LIBPNG%.zip" https://download.sourceforge.net/libpng/lpng1650.zip 4be6938313b08d5921f9dede13f2789b653c96f4f8595d92ff3f09c9320e51c7 || goto error +call :downloadfile "lpng%LIBPNG%-apng.patch.gz" https://download.sourceforge.net/libpng-apng/libpng-%LIBPNGLONG%-apng.patch.gz 687ddc0c7cb128a3ea58e159b5129252537c27ede0c32a93f11f03127f0c0165 || goto error call :downloadfile "libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/%LIBJPEGTURBO%/libjpeg-turbo-%LIBJPEGTURBO%.tar.gz" aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c || goto error call :downloadfile "libwebp-%WEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%WEBP%.tar.gz" e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 || goto error call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" 3d60068b1e5c83c66bb14c325dfef46f8fcc380735b4591de6f5e7b9738929d1 || goto error @@ -72,6 +75,7 @@ call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" af80bb671ea0f66c0036ce7041a56b0e550fc94fb88d2c77b5b6a3e33e42139b || goto error call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttools-everywhere-src-%QT%.zip" d2f4c7a4a12630e879702353f944f96a5d8e764771b5a5f04163334ad61b39db || goto error call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" 3e168d1b081ee3a2175fe1bd97ad03bb40fe7ce38a37e99923a19f0e7ec4d81c || goto error +call :downloadfile "QtApng-%QTAPNG%.zip" "https://github.com/jurplel/QtApng/archive/refs/tags/%QTAPNG%.zip" 5176082cdd468047a7eb1ec1f106b032f57df207aa318d559b29606b00d159ac || goto error call :downloadfile "lz4-%LZ4%.zip" "https://github.com/lz4/lz4/archive/refs/tags/v%LZ4%.zip" 3224b4c80f351f194984526ef396f6079bd6332dd9825c72ac0d7a37b3cdc565 || goto error call :downloadfile "zlib%ZLIBSHORT%.zip" "https://zlib.net/zlib%ZLIBSHORT%.zip" 72af66d44fcc14c22013b46b814d5d2514673dda3d115e64b690c1ad636e7b17 || goto error call :downloadfile "zstd-%ZSTD%.zip" "https://github.com/facebook/zstd/archive/refs/tags/v%ZSTD%.zip" 7897bc5d620580d9b7cd3539c44b59d78f3657d33663fe97a145e07b4ebd69a4 || goto error @@ -104,7 +108,10 @@ cd .. || goto error echo Building libpng... rmdir /S /Q "lpng%LIBPNG%" %SEVENZIP% x "lpng%LIBPNG%.zip" || goto error +rem apng not in released libpng yet +%SEVENZIP% x "lpng%LIBPNG%-apng.patch.gz" -aoa || goto error cd "lpng%LIBPNG%" || goto error +%PATCH% -p1 < "../libpng-%LIBPNGLONG%-apng.patch" || goto error cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DBUILD_SHARED_LIBS=ON -DPNG_TESTS=OFF -DPNG_STATIC=OFF -DPNG_SHARED=ON -DPNG_TOOLS=OFF -B build -G Ninja || goto error cmake --build build --parallel || goto error ninja -C build install || goto error @@ -247,6 +254,22 @@ cmake --build . --parallel || goto error ninja install || goto error cd ..\.. || goto error +if %DEBUG%==1 ( + set QTAPNGBUILDSPEC=-DCMAKE_CONFIGURATION_TYPES="Release;Debug" -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=Release -DCMAKE_DEFAULT_CONFIGS=all -G "Ninja Multi-Config" +) else ( + set QTAPNGBUILDSPEC=-DCMAKE_BUILD_TYPE=Release -G Ninja +) + +echo Building Qt APNG... +rmdir /S /Q "QtApng-%QTAPNG%" +%SEVENZIP% x "QtApng-%QTAPNG%.zip" || goto error +cd "QtApng-%QTAPNG%" || goto error +%PATCH% -p1 < "%SCRIPTDIR%\..\common\qtapng-cmake.patch" || goto error +cmake -B build -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" %FORCEPDB% %QTAPNGBUILDSPEC% || goto error +cmake --build build --parallel || goto error +ninja -C build install || goto error +cd .. || goto error + if %DEBUG%==1 ( set KDDOCKWIDGETSBUILDSPEC=-DCMAKE_CONFIGURATION_TYPES="Release;Debug" -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=Release -DCMAKE_DEFAULT_CONFIGS=all -G "Ninja Multi-Config" ) else ( diff --git a/pcsx2-qt/GameList/GameListWidget.cpp b/pcsx2-qt/GameList/GameListWidget.cpp index 1351265b3d..9809e0be9a 100644 --- a/pcsx2-qt/GameList/GameListWidget.cpp +++ b/pcsx2-qt/GameList/GameListWidget.cpp @@ -374,7 +374,12 @@ void GameListWidget::setCustomBackground() // Only try to create background if both 1. path and 2. setting are valid if (!path.empty() && enabled) { - QMovie* new_movie = new QMovie(QString::fromStdString(path), QByteArray(), this); + QMovie* new_movie; + if (Path::GetExtension(path) == "png") + // Use apng plugin + new_movie = new QMovie(QString::fromStdString(path), "apng" , this); + else + new_movie = new QMovie(QString::fromStdString(path), QByteArray(), this); if (new_movie->isValid()) m_background_movie = new_movie; else