diff options
Diffstat (limited to 'src/quick/util/qquickimageprovider.cpp')
-rw-r--r-- | src/quick/util/qquickimageprovider.cpp | 71 |
1 files changed, 28 insertions, 43 deletions
diff --git a/src/quick/util/qquickimageprovider.cpp b/src/quick/util/qquickimageprovider.cpp index b885f0406a..27134c9deb 100644 --- a/src/quick/util/qquickimageprovider.cpp +++ b/src/quick/util/qquickimageprovider.cpp @@ -1,46 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtQuick module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qquickimageprovider.h" #include "qquickimageprovider_p.h" -#include "qquickpixmapcache_p.h" +#include "qquickpixmap_p.h" #include <QtQuick/private/qsgcontext_p.h> #include <private/qqmlglobal_p.h> #include <QtGui/qcolorspace.h> @@ -469,7 +433,7 @@ QQuickTextureFactory *QQuickImageProvider::requestTexture(const QString &id, QSi \class QQuickAsyncImageProvider \since 5.6 \inmodule QtQuick - \brief The QQuickAsyncImageProvider class provides an interface for for asynchronous control of QML image requests. + \brief The QQuickAsyncImageProvider class provides an interface for asynchronous control of QML image requests. See the \l {imageresponseprovider}{Image Response Provider Example} for a complete implementation. @@ -512,6 +476,7 @@ public: } QColorSpace targetColorSpace; + QRectF sourceClipRect; QQuickImageProviderOptions::AutoTransform autoTransform = QQuickImageProviderOptions::UsePluginDefaultTransform; bool preserveAspectRatioCrop = false; bool preserveAspectRatioFit = false; @@ -618,6 +583,19 @@ void QQuickImageProviderOptions::setTargetColorSpace(const QColorSpace &colorSpa d->targetColorSpace = colorSpace; } +/*! + Returns the requested source clip rect. +*/ +QRectF QQuickImageProviderOptions::sourceClipRect() const +{ + return d->sourceClipRect; +} + +void QQuickImageProviderOptions::setSourceClipRect(const QRectF &rect) +{ + d->sourceClipRect = rect; +} + QQuickImageProviderWithOptions::QQuickImageProviderWithOptions(ImageType type, Flags flags) : QQuickAsyncImageProvider() { @@ -681,14 +659,21 @@ QQuickImageResponse *QQuickImageProviderWithOptions::requestImageResponse(const and \a options. If the calculation otherwise concludes that scaled loading is not recommended, an invalid size is returned. */ -QSize QQuickImageProviderWithOptions::loadSize(const QSize &originalSize, const QSize &requestedSize, const QByteArray &format, const QQuickImageProviderOptions &options) +QSize QQuickImageProviderWithOptions::loadSize(const QSize &originalSize, const QSize &requestedSize, const QByteArray &format, const QQuickImageProviderOptions &options, + qreal devicePixelRatio) { QSize res; - if ((requestedSize.width() <= 0 && requestedSize.height() <= 0) || originalSize.isEmpty()) + const bool formatIsScalable = (format == "svg" || format == "svgz" || format == "pdf"); + const bool noRequestedSize = requestedSize.width() <= 0 && requestedSize.height() <= 0; + if ((noRequestedSize && !formatIsScalable) || originalSize.isEmpty()) return res; + // If no sourceSize was set and we're loading an SVG, ensure that we provide + // a default size that accounts for DPR so that the image isn't blurry. + if (noRequestedSize && formatIsScalable) + return originalSize * devicePixelRatio; + const bool preserveAspectCropOrFit = options.preserveAspectRatioCrop() || options.preserveAspectRatioFit(); - const bool formatIsScalable = (format == "svg" || format == "svgz" || format == "pdf"); if (!preserveAspectCropOrFit && formatIsScalable && !requestedSize.isEmpty()) return requestedSize; |