7#include <QtQml/qqmlinfo.h>
8#include <QtQml/qqmlfile.h>
9#include <QtQml/qqmlengine.h>
10#if QT_CONFIG(qml_network)
11#include <QtNetwork/qnetworkreply.h>
13#include <QtCore/qfile.h>
14#include <QtCore/qmath.h>
15#include <QtGui/qguiapplication.h>
17#include <private/qqmlglobal_p.h>
18#include <private/qsgadaptationlayer_p.h>
150#if QT_CONFIG(qml_network)
153 d->sciReply->deleteLater();
251#if QT_CONFIG(qml_network)
253 d->sciReply->deleteLater();
254 d->sciReply =
nullptr;
270 if (
d->url.isEmpty()) {
284#if QT_CONFIG(qml_network)
289 d->sciReply =
qmlEngine(
this)->networkAccessManager()->get(req);
333 return d->getScaleGrid();
351 return d->horizontalTileMode;
357 if (
t !=
d->horizontalTileMode) {
358 d->horizontalTileMode =
t;
367 return d->verticalTileMode;
373 if (
t !=
d->verticalTileMode) {
374 d->verticalTileMode =
t;
383 if (!sci.isValid()) {
387 sg->
setTop(sci.gridTop());
391 d->horizontalTileMode = sci.horizontalTileRule();
392 d->verticalTileMode = sci.verticalTileRule();
394 d->sciurl =
d->url.resolved(
QUrl(sci.pixmapUrl()));
403 if (
d->pendingPix !=
d->currentPix) {
404 std::swap(
d->pendingPix,
d->currentPix);
405 d->pendingPix->clear(
this);
408 const QSize impsize =
d->currentPix->implicitSize();
409 setImplicitSize(impsize.width() /
d->devicePixelRatio, impsize.height() /
d->devicePixelRatio);
411 if (
d->currentPix->isError()) {
424 if (
d->frameCount !=
d->currentPix->frameCount()) {
425 d->frameCount =
d->currentPix->frameCount();
426 emit frameCountChanged();
432#if QT_CONFIG(qml_network)
433void QQuickBorderImage::sciRequestFinished()
439 d->sciReply->deleteLater();
440 d->sciReply =
nullptr;
443 d->sciReply->deleteLater();
444 d->sciReply =
nullptr;
445 setGridScaledImage(sci);
450void QQuickBorderImage::doUpdate()
456 const QSize &sourceSize,
458 int horizontalTileMode,
459 int verticalTileMode,
460 qreal devicePixelRatio,
466 *innerSourceRect =
QRectF(0, 0, 1, 1);
468 *innerTargetRect = *targetRect;
475 if (borderLeft + borderRight > sourceSize.
width() && borderLeft < sourceSize.
width())
476 borderRight = sourceSize.
width() - borderLeft;
477 if (borderTop + borderBottom > sourceSize.
height() && borderTop < sourceSize.
height())
478 borderBottom = sourceSize.
height() - borderTop;
492 if (innerSourceRect->width() <= 0)
495 hTiles = innerTargetSize.
width() /
qreal(innerSourceRect->width() * sourceSize.
width());
497 hTiles =
qCeil(hTiles);
499 if (innerSourceRect->height() <= 0)
502 vTiles = innerTargetSize.height() /
qreal(innerSourceRect->height() * sourceSize.
height());
504 vTiles =
qCeil(vTiles);
507 *subSourceRect =
QRectF(0, 0, hTiles, vTiles);
524 bool updatePixmap =
d->pixmapChanged;
525 d->pixmapChanged =
false;
527 node =
d->sceneGraphContext()->createInternalImageNode(
d->sceneGraphRenderContext());
539 d->calculateRects(
d->border,
541 d->horizontalTileMode,
d->verticalTileMode,
d->devicePixelRatio,
542 &targetRect, &innerTargetRect,
543 &innerSourceRect, &subSourceRect);
549 node->
setMirror(
d->mirrorHorizontally,
d->mirrorVertically);
553 if (innerSourceRect ==
QRectF(0, 0, 1, 1) && (subSourceRect.width() > 1 || subSourceRect.height() > 1)) {
569 d->pixmapChanged =
true;
594#include "moc_qquickborderimage_p.cpp"
QFILE_MAYBE_NODISCARD bool open(OpenMode flags) override
Opens the file using OpenMode mode, returning true if successful; otherwise false.
The QNetworkReply class contains the data and headers for a request sent with QNetworkAccessManager.
The QNetworkRequest class holds a request to be sent with QNetworkAccessManager.
\inmodule QtCore\reentrant
The QQmlContext class defines a context within a QML engine.
static QString urlToLocalFileOrQrc(const QString &)
If url is a local file returns a path suitable for passing to \l{QFile}.
QQuickBorderImage::TileMode verticalTileMode
static void calculateRects(const QQuickScaleGrid *border, const QSize &sourceSize, const QSizeF &targetSize, int horizontalTileMode, int verticalTileMode, qreal devicePixelRatio, QRectF *targetRect, QRectF *innerTargetRect, QRectF *innerSourceRect, QRectF *subSourceRect)
QQuickBorderImage::TileMode horizontalTileMode
void setHorizontalTileMode(TileMode)
void verticalTileModeChanged()
QQuickBorderImage(QQuickItem *parent=nullptr)
\qmltype BorderImage \instantiates QQuickBorderImage \inqmlmodule QtQuick
QSGNode * updatePaintNode(QSGNode *, UpdatePaintNodeData *) override
Called on the render thread when it is time to sync the state of the item with the scene graph.
void pixmapChange() override
void setSource(const QUrl &url) override
\qmlproperty enumeration QtQuick::BorderImage::status
void requestFinished() override
void horizontalTileModeChanged()
void setVerticalTileMode(TileMode)
TileMode verticalTileMode
TileMode horizontalTileMode
void loadPixmap(const QUrl &url, LoadPixmapOptions loadOptions=NoOption)
void sourceChanged(const QUrl &)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
QQuickWindow * window() const
Returns the window in which this item is rendered.
qreal width
This property holds the width of this item.
bool isComponentComplete() const
Returns true if construction of the QML component is complete; otherwise returns false.
qreal height
This property holds the height of this item.
void update()
Schedules a call to updatePaintNode() for this item.
void setImplicitSize(qreal, qreal)
The QQuickScaleGrid class allows you to specify a 3x3 grid to use in scaling an image.
\inmodule QtCore\reentrant
virtual void setHorizontalWrapMode(QSGTexture::WrapMode wrapMode)=0
virtual void setTexture(QSGTexture *texture)=0
virtual void setTargetRect(const QRectF &rect)=0
virtual void setFiltering(QSGTexture::Filtering filtering)=0
virtual void setInnerSourceRect(const QRectF &rect)=0
virtual void setSubSourceRect(const QRectF &rect)=0
virtual void setInnerTargetRect(const QRectF &rect)=0
virtual void setAntialiasing(bool antialiasing)
virtual void setMipmapFiltering(QSGTexture::Filtering filtering)=0
virtual void setMirror(bool horizontally, bool vertically)=0
virtual void setVerticalWrapMode(QSGTexture::WrapMode wrapMode)=0
\group qtquick-scenegraph-nodes \title Qt Quick Scene Graph Node classes
constexpr qreal width() const noexcept
Returns the width.
constexpr qreal height() const noexcept
Returns the height.
constexpr int height() const noexcept
Returns the height.
constexpr int width() const noexcept
Returns the width.
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
QString url(FormattingOptions options=FormattingOptions(PrettyDecoded)) const
Returns a string representation of the URL.
Combined button and popup list for selecting options.
GLint GLenum GLsizei GLsizei GLsizei GLint border
QQmlEngine * qmlEngine(const QObject *obj)
QQmlContext * qmlContext(const QObject *obj)
#define qmlobject_connect(Sender, SenderType, Signal, Receiver, ReceiverType, Method)
Connect Signal of Sender to Method of Receiver.
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
QUrl url("example.com")
[constructor-url-reference]
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)