From 7a4adbcbb45f681b47596f194e0ea75d46d681b4 Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Mon, 17 Nov 2025 17:09:24 +0100 Subject: [PATCH] remove loader from image so the icons are not reloaded each time a list layout change remove button color warning --- Linphone/view/Control/Button/Button.qml | 9 +- .../view/Control/Display/Contact/Avatar.qml | 1 - Linphone/view/Control/Display/EffectImage.qml | 139 +++++++++--------- 3 files changed, 71 insertions(+), 78 deletions(-) diff --git a/Linphone/view/Control/Button/Button.qml b/Linphone/view/Control/Button/Button.qml index a93c138b0..e6007dff9 100644 --- a/Linphone/view/Control/Button/Button.qml +++ b/Linphone/view/Control/Button/Button.qml @@ -52,14 +52,14 @@ Control.Button { property real keyboardFocusedBorderWidth: Utils.getSizeWithScreenRatio(3) // Image properties property var contentImageColor: style?.image? style.image.normal : DefaultStyle.main2_600 - property var hoveredImageColor: style?.image? style.image.hovered : Qt.darker(contentImageColor, 1.05) - property var checkedImageColor: style?.image? style.image.checked : Qt.darker(contentImageColor, 1.1) - property var pressedImageColor: style?.image? style.image.pressed : Qt.darker(contentImageColor, 1.1) + property var hoveredImageColor: style && style.image && style.image.hovered ? style.image.hovered : Qt.darker(contentImageColor, 1.05) + property var checkedImageColor: style && style.image && style.image.checked ? style.image.checked : Qt.darker(contentImageColor, 1.1) + property var pressedImageColor: style && style.image && style.image.pressed ? style.image.pressed : Qt.darker(contentImageColor, 1.1) icon.source: style?.iconSource || "" property color colorizationColor: checkable && checked ? checkedImageColor : pressed - ? pressedImageColor + ? pressedImageColor : hovered ? hoveredImageColor : contentImageColor @@ -153,7 +153,6 @@ Control.Button { } component ButtonImage: EffectImage { - asynchronous: mainItem.asynchronous imageSource: mainItem.icon.source imageWidth: mainItem.icon.width imageHeight: mainItem.icon.height diff --git a/Linphone/view/Control/Display/Contact/Avatar.qml b/Linphone/view/Control/Display/Contact/Avatar.qml index 6dc981534..301f771c0 100644 --- a/Linphone/view/Control/Display/Contact/Avatar.qml +++ b/Linphone/view/Control/Display/Contact/Avatar.qml @@ -102,7 +102,6 @@ Loader{ anchors.bottom: parent.bottom width: parent.width / 4.5 height: width - asynchronous: true imageSource: mainItem.secured ? AppIcons.trusted : AppIcons.notTrusted fillMode: Image.PreserveAspectFit diff --git a/Linphone/view/Control/Display/EffectImage.qml b/Linphone/view/Control/Display/EffectImage.qml index d285b93a4..9a406f80d 100644 --- a/Linphone/view/Control/Display/EffectImage.qml +++ b/Linphone/view/Control/Display/EffectImage.qml @@ -5,85 +5,80 @@ import QtQuick.Effects import Linphone -// The loader is needed here to refresh the colorization effect (effect2) which is not refreshed when visibility change -// and causes colorization issue when effect image is inside a popup -Loader { +// TODO : A loader may be needed here to refresh the colorization effect (effect2) which is not refreshed when visibility change +// and causes colorization issue when effect image is inside a popup (not seen in the popup recently tested, may be an obsolete bug) +Item { id: mainItem - active: visible property url imageSource: "" property var fillMode: Image.PreserveAspectFit property var colorizationColor - property real imageWidth: width - property real imageHeight: height + property real imageWidth: width + property real imageHeight: height property bool useColor: colorizationColor != undefined property bool shadowEnabled: false property bool isImageReady: false - asynchronous: true - sourceComponent: Component{Item { - Image { - id: image - visible: !effect2.effectEnabled - source: mainItem.imageSource - fillMode: mainItem.fillMode - sourceSize.width: width - sourceSize.height: height - width: mainItem.imageWidth - height: mainItem.imageHeight - Layout.preferredWidth: mainItem.imageWidth - Layout.preferredHeight: mainItem.imageHeight - anchors.centerIn: parent - onStatusChanged: mainItem.isImageReady = (status == Image.Ready) - } - MultiEffect { - id: effect - visible: false - anchors.fill: image - source: image - maskSource: image - brightness: effect2.effectEnabled ? 1.0 : 0.0 - } - - MultiEffect { - id: effect2 - enabled: effectEnabled - visible: mainItem.useColor - property bool effectEnabled: mainItem.useColor - anchors.fill: effect - source: effect - maskSource: effect - colorizationColor: effectEnabled && mainItem.colorizationColor ? mainItem.colorizationColor : 'black' - colorization: effectEnabled ? 1.0: 0.0 - } - /* Alernative to shadow for no blackcolors - MultiEffect { - visible: mainItem.shadowEnabled - source: image - width: image.width - height: image.height - x: image.x - y: image.y + 6 - z: -1 - blurEnabled: true - blurMax: 12 - blur: 1.0 - contrast: -1.0 - brightness: 1.0 - colorizationColor: DefaultStyle.grey_400 - colorization: 1.0 - }*/ - MultiEffect { - id: shadow - enabled: mainItem.shadowEnabled - anchors.fill: image - source: image - visible: mainItem.shadowEnabled - // Crash : https://bugreports.qt.io/browse/QTBUG-124730? - shadowEnabled: true //mainItem.shadowEnabled - shadowColor: DefaultStyle.grey_1000 - shadowBlur: 0 - shadowOpacity: mainItem.shadowEnabled ? 0.7 : 0.0 - z: mainItem.z - 1 - } + Image { + id: image + visible: !effect2.effectEnabled + source: mainItem.imageSource + fillMode: mainItem.fillMode + sourceSize.width: width + sourceSize.height: height + width: mainItem.imageWidth + height: mainItem.imageHeight + Layout.preferredWidth: mainItem.imageWidth + Layout.preferredHeight: mainItem.imageHeight + anchors.centerIn: parent + onStatusChanged: mainItem.isImageReady = (status == Image.Ready) } + MultiEffect { + id: effect + visible: false + anchors.fill: image + source: image + maskSource: image + brightness: effect2.effectEnabled ? 1.0 : 0.0 + } + + MultiEffect { + id: effect2 + enabled: effectEnabled + visible: mainItem.useColor + property bool effectEnabled: mainItem.useColor + anchors.fill: effect + source: effect + maskSource: effect + colorizationColor: effectEnabled && mainItem.colorizationColor ? mainItem.colorizationColor : 'black' + colorization: effectEnabled ? 1.0: 0.0 + } + /* Alernative to shadow for no blackcolors + MultiEffect { + visible: mainItem.shadowEnabled + source: image + width: image.width + height: image.height + x: image.x + y: image.y + 6 + z: -1 + blurEnabled: true + blurMax: 12 + blur: 1.0 + contrast: -1.0 + brightness: 1.0 + colorizationColor: DefaultStyle.grey_400 + colorization: 1.0 + }*/ + MultiEffect { + id: shadow + enabled: mainItem.shadowEnabled + anchors.fill: image + source: image + visible: mainItem.shadowEnabled + // Crash : https://bugreports.qt.io/browse/QTBUG-124730? + shadowEnabled: true //mainItem.shadowEnabled + shadowColor: DefaultStyle.grey_1000 + shadowBlur: 0 + shadowOpacity: mainItem.shadowEnabled ? 0.7 : 0.0 + z: mainItem.z - 1 } }