diff --git a/linphone-app/assets/images/contact_custom.svg b/linphone-app/assets/images/contact_custom.svg
index 7929cb7f2..8236faaf8 100644
--- a/linphone-app/assets/images/contact_custom.svg
+++ b/linphone-app/assets/images/contact_custom.svg
@@ -6,7 +6,7 @@
version="1.1"
id="svg12"
sodipodi:docname="contact_custom.svg"
- inkscape:version="1.1 (c68e22c387, 2021-05-23)"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
@@ -23,15 +23,15 @@
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
- inkscape:zoom="4.546875"
- inkscape:cx="5.3883161"
- inkscape:cy="20.453608"
+ inkscape:zoom="11.313709"
+ inkscape:cx="24.085825"
+ inkscape:cy="50.381358"
inkscape:window-width="1920"
inkscape:window-height="1043"
- inkscape:window-x="0"
+ inkscape:window-x="298"
inkscape:window-y="0"
inkscape:window-maximized="1"
- inkscape:current-layer="svg12" />
+ inkscape:current-layer="contact_selected" />
contact_selected
@@ -50,8 +50,9 @@
id="contact_selected"
fill="#000000">
+ d="m 16.806156,6.8073986 c 0,1.240375 -0.464389,2.4035931 -1.285742,3.2893814 -0.07692,0.0831 -0.08384,0.0916 -0.162964,0.19301 -0.486248,0.417625 -0.438653,1.19712 0.102033,1.565188 l 0.239957,0.163348 0.160318,0.08882 c 2.182907,0.959547 3.728167,2.124062 4.731359,3.438818 1.341204,1.757745 1.617991,3.595246 1.299328,5.213197 -0.06743,0.262136 -4.039005,0.897335 -5.968153,1.079336 -2.036172,0.192098 -5.492321,0.198713 -7.7888649,0.06354 C 7.1349766,21.830245 2.2956094,21.216918 2.0971289,20.781233 1.8988401,19.099457 2.0676955,17.303731 3.4089596,15.545977 4.4121942,14.231218 5.9575121,13.066699 8.1404944,12.107148 L 8.3008228,12.018328 8.5407796,11.85498 C 9.081466,11.48691 8.5035876,9.9883807 8.0807376,9.5994819 c -0.1571087,-0.2511322 0,0 0,0 C 7.2588857,8.7129037 7.1941071,8.0475319 7.1941071,6.8073986 7.1941071,4.1501811 9.3233001,2 11.944862,2 h 0.110539 c 2.621562,0 4.750755,2.1501811 4.750755,4.8073986 z M 11.944862,0 C 8.2143153,0 5.1941071,3.0499793 5.1941071,6.8073986 c 0,1.7488094 0.045614,2.6260782 1.2068384,3.8787554 0.024606,0.02658 -0.044164,-0.05656 0,0 0,0 -0.038344,0.278876 0,0 v 0 0 c -2.4808032,1.090461 -3.364149,2.050604 -4.5819667,3.646579 -1.72901696,2.265911 -2.09230889,4.677522 -1.67173122,6.812931 0.05754,0.292149 0.11803058,0.510741 0.16481213,0.645557 0.10312843,0.297197 0.34009473,0.528542 0.63968187,0.624507 2.27434362,0.728528 4.61458782,1.181487 6.92570822,1.412628 2.7609192,0.201216 5.7367432,0.245097 8.2438502,1.63e-4 2.311327,-0.231134 4.652035,-0.684167 6.926934,-1.412838 0.299593,-0.09596 0.536566,-0.327309 0.639696,-0.624511 0.04678,-0.13482 0.107275,-0.353419 0.164817,-0.645577 0.420577,-2.135401 -0.0084,-4.633265 -1.723355,-6.748195 C 21.425651,13.480387 17.597504,10.811464 18.008421,10.35195 18.603951,9.6859906 18.82723,9.0455667 18.806155,6.8073446 18.806156,3.0499793 15.785948,0 12.055401,0 Z"
+ id="path8"
+ sodipodi:nodetypes="sccsccscsccsccsccsssssscccccssssccssscscss" />
rootContext()->setContextProperty("Colors", mColorListModel->getQmlData());
mEngine->rootContext()->setContextProperty("Images", mImageListModel->getQmlData());
+ mEngine->rootContext()->setContextProperty("qtIsNewer_5_15_0", QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) );
+
registerTypes();
registerSharedTypes();
registerToolTypes();
diff --git a/linphone-app/src/app/providers/ImageProvider.cpp b/linphone-app/src/app/providers/ImageProvider.cpp
index 8c0c96340..0d72ba599 100644
--- a/linphone-app/src/app/providers/ImageProvider.cpp
+++ b/linphone-app/src/app/providers/ImageProvider.cpp
@@ -286,7 +286,9 @@ QImage ImageProvider::requestImage (const QString &id, QSize *size, const QSize
qWarning() << QStringLiteral("Invalid svg file: `%1`.").arg(path);
return QImage();
}
-
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ renderer.setAspectRatioMode(Qt::KeepAspectRatio);
+#endif
QSize askedSize = !requestedSize.isEmpty()
? requestedSize
: renderer.defaultSize() * QGuiApplication::primaryScreen()->devicePixelRatio();
diff --git a/linphone-app/src/utils/Utils.cpp b/linphone-app/src/utils/Utils.cpp
index b1fb49ccb..b51f7d962 100644
--- a/linphone-app/src/utils/Utils.cpp
+++ b/linphone-app/src/utils/Utils.cpp
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
#include "config.h"
#include "Utils.hpp"
@@ -545,4 +546,22 @@ bool Utils::isPhoneNumber(const QString& txt){
return false;
auto account = core->getDefaultAccount();
return account && account->isPhoneNumber(Utils::appStringToCoreString(txt));
+}
+
+QSize Utils::getImageSize(const QString& url){
+ QString path;
+ QUrl urlDecode(url);
+ if(urlDecode.isLocalFile())
+ path = QDir::toNativeSeparators(urlDecode.toLocalFile());
+ else
+ path = url;
+ QFileInfo info(path);
+ if( !info.exists())
+ return QSize(0,0);
+ QImageReader reader(path);
+ QSize s = reader.size();
+ if( s.isValid())
+ return s;
+ else
+ return QSize(0,0);
}
\ No newline at end of file
diff --git a/linphone-app/src/utils/Utils.hpp b/linphone-app/src/utils/Utils.hpp
index e590cc167..141d447b3 100644
--- a/linphone-app/src/utils/Utils.hpp
+++ b/linphone-app/src/utils/Utils.hpp
@@ -62,6 +62,7 @@ public:
Q_INVOKABLE static bool isMe(const QString& address);
Q_INVOKABLE static bool isAnimatedImage(const QString& path);
Q_INVOKABLE static bool isPhoneNumber(const QString& txt);
+ Q_INVOKABLE QSize getImageSize(const QString& url);
//----------------------------------------------------------------------------------
static inline QString coreStringToAppString (const std::string &str) {
diff --git a/linphone-app/ui/modules/Common/Image/Icon.qml b/linphone-app/ui/modules/Common/Image/Icon.qml
index 26f0b2625..bc9b74b95 100644
--- a/linphone-app/ui/modules/Common/Image/Icon.qml
+++ b/linphone-app/ui/modules/Common/Image/Icon.qml
@@ -4,6 +4,7 @@ import QtGraphicalEffects 1.12
import Common 1.0
import Linphone 1.0
import Utils 1.0
+import UtilsCpp 1.0
// =============================================================================
// An icon image properly resized.
@@ -32,21 +33,29 @@ Item {
Image {
id:image
+ anchors.fill: parent
+
property bool colorOverwriteEnabled : false
mipmap: SettingsModel.mipmapEnabled
cache: Images.areReadOnlyImages
asynchronous: true
smooth: true
- //anchors.centerIn: parent
- anchors.fill: parent
+ antialiasing: false
+// Better quality is only available from Qt5.15
+ fillMode: !qtIsNewer_5_15_0 ? Image.PreserveAspectFit : Image.Stretch // Stretch is default from Qt's doc
+ // Keep aspect ratio is done by ImagePovider that use directly SVG scalings (=no loss quality).
+ source: width != 0 && height != 0 ? Utils.resolveImageUri(icon) : '' // Do not load image with unknown requested size
+ sourceSize.width: qtIsNewer_5_15_0
+ ? fillMode == Image.TileHorizontally
+ ? height
+ : width
+ : 0
+ sourceSize.height: qtIsNewer_5_15_0
+ ? fillMode == Image.TileVertically
+ ? width
+ : height
+ : 0
- //width: iconWidth > 0 ? iconWidth : mainItem.width
- //height: iconHeight > 0 ? iconHeight : mainItem.height
-
- fillMode: Image.PreserveAspectFit
- source: Utils.resolveImageUri(icon)
- sourceSize.width: (iconWidth > 0 ? iconWidth : iconSize)
- sourceSize.height: ( iconHeight > 0 ? iconHeight : iconSize)
layer {
enabled: image.colorOverwriteEnabled
effect: ColorOverlay {