From c79563ea343075d97d30fe3a6598775538676515 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sat, 17 Sep 2022 14:08:03 +0400 Subject: [PATCH] Add support for AVIF, HEIF and JPEG XL (only on Linux yet) --- external/CMakeLists.txt | 1 + external/kimageformats/CMakeLists.txt | 69 +++++++++++++++++++ external/qt/qt_static_plugins/CMakeLists.txt | 1 + .../qt_static_plugins/qt_static_plugins.cpp | 8 ++- 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 external/kimageformats/CMakeLists.txt diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 75f608a..e769380 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -42,6 +42,7 @@ if (LINUX AND NOT DESKTOP_APP_DISABLE_JEMALLOC) endif() add_checked_subdirectory(jpeg) add_checked_subdirectory(kcoreaddons) +add_checked_subdirectory(kimageformats) add_checked_subdirectory(lz4) add_checked_subdirectory(minizip) if (LINUX) diff --git a/external/kimageformats/CMakeLists.txt b/external/kimageformats/CMakeLists.txt new file mode 100644 index 0000000..1e2f261 --- /dev/null +++ b/external/kimageformats/CMakeLists.txt @@ -0,0 +1,69 @@ +# This file is part of Desktop App Toolkit, +# a set of libraries for developing nice desktop applications. +# +# For license and copyright information please follow this link: +# https://github.com/desktop-app/legal/blob/master/LEGAL + +if ((DESKTOP_APP_USE_PACKAGED AND NOT DESKTOP_APP_USE_PACKAGED_LAZY) OR NOT LINUX) # should work on non-Linux, but cmake rules aren't implemented yet + add_library(external_kimageformats INTERFACE IMPORTED GLOBAL) + add_library(desktop-app::external_kimageformats ALIAS external_kimageformats) + return() +endif() + +add_library(external_kimageformats STATIC) +add_library(desktop-app::external_kimageformats ALIAS external_kimageformats) +init_target(external_kimageformats "(external)") + +set(kimageformats_loc ${third_party_loc}/kimageformats) +set(kimageformats_src ${kimageformats_loc}/src/imageformats) + +set_target_properties(external_kimageformats PROPERTIES AUTOMOC ON) + +nice_target_sources(external_kimageformats ${kimageformats_src} +PRIVATE + avif.cpp + heif.cpp + jxl.cpp +) + +target_compile_definitions(external_kimageformats +PRIVATE + QT_STATICPLUGIN + KIMG_JXL_API_VERSION=70 +) + +target_link_libraries(external_kimageformats +PRIVATE + desktop-app::external_qt +) + +if (DESKTOP_APP_USE_PACKAGED) + find_package(libavif REQUIRED) + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBHEIF REQUIRED IMPORTED_TARGET libheif) + pkg_check_modules(LIBJXL REQUIRED IMPORTED_TARGET libjxl) + pkg_check_modules(LIBJXL_THREADS REQUIRED IMPORTED_TARGET libjxl_threads) + + target_link_libraries(external_kimageformats + PRIVATE + avif + PkgConfig::LIBHEIF + PkgConfig::LIBJXL + PkgConfig::LIBJXL_THREADS + ) +else() + target_link_static_libraries(external_kimageformats + PRIVATE + avif + heif + jxl + jxl_threads + dav1d + libde265 + brotlicommon-static + brotlidec-static + brotlienc-static + hwy + lcms2 + ) +endif() diff --git a/external/qt/qt_static_plugins/CMakeLists.txt b/external/qt/qt_static_plugins/CMakeLists.txt index 7a8651a..ce2fa82 100644 --- a/external/qt/qt_static_plugins/CMakeLists.txt +++ b/external/qt/qt_static_plugins/CMakeLists.txt @@ -16,6 +16,7 @@ PRIVATE target_link_libraries(external_qt_static_plugins PUBLIC desktop-app::external_qt + desktop-app::external_kimageformats ) if (LINUX) diff --git a/external/qt/qt_static_plugins/qt_static_plugins.cpp b/external/qt/qt_static_plugins/qt_static_plugins.cpp index ae0babe..b06abb0 100644 --- a/external/qt/qt_static_plugins/qt_static_plugins.cpp +++ b/external/qt/qt_static_plugins/qt_static_plugins.cpp @@ -54,8 +54,12 @@ Q_IMPORT_PLUGIN(QGtk3ThemePlugin) #endif // Q_OS_WIN | Q_OS_MAC | Q_OS_UNIX #endif // !DESKTOP_APP_USE_PACKAGED -#if defined Q_OS_UNIX && !defined Q_OS_MAC #if !defined DESKTOP_APP_USE_PACKAGED || defined DESKTOP_APP_USE_PACKAGED_LAZY +#if defined Q_OS_UNIX && !defined Q_OS_MAC +Q_IMPORT_PLUGIN(QAVIFPlugin) +Q_IMPORT_PLUGIN(HEIFPlugin) +Q_IMPORT_PLUGIN(QJpegXLPlugin) + Q_IMPORT_PLUGIN(NimfInputContextPlugin) #ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION Q_IMPORT_PLUGIN(QFcitxPlatformInputContextPlugin) @@ -66,5 +70,5 @@ Q_IMPORT_PLUGIN(QFcitx5PlatformInputContextPlugin) #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION Q_IMPORT_PLUGIN(QHimePlatformInputContextPlugin) #endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION -#endif // !DESKTOP_APP_USE_PACKAGED || DESKTOP_APP_USE_PACKAGED_LAZY #endif // Q_OS_UNIX && !Q_OS_MAC +#endif // !DESKTOP_APP_USE_PACKAGED || DESKTOP_APP_USE_PACKAGED_LAZY