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 {