diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 73ca0ca3550a..0881a4022d84 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -152,14 +152,14 @@ jobs: - name: Linux os: ubuntu-22.04 python-version: '3.8' - packages: python3-zmq qttools5-dev qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo + packages: python3-zmq qttools5-dev qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev qt5-image-formats-plugins libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo cc: gcc cxx: g++ - name: Linux-latest os: ubuntu-24.04 python-version: '3.8' - packages: python3-zmq qttools5-dev qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev libevent-dev bsdmainutils libboost-system1.74-dev libboost-filesystem1.74-dev libboost-chrono1.74-dev libboost-test1.74-dev libboost-thread1.74-dev libminiupnpc-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo + packages: python3-zmq qttools5-dev qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev qt5-image-formats-plugins libevent-dev bsdmainutils libboost-system1.74-dev libboost-filesystem1.74-dev libboost-chrono1.74-dev libboost-test1.74-dev libboost-thread1.74-dev libminiupnpc-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo cc: gcc cxx: g++ @@ -273,7 +273,7 @@ jobs: id: Linux-x86_64-nodepends os: ubuntu-22.04 python-version: '3.8' - packages: python3-zmq qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo + packages: python3-zmq qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev qt5-image-formats-plugins libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo unit_tests: true functional_tests: true goal: install @@ -283,7 +283,7 @@ jobs: id: Linux-x86_64-nodepends-latest os: ubuntu-24.04 python-version: '3.8' - packages: python3-zmq qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev libevent-dev bsdmainutils libboost-system1.74-dev libboost-filesystem1.74-dev libboost-chrono1.74-dev libboost-test1.74-dev libboost-thread1.74-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo + packages: python3-zmq qtbase5-dev qttools5-dev-tools libqt5svg5-dev libqt5charts5-dev qt5-image-formats-plugins libevent-dev bsdmainutils libboost-system1.74-dev libboost-filesystem1.74-dev libboost-chrono1.74-dev libboost-test1.74-dev libboost-thread1.74-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libgmp-dev libsodium-dev cargo unit_tests: true functional_tests: true goal: install diff --git a/build-aux/m4/bitcoin_qt.m4 b/build-aux/m4/bitcoin_qt.m4 index 7b452e7b5d18..b0a1dc8d29e8 100644 --- a/build-aux/m4/bitcoin_qt.m4 +++ b/build-aux/m4/bitcoin_qt.m4 @@ -124,6 +124,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal]) AC_DEFINE([QT_QPA_PLATFORM_MINIMAL], [1], [Define this symbol if the minimal Qt platform exists]) _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QSvgPlugin)],[-lqsvg]) + _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWebpPlugin)],[-lqwebp]) _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QGifPlugin)],[-lqgif]) _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QSvgIconPlugin)],[-lqsvgicon]) if test "x$TARGET_OS" = xwindows; then @@ -350,7 +351,7 @@ AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[ PKG_CHECK_MODULES([QTDEVICEDISCOVERY], [Qt5DeviceDiscoverySupport], [QT_LIBS="-lQt5DeviceDiscoverySupport $QT_LIBS"]) PKG_CHECK_MODULES([QTACCESSIBILITY], [Qt5AccessibilitySupport], [QT_LIBS="-lQt5AccessibilitySupport $QT_LIBS"]) PKG_CHECK_MODULES([QTFB], [Qt5FbSupport], [QT_LIBS="-lQt5FbSupport $QT_LIBS"]) - fi + fi if test "x$TARGET_OS" = xlinux; then PKG_CHECK_MODULES([QTXCBQPA], [Qt5XcbQpa], [QT_LIBS="$QTXCBQPA_LIBS $QT_LIBS"]) elif test "x$TARGET_OS" = xdarwin; then diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 90e4524990e0..968e94584739 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -1,6 +1,6 @@ PACKAGE=qt $(package)_version=5.9.7 -$(package)_download_path=https://download.qt.io/archive/qt/5.9/$($(package)_version)/submodules +$(package)_download_path=https://download.qt.io/new_archive/qt/5.9/$($(package)_version)/submodules $(package)_suffix=opensource-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) $(package)_sha256_hash=36dd9574f006eaa1e5af780e4b33d11fe39d09fd7c12f3b9d83294174bd28f00 @@ -19,12 +19,16 @@ $(package)_qttools_sha256_hash=d62e0f70d99645d6704dbb8976fb2222443061743689943d4 $(package)_qtsvg_file_name=qtsvg-$($(package)_suffix) $(package)_qtsvg_sha256_hash=628f22b8472e96ed8033d5491286ce2ab5b2c7b9fe0fe468acd78b458dc75564 +$(package)_qtimageformats_file_name=qtimageformats-$($(package)_suffix) +$(package)_qtimageformats_sha256_hash=62053e66014c12edb56a05d2406c78c6b96fc66c2b5aa633e984c9fef398c0aa + $(package)_qtcharts_file_name=qtcharts-$($(package)_suffix) $(package)_qtcharts_sha256_hash=16cd367241b2e0cd3bc8aea6f874598cd18ad83b72eed89f2713b777272572e6 $(package)_extra_sources = $($(package)_qttranslations_file_name) $(package)_extra_sources += $($(package)_qttools_file_name) $(package)_extra_sources += $($(package)_qtsvg_file_name) +$(package)_extra_sources += $($(package)_qtimageformats_file_name) $(package)_extra_sources += $($(package)_qtcharts_file_name) define $(package)_set_vars @@ -136,6 +140,7 @@ $(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_f $(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttranslations_file_name),$($(package)_qttranslations_file_name),$($(package)_qttranslations_sha256_hash)) && \ $(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash)) && \ $(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtsvg_file_name),$($(package)_qtsvg_file_name),$($(package)_qtsvg_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtimageformats_file_name),$($(package)_qtimageformats_file_name),$($(package)_qtimageformats_sha256_hash)) && \ $(call fetch_file,$(package),$($(package)_download_path),$($(package)_qtcharts_file_name),$($(package)_qtcharts_file_name),$($(package)_qtcharts_sha256_hash)) endef @@ -145,6 +150,7 @@ define $(package)_extract_cmds echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qtsvg_sha256_hash) $($(package)_source_dir)/$($(package)_qtsvg_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_qtimageformats_sha256_hash) $($(package)_source_dir)/$($(package)_qtimageformats_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qtcharts_sha256_hash) $($(package)_source_dir)/$($(package)_qtcharts_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ mkdir qtbase && \ @@ -155,6 +161,8 @@ define $(package)_extract_cmds tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools && \ mkdir qtsvg && \ tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtsvg_file_name) -C qtsvg && \ + mkdir qtimageformats && \ + tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtimageformats_file_name) -C qtimageformats && \ mkdir qtcharts && \ tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qtcharts_file_name) -C qtcharts endef @@ -216,6 +224,10 @@ define $(package)_config_cmds cd qtsvg/src/plugins && ../../../qtbase/bin/qmake plugins.pro -o Makefile && cd ../../.. && \ cd qtsvg/src/plugins/imageformats && ../../../../qtbase/bin/qmake imageformats.pro -o Makefile && cd ../../../.. && \ cd qtsvg/src/plugins/imageformats/svg && ../../../../../qtbase/bin/qmake svg.pro -o Makefile && cd ../../../../.. && \ + cd qtimageformats && ../qtbase/bin/qmake qtimageformats.pro -o Makefile && cd .. && \ + cd qtimageformats/src/plugins && ../../../qtbase/bin/qmake plugins.pro -o Makefile && cd ../../.. && \ + cd qtimageformats/src/plugins/imageformats && ../../../../qtbase/bin/qmake imageformats.pro -o Makefile && cd ../../../.. && \ + cd qtimageformats/src/plugins/imageformats/webp && ../../../../../qtbase/bin/qmake webp.pro -o Makefile && cd ../../../../.. && \ cd qtcharts && ../qtbase/bin/qmake qtcharts.pro -o Makefile endef @@ -228,6 +240,8 @@ define $(package)_build_cmds $(MAKE) -C ../qtsvg/ && \ $(MAKE) -C ../qtsvg/src/svg && \ $(MAKE) -C ../qtsvg/src/plugins/imageformats && \ + $(MAKE) -C ../qtimageformats/ && \ + $(MAKE) -C ../qtimageformats/src/plugins/imageformats && \ $(MAKE) -C ../qtcharts/ endef @@ -236,6 +250,7 @@ define $(package)_stage_cmds $(MAKE) -C qttools/src/linguist/lrelease INSTALL_ROOT=$($(package)_staging_dir) install_target && \ $(MAKE) -C qttools/src/linguist/lupdate INSTALL_ROOT=$($(package)_staging_dir) install_target && \ $(MAKE) -C qtsvg INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ + $(MAKE) -C qtimageformats INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ $(MAKE) -C qtcharts INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ if `test -f qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a`; then \ diff --git a/doc/build-unix.md b/doc/build-unix.md index 52358b4595ea..4f929392d487 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -110,7 +110,7 @@ To build without GUI pass `--without-gui`. To build with Qt 5 you need the following: - sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 libqt5svg5-dev libqt5charts5-dev qttools5-dev qttools5-dev-tools libqrencode-dev + sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 libqt5svg5-dev libqt5charts5-dev qttools5-dev qttools5-dev-tools qt5-image-formats-plugins libqrencode-dev **Note:** Ubuntu versions prior to Bionic (18.04), and Debian version prior to Buster, do not have the `libqt5charts5-dev` package. If you are compiling on one of these older versions, you will need to omit `libqt5charts5-dev` from the above command. diff --git a/doc/dependencies.md b/doc/dependencies.md index 543c5fbf6f51..7165b53bf8d3 100644 --- a/doc/dependencies.md +++ b/doc/dependencies.md @@ -17,6 +17,7 @@ These are the dependencies currently used by PIVX Core. You can find instruction | libnatpmp | [20150609](https://miniupnp.tuxfamily.org/files) | | No | | | | libjpeg | | | | | [Yes](https://github.com/pivx-project/pivx/blob/master/depends/packages/qt.mk#L65) | | libpng | | | | | [Yes](https://github.com/pivx-project/pivx/blob/master/depends/packages/qt.mk#L64) | +| libwebp | | | | | [Yes](https://github.com/pivx-project/pivx/blob/master/depends/packages/qt.mk#L22) | | librsvg | | | | | | | MiniUPnPc | [2.2.2](https://miniupnp.tuxfamily.org/files) | | No | | | | GMP | [6.1.2](https://gmplib.org/) | | No | | | diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index fcc2c3e09e36..60535c8c5105 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -496,8 +496,8 @@ RES_ICONS = \ qt/res/images/ic-check-box-indeterminate.svg \ qt/res/images/ic-information.svg \ qt/res/images/ic-information-hover.svg \ - qt/res/images/ani-loading-dark.gif \ - qt/res/images/ani-loading.gif \ + qt/res/images/ani-loading-dark.webp \ + qt/res/images/ani-loading-light.webp \ qt/res/images/ic-check-vote.svg \ qt/res/images/ic-check-vote-active.svg \ qt/res/images/ic-check-vote-dark.svg \ diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 430d4e588aaf..343604d02883 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -35,6 +35,19 @@ else() MESSAGE(FATAL_ERROR "Could not find any Qt5 installation") endif() +list(APPEND _WEBP_PATHS + "/usr/local/opt/qt@5/plugins/imageformats" + "/opt/homebrew/opt/qt@5/plugins/imageformats" + "/usr/lib/" + "/usr/local/lib" +) +find_library(WEBP_FOUND NAMES qwebp PATHS ${_WEBP_PATHS} PATH_SUFFIXES "qt5/plugins/imageformats") +if (WEBP_FOUND) + MESSAGE(STATUS "Found Qt5 webp plugin at ${WEBP_FOUND}") +else () + MESSAGE(FATAL_ERROR "Qt5 webp plugin not found!") +endif () + if (Qt5DBus_FOUND) add_compile_options("-DUSE_DBUS") endif() diff --git a/src/qt/loadingdialog.cpp b/src/qt/loadingdialog.cpp index c8265540b0f4..4398acb29ddb 100644 --- a/src/qt/loadingdialog.cpp +++ b/src/qt/loadingdialog.cpp @@ -3,6 +3,9 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "loadingdialog.h" + +#include "qtutils.h" + #include "ui_loadingdialog.h" #include @@ -36,7 +39,12 @@ LoadingDialog::LoadingDialog(QWidget *parent, QString loadingMsg) : ui->frame->setProperty("cssClass", "container-loading"); - QMovie *movie = new QMovie("://ani-loading-dark"); + QMovie *movie = {}; + if (isLightTheme()) { + movie = new QMovie("://ani-loading-light"); + } else { + movie = new QMovie("://ani-loading-dark"); + } ui->labelMovie->setText(""); ui->labelMovie->setMovie(movie); movie->start(); diff --git a/src/qt/pivx.cpp b/src/qt/pivx.cpp index 22654bd96299..0dbff62829eb 100644 --- a/src/qt/pivx.cpp +++ b/src/qt/pivx.cpp @@ -63,6 +63,7 @@ Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin); Q_IMPORT_PLUGIN(QSvgPlugin); Q_IMPORT_PLUGIN(QSvgIconPlugin); Q_IMPORT_PLUGIN(QGifPlugin); +Q_IMPORT_PLUGIN(QWebpPlugin) #endif // Declare meta types used for QMetaObject::invokeMethod diff --git a/src/qt/pivx.qrc b/src/qt/pivx.qrc index 6239c6087e33..43cf7d149dfa 100644 --- a/src/qt/pivx.qrc +++ b/src/qt/pivx.qrc @@ -200,8 +200,8 @@ res/images/ic-check-box-dark-active.svg res/images/ic-check-box-indeterminate.svg res/images/ic-check-liliac-indeterminate.svg - res/images/ani-loading-dark.gif - res/images/ani-loading.gif + res/images/ani-loading-dark.webp + res/images/ani-loading-light.webp res/images/ic-pending.svg res/images/ic-transaction-stake-delegated.svg res/images/ic-transaction-stake-delegated-inactive.svg diff --git a/src/qt/res/images/ani-loading-dark.gif b/src/qt/res/images/ani-loading-dark.gif deleted file mode 100644 index f8c0e075402f..000000000000 Binary files a/src/qt/res/images/ani-loading-dark.gif and /dev/null differ diff --git a/src/qt/res/images/ani-loading-dark.webp b/src/qt/res/images/ani-loading-dark.webp new file mode 100644 index 000000000000..daf47be6029b Binary files /dev/null and b/src/qt/res/images/ani-loading-dark.webp differ diff --git a/src/qt/res/images/ani-loading-light.webp b/src/qt/res/images/ani-loading-light.webp new file mode 100644 index 000000000000..312952bca898 Binary files /dev/null and b/src/qt/res/images/ani-loading-light.webp differ diff --git a/src/qt/res/images/ani-loading.gif b/src/qt/res/images/ani-loading.gif deleted file mode 100644 index f018944e9a6e..000000000000 Binary files a/src/qt/res/images/ani-loading.gif and /dev/null differ