aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@qt.io>2018-03-08 18:35:03 +0100
committerMorten Johan Sørvig <morten.sorvig@qt.io>2018-03-08 18:35:03 +0100
commitd9ea4917ca97aeee050a86151fbfa069771b498d (patch)
tree21fd6960d8a866bf6f5a5a8f9db9be801f8065c1 /src/quick/items
parentf9beafddd256cd0b79bf2478a812053ef61241fc (diff)
parentc6a26c248e8abc421b87c3dd6b2466d490ea902e (diff)
Merge remote-tracking branch 'gerrit/5.11' into wip/webassembly
Diffstat (limited to 'src/quick/items')
-rw-r--r--src/quick/items/context2d/qquickcanvascontext_p.h2
-rw-r--r--src/quick/items/context2d/qquickcanvasitem.cpp54
-rw-r--r--src/quick/items/context2d/qquickcanvasitem_p.h2
-rw-r--r--src/quick/items/context2d/qquickcontext2d.cpp944
-rw-r--r--src/quick/items/context2d/qquickcontext2d_p.h4
-rw-r--r--src/quick/items/context2d/qquickcontext2dtexture.cpp32
-rw-r--r--src/quick/items/context2d/qquickcontext2dtexture_p.h2
-rw-r--r--src/quick/items/context2d/qquickcontext2dtile.cpp6
-rw-r--r--src/quick/items/items.pri12
-rw-r--r--src/quick/items/qquickaccessibleattached.cpp2
-rw-r--r--src/quick/items/qquickanchors.cpp37
-rw-r--r--src/quick/items/qquickanchors_p.h5
-rw-r--r--src/quick/items/qquickanchors_p_p.h6
-rw-r--r--src/quick/items/qquickanimatedimage.cpp147
-rw-r--r--src/quick/items/qquickanimatedimage_p.h7
-rw-r--r--src/quick/items/qquickanimatedimage_p_p.h22
-rw-r--r--src/quick/items/qquickanimatedsprite.cpp80
-rw-r--r--src/quick/items/qquickanimatedsprite_p.h2
-rw-r--r--src/quick/items/qquickborderimage.cpp8
-rw-r--r--src/quick/items/qquickborderimage_p.h2
-rw-r--r--src/quick/items/qquickdrag.cpp18
-rw-r--r--src/quick/items/qquickdrag_p.h10
-rw-r--r--src/quick/items/qquickdroparea.cpp6
-rw-r--r--src/quick/items/qquickevents.cpp227
-rw-r--r--src/quick/items/qquickevents_p_p.h81
-rw-r--r--src/quick/items/qquickflickable.cpp88
-rw-r--r--src/quick/items/qquickflickable_p.h2
-rw-r--r--src/quick/items/qquickflickable_p_p.h8
-rw-r--r--src/quick/items/qquickflipable.cpp4
-rw-r--r--src/quick/items/qquickflipable_p.h2
-rw-r--r--src/quick/items/qquickfocusscope_p.h2
-rw-r--r--src/quick/items/qquickframebufferobject.cpp31
-rw-r--r--src/quick/items/qquickgenericshadereffect.cpp6
-rw-r--r--src/quick/items/qquickgenericshadereffect_p.h2
-rw-r--r--src/quick/items/qquickgraphicsinfo.cpp2
-rw-r--r--src/quick/items/qquickgridview.cpp44
-rw-r--r--src/quick/items/qquickgridview_p.h2
-rw-r--r--src/quick/items/qquickimage.cpp14
-rw-r--r--src/quick/items/qquickimage_p.h2
-rw-r--r--src/quick/items/qquickimagebase_p.h2
-rw-r--r--src/quick/items/qquickitem.cpp327
-rw-r--r--src/quick/items/qquickitem.h8
-rw-r--r--src/quick/items/qquickitem_p.h71
-rw-r--r--src/quick/items/qquickitemanimation.cpp12
-rw-r--r--src/quick/items/qquickitemanimation_p.h12
-rw-r--r--src/quick/items/qquickitemanimation_p_p.h10
-rw-r--r--src/quick/items/qquickitemchangelistener_p.h2
-rw-r--r--src/quick/items/qquickitemgrabresult.cpp14
-rw-r--r--src/quick/items/qquickitemsmodule.cpp18
-rw-r--r--src/quick/items/qquickitemview.cpp237
-rw-r--r--src/quick/items/qquickitemview_p.h2
-rw-r--r--src/quick/items/qquickitemview_p_p.h2
-rw-r--r--src/quick/items/qquickitemviewtransition.cpp36
-rw-r--r--src/quick/items/qquickitemviewtransition_p.h18
-rw-r--r--src/quick/items/qquicklistview.cpp77
-rw-r--r--src/quick/items/qquicklistview_p.h6
-rw-r--r--src/quick/items/qquickloader.cpp63
-rw-r--r--src/quick/items/qquickloader_p.h3
-rw-r--r--src/quick/items/qquickmousearea.cpp24
-rw-r--r--src/quick/items/qquickmousearea_p.h2
-rw-r--r--src/quick/items/qquickmousearea_p_p.h3
-rw-r--r--src/quick/items/qquickmultipointtoucharea.cpp55
-rw-r--r--src/quick/items/qquickmultipointtoucharea_p.h45
-rw-r--r--src/quick/items/qquickopenglinfo.cpp6
-rw-r--r--src/quick/items/qquickopenglshadereffect.cpp23
-rw-r--r--src/quick/items/qquickopenglshadereffect_p.h4
-rw-r--r--src/quick/items/qquickopenglshadereffectnode.cpp4
-rw-r--r--src/quick/items/qquickopenglshadereffectnode_p.h4
-rw-r--r--src/quick/items/qquickpainteditem.cpp26
-rw-r--r--src/quick/items/qquickpainteditem.h2
-rw-r--r--src/quick/items/qquickpathview.cpp4
-rw-r--r--src/quick/items/qquickpincharea.cpp5
-rw-r--r--src/quick/items/qquickpincharea_p.h4
-rw-r--r--src/quick/items/qquickpositioners.cpp16
-rw-r--r--src/quick/items/qquickpositioners_p.h10
-rw-r--r--src/quick/items/qquickrectangle.cpp4
-rw-r--r--src/quick/items/qquickrectangle_p.h10
-rw-r--r--src/quick/items/qquickrendercontrol.cpp18
-rw-r--r--src/quick/items/qquickrendercontrol.h2
-rw-r--r--src/quick/items/qquickrepeater.cpp36
-rw-r--r--src/quick/items/qquickrepeater_p.h6
-rw-r--r--src/quick/items/qquickrepeater_p_p.h2
-rw-r--r--src/quick/items/qquickscalegrid_p_p.h2
-rw-r--r--src/quick/items/qquickscreen.cpp6
-rw-r--r--src/quick/items/qquickshadereffect_p.h2
-rw-r--r--src/quick/items/qquickshadereffectmesh_p.h6
-rw-r--r--src/quick/items/qquickshadereffectsource.cpp32
-rw-r--r--src/quick/items/qquickshadereffectsource_p.h4
-rw-r--r--src/quick/items/qquicksprite.cpp6
-rw-r--r--src/quick/items/qquicksprite_p.h4
-rw-r--r--src/quick/items/qquickspriteengine.cpp10
-rw-r--r--src/quick/items/qquickspriteengine_p.h27
-rw-r--r--src/quick/items/qquickspritesequence.cpp2
-rw-r--r--src/quick/items/qquickspritesequence_p.h2
-rw-r--r--src/quick/items/qquickstateoperations.cpp46
-rw-r--r--src/quick/items/qquickstateoperations_p.h6
-rw-r--r--src/quick/items/qquicktext.cpp28
-rw-r--r--src/quick/items/qquicktext_p.h6
-rw-r--r--src/quick/items/qquicktext_p_p.h2
-rw-r--r--src/quick/items/qquicktextcontrol.cpp2
-rw-r--r--src/quick/items/qquicktextcontrol_p.h2
-rw-r--r--src/quick/items/qquicktextedit.cpp94
-rw-r--r--src/quick/items/qquicktextedit_p.h4
-rw-r--r--src/quick/items/qquicktextedit_p_p.h18
-rw-r--r--src/quick/items/qquicktextinput.cpp54
-rw-r--r--src/quick/items/qquicktextinput_p.h4
-rw-r--r--src/quick/items/qquicktextinput_p_p.h6
-rw-r--r--src/quick/items/qquicktextnode.cpp12
-rw-r--r--src/quick/items/qquicktextnodeengine.cpp48
-rw-r--r--src/quick/items/qquicktextutil.cpp2
-rw-r--r--src/quick/items/qquicktranslate_p.h8
-rw-r--r--src/quick/items/qquickview.cpp32
-rw-r--r--src/quick/items/qquickview.h3
-rw-r--r--src/quick/items/qquickview_p.h2
-rw-r--r--src/quick/items/qquickwindow.cpp420
-rw-r--r--src/quick/items/qquickwindow.h9
-rw-r--r--src/quick/items/qquickwindow_p.h14
-rw-r--r--src/quick/items/qquickwindowattached.cpp2
-rw-r--r--src/quick/items/qquickwindowmodule.cpp19
119 files changed, 2312 insertions, 1796 deletions
diff --git a/src/quick/items/context2d/qquickcanvascontext_p.h b/src/quick/items/context2d/qquickcanvascontext_p.h
index 0746b7dcd3..95100d2912 100644
--- a/src/quick/items/context2d/qquickcanvascontext_p.h
+++ b/src/quick/items/context2d/qquickcanvascontext_p.h
@@ -69,7 +69,7 @@ class QQuickCanvasContext : public QObject
Q_OBJECT
public:
- QQuickCanvasContext(QObject *parent = 0);
+ QQuickCanvasContext(QObject *parent = nullptr);
~QQuickCanvasContext();
virtual QStringList contextNames() const = 0;
diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp
index 57936d8cec..59917ce531 100644
--- a/src/quick/items/context2d/qquickcanvasitem.cpp
+++ b/src/quick/items/context2d/qquickcanvasitem.cpp
@@ -71,7 +71,7 @@ public:
};
QQuickCanvasPixmap::QQuickCanvasPixmap(const QImage& image)
- : m_pixmap(0)
+ : m_pixmap(nullptr)
, m_image(image)
{
@@ -123,7 +123,7 @@ QHash<QQmlEngine *,QQuickContext2DRenderThread*> QQuickContext2DRenderThread::re
QMutex QQuickContext2DRenderThread::renderThreadsMutex;
QQuickContext2DRenderThread::QQuickContext2DRenderThread(QQmlEngine *eng)
- : QThread(eng), m_engine(eng), m_eventLoopQuitHack(0)
+ : QThread(eng), m_engine(eng), m_eventLoopQuitHack(nullptr)
{
Q_ASSERT(eng);
m_eventLoopQuitHack = new QObject;
@@ -144,7 +144,7 @@ QQuickContext2DRenderThread::~QQuickContext2DRenderThread()
QQuickContext2DRenderThread *QQuickContext2DRenderThread::instance(QQmlEngine *engine)
{
- QQuickContext2DRenderThread *thread = 0;
+ QQuickContext2DRenderThread *thread = nullptr;
renderThreadsMutex.lock();
if (renderThreads.contains(engine))
thread = renderThreads.value(engine);
@@ -183,7 +183,7 @@ public:
QQuickCanvasItemPrivate::QQuickCanvasItemPrivate()
: QQuickItemPrivate()
- , context(0)
+ , context(nullptr)
, canvasSize(1, 1)
, tileSize(1, 1)
, hasCanvasSize(false)
@@ -192,9 +192,9 @@ QQuickCanvasItemPrivate::QQuickCanvasItemPrivate()
, available(false)
, renderTarget(QQuickCanvasItem::Image)
, renderStrategy(QQuickCanvasItem::Immediate)
- , textureProvider(0)
- , node(0)
- , nodeTexture(0)
+ , textureProvider(nullptr)
+ , node(nullptr)
+ , nodeTexture(nullptr)
{
implicitAntialiasing = true;
}
@@ -634,16 +634,16 @@ void QQuickCanvasItem::releaseResources()
if (d->context) {
delete d->context;
- d->context = 0;
+ d->context = nullptr;
}
- d->node = 0; // managed by the scene graph, just reset the pointer
+ d->node = nullptr; // managed by the scene graph, just reset the pointer
if (d->textureProvider) {
QQuickWindowQObjectCleanupJob::schedule(window(), d->textureProvider);
- d->textureProvider = 0;
+ d->textureProvider = nullptr;
}
if (d->nodeTexture) {
QQuickWindowQObjectCleanupJob::schedule(window(), d->nodeTexture);
- d->nodeTexture = 0;
+ d->nodeTexture = nullptr;
}
}
@@ -663,12 +663,12 @@ void QQuickCanvasItem::invalidateSceneGraph()
Q_D(QQuickCanvasItem);
if (d->context)
d->context->deleteLater();
- d->context = 0;
- d->node = 0; // managed by the scene graph, just reset the pointer
+ d->context = nullptr;
+ d->node = nullptr; // managed by the scene graph, just reset the pointer
delete d->textureProvider;
- d->textureProvider = 0;
+ d->textureProvider = nullptr;
delete d->nodeTexture;
- d->nodeTexture = 0;
+ d->nodeTexture = nullptr;
}
void QQuickCanvasItem::schedulePolish()
@@ -698,14 +698,14 @@ void QQuickCanvasItem::itemChange(QQuickItem::ItemChange change, const QQuickIte
return;
}
- if (value.window== 0)
+ if (value.window== nullptr)
return;
d->window = value.window;
QSGRenderContext *context = QQuickWindowPrivate::get(d->window)->context;
// Rendering to FramebufferObject needs a valid OpenGL context.
- if (context != 0 && (d->renderTarget != FramebufferObject || context->isValid())) {
+ if (context != nullptr && (d->renderTarget != FramebufferObject || context->isValid())) {
// Defer the call. In some (arguably incorrect) cases we get here due
// to ItemSceneChange with the user-supplied property values not yet
// set. Work this around by a deferred invoke. (QTBUG-49692)
@@ -727,7 +727,7 @@ void QQuickCanvasItem::updatePolish()
QMap<int, QV4::PersistentValue> animationCallbacks = d->animationCallbacks;
d->animationCallbacks.clear();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(qmlEngine(this));
+ QV4::ExecutionEngine *v4 = qmlEngine(this)->handle();
QV4::Scope scope(v4);
QV4::ScopedFunctionObject function(scope);
QV4::JSCallData jsCall(scope, 1);
@@ -763,11 +763,11 @@ QSGNode *QQuickCanvasItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
if (!d->context || d->canvasWindow.size().isEmpty()) {
if (d->textureProvider) {
- d->textureProvider->tex = 0;
+ d->textureProvider->tex = nullptr;
d->textureProvider->fireTextureChanged();
}
delete oldNode;
- return 0;
+ return nullptr;
}
QSGInternalImageNode *node = static_cast<QSGInternalImageNode *>(oldNode);
@@ -792,13 +792,13 @@ QSGNode *QQuickCanvasItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
QSGTexture *texture = factory->textureForNextFrame(d->nodeTexture, window());
if (!texture) {
delete node;
- d->node = 0;
- d->nodeTexture = 0;
+ d->node = nullptr;
+ d->nodeTexture = nullptr;
if (d->textureProvider) {
- d->textureProvider->tex = 0;
+ d->textureProvider->tex = nullptr;
d->textureProvider->fireTextureChanged();
}
- return 0;
+ return nullptr;
}
d->nodeTexture = texture;
@@ -833,7 +833,7 @@ QSGTextureProvider *QQuickCanvasItem::textureProvider() const
if (!w || !w->isSceneGraphInitialized()
|| QThread::currentThread() != QQuickWindowPrivate::get(w)->context->thread()) {
qWarning("QQuickCanvasItem::textureProvider: can only be queried on the rendering thread of an exposed window");
- return 0;
+ return nullptr;
}
#endif
if (!d->textureProvider)
@@ -879,7 +879,7 @@ void QQuickCanvasItem::getContext(QQmlV4Function *args)
QString contextId = str->toQString();
- if (d->context != 0) {
+ if (d->context != nullptr) {
if (d->context->contextNames().contains(contextId, Qt::CaseInsensitive)) {
args->setReturnValue(d->context->v4value());
return;
@@ -1210,7 +1210,7 @@ void QQuickCanvasItem::initializeContext(QQuickCanvasContext *context, const QVa
d->context = context;
d->context->init(this, args);
- d->context->setV4Engine(QQmlEnginePrivate::get(qmlEngine(this))->v4engine());
+ d->context->setV4Engine(qmlEngine(this)->handle());
connect(d->context, SIGNAL(textureChanged()), SLOT(update()));
connect(d->context, SIGNAL(textureChanged()), SIGNAL(painted()));
emit contextChanged();
diff --git a/src/quick/items/context2d/qquickcanvasitem_p.h b/src/quick/items/context2d/qquickcanvasitem_p.h
index 59de847680..7dc981a6eb 100644
--- a/src/quick/items/context2d/qquickcanvasitem_p.h
+++ b/src/quick/items/context2d/qquickcanvasitem_p.h
@@ -114,7 +114,7 @@ public:
};
Q_ENUM(RenderStrategy)
- QQuickCanvasItem(QQuickItem *parent = 0);
+ QQuickCanvasItem(QQuickItem *parent = nullptr);
~QQuickCanvasItem();
bool isAvailable() const;
diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp
index 49b2bf5838..af8048f2e4 100644
--- a/src/quick/items/context2d/qquickcontext2d.cpp
+++ b/src/quick/items/context2d/qquickcontext2d.cpp
@@ -304,7 +304,7 @@ static QStringList qExtractFontFamiliesFromString(const QStringRef &fontFamilies
return extractedFamilies;
}
-/*!
+/*
Tries to set a family on \a font using the families provided in \a fontFamilyTokens.
The list is ordered by preference, with the first family having the highest preference.
@@ -364,7 +364,7 @@ if (!(usedTokens & token)) { \
return currentFont; \
}
-/*!
+/*
Parses a font string based on the CSS shorthand font property.
See: http://www.w3.org/TR/css3-fonts/#font-prop
@@ -544,46 +544,46 @@ struct QQuickJSContext2D : public QV4::Object
{
V4_OBJECT2(QQuickJSContext2D, QV4::Object)
- static QV4::ReturnedValue method_get_globalAlpha(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_globalAlpha(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_globalCompositeOperation(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_globalCompositeOperation(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_fillStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_fillStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_fillRule(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_fillRule(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_strokeStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_strokeStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData);
-
- static QV4::ReturnedValue method_get_lineCap(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_lineCap(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_lineJoin(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_lineJoin(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_lineWidth(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_lineWidth(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_miterLimit(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_miterLimit(const QV4::BuiltinFunction *b, QV4::CallData *callData);
-
- static QV4::ReturnedValue method_get_shadowBlur(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_shadowBlur(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_shadowColor(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_shadowColor(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_shadowOffsetX(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_shadowOffsetX(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_shadowOffsetY(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_shadowOffsetY(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue method_get_globalAlpha(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_globalAlpha(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_globalCompositeOperation(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_globalCompositeOperation(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_fillStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_fillStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_fillRule(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_fillRule(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_strokeStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_strokeStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+
+ static QV4::ReturnedValue method_get_lineCap(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_lineCap(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_lineJoin(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_lineJoin(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_lineWidth(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_lineWidth(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_miterLimit(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_miterLimit(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+
+ static QV4::ReturnedValue method_get_shadowBlur(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_shadowBlur(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_shadowColor(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_shadowColor(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_shadowOffsetX(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_shadowOffsetX(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_shadowOffsetY(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_shadowOffsetY(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
// should these two be on the proto?
#if QT_CONFIG(quick_path)
- static QV4::ReturnedValue method_get_path(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_path(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue method_get_path(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_path(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
#endif
- static QV4::ReturnedValue method_get_font(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_font(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_textAlign(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_textAlign(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_textBaseline(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_set_textBaseline(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue method_get_font(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_font(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_textAlign(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_textAlign(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_textBaseline(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_set_textBaseline(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
};
DEFINE_OBJECT_VTABLE(QQuickJSContext2D);
@@ -641,55 +641,55 @@ public:
o->defineDefaultProperty(QStringLiteral("createLinearGradient"), method_createLinearGradient, 0);
o->defineDefaultProperty(QStringLiteral("strokeRect"), method_strokeRect, 0);
o->defineDefaultProperty(QStringLiteral("closePath"), method_closePath, 0);
- o->defineAccessorProperty(QStringLiteral("canvas"), QQuickJSContext2DPrototype::method_get_canvas, 0);
+ o->defineAccessorProperty(QStringLiteral("canvas"), QQuickJSContext2DPrototype::method_get_canvas, nullptr);
return o->d();
}
- static QV4::ReturnedValue method_get_canvas(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_restore(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_reset(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_save(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_rotate(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_scale(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_translate(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_setTransform(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_transform(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_resetTransform(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_shear(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_createLinearGradient(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_createRadialGradient(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_createConicalGradient(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_createPattern(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_clearRect(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_fillRect(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_strokeRect(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_arc(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_arcTo(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_beginPath(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_bezierCurveTo(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_clip(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_closePath(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_fill(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_lineTo(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_moveTo(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_quadraticCurveTo(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_rect(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_roundedRect(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_ellipse(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_text(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_stroke(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_isPointInPath(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_drawFocusRing(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_setCaretSelectionRect(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_caretBlinkRate(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_fillText(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_strokeText(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_measureText(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_drawImage(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_createImageData(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_getImageData(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_putImageData(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue method_get_canvas(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_restore(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_reset(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_save(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_rotate(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_scale(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_translate(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_setTransform(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_transform(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_resetTransform(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_shear(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_createLinearGradient(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_createRadialGradient(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_createConicalGradient(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_createPattern(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_clearRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_fillRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_strokeRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_arc(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_arcTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_beginPath(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_bezierCurveTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_clip(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_closePath(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_fill(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_lineTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_moveTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_quadraticCurveTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_rect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_roundedRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_ellipse(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_text(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_stroke(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_isPointInPath(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_drawFocusRing(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_setCaretSelectionRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_caretBlinkRate(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_fillText(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_strokeText(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_measureText(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_drawImage(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_createImageData(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_getImageData(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_putImageData(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
};
@@ -701,7 +701,7 @@ struct QQuickContext2DStyle : public QV4::Object
V4_OBJECT2(QQuickContext2DStyle, QV4::Object)
V4_NEEDS_DESTROY
- static QV4::ReturnedValue gradient_proto_addColorStop(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue gradient_proto_addColorStop(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
};
@@ -911,7 +911,7 @@ struct QQuickJSContext2DPixelData : public QV4::Object
static QV4::ReturnedValue getIndexed(const QV4::Managed *m, uint index, bool *hasProperty);
static bool putIndexed(QV4::Managed *m, uint index, const QV4::Value &value);
- static QV4::ReturnedValue proto_get_length(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue proto_get_length(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
};
void QV4::Heap::QQuickJSContext2DPixelData::init()
@@ -929,9 +929,9 @@ struct QQuickJSContext2DImageData : public QV4::Object
{
V4_OBJECT2(QQuickJSContext2DImageData, QV4::Object)
- static QV4::ReturnedValue method_get_width(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_height(const QV4::BuiltinFunction *b, QV4::CallData *callData);
- static QV4::ReturnedValue method_get_data(const QV4::BuiltinFunction *b, QV4::CallData *callData);
+ static QV4::ReturnedValue method_get_width(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_height(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
+ static QV4::ReturnedValue method_get_data(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc);
};
@@ -943,9 +943,9 @@ void QV4::Heap::QQuickJSContext2DImageData::init()
QV4::Scope scope(internalClass->engine);
QV4::ScopedObject o(scope, this);
- o->defineAccessorProperty(QStringLiteral("width"), ::QQuickJSContext2DImageData::method_get_width, 0);
- o->defineAccessorProperty(QStringLiteral("height"), ::QQuickJSContext2DImageData::method_get_height, 0);
- o->defineAccessorProperty(QStringLiteral("data"), ::QQuickJSContext2DImageData::method_get_data, 0);
+ o->defineAccessorProperty(QStringLiteral("width"), ::QQuickJSContext2DImageData::method_get_width, nullptr);
+ o->defineAccessorProperty(QStringLiteral("height"), ::QQuickJSContext2DImageData::method_get_height, nullptr);
+ o->defineAccessorProperty(QStringLiteral("data"), ::QQuickJSContext2DImageData::method_get_data, nullptr);
}
DEFINE_OBJECT_VTABLE(QQuickJSContext2DImageData);
@@ -979,10 +979,10 @@ static QV4::ReturnedValue qt_create_image_data(qreal w, qreal h, QV4::ExecutionE
This property is read only.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_get_canvas(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_get_canvas(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::QObjectWrapper::wrap(scope.engine, r->d()->context->canvas()));
@@ -994,29 +994,29 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_get_canvas(const QV4::Buil
\sa save()
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_restore(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_restore(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
r->d()->context->popState();
- RETURN_RESULT(callData->thisObject.asReturnedValue());
+ RETURN_RESULT(thisObject->asReturnedValue());
}
/*!
\qmlmethod object QtQuick::Context2D::reset()
Resets the context state and properties to the default values.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_reset(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_reset(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
r->d()->context->reset();
- RETURN_RESULT(callData->thisObject.asReturnedValue());
+ RETURN_RESULT(thisObject->asReturnedValue());
}
/*!
@@ -1049,15 +1049,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_reset(const QV4::BuiltinFu
The current path is NOT part of the drawing state. The path can be reset by
invoking the beginPath() method.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_save(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_save(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
r->d()->context->pushState();
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
// transformations
@@ -1078,15 +1078,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_save(const QV4::BuiltinFun
where the \a angle of rotation is in radians.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_rotate(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_rotate(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 1)
- r->d()->context->rotate(callData->args[0].toNumber());
- RETURN_RESULT(callData->thisObject);
+ if (argc >= 1)
+ r->d()->context->rotate(argv[0].toNumber());
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -1106,16 +1106,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_rotate(const QV4::BuiltinF
\image qml-item-canvas-scale.png
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_scale(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_scale(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 2)
- r->d()->context->scale(callData->args[0].toNumber(), callData->args[1].toNumber());
- RETURN_RESULT(callData->thisObject);
+ if (argc >= 2)
+ r->d()->context->scale(argv[0].toNumber(), argv[1].toNumber());
+ RETURN_RESULT(*thisObject);
}
@@ -1153,22 +1153,22 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_scale(const QV4::BuiltinFu
\sa transform()
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_setTransform(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_setTransform(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 6)
- r->d()->context->setTransform( callData->args[0].toNumber()
- , callData->args[1].toNumber()
- , callData->args[2].toNumber()
- , callData->args[3].toNumber()
- , callData->args[4].toNumber()
- , callData->args[5].toNumber());
+ if (argc >= 6)
+ r->d()->context->setTransform( argv[0].toNumber()
+ , argv[1].toNumber()
+ , argv[2].toNumber()
+ , argv[3].toNumber()
+ , argv[4].toNumber()
+ , argv[5].toNumber());
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -1183,21 +1183,21 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_setTransform(const QV4::Bu
\sa setTransform()
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_transform(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_transform(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 6)
- r->d()->context->transform( callData->args[0].toNumber()
- , callData->args[1].toNumber()
- , callData->args[2].toNumber()
- , callData->args[3].toNumber()
- , callData->args[4].toNumber()
- , callData->args[5].toNumber());
+ if (argc >= 6)
+ r->d()->context->transform( argv[0].toNumber()
+ , argv[1].toNumber()
+ , argv[2].toNumber()
+ , argv[3].toNumber()
+ , argv[4].toNumber()
+ , argv[5].toNumber());
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -1210,15 +1210,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_transform(const QV4::Built
Translating the origin enables you to draw patterns of different objects on the canvas
without having to measure the coordinates manually for each shape.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_translate(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_translate(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 2)
- r->d()->context->translate(callData->args[0].toNumber(), callData->args[1].toNumber());
- RETURN_RESULT(callData->thisObject);
+ if (argc >= 2)
+ r->d()->context->translate(argv[0].toNumber(), argv[1].toNumber());
+ RETURN_RESULT(*thisObject);
}
@@ -1231,15 +1231,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_translate(const QV4::Built
\sa transform(), setTransform(), reset()
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_resetTransform(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_resetTransform(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
r->d()->context->setTransform(1, 0, 0, 1, 0, 0);
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -1250,16 +1250,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_resetTransform(const QV4::
Shears the transformation matrix by \a sh in the horizontal direction and
\a sv in the vertical direction.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_shear(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_shear(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 2)
- r->d()->context->shear(callData->args[0].toNumber(), callData->args[1].toNumber());
+ if (argc >= 2)
+ r->d()->context->shear(argv[0].toNumber(), argv[1].toNumber());
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
// compositing
@@ -1271,22 +1271,22 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_shear(const QV4::BuiltinFu
The value must be in the range from \c 0.0 (fully transparent) to \c 1.0 (fully opaque).
The default value is \c 1.0.
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_globalAlpha(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_globalAlpha(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::Encode(r->d()->context->state.globalAlpha));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_globalAlpha(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_globalAlpha(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT_SETTER(r)
- double globalAlpha = callData->argc() ? callData->args[0].toNumber() : qt_qnan();
+ double globalAlpha = argc ? argv[0].toNumber() : qt_qnan();
if (!qt_is_finite(globalAlpha))
@@ -1325,25 +1325,25 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_globalAlpha(const QV4::BuiltinF
extension composition modes are provided as "vendorName-operationName" syntax, for example: QPainter::CompositionMode_Exclusion is provided as
"qt-exclusion".
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_globalCompositeOperation(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_globalCompositeOperation(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
RETURN_RESULT(scope.engine->newString(qt_composite_mode_to_string(r->d()->context->state.globalCompositeOperation)));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_globalCompositeOperation(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_globalCompositeOperation(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT_SETTER(r)
- if (!callData->argc())
+ if (!argc)
THROW_TYPE_ERROR();
- QString mode = callData->args[0].toQString();
+ QString mode = argv[0].toQString();
QPainter::CompositionMode cm = qt_composite_mode_from_string(mode);
if (cm == QPainter::CompositionMode_SourceOver && mode != QLatin1String("source-over"))
RETURN_UNDEFINED();
@@ -1379,10 +1379,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_globalCompositeOperation(const
\sa createPattern()
\sa strokeStyle
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_fillStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_fillStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
QColor color = r->d()->context->state.fillStyle.color();
@@ -1400,13 +1400,13 @@ QV4::ReturnedValue QQuickJSContext2D::method_get_fillStyle(const QV4::BuiltinFun
RETURN_RESULT(r->d()->context->m_fillStyle.value());
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_fillStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_fillStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedValue value(scope, callData->argument(0));
+ QV4::ScopedValue value(scope, argc ? argv[0] : QV4::Primitive::undefinedValue());
if (value->as<Object>()) {
QColor color = scope.engine->toVariant(value, qMetaTypeId<QColor>()).value<QColor>();
@@ -1446,22 +1446,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_fillStyle(const QV4::BuiltinFun
\sa fillStyle
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_fillRule(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_fillRule(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
RETURN_RESULT(scope.engine->fromVariant(r->d()->context->state.fillRule));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_fillRule(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_fillRule(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedValue value(scope, callData->argument(0));
+ QV4::ScopedValue value(scope, argc ? argv[0] : QV4::Primitive::undefinedValue());
if ((value->isString() && value->toQString() == QLatin1String("WindingFill"))
|| (value->isInt32() && value->integerValue() == Qt::WindingFill)) {
@@ -1488,10 +1488,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_fillRule(const QV4::BuiltinFunc
\sa createPattern()
\sa fillStyle
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_strokeStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_strokeStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
QColor color = r->d()->context->state.strokeStyle.color();
@@ -1509,13 +1509,13 @@ QV4::ReturnedValue QQuickJSContext2D::method_get_strokeStyle(const QV4::BuiltinF
RETURN_RESULT(r->d()->context->m_strokeStyle.value());
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_strokeStyle(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_strokeStyle(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedValue value(scope, callData->argument(0));
+ QV4::ScopedValue value(scope, argc ? argv[0] : QV4::Primitive::undefinedValue());
if (value->as<Object>()) {
QColor color = scope.engine->toVariant(value, qMetaTypeId<QColor>()).value<QColor>();
@@ -1562,17 +1562,17 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_strokeStyle(const QV4::BuiltinF
\sa strokeStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_createLinearGradient(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_createLinearGradient(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 4) {
- qreal x0 = callData->args[0].toNumber();
- qreal y0 = callData->args[1].toNumber();
- qreal x1 = callData->args[2].toNumber();
- qreal y1 = callData->args[3].toNumber();
+ if (argc >= 4) {
+ qreal x0 = argv[0].toNumber();
+ qreal y0 = argv[1].toNumber();
+ qreal x1 = argv[2].toNumber();
+ qreal y1 = argv[3].toNumber();
if (!qt_is_finite(x0)
|| !qt_is_finite(y0)
@@ -1589,7 +1589,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createLinearGradient(const
RETURN_RESULT(*gradient);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -1606,19 +1606,19 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createLinearGradient(const
\sa strokeStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_createRadialGradient(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_createRadialGradient(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 6) {
- qreal x0 = callData->args[0].toNumber();
- qreal y0 = callData->args[1].toNumber();
- qreal r0 = callData->args[2].toNumber();
- qreal x1 = callData->args[3].toNumber();
- qreal y1 = callData->args[4].toNumber();
- qreal r1 = callData->args[5].toNumber();
+ if (argc >= 6) {
+ qreal x0 = argv[0].toNumber();
+ qreal y0 = argv[1].toNumber();
+ qreal r0 = argv[2].toNumber();
+ qreal x1 = argv[3].toNumber();
+ qreal y1 = argv[4].toNumber();
+ qreal r1 = argv[5].toNumber();
if (!qt_is_finite(x0)
|| !qt_is_finite(y0)
@@ -1641,7 +1641,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createRadialGradient(const
RETURN_RESULT(*gradient);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -1658,16 +1658,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createRadialGradient(const
\sa strokeStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_createConicalGradient(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_createConicalGradient(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 3) {
- qreal x = callData->args[0].toNumber();
- qreal y = callData->args[1].toNumber();
- qreal angle = qRadiansToDegrees(callData->args[2].toNumber());
+ if (argc >= 3) {
+ qreal x = argv[0].toNumber();
+ qreal y = argv[1].toNumber();
+ qreal angle = qRadiansToDegrees(argv[2].toNumber());
if (!qt_is_finite(x) || !qt_is_finite(y)) {
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "createConicalGradient(): Incorrect arguments");
}
@@ -1685,7 +1685,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createConicalGradient(cons
RETURN_RESULT(*gradient);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -1731,18 +1731,18 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createConicalGradient(cons
\sa strokeStyle
\sa fillStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_createPattern(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_createPattern(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 2) {
+ if (argc >= 2) {
QV4::Scoped<QQuickContext2DStyle> pattern(scope, scope.engine->memoryManager->allocObject<QQuickContext2DStyle>());
- QColor color = scope.engine->toVariant(callData->args[0], qMetaTypeId<QColor>()).value<QColor>();
+ QColor color = scope.engine->toVariant(argv[0], qMetaTypeId<QColor>()).value<QColor>();
if (color.isValid()) {
- int patternMode = callData->args[1].toInt32();
+ int patternMode = argv[1].toInt32();
Qt::BrushStyle style = Qt::SolidPattern;
if (patternMode >= 0 && patternMode < Qt::LinearGradientPattern) {
style = static_cast<Qt::BrushStyle>(patternMode);
@@ -1751,20 +1751,20 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createPattern(const QV4::B
} else {
QImage patternTexture;
- if (const QV4::Object *o = callData->args[0].as<Object>()) {
+ if (const QV4::Object *o = argv[0].as<Object>()) {
QV4::ScopedString s(scope, scope.engine->newString(QStringLiteral("data")));
QV4::Scoped<QQuickJSContext2DPixelData> pixelData(scope, o->get(s));
if (!!pixelData) {
patternTexture = *pixelData->d()->image;
}
} else {
- patternTexture = r->d()->context->createPixmap(QUrl(callData->args[0].toQStringNoThrow()))->image();
+ patternTexture = r->d()->context->createPixmap(QUrl(argv[0].toQStringNoThrow()))->image();
}
if (!patternTexture.isNull()) {
pattern->d()->brush->setTextureImage(patternTexture);
- QString repetition = callData->args[1].toQStringNoThrow();
+ QString repetition = argv[1].toQStringNoThrow();
if (repetition == QLatin1String("repeat") || repetition.isEmpty()) {
pattern->d()->patternRepeatX = true;
pattern->d()->patternRepeatY = true;
@@ -1802,10 +1802,10 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createPattern(const QV4::B
\endlist
Other values are ignored.
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_lineCap(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_lineCap(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
switch (r->d()->context->state.lineCap) {
@@ -1820,14 +1820,16 @@ QV4::ReturnedValue QQuickJSContext2D::method_get_lineCap(const QV4::BuiltinFunct
RETURN_RESULT(scope.engine->newString(QStringLiteral("butt")));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_lineCap(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_lineCap(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
+ if (!argc)
+ return QV4::Encode::undefined();
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- QString lineCap = callData->args[0].toQString();
+ QString lineCap = argv[0].toQString();
Qt::PenCapStyle cap;
if (lineCap == QLatin1String("round"))
cap = Qt::RoundCap;
@@ -1859,10 +1861,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_lineCap(const QV4::BuiltinFunct
\endlist
Other values are ignored.
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_lineJoin(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_lineJoin(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
switch (r->d()->context->state.lineJoin) {
@@ -1877,16 +1879,16 @@ QV4::ReturnedValue QQuickJSContext2D::method_get_lineJoin(const QV4::BuiltinFunc
RETURN_RESULT(scope.engine->newString(QStringLiteral("miter")));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_lineJoin(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_lineJoin(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- if (!callData->argc())
+ if (!argc)
THROW_TYPE_ERROR();
- QString lineJoin = callData->args[0].toQString();
+ QString lineJoin = argv[0].toQString();
Qt::PenJoinStyle join;
if (lineJoin == QLatin1String("round"))
join = Qt::RoundJoin;
@@ -1908,22 +1910,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_lineJoin(const QV4::BuiltinFunc
\qmlproperty real QtQuick::Context2D::lineWidth
Holds the current line width. Values that are not finite values greater than zero are ignored.
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_lineWidth(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_lineWidth(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::Encode(r->d()->context->state.lineWidth));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_lineWidth(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_lineWidth(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- qreal w = callData->argc() ? callData->args[0].toNumber() : -1;
+ qreal w = argc ? argv[0].toNumber() : -1;
if (w > 0 && qt_is_finite(w) && w != r->d()->context->state.lineWidth) {
r->d()->context->state.lineWidth = w;
@@ -1937,22 +1939,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_lineWidth(const QV4::BuiltinFun
Holds the current miter limit ratio.
The default miter limit value is 10.0.
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_miterLimit(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_miterLimit(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::Encode(r->d()->context->state.miterLimit));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_miterLimit(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_miterLimit(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- qreal ml = callData->argc() ? callData->args[0].toNumber() : -1;
+ qreal ml = argc ? argv[0].toNumber() : -1;
if (ml > 0 && qt_is_finite(ml) && ml != r->d()->context->state.miterLimit) {
r->d()->context->state.miterLimit = ml;
@@ -1966,22 +1968,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_miterLimit(const QV4::BuiltinFu
\qmlproperty real QtQuick::Context2D::shadowBlur
Holds the current level of blur applied to shadows
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_shadowBlur(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_shadowBlur(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::Encode(r->d()->context->state.shadowBlur));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_shadowBlur(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_shadowBlur(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- qreal blur = callData->argc() ? callData->args[0].toNumber() : -1;
+ qreal blur = argc ? argv[0].toNumber() : -1;
if (blur > 0 && qt_is_finite(blur) && blur != r->d()->context->state.shadowBlur) {
r->d()->context->state.shadowBlur = blur;
@@ -1994,24 +1996,24 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowBlur(const QV4::BuiltinFu
\qmlproperty string QtQuick::Context2D::shadowColor
Holds the current shadow color.
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_shadowColor(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_shadowColor(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(scope.engine->newString(r->d()->context->state.shadowColor.name()));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_shadowColor(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_shadowColor(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
QColor color;
- if (callData->argc())
- color = qt_color_from_string(callData->args[0]);
+ if (argc)
+ color = qt_color_from_string(argv[0]);
if (color.isValid() && color != r->d()->context->state.shadowColor) {
r->d()->context->state.shadowColor = color;
@@ -2027,22 +2029,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowColor(const QV4::BuiltinF
\sa shadowOffsetY
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_shadowOffsetX(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_shadowOffsetX(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::Encode(r->d()->context->state.shadowOffsetX));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetX(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetX(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- qreal offsetX = callData->argc() ? callData->args[0].toNumber() : qt_qnan();
+ qreal offsetX = argc ? argv[0].toNumber() : qt_qnan();
if (qt_is_finite(offsetX) && offsetX != r->d()->context->state.shadowOffsetX) {
r->d()->context->state.shadowOffsetX = offsetX;
r->d()->context->buffer()->setShadowOffsetX(offsetX);
@@ -2055,22 +2057,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetX(const QV4::Builti
\sa shadowOffsetX
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_shadowOffsetY(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_shadowOffsetY(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(QV4::Encode(r->d()->context->state.shadowOffsetY));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetY(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetY(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- qreal offsetY = callData->argc() ? callData->args[0].toNumber() : qt_qnan();
+ qreal offsetY = argc ? argv[0].toNumber() : qt_qnan();
if (qt_is_finite(offsetY) && offsetY != r->d()->context->state.shadowOffsetY) {
r->d()->context->state.shadowOffsetY = offsetY;
r->d()->context->buffer()->setShadowOffsetY(offsetY);
@@ -2079,22 +2081,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetY(const QV4::Builti
}
#if QT_CONFIG(quick_path)
-QV4::ReturnedValue QQuickJSContext2D::method_get_path(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_path(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(r->d()->context->m_v4path.value());
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_path(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_path(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedValue value(scope, callData->argument(0));
+ QV4::ScopedValue value(scope, argc ? argv[0] : QV4::Primitive::undefinedValue());
r->d()->context->beginPath();
QV4::Scoped<QV4::QObjectWrapper> qobjectWrapper(scope, value);
if (!!qobjectWrapper) {
@@ -2114,20 +2116,20 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_path(const QV4::BuiltinFunction
\qmlmethod object QtQuick::Context2D::clearRect(real x, real y, real w, real h)
Clears all pixels on the canvas in the given rectangle to transparent black.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_clearRect(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_clearRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 4)
- r->d()->context->clearRect(callData->args[0].toNumber(),
- callData->args[1].toNumber(),
- callData->args[2].toNumber(),
- callData->args[3].toNumber());
+ if (argc >= 4)
+ r->d()->context->clearRect(argv[0].toNumber(),
+ argv[1].toNumber(),
+ argv[2].toNumber(),
+ argv[3].toNumber());
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2136,15 +2138,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_clearRect(const QV4::Built
\sa fillStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillRect(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 4)
- r->d()->context->fillRect(callData->args[0].toNumber(), callData->args[1].toNumber(), callData->args[2].toNumber(), callData->args[3].toNumber());
- RETURN_RESULT(callData->thisObject);
+ if (argc >= 4)
+ r->d()->context->fillRect(argv[0].toNumber(), argv[1].toNumber(), argv[2].toNumber(), argv[3].toNumber());
+ RETURN_RESULT(*thisObject);
}
@@ -2158,16 +2160,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillRect(const QV4::Builti
\sa lineJoin
\sa miterLimit
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_strokeRect(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_strokeRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 4)
- r->d()->context->strokeRect(callData->args[0].toNumber(), callData->args[1].toNumber(), callData->args[2].toNumber(), callData->args[3].toNumber());
+ if (argc >= 4)
+ r->d()->context->strokeRect(argv[0].toNumber(), argv[1].toNumber(), argv[2].toNumber(), argv[3].toNumber());
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -2192,32 +2194,32 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_strokeRect(const QV4::Buil
\sa arcTo, {http://www.w3.org/TR/2dcontext/#dom-context-2d-arc}{W3C's 2D
Context Standard for arc()}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_arc(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_arc(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 5) {
+ if (argc >= 5) {
bool antiClockwise = false;
- if (callData->argc() == 6)
- antiClockwise = callData->args[5].toBoolean();
+ if (argc == 6)
+ antiClockwise = argv[5].toBoolean();
- qreal radius = callData->args[2].toNumber();
+ qreal radius = argv[2].toNumber();
if (qt_is_finite(radius) && radius < 0)
THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "Incorrect argument radius");
- r->d()->context->arc(callData->args[0].toNumber(),
- callData->args[1].toNumber(),
+ r->d()->context->arc(argv[0].toNumber(),
+ argv[1].toNumber(),
radius,
- callData->args[3].toNumber(),
- callData->args[4].toNumber(),
+ argv[3].toNumber(),
+ argv[4].toNumber(),
antiClockwise);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -2244,26 +2246,26 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_arc(const QV4::BuiltinFunc
\sa arc, {http://www.w3.org/TR/2dcontext/#dom-context-2d-arcto}{W3C's 2D
Context Standard for arcTo()}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_arcTo(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_arcTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 5) {
- qreal radius = callData->args[4].toNumber();
+ if (argc >= 5) {
+ qreal radius = argv[4].toNumber();
if (qt_is_finite(radius) && radius < 0)
THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "Incorrect argument radius");
- r->d()->context->arcTo(callData->args[0].toNumber(),
- callData->args[1].toNumber(),
- callData->args[2].toNumber(),
- callData->args[3].toNumber(),
+ r->d()->context->arcTo(argv[0].toNumber(),
+ argv[1].toNumber(),
+ argv[2].toNumber(),
+ argv[3].toNumber(),
radius);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -2272,15 +2274,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_arcTo(const QV4::BuiltinFu
Resets the current path to a new path.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_beginPath(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_beginPath(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
r->d()->context->beginPath();
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -2303,26 +2305,26 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_beginPath(const QV4::Built
\sa {http://www.w3.org/TR/2dcontext/#dom-context-2d-beziercurveto}{W3C 2d context standard for bezierCurveTo}
\sa {http://www.openrise.com/lab/FlowerPower/}{The beautiful flower demo by using bezierCurveTo}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_bezierCurveTo(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_bezierCurveTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 6) {
- qreal cp1x = callData->args[0].toNumber();
- qreal cp1y = callData->args[1].toNumber();
- qreal cp2x = callData->args[2].toNumber();
- qreal cp2y = callData->args[3].toNumber();
- qreal x = callData->args[4].toNumber();
- qreal y = callData->args[5].toNumber();
+ if (argc >= 6) {
+ qreal cp1x = argv[0].toNumber();
+ qreal cp1y = argv[1].toNumber();
+ qreal cp2x = argv[2].toNumber();
+ qreal cp2y = argv[3].toNumber();
+ qreal x = argv[4].toNumber();
+ qreal y = argv[5].toNumber();
if (!qt_is_finite(cp1x) || !qt_is_finite(cp1y) || !qt_is_finite(cp2x) || !qt_is_finite(cp2y) || !qt_is_finite(x) || !qt_is_finite(y))
RETURN_UNDEFINED();
r->d()->context->bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2349,14 +2351,14 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_bezierCurveTo(const QV4::B
\sa fill()
\sa {http://www.w3.org/TR/2dcontext/#dom-context-2d-clip}{W3C 2d context standard for clip}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_clip(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_clip(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
r->d()->context->clip();
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2366,15 +2368,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_clip(const QV4::BuiltinFun
\sa {http://www.w3.org/TR/2dcontext/#dom-context-2d-closepath}{W3C 2d context standard for closePath}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_closePath(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_closePath(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
r->d()->context->closePath();
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2386,13 +2388,13 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_closePath(const QV4::Built
\sa fillStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_fill(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_fill(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r);
r->d()->context->fill();
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2400,15 +2402,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_fill(const QV4::BuiltinFun
Draws a line from the current position to the point (x, y).
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_lineTo(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_lineTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 2) {
- qreal x = callData->args[0].toNumber();
- qreal y = callData->args[1].toNumber();
+ if (argc >= 2) {
+ qreal x = argv[0].toNumber();
+ qreal y = argv[1].toNumber();
if (!qt_is_finite(x) || !qt_is_finite(y))
RETURN_UNDEFINED();
@@ -2416,7 +2418,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_lineTo(const QV4::BuiltinF
r->d()->context->lineTo(x, y);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2424,22 +2426,22 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_lineTo(const QV4::BuiltinF
Creates a new subpath with the given point.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_moveTo(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_moveTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 2) {
- qreal x = callData->args[0].toNumber();
- qreal y = callData->args[1].toNumber();
+ if (argc >= 2) {
+ qreal x = argv[0].toNumber();
+ qreal y = argv[1].toNumber();
if (!qt_is_finite(x) || !qt_is_finite(y))
RETURN_UNDEFINED();
r->d()->context->moveTo(x, y);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2449,17 +2451,17 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_moveTo(const QV4::BuiltinF
See \l{http://www.w3.org/TR/2dcontext/#dom-context-2d-quadraticcurveto}{W3C 2d context standard for quadraticCurveTo}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_quadraticCurveTo(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_quadraticCurveTo(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 4) {
- qreal cpx = callData->args[0].toNumber();
- qreal cpy = callData->args[1].toNumber();
- qreal x = callData->args[2].toNumber();
- qreal y = callData->args[3].toNumber();
+ if (argc >= 4) {
+ qreal cpx = argv[0].toNumber();
+ qreal cpy = argv[1].toNumber();
+ qreal x = argv[2].toNumber();
+ qreal y = argv[3].toNumber();
if (!qt_is_finite(cpx) || !qt_is_finite(cpy) || !qt_is_finite(x) || !qt_is_finite(y))
RETURN_UNDEFINED();
@@ -2467,7 +2469,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_quadraticCurveTo(const QV4
r->d()->context->quadraticCurveTo(cpx, cpy, x, y);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2475,15 +2477,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_quadraticCurveTo(const QV4
Adds a rectangle at position (\c x, \c y), with the given width \c w and height \c h, as a closed subpath.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_rect(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_rect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 4)
- r->d()->context->rect(callData->args[0].toNumber(), callData->args[1].toNumber(), callData->args[2].toNumber(), callData->args[3].toNumber());
- RETURN_RESULT(callData->thisObject);
+ if (argc >= 4)
+ r->d()->context->rect(argv[0].toNumber(), argv[1].toNumber(), argv[2].toNumber(), argv[3].toNumber());
+ RETURN_RESULT(*thisObject);
}
@@ -2493,20 +2495,20 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_rect(const QV4::BuiltinFun
Adds the given rectangle rect with rounded corners to the path. The \c xRadius and \c yRadius arguments specify the radius of the
ellipses defining the corners of the rounded rectangle.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_roundedRect(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_roundedRect(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 6)
- r->d()->context->roundedRect(callData->args[0].toNumber()
- , callData->args[1].toNumber()
- , callData->args[2].toNumber()
- , callData->args[3].toNumber()
- , callData->args[4].toNumber()
- , callData->args[5].toNumber());
- RETURN_RESULT(callData->thisObject);
+ if (argc >= 6)
+ r->d()->context->roundedRect(argv[0].toNumber()
+ , argv[1].toNumber()
+ , argv[2].toNumber()
+ , argv[3].toNumber()
+ , argv[4].toNumber()
+ , argv[5].toNumber());
+ RETURN_RESULT(*thisObject);
}
@@ -2518,16 +2520,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_roundedRect(const QV4::Bui
The ellipse is composed of a clockwise curve, starting and finishing at zero degrees (the 3 o'clock position).
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_ellipse(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_ellipse(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 4)
- r->d()->context->ellipse(callData->args[0].toNumber(), callData->args[1].toNumber(), callData->args[2].toNumber(), callData->args[3].toNumber());
+ if (argc >= 4)
+ r->d()->context->ellipse(argv[0].toNumber(), argv[1].toNumber(), argv[2].toNumber(), argv[3].toNumber());
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -2537,22 +2539,22 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_ellipse(const QV4::Builtin
Adds the given \c text to the path as a set of closed subpaths created from the current context font supplied.
The subpaths are positioned so that the left end of the text's baseline lies at the point specified by (\c x, \c y).
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_text(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_text(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 3) {
- qreal x = callData->args[1].toNumber();
- qreal y = callData->args[2].toNumber();
+ if (argc >= 3) {
+ qreal x = argv[1].toNumber();
+ qreal y = argv[2].toNumber();
if (!qt_is_finite(x) || !qt_is_finite(y))
RETURN_UNDEFINED();
- r->d()->context->text(callData->args[0].toQStringNoThrow(), x, y);
+ r->d()->context->text(argv[0].toQStringNoThrow(), x, y);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2564,14 +2566,14 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_text(const QV4::BuiltinFun
\sa strokeStyle
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_stroke(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_stroke(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
r->d()->context->stroke();
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
@@ -2582,31 +2584,31 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_stroke(const QV4::BuiltinF
\sa {http://www.w3.org/TR/2dcontext/#dom-context-2d-ispointinpath}{W3C 2d context standard for isPointInPath}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_isPointInPath(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_isPointInPath(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
bool pointInPath = false;
- if (callData->argc() >= 2)
- pointInPath = r->d()->context->isPointInPath(callData->args[0].toNumber(), callData->args[1].toNumber());
+ if (argc >= 2)
+ pointInPath = r->d()->context->isPointInPath(argv[0].toNumber(), argv[1].toNumber());
RETURN_RESULT(QV4::Primitive::fromBoolean(pointInPath).asReturnedValue());
}
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawFocusRing(const QV4::BuiltinFunction *b, QV4::CallData *)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawFocusRing(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *, int)
{
QV4::Scope scope(b);
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "Context2D::drawFocusRing is not supported");
}
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_setCaretSelectionRect(const QV4::BuiltinFunction *b, QV4::CallData *)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_setCaretSelectionRect(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *, int)
{
QV4::Scope scope(b);
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "Context2D::setCaretSelectionRect is not supported");
}
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_caretBlinkRate(const QV4::BuiltinFunction *b, QV4::CallData *)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_caretBlinkRate(const QV4::FunctionObject *b, const QV4::Value *, const QV4::Value *, int)
{
QV4::Scope scope(b);
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "Context2D::caretBlinkRate is not supported");
@@ -2635,22 +2637,22 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_caretBlinkRate(const QV4::
The default font value is "10px sans-serif".
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_font(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_font(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
RETURN_RESULT(scope.engine->newString(r->d()->context->state.font.toString()));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_font(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_font(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedString s(scope, callData->argument(0), QV4::ScopedString::Convert);
+ QV4::ScopedString s(scope, argc ? argv[0] : QV4::Primitive::undefinedValue(), QV4::ScopedString::Convert);
if (scope.engine->hasException)
RETURN_UNDEFINED();
QFont font = qt_font_from_string(s->toQString(), r->d()->context->state.font);
@@ -2674,10 +2676,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_font(const QV4::BuiltinFunction
\endlist
Other values are ignored. The default value is "start".
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_textAlign(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_textAlign(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
switch (r->d()->context->state.textAlign) {
@@ -2696,13 +2698,13 @@ QV4::ReturnedValue QQuickJSContext2D::method_get_textAlign(const QV4::BuiltinFun
RETURN_RESULT(scope.engine->newString(QStringLiteral("start")));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_textAlign(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_textAlign(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedString s(scope, callData->argument(0), QV4::ScopedString::Convert);
+ QV4::ScopedString s(scope, argc ? argv[0] : QV4::Primitive::undefinedValue(), QV4::ScopedString::Convert);
if (scope.engine->hasException)
RETURN_UNDEFINED();
QString textAlign = s->toQString();
@@ -2742,10 +2744,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_textAlign(const QV4::BuiltinFun
\endlist
Other values are ignored. The default value is "alphabetic".
*/
-QV4::ReturnedValue QQuickJSContext2D::method_get_textBaseline(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_get_textBaseline(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
switch (r->d()->context->state.textBaseline) {
@@ -2764,12 +2766,12 @@ QV4::ReturnedValue QQuickJSContext2D::method_get_textBaseline(const QV4::Builtin
RETURN_RESULT(scope.engine->newString(QStringLiteral("alphabetic")));
}
-QV4::ReturnedValue QQuickJSContext2D::method_set_textBaseline(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2D::method_set_textBaseline(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT_SETTER(r)
- QV4::ScopedString s(scope, callData->argument(0), QV4::ScopedString::Convert);
+ QV4::ScopedString s(scope, argc ? argv[0] : QV4::Primitive::undefinedValue(), QV4::ScopedString::Convert);
if (scope.engine->hasException)
RETURN_UNDEFINED();
QString textBaseline = s->toQString();
@@ -2802,22 +2804,22 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_textBaseline(const QV4::Builtin
\sa textBaseline
\sa strokeText
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillText(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillText(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 3) {
- qreal x = callData->args[1].toNumber();
- qreal y = callData->args[2].toNumber();
+ if (argc >= 3) {
+ qreal x = argv[1].toNumber();
+ qreal y = argv[2].toNumber();
if (!qt_is_finite(x) || !qt_is_finite(y))
RETURN_UNDEFINED();
- QPainterPath textPath = r->d()->context->createTextGlyphs(x, y, callData->args[0].toQStringNoThrow());
+ QPainterPath textPath = r->d()->context->createTextGlyphs(x, y, argv[0].toQStringNoThrow());
r->d()->context->buffer()->fill(textPath);
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
\qmlmethod object QtQuick::Context2D::strokeText(text, x, y)
@@ -2827,16 +2829,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillText(const QV4::Builti
\sa textBaseline
\sa fillText
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_strokeText(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_strokeText(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 3)
- r->d()->context->drawText(callData->args[0].toQStringNoThrow(), callData->args[1].toNumber(), callData->args[2].toNumber(), false);
+ if (argc >= 3)
+ r->d()->context->drawText(argv[0].toQStringNoThrow(), argv[1].toNumber(), argv[2].toNumber(), false);
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -2845,15 +2847,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_strokeText(const QV4::Buil
Returns an object with a \c width property, whose value is equivalent to
calling \l {QFontMetrics::width()} with the given \a text in the current font.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_measureText(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_measureText(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
- if (callData->argc() >= 1) {
+ if (argc >= 1) {
QFontMetrics fm(r->d()->context->state.font);
- uint width = fm.width(callData->args[0].toQStringNoThrow());
+ uint width = fm.width(argv[0].toQStringNoThrow());
QV4::ScopedObject tm(scope, scope.engine->newObject());
tm->put(QV4::ScopedString(scope, scope.engine->newIdentifier(QStringLiteral("width"))).getPointer(),
QV4::ScopedValue(scope, QV4::Primitive::fromDouble(width)));
@@ -2921,15 +2923,15 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_measureText(const QV4::Bui
\sa {http://www.w3.org/TR/2dcontext/#dom-context-2d-drawimage}{W3C 2d context standard for drawImage}
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2D> r(scope, *thisObject);
CHECK_CONTEXT(r)
qreal sx, sy, sw, sh, dx, dy, dw, dh;
- if (!callData->argc())
+ if (!argc)
RETURN_UNDEFINED();
//FIXME:This function should be moved to QQuickContext2D::drawImage(...)
@@ -2938,7 +2940,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(const QV4::Built
QQmlRefPointer<QQuickCanvasPixmap> pixmap;
- QV4::ScopedValue arg(scope, callData->args[0]);
+ QV4::ScopedValue arg(scope, argv[0]);
if (arg->isString()) {
QUrl url(arg->toQString());
if (!url.isValid())
@@ -2981,27 +2983,27 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(const QV4::Built
if (pixmap.isNull() || !pixmap->isValid())
RETURN_UNDEFINED();
- if (callData->argc() >= 9) {
- sx = callData->args[1].toNumber();
- sy = callData->args[2].toNumber();
- sw = callData->args[3].toNumber();
- sh = callData->args[4].toNumber();
- dx = callData->args[5].toNumber();
- dy = callData->args[6].toNumber();
- dw = callData->args[7].toNumber();
- dh = callData->args[8].toNumber();
- } else if (callData->argc() >= 5) {
+ if (argc >= 9) {
+ sx = argv[1].toNumber();
+ sy = argv[2].toNumber();
+ sw = argv[3].toNumber();
+ sh = argv[4].toNumber();
+ dx = argv[5].toNumber();
+ dy = argv[6].toNumber();
+ dw = argv[7].toNumber();
+ dh = argv[8].toNumber();
+ } else if (argc >= 5) {
sx = 0;
sy = 0;
sw = pixmap->width();
sh = pixmap->height();
- dx = callData->args[1].toNumber();
- dy = callData->args[2].toNumber();
- dw = callData->args[3].toNumber();
- dh = callData->args[4].toNumber();
- } else if (callData->argc() >= 3) {
- dx = callData->args[1].toNumber();
- dy = callData->args[2].toNumber();
+ dx = argv[1].toNumber();
+ dy = argv[2].toNumber();
+ dw = argv[3].toNumber();
+ dh = argv[4].toNumber();
+ } else if (argc >= 3) {
+ dx = argv[1].toNumber();
+ dy = argv[2].toNumber();
sx = 0;
sy = 0;
sw = pixmap->width();
@@ -3034,7 +3036,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(const QV4::Built
r->d()->context->buffer()->drawPixmap(pixmap, QRectF(sx, sy, sw, sh), QRectF(dx, dy, dw, dh));
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
// pixel manipulation
@@ -3061,10 +3063,10 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(const QV4::Built
\qmlproperty int QtQuick::CanvasImageData::width
Holds the actual width dimension of the data in the ImageData object, in device pixels.
*/
-QV4::ReturnedValue QQuickJSContext2DImageData::method_get_width(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DImageData::method_get_width(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, *thisObject);
if (!imageData)
THROW_TYPE_ERROR();
QV4::Scoped<QQuickJSContext2DPixelData> r(scope, imageData->d()->pixelData.as<QQuickJSContext2DPixelData>());
@@ -3076,10 +3078,10 @@ QV4::ReturnedValue QQuickJSContext2DImageData::method_get_width(const QV4::Built
\qmlproperty int QtQuick::CanvasImageData::height
Holds the actual height dimension of the data in the ImageData object, in device pixels.
*/
-QV4::ReturnedValue QQuickJSContext2DImageData::method_get_height(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DImageData::method_get_height(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, *thisObject);
if (!imageData)
THROW_TYPE_ERROR();
QV4::Scoped<QQuickJSContext2DPixelData> r(scope, imageData->d()->pixelData.as<QQuickJSContext2DPixelData>());
@@ -3091,10 +3093,10 @@ QV4::ReturnedValue QQuickJSContext2DImageData::method_get_height(const QV4::Buil
\qmlproperty object QtQuick::CanvasImageData::data
Holds the one-dimensional array containing the data in RGBA order, as integers in the range 0 to 255.
*/
-QV4::ReturnedValue QQuickJSContext2DImageData::method_get_data(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DImageData::method_get_data(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, callData->thisObject);
+ QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, *thisObject);
if (!imageData)
THROW_TYPE_ERROR();
RETURN_RESULT(imageData->d()->pixelData);
@@ -3118,10 +3120,10 @@ QV4::ReturnedValue QQuickJSContext2DImageData::method_get_data(const QV4::Builti
The length attribute of a CanvasPixelArray object must return this h×w×4 number value.
This property is read only.
*/
-QV4::ReturnedValue QQuickJSContext2DPixelData::proto_get_length(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPixelData::proto_get_length(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *, int)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2DPixelData> r(scope, callData->thisObject.as<QQuickJSContext2DPixelData>());
+ QV4::Scoped<QQuickJSContext2DPixelData> r(scope, thisObject->as<QQuickJSContext2DPixelData>());
if (!r || r->d()->image->isNull())
RETURN_UNDEFINED();
@@ -3217,14 +3219,14 @@ bool QQuickJSContext2DPixelData::putIndexed(QV4::Managed *m, uint index, const Q
\sa Canvas::loadImage(), QtQuick::Canvas::unloadImage(),
QtQuick::Canvas::isImageLoaded
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_createImageData(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_createImageData(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() == 1) {
- QV4::ScopedValue arg0(scope, callData->args[0]);
+ if (argc == 1) {
+ QV4::ScopedValue arg0(scope, argv[0]);
QV4::Scoped<QQuickJSContext2DImageData> imgData(scope, arg0);
if (!!imgData) {
QV4::Scoped<QQuickJSContext2DPixelData> pa(scope, imgData->d()->pixelData.as<QQuickJSContext2DPixelData>());
@@ -3237,9 +3239,9 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createImageData(const QV4:
QImage image = r->d()->context->createPixmap(QUrl(arg0->toQStringNoThrow()))->image();
RETURN_RESULT(qt_create_image_data(image.width(), image.height(), scope.engine, image));
}
- } else if (callData->argc() == 2) {
- qreal w = callData->args[0].toNumber();
- qreal h = callData->args[1].toNumber();
+ } else if (argc == 2) {
+ qreal w = argv[0].toNumber();
+ qreal h = argv[1].toNumber();
if (!qt_is_finite(w) || !qt_is_finite(h))
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "createImageData(): invalid arguments");
@@ -3256,17 +3258,17 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createImageData(const QV4:
\qmlmethod CanvasImageData QtQuick::Context2D::getImageData(real sx, real sy, real sw, real sh)
Returns an CanvasImageData object containing the image data for the given rectangle of the canvas.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_getImageData(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_getImageData(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() >= 4) {
- qreal x = callData->args[0].toNumber();
- qreal y = callData->args[1].toNumber();
- qreal w = callData->args[2].toNumber();
- qreal h = callData->args[3].toNumber();
+ if (argc >= 4) {
+ qreal x = argv[0].toNumber();
+ qreal y = argv[1].toNumber();
+ qreal w = argv[2].toNumber();
+ qreal h = argv[3].toNumber();
if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "getImageData(): Invalid arguments");
@@ -3283,20 +3285,20 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_getImageData(const QV4::Bu
\qmlmethod object QtQuick::Context2D::putImageData(CanvasImageData imageData, real dx, real dy, real dirtyX, real dirtyY, real dirtyWidth, real dirtyHeight)
Paints the data from the given ImageData object onto the canvas. If a dirty rectangle (\a dirtyX, \a dirtyY, \a dirtyWidth, \a dirtyHeight) is provided, only the pixels from that rectangle are painted.
*/
-QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickJSContext2D> r(scope, callData->thisObject.as<QQuickJSContext2D>());
+ QV4::Scoped<QQuickJSContext2D> r(scope, thisObject->as<QQuickJSContext2D>());
CHECK_CONTEXT(r)
- if (callData->argc() < 7)
+ if (argc < 7)
RETURN_UNDEFINED();
- QV4::ScopedValue arg0(scope, callData->args[0]);
+ QV4::ScopedValue arg0(scope, argv[0]);
if (!arg0->isObject())
THROW_DOM(DOMEXCEPTION_TYPE_MISMATCH_ERR, "Context2D::putImageData, the image data type mismatch");
- qreal dx = callData->args[1].toNumber();
- qreal dy = callData->args[2].toNumber();
+ qreal dx = argv[1].toNumber();
+ qreal dy = argv[2].toNumber();
qreal w, h, dirtyX, dirtyY, dirtyWidth, dirtyHeight;
if (!qt_is_finite(dx) || !qt_is_finite(dy))
@@ -3311,11 +3313,11 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(const QV4::Bu
w = pixelArray->d()->image->width();
h = pixelArray->d()->image->height();
- if (callData->argc() == 7) {
- dirtyX = callData->args[3].toNumber();
- dirtyY = callData->args[4].toNumber();
- dirtyWidth = callData->args[5].toNumber();
- dirtyHeight = callData->args[6].toNumber();
+ if (argc == 7) {
+ dirtyX = argv[3].toNumber();
+ dirtyY = argv[4].toNumber();
+ dirtyWidth = argv[5].toNumber();
+ dirtyHeight = argv[6].toNumber();
if (!qt_is_finite(dirtyX) || !qt_is_finite(dirtyY) || !qt_is_finite(dirtyWidth) || !qt_is_finite(dirtyHeight))
THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "putImageData() : Invalid arguments");
@@ -3362,7 +3364,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(const QV4::Bu
r->d()->context->buffer()->drawImage(image, QRectF(dirtyX, dirtyY, dirtyWidth, dirtyHeight), QRectF(dx, dy, dirtyWidth, dirtyHeight));
}
- RETURN_RESULT(callData->thisObject);
+ RETURN_RESULT(*thisObject);
}
/*!
@@ -3385,25 +3387,25 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(const QV4::Bu
gradient.addColorStop(0.7, 'rgba(0, 255, 255, 1');
\endcode
*/
-QV4::ReturnedValue QQuickContext2DStyle::gradient_proto_addColorStop(const QV4::BuiltinFunction *b, QV4::CallData *callData)
+QV4::ReturnedValue QQuickContext2DStyle::gradient_proto_addColorStop(const QV4::FunctionObject *b, const QV4::Value *thisObject, const QV4::Value *argv, int argc)
{
QV4::Scope scope(b);
- QV4::Scoped<QQuickContext2DStyle> style(scope, callData->thisObject.as<QQuickContext2DStyle>());
+ QV4::Scoped<QQuickContext2DStyle> style(scope, thisObject->as<QQuickContext2DStyle>());
if (!style)
THROW_GENERIC_ERROR("Not a CanvasGradient object");
- if (callData->argc() == 2) {
+ if (argc == 2) {
if (!style->d()->brush->gradient())
THROW_GENERIC_ERROR("Not a valid CanvasGradient object, can't get the gradient information");
QGradient gradient = *(style->d()->brush->gradient());
- qreal pos = callData->args[0].toNumber();
+ qreal pos = argv[0].toNumber();
QColor color;
- if (callData->args[1].as<Object>()) {
- color = scope.engine->toVariant(callData->args[1], qMetaTypeId<QColor>()).value<QColor>();
+ if (argv[1].as<Object>()) {
+ color = scope.engine->toVariant(argv[1], qMetaTypeId<QColor>()).value<QColor>();
} else {
- color = qt_color_from_string(callData->args[1]);
+ color = qt_color_from_string(argv[1]);
}
if (pos < 0.0 || pos > 1.0 || !qt_is_finite(pos)) {
THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "CanvasGradient: parameter offset out of range");
@@ -3417,7 +3419,7 @@ QV4::ReturnedValue QQuickContext2DStyle::gradient_proto_addColorStop(const QV4::
*style->d()->brush = gradient;
}
- return callData->thisObject.asReturnedValue();
+ return thisObject->asReturnedValue();
}
void QQuickContext2D::scale(qreal x, qreal y)
@@ -4049,10 +4051,10 @@ QMutex QQuickContext2D::mutex;
QQuickContext2D::QQuickContext2D(QObject *parent)
: QQuickCanvasContext(parent)
, m_buffer(new QQuickContext2DCommandBuffer)
- , m_v4engine(0)
- , m_surface(0)
- , m_glContext(0)
- , m_thread(0)
+ , m_v4engine(nullptr)
+ , m_surface(nullptr)
+ , m_glContext(nullptr)
+ , m_thread(nullptr)
, m_grabbed(false)
{
}
@@ -4060,7 +4062,7 @@ QQuickContext2D::QQuickContext2D(QObject *parent)
QQuickContext2D::~QQuickContext2D()
{
mutex.lock();
- m_texture->setItem(0);
+ m_texture->setItem(nullptr);
delete m_buffer;
if (m_renderTarget == QQuickCanvasItem::FramebufferObject) {
@@ -4240,7 +4242,7 @@ QImage QQuickContext2D::toImage(const QRectF& bounds)
} else {
#if QT_CONFIG(opengl)
QQuickWindow *window = m_canvas->window();
- QOpenGLContext *ctx = window ? window->openglContext() : 0;
+ QOpenGLContext *ctx = window ? window->openglContext() : nullptr;
if (ctx && ctx->isValid()) {
if (ctx == QOpenGLContext::currentContext()) {
flush();
@@ -4308,7 +4310,7 @@ QQuickContext2DEngineData::QQuickContext2DEngineData(QV4::ExecutionEngine *v4)
gradientProto = proto;
proto = scope.engine->newObject();
- proto->defineAccessorProperty(scope.engine->id_length(), QQuickJSContext2DPixelData::proto_get_length, 0);
+ proto->defineAccessorProperty(scope.engine->id_length(), QQuickJSContext2DPixelData::proto_get_length, nullptr);
pixelArrayProto = proto;
}
@@ -4392,7 +4394,7 @@ void QQuickContext2D::setV4Engine(QV4::ExecutionEngine *engine)
if (m_v4engine != engine) {
m_v4engine = engine;
- if (m_v4engine == 0)
+ if (m_v4engine == nullptr)
return;
QQuickContext2DEngineData *ed = engineData(engine);
diff --git a/src/quick/items/context2d/qquickcontext2d_p.h b/src/quick/items/context2d/qquickcontext2d_p.h
index 334bf08329..4cc07027b1 100644
--- a/src/quick/items/context2d/qquickcontext2d_p.h
+++ b/src/quick/items/context2d/qquickcontext2d_p.h
@@ -181,7 +181,7 @@ public:
QQuickContext2D::TextBaseLineType textBaseline;
};
- QQuickContext2D(QObject *parent = 0);
+ QQuickContext2D(QObject *parent = nullptr);
~QQuickContext2D();
QStringList contextNames() const override;
@@ -199,7 +199,7 @@ public:
QQuickCanvasItem* canvas() const { return m_canvas; }
QQuickContext2DCommandBuffer* buffer() const { return m_buffer; }
- bool bufferValid() const { return m_buffer != 0; }
+ bool bufferValid() const { return m_buffer != nullptr; }
void popState();
void pushState();
void reset();
diff --git a/src/quick/items/context2d/qquickcontext2dtexture.cpp b/src/quick/items/context2d/qquickcontext2dtexture.cpp
index a8bf14ba9f..69ff3b3852 100644
--- a/src/quick/items/context2d/qquickcontext2dtexture.cpp
+++ b/src/quick/items/context2d/qquickcontext2dtexture.cpp
@@ -93,12 +93,12 @@ struct GLAcquireContext {
};
#endif
QQuickContext2DTexture::QQuickContext2DTexture()
- : m_context(0)
+ : m_context(nullptr)
#if QT_CONFIG(opengl)
- , m_gl(0)
+ , m_gl(nullptr)
#endif
- , m_surface(0)
- , m_item(0)
+ , m_surface(nullptr)
+ , m_item(nullptr)
, m_canvasDevicePixelRatio(1)
, m_canvasWindowChanged(false)
, m_dirtyTexture(false)
@@ -159,7 +159,7 @@ void QQuickContext2DTexture::setItem(QQuickCanvasItem* item)
m_context = (QQuickContext2D*) item->rawContext(); // FIXME
m_state = m_context->state;
} else {
- m_context = 0;
+ m_context = nullptr;
}
}
@@ -257,7 +257,7 @@ void QQuickContext2DTexture::paintWithoutTiles(QQuickContext2DCommandBuffer *ccb
bool QQuickContext2DTexture::canvasDestroyed()
{
- return m_item == 0;
+ return m_item == nullptr;
}
void QQuickContext2DTexture::paint(QQuickContext2DCommandBuffer *ccb)
@@ -349,7 +349,7 @@ QRect QQuickContext2DTexture::createTiles(const QRect& window)
int ht = xx + h1;
int vt = yy + v1;
- QQuickContext2DTile* tile = 0;
+ QQuickContext2DTile* tile = nullptr;
QPoint pos(ht * tw, vt * th);
QRect rect(pos, m_tileSize);
@@ -420,9 +420,9 @@ static inline QSize npotAdjustedSize(const QSize &size)
QQuickContext2DFBOTexture::QQuickContext2DFBOTexture()
: QQuickContext2DTexture()
- , m_fbo(0)
- , m_multisampledFbo(0)
- , m_paint_device(0)
+ , m_fbo(nullptr)
+ , m_multisampledFbo(nullptr)
+ , m_paint_device(nullptr)
{
m_displayTextures[0] = 0;
m_displayTextures[1] = 0;
@@ -567,15 +567,15 @@ QPaintDevice* QQuickContext2DFBOTexture::beginPainting()
delete m_fbo;
delete m_multisampledFbo;
delete m_paint_device;
- m_fbo = 0;
- m_multisampledFbo = 0;
- m_paint_device = 0;
- return 0;
+ m_fbo = nullptr;
+ m_multisampledFbo = nullptr;
+ m_paint_device = nullptr;
+ return nullptr;
} else if (!m_fbo || m_canvasWindowChanged) {
delete m_fbo;
delete m_multisampledFbo;
delete m_paint_device;
- m_paint_device = 0;
+ m_paint_device = nullptr;
m_fboSize = npotAdjustedSize(m_canvasWindow.size() * m_canvasDevicePixelRatio);
m_canvasWindowChanged = false;
@@ -722,7 +722,7 @@ QPaintDevice* QQuickContext2DImageTexture::beginPainting()
QQuickContext2DTexture::beginPainting();
if (m_canvasWindow.size().isEmpty())
- return 0;
+ return nullptr;
if (m_canvasWindowChanged) {
diff --git a/src/quick/items/context2d/qquickcontext2dtexture_p.h b/src/quick/items/context2d/qquickcontext2dtexture_p.h
index 0e1fbd5d34..9c4870f328 100644
--- a/src/quick/items/context2d/qquickcontext2dtexture_p.h
+++ b/src/quick/items/context2d/qquickcontext2dtexture_p.h
@@ -146,7 +146,7 @@ protected:
virtual QVector2D scaleFactor() const { return QVector2D(1, 1); }
void paintWithoutTiles(QQuickContext2DCommandBuffer *ccb);
- virtual QPaintDevice* beginPainting() {m_painting = true; return 0; }
+ virtual QPaintDevice* beginPainting() {m_painting = true; return nullptr; }
virtual void endPainting() {m_painting = false;}
virtual QQuickContext2DTile* createTile() const = 0;
virtual void compositeTile(QQuickContext2DTile* tile) = 0;
diff --git a/src/quick/items/context2d/qquickcontext2dtile.cpp b/src/quick/items/context2d/qquickcontext2dtile.cpp
index d31fee7f91..0ee3de6bcc 100644
--- a/src/quick/items/context2d/qquickcontext2dtile.cpp
+++ b/src/quick/items/context2d/qquickcontext2dtile.cpp
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
QQuickContext2DTile::QQuickContext2DTile()
: m_dirty(true)
, m_rect(QRect(0, 0, 1, 1))
- , m_device(0)
+ , m_device(nullptr)
{
}
@@ -95,12 +95,12 @@ QPainter* QQuickContext2DTile::createPainter(bool smooth, bool antialiasing)
return &m_painter;
}
- return 0;
+ return nullptr;
}
#if QT_CONFIG(opengl)
QQuickContext2DFBOTile::QQuickContext2DFBOTile()
: QQuickContext2DTile()
- , m_fbo(0)
+ , m_fbo(nullptr)
{
}
diff --git a/src/quick/items/items.pri b/src/quick/items/items.pri
index 0f8061b5ef..1acb3b5265 100644
--- a/src/quick/items/items.pri
+++ b/src/quick/items/items.pri
@@ -41,8 +41,6 @@ HEADERS += \
$$PWD/qquickflickable_p.h \
$$PWD/qquickflickable_p_p.h \
$$PWD/qquickflickablebehavior_p.h \
- $$PWD/qquickrepeater_p.h \
- $$PWD/qquickrepeater_p_p.h \
$$PWD/qquickloader_p.h \
$$PWD/qquickloader_p_p.h \
$$PWD/qquicktranslate_p.h \
@@ -89,7 +87,6 @@ SOURCES += \
$$PWD/qquickmousearea.cpp \
$$PWD/qquickpincharea.cpp \
$$PWD/qquickflickable.cpp \
- $$PWD/qquickrepeater.cpp \
$$PWD/qquickloader.cpp \
$$PWD/qquicktranslate.cpp \
$$PWD/qquickclipnode.cpp \
@@ -168,6 +165,15 @@ qtConfig(quick-flipable) {
$$PWD/qquickflipable.cpp
}
+qtConfig(quick-repeater) {
+ HEADERS += \
+ $$PWD/qquickrepeater_p.h \
+ $$PWD/qquickrepeater_p_p.h
+
+ SOURCES += \
+ $$PWD/qquickrepeater.cpp
+}
+
qtConfig(quick-shadereffect) {
HEADERS += \
$$PWD/qquickshadereffectsource_p.h \
diff --git a/src/quick/items/qquickaccessibleattached.cpp b/src/quick/items/qquickaccessibleattached.cpp
index c559ee8887..252d6538e2 100644
--- a/src/quick/items/qquickaccessibleattached.cpp
+++ b/src/quick/items/qquickaccessibleattached.cpp
@@ -410,7 +410,7 @@ void QQuickAccessibleAttached::setIgnored(bool ignored)
bool QQuickAccessibleAttached::doAction(const QString &actionName)
{
- QMetaMethod *sig = 0;
+ QMetaMethod *sig = nullptr;
if (actionName == QAccessibleActionInterface::pressAction())
sig = &sigPress;
else if (actionName == QAccessibleActionInterface::toggleAction())
diff --git a/src/quick/items/qquickanchors.cpp b/src/quick/items/qquickanchors.cpp
index 45b405bd82..8ee4229013 100644
--- a/src/quick/items/qquickanchors.cpp
+++ b/src/quick/items/qquickanchors.cpp
@@ -252,35 +252,35 @@ void QQuickAnchorsPrivate::clearItem(QQuickItem *item)
if (!item)
return;
if (fill == item)
- fill = 0;
+ fill = nullptr;
if (centerIn == item)
- centerIn = 0;
+ centerIn = nullptr;
if (leftAnchorItem == item) {
- leftAnchorItem = 0;
+ leftAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::LeftAnchor;
}
if (rightAnchorItem == item) {
- rightAnchorItem = 0;
+ rightAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::RightAnchor;
}
if (topAnchorItem == item) {
- topAnchorItem = 0;
+ topAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::TopAnchor;
}
if (bottomAnchorItem == item) {
- bottomAnchorItem = 0;
+ bottomAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::BottomAnchor;
}
if (vCenterAnchorItem == item) {
- vCenterAnchorItem = 0;
+ vCenterAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::VCenterAnchor;
}
if (hCenterAnchorItem == item) {
- hCenterAnchorItem = 0;
+ hCenterAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::HCenterAnchor;
}
if (baselineAnchorItem == item) {
- baselineAnchorItem = 0;
+ baselineAnchorItem = nullptr;
usedAnchors &= ~QQuickAnchors::BaselineAnchor;
}
}
@@ -462,7 +462,7 @@ void QQuickAnchorsPrivate::updateOnComplete()
std::sort(dependencies, dependencies + 9);
- QQuickItem *lastDependency = 0;
+ QQuickItem *lastDependency = nullptr;
for (int i = 0; i < 9; ++i) {
QQuickItem *dependency = dependencies[i];
if (lastDependency != dependency) {
@@ -542,7 +542,7 @@ void QQuickAnchors::setFill(QQuickItem *f)
void QQuickAnchors::resetFill()
{
- setFill(0);
+ setFill(nullptr);
}
QQuickItem *QQuickAnchors::centerIn() const
@@ -578,7 +578,7 @@ void QQuickAnchors::setCenterIn(QQuickItem* c)
void QQuickAnchors::resetCenterIn()
{
- setCenterIn(0);
+ setCenterIn(nullptr);
}
bool QQuickAnchorsPrivate::calcStretch(QQuickItem *edge1Item,
@@ -1324,6 +1324,19 @@ QQuickAnchors::Anchors QQuickAnchors::usedAnchors() const
return static_cast<QQuickAnchors::Anchors>(d->usedAnchors);
}
+Qt::Orientations QQuickAnchors::activeDirections() const
+{
+ Q_D(const QQuickAnchors);
+ if (d->fill || d->centerIn)
+ return Qt::Horizontal | Qt::Vertical;
+ Qt::Orientations o;
+ if (d->usedAnchors & QQuickAnchors::Horizontal_Mask)
+ o |= Qt::Horizontal;
+ if (d->usedAnchors & QQuickAnchors::Vertical_Mask)
+ o |= Qt::Vertical;
+ return o;
+}
+
bool QQuickAnchorsPrivate::checkHValid() const
{
if (usedAnchors & QQuickAnchors::LeftAnchor &&
diff --git a/src/quick/items/qquickanchors_p.h b/src/quick/items/qquickanchors_p.h
index f00b8b5ba7..931b963534 100644
--- a/src/quick/items/qquickanchors_p.h
+++ b/src/quick/items/qquickanchors_p.h
@@ -86,8 +86,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickAnchors : public QObject
Q_PROPERTY(bool alignWhenCentered READ alignWhenCentered WRITE setAlignWhenCentered NOTIFY centerAlignedChanged)
public:
- QQuickAnchors(QQuickItem *item, QObject *parent=0);
- virtual ~QQuickAnchors();
+ QQuickAnchors(QQuickItem *item, QObject *parent=nullptr);
+ ~QQuickAnchors() override;
enum Anchor
#if defined(Q_CC_CLANG) || !defined(Q_CC_GNU) // meaning: clang and msvc, but NOT gcc proper (because, you know, Q_CC_CLANG implies Q_CC_GNU)
@@ -174,6 +174,7 @@ public:
void resetCenterIn();
Anchors usedAnchors() const;
+ Qt::Orientations activeDirections() const;
bool mirrored();
diff --git a/src/quick/items/qquickanchors_p_p.h b/src/quick/items/qquickanchors_p_p.h
index ae6ca02786..0a834276ae 100644
--- a/src/quick/items/qquickanchors_p_p.h
+++ b/src/quick/items/qquickanchors_p_p.h
@@ -60,15 +60,15 @@ QT_BEGIN_NAMESPACE
class QQuickAnchorLine
{
public:
- QQuickAnchorLine() : item(0), anchorLine(QQuickAnchors::InvalidAnchor) {}
+ QQuickAnchorLine() {}
QQuickAnchorLine(QQuickItem *i, QQuickAnchors::Anchor l) : item(i), anchorLine(l) {}
QQuickAnchorLine(QQuickItem *i, uint l)
: item(i)
, anchorLine(static_cast<QQuickAnchors::Anchor>(l))
{ Q_ASSERT(l < ((QQuickAnchors::BaselineAnchor << 1) - 1)); }
- QQuickItem *item;
- QQuickAnchors::Anchor anchorLine;
+ QQuickItem *item = nullptr;
+ QQuickAnchors::Anchor anchorLine = QQuickAnchors::InvalidAnchor;
};
inline bool operator==(const QQuickAnchorLine& a, const QQuickAnchorLine& b)
diff --git a/src/quick/items/qquickanimatedimage.cpp b/src/quick/items/qquickanimatedimage.cpp
index 5bc5b0faff..26dfdb07a6 100644
--- a/src/quick/items/qquickanimatedimage.cpp
+++ b/src/quick/items/qquickanimatedimage.cpp
@@ -54,26 +54,26 @@ QT_BEGIN_NAMESPACE
QQuickPixmap* QQuickAnimatedImagePrivate::infoForCurrentFrame(QQmlEngine *engine)
{
- if (!_movie)
- return 0;
+ if (!movie)
+ return nullptr;
- int current = _movie->currentFrameNumber();
+ int current = movie->currentFrameNumber();
if (!frameMap.contains(current)) {
QUrl requestedUrl;
- QQuickPixmap *pixmap = 0;
- if (engine && !_movie->fileName().isEmpty()) {
+ QQuickPixmap *pixmap = nullptr;
+ if (engine && !movie->fileName().isEmpty()) {
requestedUrl.setUrl(QString::fromUtf8("quickanimatedimage://%1#%2")
- .arg(_movie->fileName())
+ .arg(movie->fileName())
.arg(current));
}
if (!requestedUrl.isEmpty()) {
if (QQuickPixmap::isCached(requestedUrl, QSize(), QQuickImageProviderOptions()))
pixmap = new QQuickPixmap(engine, requestedUrl);
else
- pixmap = new QQuickPixmap(requestedUrl, _movie->currentImage());
+ pixmap = new QQuickPixmap(requestedUrl, movie->currentImage());
} else {
pixmap = new QQuickPixmap;
- pixmap->setImage(_movie->currentImage());
+ pixmap->setImage(movie->currentImage());
}
frameMap.insert(current, pixmap);
}
@@ -138,7 +138,7 @@ QQuickPixmap* QQuickAnimatedImagePrivate::infoForCurrentFrame(QQmlEngine *engine
QQuickAnimatedImage::QQuickAnimatedImage(QQuickItem *parent)
: QQuickImage(*(new QQuickAnimatedImagePrivate), parent)
{
- QObject::connect(this, &QQuickImageBase::cacheChanged, this, &QQuickAnimatedImage::onCacheChanged);
+ connect(this, &QQuickImageBase::cacheChanged, this, &QQuickAnimatedImage::onCacheChanged);
}
QQuickAnimatedImage::~QQuickAnimatedImage()
@@ -148,7 +148,7 @@ QQuickAnimatedImage::~QQuickAnimatedImage()
if (d->reply)
d->reply->deleteLater();
#endif
- delete d->_movie;
+ delete d->movie;
qDeleteAll(d->frameMap);
d->frameMap.clear();
}
@@ -164,9 +164,9 @@ QQuickAnimatedImage::~QQuickAnimatedImage()
bool QQuickAnimatedImage::isPaused() const
{
Q_D(const QQuickAnimatedImage);
- if (!d->_movie)
+ if (!d->movie)
return d->paused;
- return d->_movie->state()==QMovie::Paused;
+ return d->movie->state()==QMovie::Paused;
}
void QQuickAnimatedImage::setPaused(bool pause)
@@ -174,11 +174,11 @@ void QQuickAnimatedImage::setPaused(bool pause)
Q_D(QQuickAnimatedImage);
if (pause == d->paused)
return;
- if (!d->_movie) {
+ if (!d->movie) {
d->paused = pause;
emit pausedChanged();
} else {
- d->_movie->setPaused(pause);
+ d->movie->setPaused(pause);
}
}
@@ -203,9 +203,9 @@ void QQuickAnimatedImage::setPaused(bool pause)
bool QQuickAnimatedImage::isPlaying() const
{
Q_D(const QQuickAnimatedImage);
- if (!d->_movie)
+ if (!d->movie)
return d->playing;
- return d->_movie->state()!=QMovie::NotRunning;
+ return d->movie->state()!=QMovie::NotRunning;
}
void QQuickAnimatedImage::setPlaying(bool play)
@@ -213,15 +213,15 @@ void QQuickAnimatedImage::setPlaying(bool play)
Q_D(QQuickAnimatedImage);
if (play == d->playing)
return;
- if (!d->_movie) {
+ if (!d->movie) {
d->playing = play;
emit playingChanged();
return;
}
if (play)
- d->_movie->start();
+ d->movie->start();
else
- d->_movie->stop();
+ d->movie->stop();
}
/*!
@@ -237,27 +237,53 @@ void QQuickAnimatedImage::setPlaying(bool play)
int QQuickAnimatedImage::currentFrame() const
{
Q_D(const QQuickAnimatedImage);
- if (!d->_movie)
- return d->preset_currentframe;
- return d->_movie->currentFrameNumber();
+ if (!d->movie)
+ return d->presetCurrentFrame;
+ return d->movie->currentFrameNumber();
}
void QQuickAnimatedImage::setCurrentFrame(int frame)
{
Q_D(QQuickAnimatedImage);
- if (!d->_movie) {
- d->preset_currentframe = frame;
+ if (!d->movie) {
+ d->presetCurrentFrame = frame;
return;
}
- d->_movie->jumpToFrame(frame);
+ d->movie->jumpToFrame(frame);
}
int QQuickAnimatedImage::frameCount() const
{
Q_D(const QQuickAnimatedImage);
- if (!d->_movie)
+ if (!d->movie)
return 0;
- return d->_movie->frameCount();
+ return d->movie->frameCount();
+}
+
+/*!
+ \qmlproperty real QtQuick::AnimatedImage::speed
+ \since QtQuick 2.11
+
+ This property holds the speed of the animation.
+
+ The speed is measured in percentage of the original animated image speed.
+ The default speed is 1.0 (original speed).
+*/
+qreal QQuickAnimatedImage::speed() const
+{
+ Q_D(const QQuickAnimatedImage);
+ return d->speed;
+}
+
+void QQuickAnimatedImage::setSpeed(qreal speed)
+{
+ Q_D(QQuickAnimatedImage);
+ if (d->speed != speed) {
+ d->speed = speed;
+ if (d->movie)
+ d->movie->setSpeed(qRound(speed * 100.0));
+ emit speedChanged();
+ }
}
void QQuickAnimatedImage::setSource(const QUrl &url)
@@ -269,7 +295,7 @@ void QQuickAnimatedImage::setSource(const QUrl &url)
#if QT_CONFIG(qml_network)
if (d->reply) {
d->reply->deleteLater();
- d->reply = 0;
+ d->reply = nullptr;
}
#endif
@@ -278,10 +304,7 @@ void QQuickAnimatedImage::setSource(const QUrl &url)
d->frameMap.clear();
d->oldPlaying = isPlaying();
- if (d->_movie) {
- d->setMovie(nullptr);
- }
-
+ d->setMovie(nullptr);
d->url = url;
emit sourceChanged(d->url);
@@ -335,10 +358,8 @@ void QQuickAnimatedImage::load()
req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
d->reply = qmlEngine(this)->networkAccessManager()->get(req);
- QObject::connect(d->reply, SIGNAL(finished()),
- this, SLOT(movieRequestFinished()));
- QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)),
- this, SLOT(requestProgress(qint64,qint64)));
+ connect(d->reply, &QNetworkReply::finished, this, &QQuickAnimatedImage::movieRequestFinished);
+ connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(requestProgress(qint64,qint64)));
#endif
}
}
@@ -369,7 +390,7 @@ void QQuickAnimatedImage::movieRequestFinished()
}
#endif
- if (!d->_movie || !d->_movie->isValid()) {
+ if (!d->movie || !d->movie->isValid()) {
qmlWarning(this) << "Error Reading Animated Image File " << d->url.toString();
d->setMovie(nullptr);
d->setImage(QImage());
@@ -390,12 +411,11 @@ void QQuickAnimatedImage::movieRequestFinished()
return;
}
- connect(d->_movie, SIGNAL(stateChanged(QMovie::MovieState)),
- this, SLOT(playingStatusChanged()));
- connect(d->_movie, SIGNAL(frameChanged(int)),
- this, SLOT(movieUpdate()));
+ connect(d->movie, &QMovie::stateChanged, this, &QQuickAnimatedImage::playingStatusChanged);
+ connect(d->movie, &QMovie::frameChanged, this, &QQuickAnimatedImage::movieUpdate);
if (d->cache)
- d->_movie->setCacheMode(QMovie::CacheAll);
+ d->movie->setCacheMode(QMovie::CacheAll);
+ d->movie->setSpeed(qRound(d->speed * 100.0));
d->status = Ready;
emit statusChanged(d->status);
@@ -406,22 +426,21 @@ void QQuickAnimatedImage::movieRequestFinished()
}
bool pausedAtStart = d->paused;
- if (d->playing) {
- d->_movie->start();
- }
+ if (d->playing)
+ d->movie->start();
if (pausedAtStart)
- d->_movie->setPaused(true);
+ d->movie->setPaused(true);
if (d->paused || !d->playing) {
- d->_movie->jumpToFrame(d->preset_currentframe);
- d->preset_currentframe = 0;
+ d->movie->jumpToFrame(d->presetCurrentFrame);
+ d->presetCurrentFrame = 0;
}
d->setPixmap(*d->infoForCurrentFrame(qmlEngine(this)));
if (isPlaying() != d->oldPlaying)
emit playingChanged();
- if (d->_movie)
- d->currentSourceSize = d->_movie->currentPixmap().size();
+ if (d->movie)
+ d->currentSourceSize = d->movie->currentPixmap().size();
else
d->currentSourceSize = QSize(0, 0);
@@ -440,7 +459,7 @@ void QQuickAnimatedImage::movieUpdate()
d->frameMap.clear();
}
- if (d->_movie) {
+ if (d->movie) {
d->setPixmap(*d->infoForCurrentFrame(qmlEngine(this)));
emit frameChanged();
}
@@ -450,12 +469,12 @@ void QQuickAnimatedImage::playingStatusChanged()
{
Q_D(QQuickAnimatedImage);
- if ((d->_movie->state() != QMovie::NotRunning) != d->playing) {
- d->playing = (d->_movie->state() != QMovie::NotRunning);
+ if ((d->movie->state() != QMovie::NotRunning) != d->playing) {
+ d->playing = (d->movie->state() != QMovie::NotRunning);
emit playingChanged();
}
- if ((d->_movie->state() == QMovie::Paused) != d->paused) {
- d->paused = (d->_movie->state() == QMovie::Paused);
+ if ((d->movie->state() == QMovie::Paused) != d->paused) {
+ d->paused = (d->movie->state() == QMovie::Paused);
emit pausedChanged();
}
}
@@ -466,13 +485,11 @@ void QQuickAnimatedImage::onCacheChanged()
if (!cache()) {
qDeleteAll(d->frameMap);
d->frameMap.clear();
- if (d->_movie) {
- d->_movie->setCacheMode(QMovie::CacheNone);
- }
+ if (d->movie)
+ d->movie->setCacheMode(QMovie::CacheNone);
} else {
- if (d->_movie) {
- d->_movie->setCacheMode(QMovie::CacheAll);
- }
+ if (d->movie)
+ d->movie->setCacheMode(QMovie::CacheAll);
}
}
@@ -488,13 +505,15 @@ void QQuickAnimatedImage::componentComplete()
load();
}
-void QQuickAnimatedImagePrivate::setMovie(QMovie *movie)
+void QQuickAnimatedImagePrivate::setMovie(QMovie *m)
{
+ if (movie == m)
+ return;
Q_Q(QQuickAnimatedImage);
const int oldFrameCount = q->frameCount();
- delete _movie;
- _movie = movie;
+ delete movie;
+ movie = m;
if (oldFrameCount != q->frameCount())
emit q->frameCountChanged();
diff --git a/src/quick/items/qquickanimatedimage_p.h b/src/quick/items/qquickanimatedimage_p.h
index f7a6bd808b..6b5db215bd 100644
--- a/src/quick/items/qquickanimatedimage_p.h
+++ b/src/quick/items/qquickanimatedimage_p.h
@@ -70,12 +70,13 @@ class Q_AUTOTEST_EXPORT QQuickAnimatedImage : public QQuickImage
Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
Q_PROPERTY(int currentFrame READ currentFrame WRITE setCurrentFrame NOTIFY frameChanged)
Q_PROPERTY(int frameCount READ frameCount NOTIFY frameCountChanged)
+ Q_PROPERTY(qreal speed READ speed WRITE setSpeed NOTIFY speedChanged REVISION 11)
// read-only for AnimatedImage
Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
public:
- QQuickAnimatedImage(QQuickItem *parent=0);
+ QQuickAnimatedImage(QQuickItem *parent=nullptr);
~QQuickAnimatedImage();
bool isPlaying() const;
@@ -89,6 +90,9 @@ public:
int frameCount() const;
+ qreal speed() const;
+ void setSpeed(qreal speed);
+
// Extends QQuickImage's src property
void setSource(const QUrl&) override;
virtual QSize sourceSize();
@@ -98,6 +102,7 @@ Q_SIGNALS:
void pausedChanged();
void frameChanged();
void frameCountChanged();
+ Q_REVISION(11) void speedChanged();
private Q_SLOTS:
void movieUpdate();
diff --git a/src/quick/items/qquickanimatedimage_p_p.h b/src/quick/items/qquickanimatedimage_p_p.h
index 68c4f2d359..1a74f67424 100644
--- a/src/quick/items/qquickanimatedimage_p_p.h
+++ b/src/quick/items/qquickanimatedimage_p_p.h
@@ -70,28 +70,30 @@ class QQuickAnimatedImagePrivate : public QQuickImagePrivate
public:
QQuickAnimatedImagePrivate()
- : playing(true), paused(false), preset_currentframe(0), _movie(0), oldPlaying(false)
+ : playing(true), paused(false), oldPlaying(false), padding(0)
+ , presetCurrentFrame(0), speed(1.0), currentSourceSize(0, 0), movie(nullptr)
#if QT_CONFIG(qml_network)
- , reply(0), redirectCount(0)
+ , reply(nullptr), redirectCount(0)
#endif
- , currentSourceSize(0, 0)
{
}
QQuickPixmap *infoForCurrentFrame(QQmlEngine *engine);
+ void setMovie(QMovie *movie);
- bool playing;
- bool paused;
- int preset_currentframe;
- QMovie *_movie;
- bool oldPlaying;
+ bool playing : 1;
+ bool paused : 1;
+ bool oldPlaying : 1;
+ unsigned padding: 29;
+ int presetCurrentFrame;
+ qreal speed;
+ QSize currentSourceSize;
+ QMovie *movie;
#if QT_CONFIG(qml_network)
QNetworkReply *reply;
int redirectCount;
#endif
QMap<int, QQuickPixmap *> frameMap;
- QSize currentSourceSize;
- void setMovie(QMovie *movie);
};
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickanimatedsprite.cpp b/src/quick/items/qquickanimatedsprite.cpp
index 4e71b0c65f..741e4607e5 100644
--- a/src/quick/items/qquickanimatedsprite.cpp
+++ b/src/quick/items/qquickanimatedsprite.cpp
@@ -69,9 +69,67 @@ QT_BEGIN_NAMESPACE
as multiple frames in the same image file. You can play it at a fixed speed, at the
frame rate of your display, or manually advance and control the progress.
- For details of how a sprite animation is defined see the \l{Sprite Animations} overview.
- Note that the AnimatedSprite type does not use Sprite types to define multiple animations,
- but instead encapsulates a single animation itself.
+ Consider the following sprite sheet:
+
+ \image animatedsprite-loading.png
+
+ It can be divided up into four frames:
+
+ \image animatedsprite-loading-frames.png
+
+ To play each of these frames at a speed of 500 milliseconds per frame, the
+ following code can be used:
+
+ \table
+ \header
+ \li Code
+ \li Result
+ \row
+ \li
+ \code
+ AnimatedSprite {
+ source: "loading.png"
+ frameWidth: 64
+ frameHeight: 64
+ frameCount: 4
+ frameDuration: 500
+ }
+ \endcode
+ \li
+ \image animatedsprite-loading-interpolated.gif
+ \endtable
+
+ By default, the frames are interpolated (blended together) to make the
+ animation appear smoother. To disable this, set \l interpolate to \c false:
+
+ \table
+ \header
+ \li Code
+ \li Result
+ \row
+ \li
+ \code
+ AnimatedSprite {
+ source: "loading.png"
+ frameWidth: 64
+ frameHeight: 64
+ frameCount: 4
+ frameDuration: 500
+ interpolate: false
+ }
+ \endcode
+ \li
+ \image animatedsprite-loading.gif
+ \endtable
+
+ To control how AnimatedSprite responds to being scaled, use the
+ \l {Item::}{smooth} property.
+
+ Note that unlike \l SpriteSequence, the AnimatedSprite type does not use
+ \l Sprite to define multiple animations, but instead encapsulates a
+ single animation itself.
+
+ \sa {Sprite Animations}
*/
/*!
@@ -105,7 +163,7 @@ QT_BEGIN_NAMESPACE
/*!
\qmlproperty int QtQuick::AnimatedSprite::frameDuration
- Duration of each frame of the animation. Values equal to or below 0 are invalid.
+ Duration of each frame of the animation in milliseconds. Values equal to or below 0 are invalid.
If frameRate is valid then it will be used to calculate the duration of the frames.
If not, and frameDuration is valid, then frameDuration will be used.
@@ -210,7 +268,6 @@ QT_BEGIN_NAMESPACE
Stops, then starts the sprite animation.
*/
-//TODO: Implicitly size element to size of sprite
QQuickAnimatedSprite::QQuickAnimatedSprite(QQuickItem *parent) :
QQuickItem(*(new QQuickAnimatedSpritePrivate), parent)
{
@@ -516,6 +573,7 @@ void QQuickAnimatedSprite::setFrameHeight(int arg)
if (d->m_sprite->m_frameHeight != arg) {
d->m_sprite->setFrameHeight(arg);
Q_EMIT frameHeightChanged(arg);
+ setImplicitHeight(frameHeight());
reloadImage();
}
}
@@ -527,6 +585,7 @@ void QQuickAnimatedSprite::setFrameWidth(int arg)
if (d->m_sprite->m_frameWidth != arg) {
d->m_sprite->setFrameWidth(arg);
Q_EMIT frameWidthChanged(arg);
+ setImplicitWidth(frameWidth());
reloadImage();
}
}
@@ -641,6 +700,17 @@ QSGSpriteNode* QQuickAnimatedSprite::initNode()
if (image.isNull())
return nullptr;
+ // If frameWidth or frameHeight are not explicitly set, frameWidth
+ // will be set to the width of the image divided by the number of frames,
+ // and frameHeight will be set to the height of the image.
+ // In this case, QQuickAnimatedSprite currently won't emit frameWidth/HeightChanged
+ // at all, so we have to do this here, as it's the only place where assembledImage()
+ // is called (which calculates the "implicit" frameWidth/Height.
+ // In addition, currently the "implicit" frameWidth/Height are only calculated once,
+ // even after changing to a different source.
+ setImplicitWidth(frameWidth());
+ setImplicitHeight(frameHeight());
+
QSGSpriteNode *node = d->sceneGraphContext()->createSpriteNode();
d->m_sheetSize = QSize(image.size());
diff --git a/src/quick/items/qquickanimatedsprite_p.h b/src/quick/items/qquickanimatedsprite_p.h
index 276e6fbb92..d7e60b909c 100644
--- a/src/quick/items/qquickanimatedsprite_p.h
+++ b/src/quick/items/qquickanimatedsprite_p.h
@@ -94,7 +94,7 @@ class Q_AUTOTEST_EXPORT QQuickAnimatedSprite : public QQuickItem
Q_PROPERTY(int currentFrame READ currentFrame WRITE setCurrentFrame NOTIFY currentFrameChanged)
public:
- explicit QQuickAnimatedSprite(QQuickItem *parent = 0);
+ explicit QQuickAnimatedSprite(QQuickItem *parent = nullptr);
enum LoopParameters {
Infinite = -1
};
diff --git a/src/quick/items/qquickborderimage.cpp b/src/quick/items/qquickborderimage.cpp
index 75e3a3dbed..4bf34f0417 100644
--- a/src/quick/items/qquickborderimage.cpp
+++ b/src/quick/items/qquickborderimage.cpp
@@ -278,7 +278,7 @@ void QQuickBorderImage::setSource(const QUrl &url)
#if QT_CONFIG(qml_network)
if (d->sciReply) {
d->sciReply->deleteLater();
- d->sciReply = 0;
+ d->sciReply = nullptr;
}
#endif
@@ -559,12 +559,12 @@ void QQuickBorderImage::sciRequestFinished()
if (d->sciReply->error() != QNetworkReply::NoError) {
d->status = Error;
d->sciReply->deleteLater();
- d->sciReply = 0;
+ d->sciReply = nullptr;
emit statusChanged(d->status);
} else {
QQuickGridScaledImage sci(d->sciReply);
d->sciReply->deleteLater();
- d->sciReply = 0;
+ d->sciReply = nullptr;
setGridScaledImage(sci);
}
}
@@ -629,7 +629,7 @@ QSGNode *QQuickBorderImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDat
if (!texture || width() <= 0 || height() <= 0) {
delete oldNode;
- return 0;
+ return nullptr;
}
QSGInternalImageNode *node = static_cast<QSGInternalImageNode *>(oldNode);
diff --git a/src/quick/items/qquickborderimage_p.h b/src/quick/items/qquickborderimage_p.h
index f43e6c8e1e..61bd26ba83 100644
--- a/src/quick/items/qquickborderimage_p.h
+++ b/src/quick/items/qquickborderimage_p.h
@@ -69,7 +69,7 @@ class Q_AUTOTEST_EXPORT QQuickBorderImage : public QQuickImageBase
Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
public:
- QQuickBorderImage(QQuickItem *parent=0);
+ QQuickBorderImage(QQuickItem *parent=nullptr);
~QQuickBorderImage();
QQuickScaleGrid *border();
diff --git a/src/quick/items/qquickdrag.cpp b/src/quick/items/qquickdrag.cpp
index 6dc005a03c..d377b1dad4 100644
--- a/src/quick/items/qquickdrag.cpp
+++ b/src/quick/items/qquickdrag.cpp
@@ -67,8 +67,8 @@ public:
return static_cast<QQuickDragAttachedPrivate *>(QObjectPrivate::get(attached)); }
QQuickDragAttachedPrivate()
- : attachedItem(0)
- , mimeData(0)
+ : attachedItem(nullptr)
+ , mimeData(nullptr)
, proposedAction(Qt::MoveAction)
, supportedActions(Qt::MoveAction | Qt::CopyAction | Qt::LinkAction)
, active(false)
@@ -231,7 +231,7 @@ void QQuickDragAttachedPrivate::deliverLeaveEvent()
if (window) {
QDragLeaveEvent event;
deliverEvent(window, &event);
- window = 0;
+ window = nullptr;
}
}
@@ -686,7 +686,7 @@ int QQuickDragAttached::drop()
return acceptedAction;
d->active = false;
- QObject *target = 0;
+ QObject *target = nullptr;
if (d->window) {
QPoint scenePos = d->attachedItem->mapToScene(d->hotSpot).toPoint();
@@ -732,7 +732,7 @@ void QQuickDragAttached::cancel()
d->deliverLeaveEvent();
if (d->target) {
- d->target = 0;
+ d->target = nullptr;
emit targetChanged();
}
@@ -783,7 +783,7 @@ Qt::DropAction QQuickDragAttachedPrivate::startDrag(Qt::DropActions supportedAct
deliverLeaveEvent();
if (target) {
- target = 0;
+ target = nullptr;
emit q->targetChanged();
}
@@ -836,7 +836,7 @@ void QQuickDragAttached::startDrag(QQmlV4Function *args)
}
QQuickDrag::QQuickDrag(QObject *parent)
-: QObject(parent), _target(0), _axis(XAndYAxis), _xmin(-FLT_MAX),
+: QObject(parent), _target(nullptr), _axis(XAndYAxis), _xmin(-FLT_MAX),
_xmax(FLT_MAX), _ymin(-FLT_MAX), _ymax(FLT_MAX), _active(false), _filterChildren(false),
_smoothed(true), _threshold(QGuiApplication::styleHints()->startDragDistance())
{
@@ -861,9 +861,9 @@ void QQuickDrag::setTarget(QQuickItem *t)
void QQuickDrag::resetTarget()
{
- if (_target == 0)
+ if (_target == nullptr)
return;
- _target = 0;
+ _target = nullptr;
emit targetChanged();
}
diff --git a/src/quick/items/qquickdrag_p.h b/src/quick/items/qquickdrag_p.h
index 17e9d8c690..6bfbae74c9 100644
--- a/src/quick/items/qquickdrag_p.h
+++ b/src/quick/items/qquickdrag_p.h
@@ -83,7 +83,7 @@ class QQuickDragGrabber
typedef QIntrusiveList<Item, &Item::node> ItemList;
public:
- QQuickDragGrabber() : m_target(0) {}
+ QQuickDragGrabber() : m_target(nullptr) {}
~QQuickDragGrabber() { while (!m_items.isEmpty()) delete m_items.first(); }
@@ -94,10 +94,10 @@ public:
else if (!m_items.isEmpty())
return *m_items.first();
else
- return 0;
+ return nullptr;
}
void setTarget(QObject *target) { m_target = target; }
- void resetTarget() { m_target = 0; }
+ void resetTarget() { m_target = nullptr; }
bool isEmpty() const { return m_items.isEmpty(); }
@@ -136,7 +136,7 @@ class QQuickDragMimeData : public QMimeData
Q_OBJECT
public:
QQuickDragMimeData()
- : m_source(0)
+ : m_source(nullptr)
{
}
@@ -173,7 +173,7 @@ class Q_AUTOTEST_EXPORT QQuickDrag : public QObject
//### consider drag and drop
public:
- QQuickDrag(QObject *parent=0);
+ QQuickDrag(QObject *parent=nullptr);
~QQuickDrag();
enum DragType { None, Automatic, Internal };
diff --git a/src/quick/items/qquickdroparea.cpp b/src/quick/items/qquickdroparea.cpp
index c7606f90e1..b77fb40cb1 100644
--- a/src/quick/items/qquickdroparea.cpp
+++ b/src/quick/items/qquickdroparea.cpp
@@ -78,7 +78,7 @@ public:
};
QQuickDropAreaPrivate::QQuickDropAreaPrivate()
- : drag(0)
+ : drag(nullptr)
, containsDrag(false)
{
}
@@ -303,7 +303,7 @@ void QQuickDropArea::dragLeaveEvent(QDragLeaveEvent *)
emit exited();
d->containsDrag = false;
- d->source = 0;
+ d->source = nullptr;
emit containsDragChanged();
if (d->drag)
emit d->drag->sourceChanged();
@@ -328,7 +328,7 @@ void QQuickDropArea::dropEvent(QDropEvent *event)
emit dropped(&dragTargetEvent);
d->containsDrag = false;
- d->source = 0;
+ d->source = nullptr;
emit containsDragChanged();
if (d->drag)
emit d->drag->sourceChanged();
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index 8653d758de..1be4bafe28 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -134,13 +134,13 @@ Item {
It contains a bitwise combination of:
\list
- \li Qt.NoModifier - No modifier key is pressed.
- \li Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \li Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \li Qt.AltModifier - An Alt key on the keyboard is pressed.
- \li Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \li Qt.KeypadModifier - A keypad button is pressed.
- \li Qt.GroupSwitchModifier - X11 only. A Mode_switch key on the keyboard is pressed.
+ \li \l {Qt::NoModifier} {Qt.NoModifier} - No modifier key is pressed.
+ \li \l {Qt::ShiftModifier} {Qt.ShiftModifier} - A Shift key on the keyboard is pressed.
+ \li \l {Qt::ControlModifier} {Qt.ControlModifier} - A Ctrl key on the keyboard is pressed.
+ \li \l {Qt::AltModifier} {Qt.AltModifier} - An Alt key on the keyboard is pressed.
+ \li \l {Qt::MetaModifier} {Qt.MetaModifier} - A Meta key on the keyboard is pressed.
+ \li \l {Qt::KeypadModifier} {Qt.KeypadModifier} - A keypad button is pressed.
+ \li \l {Qt::GroupSwitchModifier} {Qt.GroupSwitchModifier} - X11 only. A Mode_switch key on the keyboard is pressed.
\endlist
For example, to react to a Shift key + Enter key combination:
@@ -184,7 +184,7 @@ Item {
\brief Provides information about a mouse event
- The position of the mouse can be found via the \l x and \l y properties.
+ The position of the mouse can be found via the \l {Item::x} {x} and \l {Item::y} {y} properties.
The button that caused the event is available via the \l button property.
\sa MouseArea
@@ -218,17 +218,17 @@ Item {
This property holds the button that caused the event. It can be one of:
\list
- \li Qt.LeftButton
- \li Qt.RightButton
- \li Qt.MiddleButton
+ \li \l {Qt::LeftButton} {Qt.LeftButton}
+ \li \l {Qt::RightButton} {Qt.RightButton}
+ \li \l {Qt::MiddleButton} {Qt.MiddleButton}
\endlist
*/
/*!
\qmlproperty bool QtQuick::MouseEvent::wasHeld
- This property is true if the mouse button has been held pressed longer the
- threshold (800ms).
+ This property is true if the mouse button has been held pressed longer
+ than the threshold (800ms).
*/
/*!
@@ -241,9 +241,9 @@ Item {
It contains a bitwise combination of:
\list
- \li Qt.LeftButton
- \li Qt.RightButton
- \li Qt.MiddleButton
+ \li \l {Qt::LeftButton} {Qt.LeftButton}
+ \li \l {Qt::RightButton} {Qt.RightButton}
+ \li \l {Qt::MiddleButton} {Qt.MiddleButton}
\endlist
*/
@@ -255,12 +255,12 @@ Item {
It contains a bitwise combination of:
\list
- \li Qt.NoModifier - No modifier key is pressed.
- \li Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \li Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \li Qt.AltModifier - An Alt key on the keyboard is pressed.
- \li Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \li Qt.KeypadModifier - A keypad button is pressed.
+ \li \l {Qt::NoModifier} {Qt.NoModifier} - No modifier key is pressed.
+ \li \l {Qt::ShiftModifier} {Qt.ShiftModifier} - A Shift key on the keyboard is pressed.
+ \li \l {Qt::ControlModifier} {Qt.ControlModifier} - A Ctrl key on the keyboard is pressed.
+ \li \l {Qt::AltModifier} {Qt.AltModifier} - An Alt key on the keyboard is pressed.
+ \li \l {Qt::MetaModifier} {Qt.MetaModifier} - A Meta key on the keyboard is pressed.
+ \li \l {Qt::KeypadModifier} {Qt.KeypadModifier} - A keypad button is pressed.
\endlist
For example, to react to a Shift key + Left mouse button click:
@@ -288,20 +288,24 @@ Item {
The value can be one of:
- \value Qt.MouseEventNotSynthesized The most common value. On platforms where
- such information is available, this value indicates that the event
- represents a genuine mouse event from the system.
+ \list
+ \li \l{Qt::MouseEventNotSynthesized} {Qt.MouseEventNotSynthesized}
+ - The most common value. On platforms where such information is
+ available, this value indicates that the event represents a genuine
+ mouse event from the system.
- \value Qt.MouseEventSynthesizedBySystem Indicates that the mouse event was
+ \li \l{Qt::MouseEventSynthesizedBySystem} {Qt.MouseEventSynthesizedBySystem} - Indicates that the mouse event was
synthesized from a touch or tablet event by the platform.
- \value Qt.MouseEventSynthesizedByQt Indicates that the mouse event was
- synthesized from an unhandled touch or tablet event by Qt.
+ \li \l{Qt::MouseEventSynthesizedByQt} {Qt.MouseEventSynthesizedByQt}
+ - Indicates that the mouse event was synthesized from an unhandled
+ touch or tablet event by Qt.
- \value Qt.MouseEventSynthesizedByApplication Indicates that the mouse event
- was synthesized by the application. This allows distinguishing
- application-generated mouse events from the ones that are coming from the
- system or are synthesized by Qt.
+ \li \l{Qt::MouseEventSynthesizedByApplication} {Qt.MouseEventSynthesizedByApplication}
+ - Indicates that the mouse event was synthesized by the application.
+ This allows distinguishing application-generated mouse events from
+ the ones that are coming from the system or are synthesized by Qt.
+ \endlist
For example, to react only to events which come from an actual mouse:
\qml
@@ -326,13 +330,29 @@ Item {
*/
/*!
+ \qmlproperty int QtQuick::MouseEvent::flags
+ \since 5.11
+
+ This property holds the flags that provide additional information about the
+ mouse event.
+
+ \list
+ \li \l {Qt::MouseEventCreatedDoubleClick} {Qt.MouseEventCreatedDoubleClick}
+ - Indicates that Qt has created a double click event from this event.
+ This flag is set in the event originating from a button press, and not
+ in the resulting double click event.
+ \endlist
+*/
+
+/*!
\qmltype WheelEvent
\instantiates QQuickWheelEvent
\inqmlmodule QtQuick
\ingroup qtquick-input-events
\brief Provides information about a mouse wheel event
- The position of the mouse can be found via the \l x and \l y properties.
+ The position of the mouse can be found via the
+ \l {Item::x} {x} and \l {Item::y} {y} properties.
\sa MouseArea
*/
@@ -366,9 +386,9 @@ Item {
It contains a bitwise combination of:
\list
- \li Qt.LeftButton
- \li Qt.RightButton
- \li Qt.MiddleButton
+ \li \l {Qt::LeftButton} {Qt.LeftButton}
+ \li \l {Qt::RightButton} {Qt.RightButton}
+ \li \l {Qt::MiddleButton} {Qt.MiddleButton}
\endlist
*/
@@ -406,12 +426,12 @@ Item {
It contains a bitwise combination of:
\list
- \li Qt.NoModifier - No modifier key is pressed.
- \li Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \li Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \li Qt.AltModifier - An Alt key on the keyboard is pressed.
- \li Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \li Qt.KeypadModifier - A keypad button is pressed.
+ \li \l {Qt::NoModifier} {Qt.NoModifier} - No modifier key is pressed.
+ \li \l {Qt::ShiftModifier} {Qt.ShiftModifier} - A Shift key on the keyboard is pressed.
+ \li \l {Qt::ControlModifier} {Qt.ControlModifier} - A Ctrl key on the keyboard is pressed.
+ \li \l {Qt::AltModifier} {Qt.AltModifier} - An Alt key on the keyboard is pressed.
+ \li \l {Qt::MetaModifier} {Qt.MetaModifier} - A Meta key on the keyboard is pressed.
+ \li \l {Qt::KeypadModifier} {Qt.KeypadModifier} - A keypad button is pressed.
\endlist
For example, to react to a Control key pressed during the wheel event:
@@ -485,13 +505,46 @@ Item {
\l {QTabletEvent::tangentialPressure}{tangentialPressure}
\value DeviceType.Puck
a device that is similar to a flat mouse with a
- transparent circle with cross-hairs (same as \l QTabletEvent::Puck)
+ transparent circle with cross-hairs
+ (same as \l {QTabletEvent::Puck} {Puck})
+ \value DeviceType.AllDevices
+ any of the above; used as a default value for construction
\sa QTouchDevice::DeviceType
*/
/*!
\readonly
+ \qmlproperty enumeration QtQuick::PointerDevice::pointerType
+
+ This property holds a value indicating what is interacting with
+ the device. Think of the device as having a planar 2D surface, and
+ the value of this property as identifying what interacts with the
+ device.
+
+ There is some redundancy between this property and \l {PointerDevice::type}.
+ If a tocuchscreen is used, then the device is TouchScreen and
+ pointerType is Finger (always).
+
+ Valid values are:
+
+ \value PointerDevice.GenericPointer
+ a mouse or something acting like a mouse (the core pointer on X11)
+ \value PointerDevice.Finger
+ the user's finger
+ \value PointerDevice.Pen
+ the drawing end of a stylus
+ \value PointerDevice.Eraser
+ the other end of the stylus (if it has a virtual eraser on the other end)
+ \value PointerDevice.Cursor
+ a cursor in the pre-computer sense of the word
+ \value PointerDevice.AllPointerTypes
+ any of the above (used as a default value in constructors)
+*/
+
+
+/*!
+ \readonly
\qmlproperty enumeration QtQuick::PointerDevice::capabilities
This property holds a bitwise combination of the capabilities of the
@@ -508,11 +561,11 @@ Item {
\value CapabilityFlag.Pressure
the \l {QtQuick::EventTouchPoint::pressure}{pressure} property
\value CapabilityFlag.Velocity
- the \l {QtQuick::PointerEvent::velocity}{velocity} property
+ the \l {QtQuick::EventPoint::velocity}{velocity} property
\value CapabilityFlag.Scroll
- a \l {QtQuick::PointerDevice::DeviceType::Mouse}{Mouse} has a wheel, or the
+ a \l {QtQuick::PointerDevice::type}{Mouse} has a wheel, or the
operating system recognizes scroll gestures on a
- \l {QtQuick::PointerDevice::DeviceType::TouchPad}{TouchPad}
+ \l {QtQuick::PointerDevice::type}{TouchPad}
\value CapabilityFlag.Hover
events are sent even when no button is pressed, or the finger or stylus
is not in contact with the surface
@@ -572,8 +625,7 @@ QQuickPointerDevice *QQuickPointerDevice::touchDevice(const QTouchDevice *d)
int maximumTouchPoints = 10;
QQuickPointerDevice::Capabilities caps = QQuickPointerDevice::Capabilities(QTouchDevice::Position);
if (d) {
- QQuickPointerDevice::Capabilities caps =
- static_cast<QQuickPointerDevice::Capabilities>(static_cast<int>(d->capabilities()) & 0x0F);
+ caps = static_cast<QQuickPointerDevice::Capabilities>(static_cast<int>(d->capabilities()) & 0xFF);
if (d->type() == QTouchDevice::TouchPad) {
type = QQuickPointerDevice::TouchPad;
caps |= QQuickPointerDevice::Scroll;
@@ -639,8 +691,8 @@ QQuickPointerDevice *QQuickPointerDevice::tabletDevice(qint64 id)
\qmlproperty point QtQuick::EventPoint::scenePosition
This property holds the coordinates of the position supplied by the event,
- relative to the scene. If a contact patch is available from the \l device,
- this point represents its centroid.
+ relative to the scene. If a contact patch is available from the
+ \l {QtQuick::PointerEvent::device} {device}, this point represents its centroid.
*/
/*!
@@ -698,7 +750,7 @@ QQuickPointerDevice *QQuickPointerDevice::tabletDevice(qint64 id)
presses a finger against the touchscreen, it will be a larger number.
In other cases, it will be -1.
- \sa PointerDevice.uniqueId
+ \sa {QtQuick::EventTouchPoint::uniqueId}{uniqueId}
*/
/*!
@@ -790,17 +842,19 @@ QQuickItem *QQuickEventPoint::grabberItem() const
void QQuickEventPoint::setGrabberItem(QQuickItem *grabber)
{
if (grabber != m_exclusiveGrabber.data()) {
+ QQuickPointerHandler *oldGrabberHandler = grabberPointerHandler();
+ if (oldGrabberHandler && !oldGrabberHandler->approveGrabTransition(this, grabber))
+ return;
if (Q_UNLIKELY(lcPointerGrab().isDebugEnabled())) {
qCDebug(lcPointerGrab) << pointDeviceName(this) << "point" << hex << m_pointId << pointStateString(this)
<< ": grab" << m_exclusiveGrabber << "->" << grabber;
}
- QQuickPointerHandler *oldGrabberHandler = grabberPointerHandler();
- QQuickItem *oldGrabberItem = grabberItem();
m_exclusiveGrabber = QPointer<QObject>(grabber);
m_grabberIsHandler = false;
m_sceneGrabPos = m_scenePos;
+ QQuickItem *oldGrabberItem = grabberItem();
if (oldGrabberHandler)
- oldGrabberHandler->onGrabChanged(oldGrabberHandler, CancelGrabExclusive, this);
+ oldGrabberHandler->onGrabChanged(oldGrabberHandler, (grabber ? CancelGrabExclusive : UngrabExclusive), this);
else if (oldGrabberItem && oldGrabberItem != grabber && grabber && pointerEvent()->asPointerTouchEvent())
oldGrabberItem->touchUngrabEvent();
for (QPointer<QQuickPointerHandler> passiveGrabber : m_passiveGrabbers)
@@ -837,26 +891,24 @@ void QQuickEventPoint::setGrabberPointerHandler(QQuickPointerHandler *grabber, b
}
if (exclusive) {
if (grabber != m_exclusiveGrabber.data()) {
+ QQuickPointerHandler *oldGrabberHandler = grabberPointerHandler();
+ QQuickItem *oldGrabberItem = grabberItem();
+ m_exclusiveGrabber = QPointer<QObject>(grabber);
+ m_grabberIsHandler = true;
+ m_sceneGrabPos = m_scenePos;
if (grabber) {
- // set variables before notifying the new grabber
- m_exclusiveGrabber = QPointer<QObject>(grabber);
- m_grabberIsHandler = true;
- m_sceneGrabPos = m_scenePos;
grabber->onGrabChanged(grabber, GrabExclusive, this);
for (QPointer<QQuickPointerHandler> passiveGrabber : m_passiveGrabbers) {
if (passiveGrabber != grabber)
passiveGrabber->onGrabChanged(grabber, OverrideGrabPassive, this);
}
- } else if (QQuickPointerHandler *oldGrabberPointerHandler = qmlobject_cast<QQuickPointerHandler *>(m_exclusiveGrabber.data())) {
- oldGrabberPointerHandler->onGrabChanged(oldGrabberPointerHandler, UngrabExclusive, this);
- } else if (!m_exclusiveGrabber.isNull()) {
- // If there is a previous grabber and it's not a PointerHandler, it must be an Item.
- QQuickItem *oldGrabberItem = static_cast<QQuickItem *>(m_exclusiveGrabber.data());
- // If this point came from a touchscreen, notify that previous grabber Item that it's losing its touch grab.
- if (pointerEvent()->asPointerTouchEvent())
- oldGrabberItem->touchUngrabEvent();
}
- // set variables after notifying the old grabber
+ if (oldGrabberHandler)
+ oldGrabberHandler->onGrabChanged(oldGrabberHandler, (grabber ? CancelGrabExclusive : UngrabExclusive), this);
+ else if (oldGrabberItem && pointerEvent()->asPointerTouchEvent())
+ oldGrabberItem->touchUngrabEvent();
+ // touchUngrabEvent() can result in the grabber being set to null (MPTA does that, for example).
+ // So set it again to ensure that final state is what we want.
m_exclusiveGrabber = QPointer<QObject>(grabber);
m_grabberIsHandler = true;
m_sceneGrabPos = m_scenePos;
@@ -1032,22 +1084,27 @@ void QQuickEventPoint::setAccepted(bool accepted)
\qmlproperty size QtQuick::EventTouchPoint::ellipseDiameters
This property holds the diameters of the contact patch, if the event
- comes from a touchpoint and the \l device provides this information.
-
- A touchpoint is modeled as an elliptical area where the finger is pressed
- against the touchscreen. (In fact, it could also be modeled as a bitmap; but
- in that case we expect an elliptical bounding estimate to be fitted to the
- contact patch before the event is sent.) The harder the user presses, the
- larger the contact patch; so, these diameters provide an alternate way of
- detecting pressure, in case the device does not include a separate pressure
- sensor. The ellipse is centered on \l scenePos (\l pos in the PointerHandler's
+ comes from a touchpoint and the \l {QtQuick::PointerEvent::device} {device}
+ provides this information.
+
+ A touchpoint is modeled as an elliptical area where the finger is
+ pressed against the touchscreen. (In fact, it could also be
+ modeled as a bitmap; but in that case we expect an elliptical
+ bounding estimate to be fitted to the contact patch before the
+ event is sent.) The harder the user presses, the larger the
+ contact patch; so, these diameters provide an alternate way of
+ detecting pressure, in case the device does not include a separate
+ pressure sensor. The ellipse is centered on
+ \l {QtQuick::EventPoint::scenePosition} {scenePosition}
+ (\l {QtQuick::EventPoint::position} {position} in the PointerHandler's
Item's local coordinates). The \l rotation property provides the
- rotation of the ellipse, if known. It is expected that if the \l rotation
- is zero, the verticalDiameter of the ellipse is the larger one (the major axis),
- because of the usual hand position, reaching upward or outward across the surface.
+ rotation of the ellipse, if known. It is expected that if the
+ \l rotation is zero, the verticalDiameter of the ellipse is the
+ larger one (the major axis), because of the usual hand position,
+ reaching upward or outward across the surface.
- If the contact patch is unknown, or the \l device is not a touchscreen,
- these values will be zero.
+ If the contact patch is unknown, or the \l {QtQuick::PointerEvent::device} {device}
+ is not a touchscreen, these values will be zero.
*/
QQuickEventTouchPoint::QQuickEventTouchPoint(QQuickPointerTouchEvent *parent)
@@ -1131,8 +1188,8 @@ QVector2D QQuickEventPoint::estimatedVelocity() const
A PointerEvent is an event describing contact or movement across a surface,
provided by a mouse, a touchpoint (single finger on a touchscreen), or a
- stylus on a graphics tablet. The \l device property provides more
- information about where the event came from.
+ stylus on a graphics tablet. The \l {QtQuick::PointerEvent::device} {device}
+ property provides more information about where the event came from.
\sa PointerHandler
@@ -1158,8 +1215,8 @@ QVector2D QQuickEventPoint::estimatedVelocity() const
\qmlproperty enumeration QtQuick::PointerEvent::button
This property holds the \l {Qt::MouseButton}{button} that caused the event,
- if any. If the \l device does not have buttons, or the event is a hover
- event, it will be \c Qt.NoButton.
+ if any. If the \l {QtQuick::PointerEvent::device} {device} does not have
+ buttons, or the event is a hover event, it will be \c Qt.NoButton.
*/
/*!
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h
index 09a63febdc..c4f0b60d92 100644
--- a/src/quick/items/qquickevents_p_p.h
+++ b/src/quick/items/qquickevents_p_p.h
@@ -84,7 +84,7 @@ class QQuickKeyEvent : public QObject
public:
QQuickKeyEvent()
- : event(QEvent::None, 0, 0)
+ : event(QEvent::None, 0, nullptr)
{}
void reset(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
@@ -131,15 +131,18 @@ class Q_QUICK_PRIVATE_EXPORT QQuickMouseEvent : public QObject
Q_PROPERTY(bool wasHeld READ wasHeld)
Q_PROPERTY(bool isClick READ isClick)
Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
+ Q_REVISION(11) Q_PROPERTY(int flags READ flags)
public:
QQuickMouseEvent()
- : _x(0), _y(0), _button(Qt::NoButton), _buttons(Qt::NoButton), _modifiers(Qt::NoModifier)
- , _source(Qt::MouseEventNotSynthesized), _wasHeld(false), _isClick(false), _accepted(false)
+ : _buttons(Qt::NoButton), _modifiers(Qt::NoModifier)
+ , _wasHeld(false), _isClick(false), _accepted(false)
+ , _flags(Qt::MouseEventFlags(nullptr))
{}
void reset(qreal x, qreal y, Qt::MouseButton button, Qt::MouseButtons buttons,
- Qt::KeyboardModifiers modifiers, bool isClick = false, bool wasHeld = false)
+ Qt::KeyboardModifiers modifiers, bool isClick = false, bool wasHeld = false,
+ Qt::MouseEventFlags flags = nullptr)
{
_x = x;
_y = y;
@@ -150,6 +153,7 @@ public:
_wasHeld = wasHeld;
_isClick = isClick;
_accepted = true;
+ _flags = flags;
}
qreal x() const { return _x; }
@@ -169,17 +173,18 @@ public:
bool isAccepted() { return _accepted; }
void setAccepted(bool accepted) { _accepted = accepted; }
-
+ int flags() const { return _flags; }
private:
- qreal _x;
- qreal _y;
- Qt::MouseButton _button;
+ qreal _x = 0;
+ qreal _y = 0;
+ Qt::MouseButton _button = Qt::NoButton;
Qt::MouseButtons _buttons;
Qt::KeyboardModifiers _modifiers;
- Qt::MouseEventSource _source;
+ Qt::MouseEventSource _source = Qt::MouseEventNotSynthesized;
bool _wasHeld : 1;
bool _isClick : 1;
bool _accepted : 1;
+ Qt::MouseEventFlags _flags;
};
class QQuickWheelEvent : public QObject
@@ -196,8 +201,7 @@ class QQuickWheelEvent : public QObject
public:
QQuickWheelEvent()
- : _x(0), _y(0), _buttons(Qt::NoButton), _modifiers(Qt::NoModifier)
- , _inverted(false), _accepted(false)
+ : _buttons(Qt::NoButton), _modifiers(Qt::NoModifier)
{}
void reset(qreal x, qreal y, const QPoint &angleDelta, const QPoint &pixelDelta,
@@ -224,14 +228,14 @@ public:
void setAccepted(bool accepted) { _accepted = accepted; }
private:
- qreal _x;
- qreal _y;
+ qreal _x = 0;
+ qreal _y = 0;
QPoint _angleDelta;
QPoint _pixelDelta;
Qt::MouseButtons _buttons;
Qt::KeyboardModifiers _modifiers;
- bool _inverted;
- bool _accepted;
+ bool _inverted = false;
+ bool _accepted = false;
};
class Q_QUICK_PRIVATE_EXPORT QQuickCloseEvent : public QObject
@@ -240,14 +244,13 @@ class Q_QUICK_PRIVATE_EXPORT QQuickCloseEvent : public QObject
Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
public:
- QQuickCloseEvent()
- : _accepted(true) {}
+ QQuickCloseEvent() {}
bool isAccepted() { return _accepted; }
void setAccepted(bool accepted) { _accepted = accepted; }
private:
- bool _accepted;
+ bool _accepted = true;
};
class Q_QUICK_PRIVATE_EXPORT QQuickEventPoint : public QObject
@@ -306,7 +309,6 @@ public:
void setExclusiveGrabber(QObject *exclusiveGrabber);
QQuickItem *grabberItem() const;
- Q_DECL_DEPRECATED QQuickItem *grabber() const { return grabberItem(); }
void setGrabberItem(QQuickItem *exclusiveGrabber);
QQuickPointerHandler *grabberPointerHandler() const;
@@ -390,12 +392,10 @@ public:
QQuickPointerEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr)
: QObject(parent)
, m_device(device)
- , m_event(nullptr)
- , m_button(Qt::NoButton)
, m_pressedButtons(Qt::NoButton)
- { }
+ {}
- virtual ~QQuickPointerEvent();
+ ~QQuickPointerEvent() override;
public: // property accessors
QQuickPointerDevice *device() const { return m_device; }
@@ -437,8 +437,8 @@ public: // helpers for C++ only (during event delivery)
protected:
QQuickPointerDevice *m_device;
- QInputEvent *m_event; // original event as received by QQuickWindow
- Qt::MouseButton m_button;
+ QInputEvent *m_event = nullptr; // original event as received by QQuickWindow
+ Qt::MouseButton m_button = Qt::NoButton;
Qt::MouseButtons m_pressedButtons;
Q_DISABLE_COPY(QQuickPointerEvent)
@@ -483,9 +483,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPointerTouchEvent : public QQuickPointerEvent
public:
QQuickPointerTouchEvent(QObject *parent = nullptr, QQuickPointerDevice *device = nullptr)
: QQuickPointerEvent(parent, device)
- , m_pointCount(0)
, m_synthMouseEvent(QEvent::MouseMove, QPointF(), Qt::NoButton, Qt::NoButton, Qt::NoModifier)
- { }
+ {}
QQuickPointerEvent *reset(QEvent *) override;
void localize(QQuickItem *target) override;
@@ -511,7 +510,7 @@ public:
QTouchEvent *asTouchEvent() const;
private:
- int m_pointCount;
+ int m_pointCount = 0;
QVector<QQuickEventTouchPoint *> m_touchPoints;
mutable QMouseEvent m_synthMouseEvent;
@@ -567,7 +566,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPointerDevice : public QObject
Q_PROPERTY(QPointingDeviceUniqueId uniqueId READ uniqueId CONSTANT)
public:
- enum DeviceType {
+ enum DeviceType : qint16 {
UnknownDevice = 0x0000,
Mouse = 0x0001,
TouchScreen = 0x0002,
@@ -575,25 +574,25 @@ public:
Puck = 0x0008,
Stylus = 0x0010,
Airbrush = 0x0020,
- AllDevices = 0x003F
+ AllDevices = 0x7FFF
};
Q_DECLARE_FLAGS(DeviceTypes, DeviceType)
Q_ENUM(DeviceType)
Q_FLAG(DeviceTypes)
- enum PointerType {
+ enum PointerType : qint16 {
GenericPointer = 0x0001,
Finger = 0x0002,
Pen = 0x0004,
Eraser = 0x0008,
Cursor = 0x0010,
- AllPointerTypes = 0x001F
+ AllPointerTypes = 0x7FFF
};
Q_DECLARE_FLAGS(PointerTypes, PointerType)
Q_ENUM(PointerType)
Q_FLAG(PointerTypes)
- enum CapabilityFlag {
+ enum CapabilityFlag : qint16 {
Position = QTouchDevice::Position,
Area = QTouchDevice::Area,
Pressure = QTouchDevice::Pressure,
@@ -611,7 +610,7 @@ public:
DeviceType type() const { return m_deviceType; }
PointerType pointerType() const { return m_pointerType; }
- Capabilities capabilities() const { return m_capabilities; }
+ Capabilities capabilities() const { return static_cast<Capabilities>(m_capabilities); }
bool hasCapability(CapabilityFlag cap) { return m_capabilities & cap; }
int maximumTouchPoints() const { return m_maximumTouchPoints; }
int buttonCount() const { return m_buttonCount; }
@@ -627,19 +626,21 @@ public:
private:
QQuickPointerDevice(DeviceType devType, PointerType pType, Capabilities caps, int maxPoints, int buttonCount, const QString &name, qint64 uniqueId = 0)
- : m_deviceType(devType), m_pointerType(pType), m_capabilities(caps)
- , m_maximumTouchPoints(maxPoints), m_buttonCount(buttonCount), m_name(name)
+ : m_deviceType(devType), m_pointerType(pType), m_capabilities(static_cast<qint16>(caps))
+ , m_maximumTouchPoints(static_cast<qint8>(maxPoints)), m_buttonCount(static_cast<qint8>(buttonCount)), m_name(name)
, m_uniqueId(QPointingDeviceUniqueId::fromNumericId(uniqueId))
{
}
- ~QQuickPointerDevice() { }
+ ~QQuickPointerDevice() override { }
private:
+ // begin 64-bit field
DeviceType m_deviceType;
PointerType m_pointerType;
- Capabilities m_capabilities;
- int m_maximumTouchPoints;
- int m_buttonCount;
+ qint16 m_capabilities;
+ qint8 m_maximumTouchPoints;
+ qint8 m_buttonCount;
+ // end 64-bit field
QString m_name;
QPointingDeviceUniqueId m_uniqueId;
QVector<QQuickPointerHandler *> m_eventDeliveryTargets; // during delivery, handlers which have already seen the event
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp
index cd918cef5f..8cb64377cc 100644
--- a/src/quick/items/qquickflickable.cpp
+++ b/src/quick/items/qquickflickable.cpp
@@ -172,13 +172,13 @@ class QQuickFlickableReboundTransition : public QQuickTransitionManager
{
public:
QQuickFlickableReboundTransition(QQuickFlickable *f, const QString &name)
- : flickable(f), axisData(0), propName(name), active(false)
+ : flickable(f), axisData(nullptr), propName(name), active(false)
{
}
~QQuickFlickableReboundTransition()
{
- flickable = 0;
+ flickable = nullptr;
}
bool startTransition(QQuickFlickablePrivate::AxisData *data, qreal toPos) {
@@ -252,12 +252,12 @@ QQuickFlickablePrivate::QQuickFlickablePrivate()
, lastPressTime(0)
, deceleration(QML_FLICK_DEFAULTDECELERATION)
, maxVelocity(QML_FLICK_DEFAULTMAXVELOCITY), reportedVelocitySmoothing(100)
- , delayedPressEvent(0), pressDelay(0), fixupDuration(400)
- , flickBoost(1.0), fixupMode(Normal), vTime(0), visibleArea(0)
+ , delayedPressEvent(nullptr), pressDelay(0), fixupDuration(400)
+ , flickBoost(1.0), fixupMode(Normal), vTime(0), visibleArea(nullptr)
, flickableDirection(QQuickFlickable::AutoFlickDirection)
, boundsBehavior(QQuickFlickable::DragAndOvershootBounds)
, boundsMovement(QQuickFlickable::FollowBoundsBehavior)
- , rebound(0)
+ , rebound(nullptr)
{
}
@@ -317,7 +317,7 @@ void QQuickFlickablePrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometr
{
Q_Q(QQuickFlickable);
if (item == contentItem) {
- Qt::Orientations orient = 0;
+ Qt::Orientations orient = nullptr;
if (change.xChange())
orient |= Qt::Horizontal;
if (change.yChange())
@@ -725,7 +725,19 @@ QQuickFlickable::~QQuickFlickable()
These properties hold the surface coordinate currently at the top-left
corner of the Flickable. For example, if you flick an image up 100 pixels,
- \c contentY will be 100.
+ \c contentY will increase by 100.
+
+ \note If you flick back to the origin (the top-left corner), after the
+ rebound animation, \c contentX will settle to the same value as \c originX,
+ and \c contentY to \c originY. These are usually (0,0), however ListView
+ and GridView may have an arbitrary origin due to delegate size variation,
+ or item insertion/removal outside the visible region. So if you want to
+ implement something like a vertical scrollbar, one way is to use
+ \c {y: (contentY - originY) * (height / contentHeight)}
+ for the position; another way is to use the normalized values in
+ \l {QtQuick::Flickable::visibleArea}{visibleArea}.
+
+ \sa originX, originY
*/
qreal QQuickFlickable::contentX() const
{
@@ -739,7 +751,8 @@ void QQuickFlickable::setContentX(qreal pos)
d->hData.explicitValue = true;
d->resetTimeline(d->hData);
d->hData.vTime = d->timeline.time();
- movementEnding(true, false);
+ if (isMoving() || isFlicking())
+ movementEnding(true, false);
if (-pos != d->hData.move.value())
d->hData.move.setValue(-pos);
}
@@ -756,7 +769,8 @@ void QQuickFlickable::setContentY(qreal pos)
d->vData.explicitValue = true;
d->resetTimeline(d->vData);
d->vData.vTime = d->timeline.time();
- movementEnding(false, true);
+ if (isMoving() || isFlicking())
+ movementEnding(false, true);
if (-pos != d->vData.move.value())
d->vData.move.setValue(-pos);
}
@@ -1421,17 +1435,23 @@ void QQuickFlickable::wheelEvent(QWheelEvent *event)
case Qt::ScrollUpdate:
if (d->scrollingPhase)
d->pressed = true;
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
+ // TODO eliminate this timer when ScrollMomentum has been added
d->movementEndingTimer.start(MovementEndingTimerInterval, this);
#endif
break;
case Qt::ScrollEnd:
+ // TODO most of this should be done at transition to ScrollMomentum phase,
+ // then do what the movementEndingTimer triggers at transition to ScrollEnd phase
d->pressed = false;
d->scrollingPhase = false;
d->draggingEnding();
event->accept();
returnToBounds();
d->lastPosTime = -1;
+#ifdef Q_OS_MACOS
+ d->movementEndingTimer.start(MovementEndingTimerInterval, this);
+#endif
return;
}
@@ -1535,7 +1555,7 @@ void QQuickFlickablePrivate::clearDelayedPress()
if (delayedPressEvent) {
delayedPressTimer.stop();
delete delayedPressEvent;
- delayedPressEvent = 0;
+ delayedPressEvent = nullptr;
}
}
@@ -1545,7 +1565,7 @@ void QQuickFlickablePrivate::replayDelayedPress()
if (delayedPressEvent) {
// Losing the grab will clear the delayed press event; take control of it here
QScopedPointer<QMouseEvent> mouseEvent(delayedPressEvent);
- delayedPressEvent = 0;
+ delayedPressEvent = nullptr;
delayedPressTimer.stop();
// If we have the grab, release before delivering the event
@@ -1838,7 +1858,7 @@ int QQuickFlickablePrivate::data_count(QQmlListProperty<QObject> *)
QObject *QQuickFlickablePrivate::data_at(QQmlListProperty<QObject> *, int)
{
// XXX todo
- return 0;
+ return nullptr;
}
void QQuickFlickablePrivate::data_clear(QQmlListProperty<QObject> *)
@@ -2150,6 +2170,8 @@ void QQuickFlickable::setRightMargin(qreal m)
This is usually (0,0), however ListView and GridView may have an arbitrary
origin due to delegate size variation, or item insertion/removal outside
the visible region.
+
+ \sa contentX, contentY
*/
qreal QQuickFlickable::originY() const
@@ -2180,25 +2202,25 @@ qreal QQuickFlickable::originX() const
void QQuickFlickable::resizeContent(qreal w, qreal h, QPointF center)
{
Q_D(QQuickFlickable);
- if (w != d->hData.viewSize) {
- qreal oldSize = d->hData.viewSize;
- d->hData.viewSize = w;
- d->contentItem->setWidth(w);
+ const qreal oldHSize = d->hData.viewSize;
+ const qreal oldVSize = d->vData.viewSize;
+ const bool needToUpdateWidth = w != oldHSize;
+ const bool needToUpdateHeight = h != oldVSize;
+ d->hData.viewSize = w;
+ d->vData.viewSize = h;
+ d->contentItem->setSize(QSizeF(w, h));
+ if (needToUpdateWidth)
emit contentWidthChanged();
- if (center.x() != 0) {
- qreal pos = center.x() * w / oldSize;
- setContentX(contentX() + pos - center.x());
- }
- }
- if (h != d->vData.viewSize) {
- qreal oldSize = d->vData.viewSize;
- d->vData.viewSize = h;
- d->contentItem->setHeight(h);
+ if (needToUpdateHeight)
emit contentHeightChanged();
- if (center.y() != 0) {
- qreal pos = center.y() * h / oldSize;
- setContentY(contentY() + pos - center.y());
- }
+
+ if (center.x() != 0) {
+ qreal pos = center.x() * w / oldHSize;
+ setContentX(contentX() + pos - center.x());
+ }
+ if (center.y() != 0) {
+ qreal pos = center.y() * h / oldVSize;
+ setContentY(contentY() + pos - center.y());
}
d->updateBeginningEnd();
}
@@ -2654,13 +2676,15 @@ void QQuickFlickable::movementEnding(bool hMovementEnding, bool vMovementEnding)
if (hMovementEnding && d->hData.moving
&& (!d->pressed && !d->stealMouse)) {
d->hData.moving = false;
- d->hMoved = false;
+ if (!d->scrollingPhase)
+ d->hMoved = false;
emit movingHorizontallyChanged();
}
if (vMovementEnding && d->vData.moving
&& (!d->pressed && !d->stealMouse)) {
d->vData.moving = false;
- d->vMoved = false;
+ if (!d->scrollingPhase)
+ d->vMoved = false;
emit movingVerticallyChanged();
}
if (wasMoving && !isMoving()) {
diff --git a/src/quick/items/qquickflickable_p.h b/src/quick/items/qquickflickable_p.h
index 4ad01323a4..939e3af698 100644
--- a/src/quick/items/qquickflickable_p.h
+++ b/src/quick/items/qquickflickable_p.h
@@ -115,7 +115,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickFlickable : public QQuickItem
Q_CLASSINFO("DefaultProperty", "flickableData")
public:
- QQuickFlickable(QQuickItem *parent=0);
+ QQuickFlickable(QQuickItem *parent=nullptr);
~QQuickFlickable();
QQmlListProperty<QObject> flickableData();
diff --git a/src/quick/items/qquickflickable_p_p.h b/src/quick/items/qquickflickable_p_p.h
index 54cc67875a..08f069e830 100644
--- a/src/quick/items/qquickflickable_p_p.h
+++ b/src/quick/items/qquickflickable_p_p.h
@@ -99,16 +99,17 @@ public:
struct AxisData {
AxisData(QQuickFlickablePrivate *fp, void (QQuickFlickablePrivate::*func)(qreal))
: move(fp, func)
- , transitionToBounds(0)
+ , transitionToBounds(nullptr)
, viewSize(-1), lastPos(0), previousDragDelta(0), velocity(0), startMargin(0), endMargin(0)
, origin(0), overshoot(0)
, transitionTo(0)
, continuousFlickVelocity(0), velocityTime(), vTime(0)
, smoothVelocity(fp), atEnd(false), atBeginning(true)
, transitionToSet(false)
- , fixingUp(false), inOvershoot(false), moving(false), flicking(false)
+ , fixingUp(false), inOvershoot(false), inRebound(false), moving(false), flicking(false)
, dragging(false), extentsChanged(false)
, explicitValue(false), minExtentDirty(true), maxExtentDirty(true)
+ , unused(0)
{}
~AxisData();
@@ -168,6 +169,7 @@ public:
bool explicitValue : 1;
mutable bool minExtentDirty : 1;
mutable bool maxExtentDirty : 1;
+ uint unused : 19;
};
bool flickX(qreal velocity);
@@ -282,7 +284,7 @@ class QQuickFlickableVisibleArea : public QObject
Q_PROPERTY(qreal heightRatio READ heightRatio NOTIFY heightRatioChanged)
public:
- QQuickFlickableVisibleArea(QQuickFlickable *parent=0);
+ QQuickFlickableVisibleArea(QQuickFlickable *parent=nullptr);
qreal xPosition() const;
qreal widthRatio() const;
diff --git a/src/quick/items/qquickflipable.cpp b/src/quick/items/qquickflipable.cpp
index 4273ed4881..fbba8eed89 100644
--- a/src/quick/items/qquickflipable.cpp
+++ b/src/quick/items/qquickflipable.cpp
@@ -68,7 +68,7 @@ class QQuickFlipablePrivate : public QQuickItemPrivate
{
Q_DECLARE_PUBLIC(QQuickFlipable)
public:
- QQuickFlipablePrivate() : current(QQuickFlipable::Front), front(0), back(0), sideDirty(false) {}
+ QQuickFlipablePrivate() : current(QQuickFlipable::Front), front(nullptr), back(nullptr), sideDirty(false) {}
void transformChanged() override;
void updateSide();
@@ -178,7 +178,7 @@ void QQuickFlipable::setBack(QQuickItem *back)
qmlWarning(this) << tr("back is a write-once property");
return;
}
- if (back == 0)
+ if (back == nullptr)
return;
d->back = back;
d->back->setParentItem(this);
diff --git a/src/quick/items/qquickflipable_p.h b/src/quick/items/qquickflipable_p.h
index ec922725ef..d70cd02d35 100644
--- a/src/quick/items/qquickflipable_p.h
+++ b/src/quick/items/qquickflipable_p.h
@@ -74,7 +74,7 @@ class Q_AUTOTEST_EXPORT QQuickFlipable : public QQuickItem
//### flipAxis
//### flipRotation
public:
- QQuickFlipable(QQuickItem *parent=0);
+ QQuickFlipable(QQuickItem *parent=nullptr);
~QQuickFlipable();
QQuickItem *front() const;
diff --git a/src/quick/items/qquickfocusscope_p.h b/src/quick/items/qquickfocusscope_p.h
index b65e543343..af750fc127 100644
--- a/src/quick/items/qquickfocusscope_p.h
+++ b/src/quick/items/qquickfocusscope_p.h
@@ -59,7 +59,7 @@ class Q_AUTOTEST_EXPORT QQuickFocusScope : public QQuickItem
{
Q_OBJECT
public:
- QQuickFocusScope(QQuickItem *parent=0);
+ QQuickFocusScope(QQuickItem *parent=nullptr);
virtual ~QQuickFocusScope();
};
diff --git a/src/quick/items/qquickframebufferobject.cpp b/src/quick/items/qquickframebufferobject.cpp
index 5a40d6b705..48f8b8db5c 100644
--- a/src/quick/items/qquickframebufferobject.cpp
+++ b/src/quick/items/qquickframebufferobject.cpp
@@ -57,7 +57,7 @@ public:
QQuickFramebufferObjectPrivate()
: followsItemSize(true)
, mirrorVertically(false)
- , node(0)
+ , node(nullptr)
{
}
@@ -194,10 +194,10 @@ class QSGFramebufferObjectNode : public QSGTextureProvider, public QSGSimpleText
public:
QSGFramebufferObjectNode()
- : window(0)
- , fbo(0)
- , msDisplayFbo(0)
- , renderer(0)
+ : window(nullptr)
+ , fbo(nullptr)
+ , msDisplayFbo(nullptr)
+ , renderer(nullptr)
, renderPending(true)
, invalidatePending(false)
, devicePixelRatio(1)
@@ -282,13 +282,13 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode
// that easily so with this logic, the renderer only goes away when
// the scenegraph is invalidated or it is removed from the scene.
if (!n && (width() <= 0 || height() <= 0))
- return 0;
+ return nullptr;
Q_D(QQuickFramebufferObject);
if (!n) {
if (!isOpenGL(d->sceneGraphRenderContext()))
- return 0;
+ return nullptr;
if (!d->node)
d->node = new QSGFramebufferObjectNode;
n = d->node;
@@ -313,10 +313,11 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode
desiredFboSize *= n->devicePixelRatio;
if (n->fbo && ((d->followsItemSize && n->fbo->size() != desiredFboSize) || n->invalidatePending)) {
+ delete n->texture();
delete n->fbo;
- n->fbo = 0;
+ n->fbo = nullptr;
delete n->msDisplayFbo;
- n->msDisplayFbo = 0;
+ n->msDisplayFbo = nullptr;
n->invalidatePending = false;
}
@@ -367,10 +368,10 @@ QSGTextureProvider *QQuickFramebufferObject::textureProvider() const
QQuickWindow *w = window();
if (!w || !w->openglContext() || QThread::currentThread() != w->openglContext()->thread()) {
qWarning("QQuickFramebufferObject::textureProvider: can only be queried on the rendering thread of an exposed window");
- return 0;
+ return nullptr;
}
if (!isOpenGL(d->sceneGraphRenderContext()))
- return 0;
+ return nullptr;
if (!d->node)
d->node = new QSGFramebufferObjectNode;
return d->node;
@@ -385,13 +386,13 @@ void QQuickFramebufferObject::releaseResources()
// forget about the node. Since it is the node we returned from updatePaintNode
// it will be managed by the scene graph.
Q_D(QQuickFramebufferObject);
- d->node = 0;
+ d->node = nullptr;
}
void QQuickFramebufferObject::invalidateSceneGraph()
{
Q_D(QQuickFramebufferObject);
- d->node = 0;
+ d->node = nullptr;
}
/*!
@@ -410,7 +411,7 @@ void QQuickFramebufferObject::invalidateSceneGraph()
* GUI thread is blocked.
*/
QQuickFramebufferObject::Renderer::Renderer()
- : data(0)
+ : data(nullptr)
{
}
@@ -438,7 +439,7 @@ QQuickFramebufferObject::Renderer::~Renderer()
*/
QOpenGLFramebufferObject *QQuickFramebufferObject::Renderer::framebufferObject() const
{
- return data ? ((QSGFramebufferObjectNode *) data)->fbo : 0;
+ return data ? ((QSGFramebufferObjectNode *) data)->fbo : nullptr;
}
/*!
diff --git a/src/quick/items/qquickgenericshadereffect.cpp b/src/quick/items/qquickgenericshadereffect.cpp
index 305ef7e778..248c2b6ec3 100644
--- a/src/quick/items/qquickgenericshadereffect.cpp
+++ b/src/quick/items/qquickgenericshadereffect.cpp
@@ -61,7 +61,7 @@ QQuickGenericShaderEffect::QQuickGenericShaderEffect(QQuickShaderEffect *item, Q
, m_mgr(nullptr)
, m_fragNeedsUpdate(true)
, m_vertNeedsUpdate(true)
- , m_dirty(0)
+ , m_dirty(nullptr)
{
qRegisterMetaType<QSGGuiThreadShaderEffectManager::ShaderInfo::Type>("ShaderInfo::Type");
for (int i = 0; i < NShader; ++i)
@@ -134,7 +134,7 @@ void QQuickGenericShaderEffect::setMesh(const QVariant &mesh)
return;
if (m_mesh)
- disconnect(m_mesh, SIGNAL(geometryChanged()), this, 0);
+ disconnect(m_mesh, SIGNAL(geometryChanged()), this, nullptr);
m_mesh = newMesh;
@@ -290,7 +290,7 @@ QSGNode *QQuickGenericShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQui
m_dirty &= ~QSGShaderEffectNode::DirtyShaderGeometry;
}
- m_dirty = 0;
+ m_dirty = nullptr;
for (int i = 0; i < NShader; ++i) {
m_dirtyConstants[i].clear();
m_dirtyTextures[i].clear();
diff --git a/src/quick/items/qquickgenericshadereffect_p.h b/src/quick/items/qquickgenericshadereffect_p.h
index ab19816493..3f6f92921b 100644
--- a/src/quick/items/qquickgenericshadereffect_p.h
+++ b/src/quick/items/qquickgenericshadereffect_p.h
@@ -66,7 +66,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickGenericShaderEffect : public QObject
Q_OBJECT
public:
- QQuickGenericShaderEffect(QQuickShaderEffect *item, QObject *parent = 0);
+ QQuickGenericShaderEffect(QQuickShaderEffect *item, QObject *parent = nullptr);
~QQuickGenericShaderEffect();
QByteArray fragmentShader() const { return m_fragShader; }
diff --git a/src/quick/items/qquickgraphicsinfo.cpp b/src/quick/items/qquickgraphicsinfo.cpp
index a36133874b..e809bdd827 100644
--- a/src/quick/items/qquickgraphicsinfo.cpp
+++ b/src/quick/items/qquickgraphicsinfo.cpp
@@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE
QQuickGraphicsInfo::QQuickGraphicsInfo(QQuickItem *item)
: QObject(item)
- , m_window(0)
+ , m_window(nullptr)
, m_api(Unknown)
, m_shaderType(UnknownShadingLanguage)
, m_shaderCompilationType(ShaderCompilationType(0))
diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp
index 10262e8cc0..1f5cda9d18 100644
--- a/src/quick/items/qquickgridview.cpp
+++ b/src/quick/items/qquickgridview.cpp
@@ -230,7 +230,7 @@ public:
: flow(QQuickGridView::FlowLeftToRight)
, cellWidth(100), cellHeight(100), columns(1)
, snapMode(QQuickGridView::NoSnap)
- , highlightXAnimator(0), highlightYAnimator(0)
+ , highlightXAnimator(nullptr), highlightYAnimator(nullptr)
{}
~QQuickGridViewPrivate()
{
@@ -390,7 +390,7 @@ FxViewItem *QQuickGridViewPrivate::snapItemAt(qreal pos) const
if (itemTop+rowSize()/2 >= pos && itemTop - rowSize()/2 <= pos)
return item;
}
- return 0;
+ return nullptr;
}
int QQuickGridViewPrivate::snapIndex() const
@@ -508,12 +508,14 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
}
int colNum = qFloor((colPos+colSize()/2) / colSize());
- FxGridItemSG *item = 0;
+ FxGridItemSG *item = nullptr;
bool changed = false;
+ QQmlIncubator::IncubationMode incubationMode = doBuffer ? QQmlIncubator::Asynchronous : QQmlIncubator::AsynchronousIfNested;
+
while (modelIndex < model->count() && rowPos <= fillTo + rowSize()*(columns - colNum)/(columns+1)) {
qCDebug(lcItemViewDelegateLifecycle) << "refill: append item" << modelIndex << colPos << rowPos;
- if (!(item = static_cast<FxGridItemSG*>(createItem(modelIndex, doBuffer))))
+ if (!(item = static_cast<FxGridItemSG*>(createItem(modelIndex, incubationMode))))
break;
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos, true);
@@ -535,20 +537,19 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
if (visibleItems.count()) {
FxGridItemSG *firstItem = static_cast<FxGridItemSG*>(visibleItems.constFirst());
rowPos = firstItem->rowPos();
- colNum = qFloor((firstItem->colPos()+colSize()/2) / colSize());
- if (--colNum < 0) {
- colNum = columns - 1;
- rowPos -= rowSize();
- }
- } else {
- colNum = qFloor((colPos+colSize()/2) / colSize());
+ colPos = firstItem->colPos();
+ }
+ colNum = qFloor((colPos+colSize()/2) / colSize());
+ if (--colNum < 0) {
+ colNum = columns - 1;
+ rowPos -= rowSize();
}
// Prepend
colPos = colNum * colSize();
while (visibleIndex > 0 && rowPos + rowSize() - 1 >= fillFrom - rowSize()*(colNum+1)/(columns+1)){
qCDebug(lcItemViewDelegateLifecycle) << "refill: prepend item" << visibleIndex-1 << "top pos" << rowPos << colPos;
- if (!(item = static_cast<FxGridItemSG*>(createItem(visibleIndex-1, doBuffer))))
+ if (!(item = static_cast<FxGridItemSG*>(createItem(visibleIndex-1, incubationMode))))
break;
--visibleIndex;
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
@@ -579,7 +580,7 @@ void QQuickGridViewPrivate::removeItem(FxViewItem *item)
bool QQuickGridViewPrivate::removeNonVisibleItems(qreal bufferFrom, qreal bufferTo)
{
- FxGridItemSG *item = 0;
+ FxGridItemSG *item = nullptr;
bool changed = false;
while (visibleItems.count() > 1
@@ -699,14 +700,14 @@ void QQuickGridViewPrivate::createHighlight()
bool changed = false;
if (highlight) {
if (trackedItem == highlight)
- trackedItem = 0;
+ trackedItem = nullptr;
delete highlight;
- highlight = 0;
+ highlight = nullptr;
delete highlightXAnimator;
delete highlightYAnimator;
- highlightXAnimator = 0;
- highlightYAnimator = 0;
+ highlightXAnimator = nullptr;
+ highlightYAnimator = nullptr;
changed = true;
}
@@ -892,7 +893,6 @@ void QQuickGridViewPrivate::initializeCurrentItem()
void QQuickGridViewPrivate::fixupPosition()
{
- moveReason = Other;
if (flow == QQuickGridView::FlowLeftToRight)
fixupY();
else
@@ -2410,11 +2410,11 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
} else {
while (i >= 0) {
// item is before first visible e.g. in cache buffer
- FxViewItem *item = 0;
+ FxViewItem *item = nullptr;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i))))
item->index = modelIndex + i;
if (!item)
- item = createItem(modelIndex + i);
+ item = createItem(modelIndex + i, QQmlIncubator::Synchronous);
if (!item)
return false;
@@ -2462,12 +2462,12 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
int i = 0;
int to = buffer+displayMarginEnd+tempPos+size()-1;
while (i < count && rowPos <= to + rowSize()*(columns - colNum)/qreal(columns+1)) {
- FxViewItem *item = 0;
+ FxViewItem *item = nullptr;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i))))
item->index = modelIndex + i;
bool newItem = !item;
if (!item)
- item = createItem(modelIndex + i);
+ item = createItem(modelIndex + i, QQmlIncubator::Synchronous);
if (!item)
return false;
diff --git a/src/quick/items/qquickgridview_p.h b/src/quick/items/qquickgridview_p.h
index 5c6da2b433..7daeaf41a1 100644
--- a/src/quick/items/qquickgridview_p.h
+++ b/src/quick/items/qquickgridview_p.h
@@ -81,7 +81,7 @@ public:
};
Q_ENUM(Flow)
- QQuickGridView(QQuickItem *parent=0);
+ QQuickGridView(QQuickItem *parent=nullptr);
~QQuickGridView();
void setHighlightFollowsCurrentItem(bool) override;
diff --git a/src/quick/items/qquickimage.cpp b/src/quick/items/qquickimage.cpp
index 7e13e5e0e1..dc2cd17b4e 100644
--- a/src/quick/items/qquickimage.cpp
+++ b/src/quick/items/qquickimage.cpp
@@ -57,7 +57,7 @@ class QQuickImageTextureProvider : public QSGTextureProvider
Q_OBJECT
public:
QQuickImageTextureProvider()
- : m_texture(0)
+ : m_texture(nullptr)
, m_smooth(false)
{
}
@@ -97,7 +97,7 @@ QQuickImagePrivate::QQuickImagePrivate()
, mipmap(false)
, hAlign(QQuickImage::AlignHCenter)
, vAlign(QQuickImage::AlignVCenter)
- , provider(0)
+ , provider(nullptr)
{
}
@@ -583,7 +583,7 @@ QSGTextureProvider *QQuickImage::textureProvider() const
if (!d->window || !d->sceneGraphRenderContext() || QThread::currentThread() != d->sceneGraphRenderContext()->thread()) {
qWarning("QQuickImage::textureProvider: can only be queried on the rendering thread of an exposed window");
- return 0;
+ return nullptr;
}
if (!d->provider) {
@@ -601,7 +601,7 @@ void QQuickImage::invalidateSceneGraph()
{
Q_D(QQuickImage);
delete d->provider;
- d->provider = 0;
+ d->provider = nullptr;
}
void QQuickImage::releaseResources()
@@ -609,7 +609,7 @@ void QQuickImage::releaseResources()
Q_D(QQuickImage);
if (d->provider) {
QQuickWindowQObjectCleanupJob::schedule(window(), d->provider);
- d->provider = 0;
+ d->provider = nullptr;
}
}
@@ -628,7 +628,7 @@ QSGNode *QQuickImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
if (!texture || width() <= 0 || height() <= 0) {
delete oldNode;
- return 0;
+ return nullptr;
}
QSGInternalImageNode *node = static_cast<QSGInternalImageNode *>(oldNode);
@@ -736,7 +736,7 @@ QSGNode *QQuickImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
|| nsrect.isEmpty()
|| !qt_is_finite(nsrect.width()) || !qt_is_finite(nsrect.height())) {
delete node;
- return 0;
+ return nullptr;
}
if (d->pixmapChanged) {
diff --git a/src/quick/items/qquickimage_p.h b/src/quick/items/qquickimage_p.h
index 09b2c1eeb7..7fb4413900 100644
--- a/src/quick/items/qquickimage_p.h
+++ b/src/quick/items/qquickimage_p.h
@@ -70,7 +70,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickImage : public QQuickImageBase
Q_PROPERTY(bool autoTransform READ autoTransform WRITE setAutoTransform NOTIFY autoTransformChanged REVISION 2)
public:
- QQuickImage(QQuickItem *parent=0);
+ QQuickImage(QQuickItem *parent=nullptr);
~QQuickImage();
enum HAlignment { AlignLeft = Qt::AlignLeft,
diff --git a/src/quick/items/qquickimagebase_p.h b/src/quick/items/qquickimagebase_p.h
index 4d4a6fceaf..eb04a1d162 100644
--- a/src/quick/items/qquickimagebase_p.h
+++ b/src/quick/items/qquickimagebase_p.h
@@ -70,7 +70,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickImageBase : public QQuickImplicitSizeItem
Q_PROPERTY(bool mirror READ mirror WRITE setMirror NOTIFY mirrorChanged)
public:
- QQuickImageBase(QQuickItem *parent=0);
+ QQuickImageBase(QQuickItem *parent=nullptr);
~QQuickImageBase();
enum Status { Null, Ready, Loading, Error };
Q_ENUM(Status)
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index f8374bdbc2..3a0aea517c 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -87,8 +87,9 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(DBG_MOUSE_TARGET)
Q_DECLARE_LOGGING_CATEGORY(DBG_HOVER_TRACE)
+Q_DECLARE_LOGGING_CATEGORY(lcTransient)
-void debugFocusTree(QQuickItem *item, QQuickItem *scope = 0, int depth = 1)
+void debugFocusTree(QQuickItem *item, QQuickItem *scope = nullptr, int depth = 1)
{
if (DBG_FOCUS().isEnabled(QtDebugMsg)) {
qCDebug(DBG_FOCUS)
@@ -302,9 +303,9 @@ void QQuickContents::itemChildAdded(QQuickItem *, QQuickItem *item)
}
QQuickItemKeyFilter::QQuickItemKeyFilter(QQuickItem *item)
-: m_processPost(false), m_next(0)
+: m_processPost(false), m_next(nullptr)
{
- QQuickItemPrivate *p = item?QQuickItemPrivate::get(item):0;
+ QQuickItemPrivate *p = item?QQuickItemPrivate::get(item):nullptr;
if (p) {
m_next = p->extra.value().keyHandler;
p->extra->keyHandler = this;
@@ -785,7 +786,7 @@ const SigMap sigMap[] = {
{ Qt::Key_Menu, "menuPressed" },
{ Qt::Key_VolumeUp, "volumeUpPressed" },
{ Qt::Key_VolumeDown, "volumeDownPressed" },
- { 0, 0 }
+ { 0, nullptr }
};
QByteArray QQuickKeysAttached::keyToSignal(int key)
@@ -970,7 +971,7 @@ bool QQuickKeysAttached::isConnected(const char *signalName) const
Keys.onEscapePressed: {
console.log("escapeItem is handling escape");
- event.accepted = true;
+ // event.accepted is set to true by default for the specific key handlers
}
}
@@ -1543,6 +1544,13 @@ QQuickKeysAttached *QQuickKeysAttached::qmlAttachedProperties(QObject *obj)
mirroring is not the desired behavior, or if the child item already implements mirroring in
some custom way.
+ To set the layout direction based on the \l {Default Layout Direction}{default layout direction}
+ of the application, use the following code:
+
+ \code
+ LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
+ \endcode
+
See \l {Right-to-left User Interfaces} for further details on using \c LayoutMirroring and
other related features to implement right-to-left support for an application.
*/
@@ -1569,7 +1577,7 @@ QQuickKeysAttached *QQuickKeysAttached::qmlAttachedProperties(QObject *obj)
*/
-QQuickLayoutMirroringAttached::QQuickLayoutMirroringAttached(QObject *parent) : QObject(parent), itemPrivate(0)
+QQuickLayoutMirroringAttached::QQuickLayoutMirroringAttached(QObject *parent) : QObject(parent), itemPrivate(nullptr)
{
if (QQuickItem *item = qobject_cast<QQuickItem *>(parent))
itemPrivate = QQuickItemPrivate::get(item);
@@ -1723,7 +1731,7 @@ void QQuickItemPrivate::setLayoutMirror(bool mirror)
*/
QQuickEnterKeyAttached::QQuickEnterKeyAttached(QObject *parent)
- : QObject(parent), itemPrivate(0), keyType(Qt::EnterKeyDefault)
+ : QObject(parent), itemPrivate(nullptr), keyType(Qt::EnterKeyDefault)
{
if (QQuickItem *item = qobject_cast<QQuickItem*>(parent)) {
itemPrivate = QQuickItemPrivate::get(item);
@@ -1776,7 +1784,7 @@ void QQuickItemPrivate::updateSubFocusItem(QQuickItem *scope, bool focus)
if (oldSubFocusItem) {
QQuickItem *sfi = scopePrivate->subFocusItem->parentItem();
while (sfi && sfi != scope) {
- QQuickItemPrivate::get(sfi)->subFocusItem = 0;
+ QQuickItemPrivate::get(sfi)->subFocusItem = nullptr;
sfi = sfi->parentItem();
}
}
@@ -1789,7 +1797,7 @@ void QQuickItemPrivate::updateSubFocusItem(QQuickItem *scope, bool focus)
sfi = sfi->parentItem();
}
} else {
- scopePrivate->subFocusItem = 0;
+ scopePrivate->subFocusItem = nullptr;
}
}
@@ -2067,7 +2075,7 @@ void QQuickItemPrivate::updateSubFocusItem(QQuickItem *scope, bool focus)
In the QPainter / QWidget world, it is some times favorable to
cache complex content in a pixmap, image or texture. In Qt Quick,
because of the techniques already applied by the \l {Qt Quick
- Scene Graph Renderer} {scene graph renderer}, this will in most
+ Scene Graph OpenGL Renderer} {scene graph renderer}, this will in most
cases not be the case. Excessive draw calls are already reduced
because of batching and a cache will in most cases end up blending
more pixels than the original content. The overhead of rendering
@@ -2374,13 +2382,13 @@ QQuickItem::~QQuickItem()
if (d->windowRefCount > 1)
d->windowRefCount = 1; // Make sure window is set to null in next call to derefWindow().
if (d->parentItem)
- setParentItem(0);
+ setParentItem(nullptr);
else if (d->window)
d->derefWindow();
// XXX todo - optimize
while (!d->childItems.isEmpty())
- d->childItems.constFirst()->setParentItem(0);
+ d->childItems.constFirst()->setParentItem(nullptr);
if (!d->changeListeners.isEmpty()) {
const auto listeners = d->changeListeners; // NOTE: intentional copy (QTBUG-54732)
@@ -2420,14 +2428,14 @@ QQuickItem::~QQuickItem()
}
if (d->extra.isAllocated()) {
- delete d->extra->contents; d->extra->contents = 0;
+ delete d->extra->contents; d->extra->contents = nullptr;
#if QT_CONFIG(quick_shadereffect)
- delete d->extra->layer; d->extra->layer = 0;
+ delete d->extra->layer; d->extra->layer = nullptr;
#endif
}
- delete d->_anchors; d->_anchors = 0;
- delete d->_stateGroup; d->_stateGroup = 0;
+ delete d->_anchors; d->_anchors = nullptr;
+ delete d->_stateGroup; d->_stateGroup = nullptr;
}
/*!
@@ -2542,7 +2550,7 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo
bool all = QGuiApplication::styleHints()->tabFocusBehavior() == Qt::TabFocusAllControls;
- QQuickItem *from = 0;
+ QQuickItem *from = nullptr;
bool isTabFence = item->d_func()->isTabFence;
if (forward) {
if (!isTabFence)
@@ -2677,7 +2685,7 @@ void QQuickItem::setParentItem(QQuickItem *parentItem)
if (parentItem) {
QQuickItem *itemAncestor = parentItem;
- while (itemAncestor != 0) {
+ while (itemAncestor != nullptr) {
if (Q_UNLIKELY(itemAncestor == this)) {
qWarning() << "QQuickItem::setParentItem: Parent" << parentItem << "is already part of the subtree of" << this;
return;
@@ -2689,12 +2697,12 @@ void QQuickItem::setParentItem(QQuickItem *parentItem)
d->removeFromDirtyList();
QQuickItem *oldParentItem = d->parentItem;
- QQuickItem *scopeFocusedItem = 0;
+ QQuickItem *scopeFocusedItem = nullptr;
if (oldParentItem) {
QQuickItemPrivate *op = QQuickItemPrivate::get(oldParentItem);
- QQuickItem *scopeItem = 0;
+ QQuickItem *scopeItem = nullptr;
if (hasFocus() || op->subFocusItem == this)
scopeFocusedItem = this;
@@ -2724,7 +2732,7 @@ void QQuickItem::setParentItem(QQuickItem *parentItem)
QQuickWindowPrivate::get(d->window)->parentlessItems.remove(this);
}
- QQuickWindow *parentWindow = parentItem ? QQuickItemPrivate::get(parentItem)->window : 0;
+ QQuickWindow *parentWindow = parentItem ? QQuickItemPrivate::get(parentItem)->window : nullptr;
if (d->window == parentWindow) {
// Avoid freeing and reallocating resources if the window stays the same.
d->parentItem = parentItem;
@@ -2744,7 +2752,7 @@ void QQuickItem::setParentItem(QQuickItem *parentItem)
QQuickWindowPrivate::get(d->window)->parentlessItems.insert(this);
d->setEffectiveVisibleRecur(d->calcEffectiveVisible());
- d->setEffectiveEnableRecur(0, d->calcEffectiveEnable());
+ d->setEffectiveEnableRecur(nullptr, d->calcEffectiveEnable());
if (d->parentItem) {
if (!scopeFocusedItem) {
@@ -2808,7 +2816,8 @@ void QQuickItem::stackBefore(const QQuickItem *sibling)
{
Q_D(QQuickItem);
if (!sibling || sibling == this || !d->parentItem || d->parentItem != QQuickItemPrivate::get(sibling)->parentItem) {
- qWarning("QQuickItem::stackBefore: Cannot stack before %p, which must be a sibling", sibling);
+ qWarning().nospace() << "QQuickItem::stackBefore: Cannot stack "
+ << this << " before " << sibling << ", which must be a sibling";
return;
}
@@ -2852,7 +2861,8 @@ void QQuickItem::stackAfter(const QQuickItem *sibling)
{
Q_D(QQuickItem);
if (!sibling || sibling == this || !d->parentItem || d->parentItem != QQuickItemPrivate::get(sibling)->parentItem) {
- qWarning("QQuickItem::stackAfter: Cannot stack after %p, which must be a sibling", sibling);
+ qWarning().nospace() << "QQuickItem::stackAfter: Cannot stack "
+ << this << " after " << sibling << ", which must be a sibling";
return;
}
@@ -2942,6 +2952,7 @@ void QQuickItemPrivate::addChild(QQuickItem *child)
if (childPrivate->subtreeHoverEnabled && !subtreeHoverEnabled)
setHasHoverInChild(true);
+ childPrivate->recursiveRefFromEffectItem(extra.value().recursiveEffectRefCount);
markSortedChildrenDirty(child);
dirty(QQuickItemPrivate::ChildrenChanged);
@@ -2970,6 +2981,7 @@ void QQuickItemPrivate::removeChild(QQuickItem *child)
if (childPrivate->subtreeHoverEnabled && subtreeHoverEnabled)
setHasHoverInChild(false);
+ childPrivate->recursiveRefFromEffectItem(-extra.value().recursiveEffectRefCount);
markSortedChildrenDirty(child);
dirty(QQuickItemPrivate::ChildrenChanged);
@@ -2990,7 +3002,7 @@ void QQuickItemPrivate::refWindow(QQuickWindow *c)
// derefWindow() decrements the reference count.
Q_Q(QQuickItem);
- Q_ASSERT((window != 0) == (windowRefCount > 0));
+ Q_ASSERT((window != nullptr) == (windowRefCount > 0));
Q_ASSERT(c);
if (++windowRefCount > 1) {
if (c != window)
@@ -2998,7 +3010,7 @@ void QQuickItemPrivate::refWindow(QQuickWindow *c)
return; // Window already set.
}
- Q_ASSERT(window == 0);
+ Q_ASSERT(window == nullptr);
window = c;
if (polishScheduled)
@@ -3022,7 +3034,7 @@ void QQuickItemPrivate::refWindow(QQuickWindow *c)
void QQuickItemPrivate::derefWindow()
{
Q_Q(QQuickItem);
- Q_ASSERT((window != 0) == (windowRefCount > 0));
+ Q_ASSERT((window != nullptr) == (windowRefCount > 0));
if (!window)
return; // This can happen when destroying recursive shader effect sources.
@@ -3038,7 +3050,7 @@ void QQuickItemPrivate::derefWindow()
c->removeGrabber(q);
#if QT_CONFIG(cursor)
if (c->cursorItem == q) {
- c->cursorItem = 0;
+ c->cursorItem = nullptr;
window->unsetCursor();
}
#endif
@@ -3048,17 +3060,17 @@ void QQuickItemPrivate::derefWindow()
if (!parentItem)
c->parentlessItems.remove(q);
- window = 0;
+ window = nullptr;
- itemNodeInstance = 0;
+ itemNodeInstance = nullptr;
if (extra.isAllocated()) {
- extra->opacityNode = 0;
- extra->clipNode = 0;
- extra->rootNode = 0;
+ extra->opacityNode = nullptr;
+ extra->clipNode = nullptr;
+ extra->rootNode = nullptr;
}
- paintNode = 0;
+ paintNode = nullptr;
for (int ii = 0; ii < childItems.count(); ++ii) {
QQuickItem *child = childItems.at(ii);
@@ -3068,8 +3080,8 @@ void QQuickItemPrivate::derefWindow()
dirty(Window);
if (extra.isAllocated() && extra->screenAttached)
- extra->screenAttached->windowChanged(0);
- itemChange(QQuickItem::ItemSceneChange, (QQuickWindow *)0);
+ extra->screenAttached->windowChanged(nullptr);
+ itemChange(QQuickItem::ItemSceneChange, (QQuickWindow *)nullptr);
}
@@ -3155,8 +3167,8 @@ bool QQuickItem::isComponentComplete() const
}
QQuickItemPrivate::QQuickItemPrivate()
- : _anchors(0)
- , _stateGroup(0)
+ : _anchors(nullptr)
+ , _stateGroup(nullptr)
, flags(0)
, widthValid(false)
, heightValid(false)
@@ -3197,13 +3209,13 @@ QQuickItemPrivate::QQuickItemPrivate()
, touchEnabled(false)
#endif
, dirtyAttributes(0)
- , nextDirtyItem(0)
- , prevDirtyItem(0)
- , window(0)
+ , nextDirtyItem(nullptr)
+ , prevDirtyItem(nullptr)
+ , window(nullptr)
, windowRefCount(0)
- , parentItem(0)
+ , parentItem(nullptr)
, sortedChildItems(&childItems)
- , subFocusItem(0)
+ , subFocusItem(nullptr)
, x(0)
, y(0)
, width(0)
@@ -3211,8 +3223,8 @@ QQuickItemPrivate::QQuickItemPrivate()
, implicitWidth(0)
, implicitHeight(0)
, baselineOffset(0)
- , itemNodeInstance(0)
- , paintNode(0)
+ , itemNodeInstance(nullptr)
+ , paintNode(nullptr)
{
}
@@ -3253,7 +3265,7 @@ void QQuickItemPrivate::data_append(QQmlListProperty<QObject> *prop, QObject *o)
// because there can be multiple handlers...
that->setAcceptedMouseButtons(Qt::AllButtons);
QQuickItemPrivate *p = QQuickItemPrivate::get(that);
- p->extra.value().pointerHandlers.append(pointerHandler);
+ p->extra.value().pointerHandlers.prepend(pointerHandler);
} else {
QQuickWindow *thisWindow = qmlobject_cast<QQuickWindow *>(o);
QQuickItem *item = that;
@@ -3264,11 +3276,13 @@ void QQuickItemPrivate::data_append(QQmlListProperty<QObject> *prop, QObject *o)
}
if (thisWindow) {
- if (itemWindow)
+ if (itemWindow) {
+ qCDebug(lcTransient) << thisWindow << "is transient for" << itemWindow;
thisWindow->setTransientParent(itemWindow);
- else
+ } else {
QObject::connect(item, SIGNAL(windowChanged(QQuickWindow*)),
thisWindow, SLOT(setTransientParent_helper(QQuickWindow*)));
+ }
}
o->setParent(that);
}
@@ -3335,7 +3349,7 @@ QObject *QQuickItemPrivate::data_at(QQmlListProperty<QObject> *property, int i)
const int j = i - resourcesCount;
if (j < children_count(&childrenProperty))
return children_at(&childrenProperty, j);
- return 0;
+ return nullptr;
}
void QQuickItemPrivate::data_clear(QQmlListProperty<QObject> *property)
@@ -3389,7 +3403,7 @@ QQuickItem *QQuickItemPrivate::children_at(QQmlListProperty<QQuickItem> *prop, i
{
QQuickItemPrivate *p = QQuickItemPrivate::get(static_cast<QQuickItem *>(prop->object));
if (index >= p->childItems.count() || index < 0)
- return 0;
+ return nullptr;
else
return p->childItems.at(index);
}
@@ -3401,7 +3415,7 @@ void QQuickItemPrivate::children_append(QQmlListProperty<QQuickItem> *prop, QQui
QQuickItem *that = static_cast<QQuickItem *>(prop->object);
if (o->parentItem() == that)
- o->setParentItem(0);
+ o->setParentItem(nullptr);
o->setParentItem(that);
}
@@ -3417,7 +3431,7 @@ void QQuickItemPrivate::children_clear(QQmlListProperty<QQuickItem> *prop)
QQuickItem *that = static_cast<QQuickItem *>(prop->object);
QQuickItemPrivate *p = QQuickItemPrivate::get(that);
while (!p->childItems.isEmpty())
- p->childItems.at(0)->setParentItem(0);
+ p->childItems.at(0)->setParentItem(nullptr);
}
int QQuickItemPrivate::visibleChildren_count(QQmlListProperty<QQuickItem> *prop)
@@ -3437,14 +3451,14 @@ QQuickItem *QQuickItemPrivate::visibleChildren_at(QQmlListProperty<QQuickItem> *
QQuickItemPrivate *p = QQuickItemPrivate::get(static_cast<QQuickItem *>(prop->object));
const int childCount = p->childItems.count();
if (index >= childCount || index < 0)
- return 0;
+ return nullptr;
int visibleCount = -1;
for (int i = 0; i < childCount; i++) {
if (p->childItems.at(i)->isVisible()) visibleCount++;
if (visibleCount == index) return p->childItems.at(i);
}
- return 0;
+ return nullptr;
}
int QQuickItemPrivate::transform_count(QQmlListProperty<QQuickTransform> *prop)
@@ -3508,7 +3522,7 @@ QQuickTransform *QQuickItemPrivate::transform_at(QQmlListProperty<QQuickTransfor
QQuickItemPrivate *p = QQuickItemPrivate::get(that);
if (idx < 0 || idx >= p->transforms.count())
- return 0;
+ return nullptr;
else
return p->transforms.at(idx);
}
@@ -3655,7 +3669,7 @@ void QQuickItemPrivate::siblingOrderChanged()
QQmlListProperty<QObject> QQuickItemPrivate::data()
{
- return QQmlListProperty<QObject>(q_func(), 0, QQuickItemPrivate::data_append,
+ return QQmlListProperty<QObject>(q_func(), nullptr, QQuickItemPrivate::data_append,
QQuickItemPrivate::data_count,
QQuickItemPrivate::data_at,
QQuickItemPrivate::data_clear);
@@ -3667,8 +3681,9 @@ QQmlListProperty<QObject> QQuickItemPrivate::data()
\qmlproperty real QtQuick::Item::childrenRect.y
\qmlproperty real QtQuick::Item::childrenRect.width
\qmlproperty real QtQuick::Item::childrenRect.height
+ \readonly
- This property holds the collective position and size of the item's
+ This read-only property holds the collective position and size of the item's
children.
This property is useful if you need to access the collective geometry
@@ -3833,11 +3848,11 @@ QSGNode *QQuickItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *upda
{
Q_UNUSED(updatePaintNodeData)
delete oldNode;
- return 0;
+ return nullptr;
}
QQuickItem::UpdatePaintNodeData::UpdatePaintNodeData()
-: transformNode(0)
+: transformNode(nullptr)
{
}
@@ -3948,8 +3963,8 @@ void QQuickItem::inputMethodEvent(QInputMethodEvent *event)
/*!
This event handler can be reimplemented in a subclass to receive focus-in
- events for an item. The event information is provided by the
- \a event parameter.
+ events for an item. The event information is provided by the \c event
+ parameter.
*/
void QQuickItem::focusInEvent(QFocusEvent * /*event*/)
{
@@ -3965,8 +3980,8 @@ void QQuickItem::focusInEvent(QFocusEvent * /*event*/)
/*!
This event handler can be reimplemented in a subclass to receive focus-out
- events for an item. The event information is provided by the
- \a event parameter.
+ events for an item. The event information is provided by the \c event
+ parameter.
*/
void QQuickItem::focusOutEvent(QFocusEvent * /*event*/)
{
@@ -4402,7 +4417,7 @@ void QQuickItem::mapFromItem(QQmlV4Function *args) const
QV4::Scope scope(v4);
QV4::ScopedValue item(scope, (*args)[0]);
- QQuickItem *itemObj = 0;
+ QQuickItem *itemObj = nullptr;
if (!item->isNull()) {
QV4::Scoped<QV4::QObjectWrapper> qobjectWrapper(scope, item->as<QV4::QObjectWrapper>());
if (qobjectWrapper)
@@ -4490,7 +4505,7 @@ void QQuickItem::mapToItem(QQmlV4Function *args) const
QV4::Scope scope(v4);
QV4::ScopedValue item(scope, (*args)[0]);
- QQuickItem *itemObj = 0;
+ QQuickItem *itemObj = nullptr;
if (!item->isNull()) {
QV4::Scoped<QV4::QObjectWrapper> qobjectWrapper(scope, item->as<QV4::QObjectWrapper>());
if (qobjectWrapper)
@@ -4723,12 +4738,12 @@ QQuickItem *QQuickItem::childAt(qreal x, qreal y) const
&& child->height() > point.y())
return child;
}
- return 0;
+ return nullptr;
}
QQmlListProperty<QObject> QQuickItemPrivate::resources()
{
- return QQmlListProperty<QObject>(q_func(), 0, QQuickItemPrivate::resources_append,
+ return QQmlListProperty<QObject>(q_func(), nullptr, QQuickItemPrivate::resources_append,
QQuickItemPrivate::resources_count,
QQuickItemPrivate::resources_at,
QQuickItemPrivate::resources_clear);
@@ -4753,7 +4768,7 @@ QQmlListProperty<QObject> QQuickItemPrivate::resources()
*/
QQmlListProperty<QQuickItem> QQuickItemPrivate::children()
{
- return QQmlListProperty<QQuickItem>(q_func(), 0, QQuickItemPrivate::children_append,
+ return QQmlListProperty<QQuickItem>(q_func(), nullptr, QQuickItemPrivate::children_append,
QQuickItemPrivate::children_count,
QQuickItemPrivate::children_at,
QQuickItemPrivate::children_clear);
@@ -4773,7 +4788,7 @@ QQmlListProperty<QQuickItem> QQuickItemPrivate::children()
QQmlListProperty<QQuickItem> QQuickItemPrivate::visibleChildren()
{
return QQmlListProperty<QQuickItem>(q_func(),
- 0,
+ nullptr,
QQuickItemPrivate::visibleChildren_count,
QQuickItemPrivate::visibleChildren_at);
@@ -4923,7 +4938,7 @@ void QQuickItem::setState(const QString &state)
*/
QQmlListProperty<QQuickTransform> QQuickItem::transform()
{
- return QQmlListProperty<QQuickTransform>(this, 0, QQuickItemPrivate::transform_append,
+ return QQmlListProperty<QQuickTransform>(this, nullptr, QQuickItemPrivate::transform_append,
QQuickItemPrivate::transform_count,
QQuickItemPrivate::transform_at,
QQuickItemPrivate::transform_clear);
@@ -5171,8 +5186,8 @@ void QQuickItem::updateInputMethod(Qt::InputMethodQueries queries)
}
#endif // im
-/*! \internal */
// XXX todo - do we want/need this anymore?
+/*! \internal */
QRectF QQuickItem::boundingRect() const
{
Q_D(const QQuickItem);
@@ -5806,19 +5821,24 @@ bool QQuickItem::isVisible() const
return d->effectiveVisible;
}
-void QQuickItem::setVisible(bool v)
+void QQuickItemPrivate::setVisible(bool visible)
{
- Q_D(QQuickItem);
- if (v == d->explicitVisible)
+ if (visible == explicitVisible)
return;
- d->explicitVisible = v;
- if (!v)
- d->dirty(QQuickItemPrivate::Visible);
+ explicitVisible = visible;
+ if (!visible)
+ dirty(QQuickItemPrivate::Visible);
- const bool childVisibilityChanged = d->setEffectiveVisibleRecur(d->calcEffectiveVisible());
- if (childVisibilityChanged && d->parentItem)
- emit d->parentItem->visibleChildrenChanged(); // signal the parent, not this!
+ const bool childVisibilityChanged = setEffectiveVisibleRecur(calcEffectiveVisible());
+ if (childVisibilityChanged && parentItem)
+ emit parentItem->visibleChildrenChanged(); // signal the parent, not this!
+}
+
+void QQuickItem::setVisible(bool v)
+{
+ Q_D(QQuickItem);
+ d->setVisible(v);
}
/*!
@@ -6052,8 +6072,8 @@ void QQuickItemPrivate::removeFromDirtyList()
if (prevDirtyItem) {
if (nextDirtyItem) QQuickItemPrivate::get(nextDirtyItem)->prevDirtyItem = prevDirtyItem;
*prevDirtyItem = nextDirtyItem;
- prevDirtyItem = 0;
- nextDirtyItem = 0;
+ prevDirtyItem = nullptr;
+ nextDirtyItem = nullptr;
}
Q_ASSERT(!prevDirtyItem);
Q_ASSERT(!nextDirtyItem);
@@ -6062,28 +6082,48 @@ void QQuickItemPrivate::removeFromDirtyList()
void QQuickItemPrivate::refFromEffectItem(bool hide)
{
++extra.value().effectRefCount;
- if (1 == extra->effectRefCount) {
+ if (extra->effectRefCount == 1) {
dirty(EffectReference);
- if (parentItem) QQuickItemPrivate::get(parentItem)->dirty(ChildrenStackingChanged);
+ if (parentItem)
+ QQuickItemPrivate::get(parentItem)->dirty(ChildrenStackingChanged);
}
if (hide) {
if (++extra->hideRefCount == 1)
dirty(HideReference);
}
+ recursiveRefFromEffectItem(1);
+}
+
+void QQuickItemPrivate::recursiveRefFromEffectItem(int refs)
+{
+ Q_Q(QQuickItem);
+ if (!refs)
+ return;
+ extra.value().recursiveEffectRefCount += refs;
+ for (int ii = 0; ii < childItems.count(); ++ii) {
+ QQuickItem *child = childItems.at(ii);
+ QQuickItemPrivate::get(child)->recursiveRefFromEffectItem(refs);
+ }
+ // Polish may rely on the effect ref count so trigger one, if item is not visible
+ // (if visible, it will be triggered automatically).
+ if (!effectiveVisible && refs > 0 && extra.value().recursiveEffectRefCount == 1) // it wasn't referenced, now it's referenced
+ q->polish();
}
void QQuickItemPrivate::derefFromEffectItem(bool unhide)
{
Q_ASSERT(extra->effectRefCount);
--extra->effectRefCount;
- if (0 == extra->effectRefCount) {
+ if (extra->effectRefCount == 0) {
dirty(EffectReference);
- if (parentItem) QQuickItemPrivate::get(parentItem)->dirty(ChildrenStackingChanged);
+ if (parentItem)
+ QQuickItemPrivate::get(parentItem)->dirty(ChildrenStackingChanged);
}
if (unhide) {
if (--extra->hideRefCount == 0)
dirty(HideReference);
}
+ recursiveRefFromEffectItem(-1);
}
void QQuickItemPrivate::setCulled(bool cull)
@@ -7102,7 +7142,7 @@ QQuickItem *QQuickItem::scopedFocusItem() const
{
Q_D(const QQuickItem);
if (!isFocusScope())
- return 0;
+ return nullptr;
else
return d->subFocusItem;
}
@@ -7409,10 +7449,18 @@ void QQuickItem::unsetCursor()
void QQuickItem::grabMouse()
{
Q_D(QQuickItem);
- if (!d->window)
+ if (!d->window || d->window->mouseGrabberItem() == this)
return;
QQuickWindowPrivate *windowPriv = QQuickWindowPrivate::get(d->window);
- windowPriv->setMouseGrabber(this);
+ bool fromTouch = windowPriv->isDeliveringTouchAsMouse();
+ auto point = fromTouch ?
+ windowPriv->pointerEventInstance(windowPriv->touchMouseDevice)->pointById(windowPriv->touchMouseId) :
+ windowPriv->pointerEventInstance(QQuickPointerDevice::genericMouseDevice())->point(0);
+ if (point) {
+ QQuickItem *oldGrabber = point->grabberItem();
+ point->setGrabberItem(this);
+ windowPriv->sendUngrabEvent(oldGrabber, fromTouch);
+ }
}
/*!
@@ -7430,7 +7478,7 @@ void QQuickItem::ungrabMouse()
if (!d->window)
return;
QQuickWindowPrivate *windowPriv = QQuickWindowPrivate::get(d->window);
- windowPriv->removeGrabber(this, true, false);
+ windowPriv->removeGrabber(this, true, windowPriv->isDeliveringTouchAsMouse());
}
@@ -7560,9 +7608,75 @@ void QQuickItem::setKeepTouchGrab(bool keep)
bool QQuickItem::contains(const QPointF &point) const
{
Q_D(const QQuickItem);
- qreal x = point.x();
- qreal y = point.y();
- return x >= 0 && y >= 0 && x <= d->width && y <= d->height;
+ if (d->mask) {
+ bool res = false;
+ d->extra->maskContains.invoke(d->mask,
+ Qt::DirectConnection,
+ Q_RETURN_ARG(bool, res),
+ Q_ARG(QPointF, point));
+ return res;
+ } else {
+ qreal x = point.x();
+ qreal y = point.y();
+ return x >= 0 && y >= 0 && x <= d->width && y <= d->height;
+ }
+}
+
+/*!
+ \qmlproperty QObject* QtQuick::Item::containmentMask
+ \since 5.11
+ This property holds an optional mask for the Item to be used in the
+ QtQuick::Item::contains method.
+ QtQuick::Item::contains main use is currently to determine whether
+ an input event has landed into the item or not.
+
+ By default the \l contains method will return true for any point
+ within the Item's bounding box. \c containmentMask allows for a
+ more fine-grained control. For example, the developer could
+ define and use an AnotherItem element as containmentMask,
+ which has a specialized contains method, like:
+
+ \code
+ Item { id: item; containmentMask: AnotherItem { id: anotherItem } }
+ \endcode
+
+ \e{item}'s contains method would then return true only if
+ \e{anotherItem}'s contains implementation returns true.
+*/
+QObject *QQuickItem::containmentMask() const
+{
+ Q_D(const QQuickItem);
+ return d->mask.data();
+}
+
+void QQuickItem::setContainmentMask(QObject *mask)
+{
+ Q_D(QQuickItem);
+ // an Item can't mask itself (to prevent infinite loop in contains())
+ if (d->mask.data() == mask || mask == static_cast<QObject *>(this))
+ return;
+
+ QQuickItem *quickMask = qobject_cast<QQuickItem *>(d->mask);
+ if (quickMask) {
+ QQuickItemPrivate *maskPrivate = QQuickItemPrivate::get(quickMask);
+ maskPrivate->registerAsContainmentMask(this, false); // removed from use as my mask
+ }
+
+ if (mask) {
+ int methodIndex = mask->metaObject()->indexOfMethod(QByteArrayLiteral("contains(QPointF)"));
+ if (methodIndex < 0) {
+ qmlWarning(this) << QStringLiteral("QQuickItem: Object set as mask does not have an invokable contains method, ignoring it.");
+ return;
+ }
+ d->extra.value().maskContains = mask->metaObject()->method(methodIndex);
+ }
+ d->mask = mask;
+ quickMask = qobject_cast<QQuickItem *>(mask);
+ if (quickMask) {
+ QQuickItemPrivate *maskPrivate = QQuickItemPrivate::get(quickMask);
+ maskPrivate->registerAsContainmentMask(this, true); // telling maskPrivate that "this" is using it as mask
+ }
+ emit containmentMaskChanged();
}
/*!
@@ -7949,7 +8063,7 @@ QSGTextureProvider *QQuickItem::textureProvider() const
#if QT_CONFIG(quick_shadereffect)
Q_D(const QQuickItem);
return d->extra.isAllocated() && d->extra->layer && d->extra->layer->effectSource() ?
- d->extra->layer->effectSource()->textureProvider() : 0;
+ d->extra->layer->effectSource()->textureProvider() : nullptr;
#else
return 0;
#endif
@@ -7988,9 +8102,9 @@ QQuickItemLayer::QQuickItemLayer(QQuickItem *item)
, m_wrapMode(QQuickShaderEffectSource::ClampToEdge)
, m_format(QQuickShaderEffectSource::RGBA)
, m_name("source")
- , m_effectComponent(0)
- , m_effect(0)
- , m_effectSource(0)
+ , m_effectComponent(nullptr)
+ , m_effect(nullptr)
+ , m_effectSource(nullptr)
, m_textureMirroring(QQuickShaderEffectSource::MirrorVertically)
, m_samples(0)
{
@@ -8091,7 +8205,7 @@ void QQuickItemLayer::deactivate()
deactivateEffect();
delete m_effectSource;
- m_effectSource = 0;
+ m_effectSource = nullptr;
QQuickItemPrivate *id = QQuickItemPrivate::get(m_item);
id->removeItemChangeListener(this, QQuickItemPrivate::Geometry | QQuickItemPrivate::Opacity | QQuickItemPrivate::Parent | QQuickItemPrivate::Visibility | QQuickItemPrivate::SiblingOrder);
@@ -8128,7 +8242,7 @@ void QQuickItemLayer::deactivateEffect()
Q_ASSERT(m_effectComponent);
delete m_effect;
- m_effect = 0;
+ m_effect = nullptr;
}
@@ -8436,7 +8550,7 @@ void QQuickItemLayer::itemParentChanged(QQuickItem *item, QQuickItem *parent)
Q_UNUSED(item)
Q_ASSERT(item == m_item);
Q_ASSERT(parent != m_effectSource);
- Q_ASSERT(parent == 0 || parent != m_effect);
+ Q_ASSERT(parent == nullptr || parent != m_effect);
m_effectSource->setParentItem(parent);
if (parent)
@@ -8508,15 +8622,16 @@ void QQuickItemLayer::updateMatrix()
QQuickItemPrivate::ExtraData::ExtraData()
: z(0), scale(1), rotation(0), opacity(1),
- contents(0), screenAttached(0), layoutDirectionAttached(0),
- enterKeyAttached(0),
- keyHandler(0),
+ contents(nullptr), screenAttached(nullptr), layoutDirectionAttached(nullptr),
+ enterKeyAttached(nullptr),
+ keyHandler(nullptr),
#if QT_CONFIG(quick_shadereffect)
- layer(0),
+ layer(nullptr),
#endif
effectRefCount(0), hideRefCount(0),
- opacityNode(0), clipNode(0), rootNode(0),
- acceptedMouseButtons(0), origin(QQuickItem::Center),
+ recursiveEffectRefCount(0),
+ opacityNode(nullptr), clipNode(nullptr), rootNode(nullptr),
+ acceptedMouseButtons(nullptr), origin(QQuickItem::Center),
transparentForPositioner(false)
{
}
diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h
index f6ee54e94d..cfdb2ad5b7 100644
--- a/src/quick/items/qquickitem.h
+++ b/src/quick/items/qquickitem.h
@@ -60,7 +60,7 @@ class Q_QUICK_EXPORT QQuickTransform : public QObject
Q_OBJECT
public:
explicit QQuickTransform(QObject *parent = nullptr);
- ~QQuickTransform();
+ ~QQuickTransform() override;
void appendToItem(QQuickItem *);
void prependToItem(QQuickItem *);
@@ -144,6 +144,7 @@ class Q_QUICK_EXPORT QQuickItem : public QObject, public QQmlParserStatus
Q_PROPERTY(bool antialiasing READ antialiasing WRITE setAntialiasing NOTIFY antialiasingChanged RESET resetAntialiasing)
Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged)
Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged)
+ Q_PROPERTY(QObject *containmentMask READ containmentMask WRITE setContainmentMask NOTIFY containmentMaskChanged REVISION 11)
Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQuickItemLayer *layer READ layer DESIGNABLE false CONSTANT FINAL)
@@ -197,7 +198,7 @@ public:
Q_ENUM(TransformOrigin)
explicit QQuickItem(QQuickItem *parent = nullptr);
- virtual ~QQuickItem();
+ ~QQuickItem() override;
QQuickWindow *window() const;
QQuickItem *parentItem() const;
@@ -320,6 +321,8 @@ public:
QSharedPointer<QQuickItemGrabResult> grabToImage(const QSize &targetSize = QSize());
Q_INVOKABLE virtual bool contains(const QPointF &point) const;
+ QObject *containmentMask() const;
+ void setContainmentMask(QObject *mask);
QTransform itemTransform(QQuickItem *, bool *) const;
QPointF mapToItem(const QQuickItem *item, const QPointF &point) const;
@@ -390,6 +393,7 @@ Q_SIGNALS:
void zChanged();
void implicitWidthChanged();
void implicitHeightChanged();
+ Q_REVISION(11) void containmentMaskChanged();
protected:
bool event(QEvent *) override;
diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h
index 9ed5286f22..93287cf0aa 100644
--- a/src/quick/items/qquickitem_p.h
+++ b/src/quick/items/qquickitem_p.h
@@ -93,11 +93,11 @@ class QQuickContents : public QQuickItemChangeListener
{
public:
QQuickContents(QQuickItem *item);
- ~QQuickContents();
+ ~QQuickContents() override;
QRectF rectF() const { return m_contents; }
- inline void calcGeometry(QQuickItem *changed = 0);
+ inline void calcGeometry(QQuickItem *changed = nullptr);
void complete();
protected:
@@ -108,8 +108,8 @@ protected:
//void itemVisibilityChanged(QQuickItem *item)
private:
- bool calcHeight(QQuickItem *changed = 0);
- bool calcWidth(QQuickItem *changed = 0);
+ bool calcHeight(QQuickItem *changed = nullptr);
+ bool calcWidth(QQuickItem *changed = nullptr);
void updateRect();
QQuickItem *m_item;
@@ -154,7 +154,7 @@ class QQuickItemLayer : public QObject, public QQuickItemChangeListener
public:
QQuickItemLayer(QQuickItem *item);
- ~QQuickItemLayer();
+ ~QQuickItemLayer() override;
void classBegin();
void componentComplete();
@@ -255,7 +255,7 @@ public:
static const QQuickItemPrivate* get(const QQuickItem *item) { return item->d_func(); }
QQuickItemPrivate();
- ~QQuickItemPrivate();
+ ~QQuickItemPrivate() override;
void init(QQuickItem *parent);
QQmlListProperty<QObject> data();
@@ -311,7 +311,6 @@ public:
static void transform_clear(QQmlListProperty<QQuickTransform> *list);
void _q_resourceObjectDeleted(QObject *);
- void _q_windowChanged(QQuickWindow *w);
quint64 _q_createJSWrapper(QV4::ExecutionEngine *engine);
enum ChangeType {
@@ -331,7 +330,7 @@ public:
Q_DECLARE_FLAGS(ChangeTypes, ChangeType)
struct ChangeListener {
- ChangeListener(QQuickItemChangeListener *l = nullptr, QQuickItemPrivate::ChangeTypes t = 0) : listener(l), types(t), gTypes(QQuickGeometryChange::All) {}
+ ChangeListener(QQuickItemChangeListener *l = nullptr, QQuickItemPrivate::ChangeTypes t = nullptr) : listener(l), types(t), gTypes(QQuickGeometryChange::All) {}
ChangeListener(QQuickItemChangeListener *l, QQuickGeometryChange gt) : listener(l), types(Geometry), gTypes(gt) {}
QQuickItemChangeListener *listener;
QQuickItemPrivate::ChangeTypes types;
@@ -361,13 +360,19 @@ public:
#endif
QPointF userTransformOriginPoint;
+ // these do not include child items
int effectRefCount;
int hideRefCount;
+ // updated recursively for child items as well
+ int recursiveEffectRefCount;
QSGOpacityNode *opacityNode;
QQuickDefaultClipNode *clipNode;
QSGRootNode *rootNode;
+ // Mask contains() method
+ QMetaMethod maskContains;
+
QObjectList resourcesList;
// Although acceptedMouseButtons is inside ExtraData, we actually store
@@ -382,6 +387,10 @@ public:
// 26 bits padding
};
QLazilyAllocated<ExtraData> extra;
+ // Contains mask
+ QPointer<QObject> mask;
+ // If the mask is an Item, inform it that it's being used as a mask (true) or is no longer being used (false)
+ virtual void registerAsContainmentMask(QQuickItem * /* maskedItem */, bool /* set */) { }
QQuickAnchors *anchors() const;
mutable QQuickAnchors *_anchors;
@@ -574,6 +583,8 @@ public:
virtual bool handlePointerEvent(QQuickPointerEvent *, bool avoidExclusiveGrabber = false);
+ virtual void setVisible(bool visible);
+
bool isTransparentForPositioner() const;
void setTransparentForPositioner(bool trans);
@@ -594,9 +605,9 @@ public:
- (rootNode) (shader effect source's root node)
*/
- QSGOpacityNode *opacityNode() const { return extra.isAllocated()?extra->opacityNode:0; }
- QQuickDefaultClipNode *clipNode() const { return extra.isAllocated()?extra->clipNode:0; }
- QSGRootNode *rootNode() const { return extra.isAllocated()?extra->rootNode:0; }
+ QSGOpacityNode *opacityNode() const { return extra.isAllocated()?extra->opacityNode:nullptr; }
+ QQuickDefaultClipNode *clipNode() const { return extra.isAllocated()?extra->clipNode:nullptr; }
+ QSGRootNode *rootNode() const { return extra.isAllocated()?extra->rootNode:nullptr; }
QSGTransformNode *itemNodeInstance;
QSGNode *paintNode;
@@ -606,6 +617,7 @@ public:
// A reference from an effect item means that this item is used by the effect, so
// it should insert a root node.
void refFromEffectItem(bool hide);
+ void recursiveRefFromEffectItem(int refs);
void derefFromEffectItem(bool unhide);
void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &);
@@ -627,7 +639,7 @@ public:
class QQuickItemKeyFilter
{
public:
- QQuickItemKeyFilter(QQuickItem * = 0);
+ QQuickItemKeyFilter(QQuickItem * = nullptr);
virtual ~QQuickItemKeyFilter();
virtual void keyPressed(QKeyEvent *event, bool post);
@@ -649,17 +661,15 @@ class QQuickKeyNavigationAttachedPrivate : public QObjectPrivate
{
public:
QQuickKeyNavigationAttachedPrivate()
- : QObjectPrivate(),
- left(0), right(0), up(0), down(0), tab(0), backtab(0),
- leftSet(false), rightSet(false), upSet(false), downSet(false),
+ : leftSet(false), rightSet(false), upSet(false), downSet(false),
tabSet(false), backtabSet(false) {}
- QQuickItem *left;
- QQuickItem *right;
- QQuickItem *up;
- QQuickItem *down;
- QQuickItem *tab;
- QQuickItem *backtab;
+ QQuickItem *left = nullptr;
+ QQuickItem *right = nullptr;
+ QQuickItem *up = nullptr;
+ QQuickItem *down = nullptr;
+ QQuickItem *tab = nullptr;
+ QQuickItem *backtab = nullptr;
bool leftSet : 1;
bool rightSet : 1;
bool upSet : 1;
@@ -682,7 +692,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickKeyNavigationAttached : public QObject, publi
Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
public:
- QQuickKeyNavigationAttached(QObject * = 0);
+ QQuickKeyNavigationAttached(QObject * = nullptr);
QQuickItem *left() const;
void setLeft(QQuickItem *);
@@ -727,7 +737,7 @@ class QQuickLayoutMirroringAttached : public QObject
Q_PROPERTY(bool childrenInherit READ childrenInherit WRITE setChildrenInherit NOTIFY childrenInheritChanged)
public:
- explicit QQuickLayoutMirroringAttached(QObject *parent = 0);
+ explicit QQuickLayoutMirroringAttached(QObject *parent = nullptr);
bool enabled() const;
void setEnabled(bool);
@@ -770,8 +780,7 @@ class QQuickKeysAttachedPrivate : public QObjectPrivate
{
public:
QQuickKeysAttachedPrivate()
- : QObjectPrivate(), inPress(false), inRelease(false)
- , inIM(false), enabled(true), imeItem(0), item(0)
+ : inPress(false), inRelease(false), inIM(false), enabled(true)
{}
//loop detection
@@ -781,9 +790,9 @@ public:
bool enabled : 1;
- QQuickItem *imeItem;
+ QQuickItem *imeItem = nullptr;
QList<QQuickItem *> targets;
- QQuickItem *item;
+ QQuickItem *item = nullptr;
QQuickKeyEvent theKeyEvent;
};
@@ -797,8 +806,8 @@ class QQuickKeysAttached : public QObject, public QQuickItemKeyFilter
Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
public:
- QQuickKeysAttached(QObject *parent=0);
- ~QQuickKeysAttached();
+ QQuickKeysAttached(QObject *parent=nullptr);
+ ~QQuickKeysAttached() override;
bool enabled() const { Q_D(const QQuickKeysAttached); return d->enabled; }
void setEnabled(bool enabled) {
@@ -886,7 +895,7 @@ private:
Qt::MouseButtons QQuickItemPrivate::acceptedMouseButtons() const
{
return ((extra.flag() ? Qt::LeftButton : Qt::MouseButton(0)) |
- (extra.isAllocated() ? extra->acceptedMouseButtons : Qt::MouseButtons(0)));
+ (extra.isAllocated() ? extra->acceptedMouseButtons : Qt::MouseButtons(nullptr)));
}
QSGContext *QQuickItemPrivate::sceneGraphContext() const
@@ -908,7 +917,7 @@ void QQuickItemPrivate::markSortedChildrenDirty(QQuickItem *child)
if (child->z() != 0. || sortedChildItems != &childItems) {
if (sortedChildItems != &childItems)
delete sortedChildItems;
- sortedChildItems = 0;
+ sortedChildItems = nullptr;
}
}
diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp
index 4b5c81b4d4..e913e5ba05 100644
--- a/src/quick/items/qquickitemanimation.cpp
+++ b/src/quick/items/qquickitemanimation.cpp
@@ -371,7 +371,7 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act
if (data->actions.count()) {
QSequentialAnimationGroupJob *topLevelGroup = new QSequentialAnimationGroupJob;
- QActionAnimation *viaAction = d->via ? new QActionAnimation : 0;
+ QActionAnimation *viaAction = d->via ? new QActionAnimation : nullptr;
QActionAnimation *targetAction = new QActionAnimation;
//we'll assume the common case by far is to have children, and always create ag
QParallelAnimationGroupJob *ag = new QParallelAnimationGroupJob;
@@ -409,7 +409,7 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act
delete data;
delete viaData;
}
- return 0;
+ return nullptr;
}
/*!
@@ -922,12 +922,12 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio
pa->setEasingCurve(d->easingCurve);
return initInstance(pa);
} else {
- pa->setFromSourcedValue(0);
- pa->setAnimValue(0);
+ pa->setFromSourcedValue(nullptr);
+ pa->setAnimValue(nullptr);
delete pa;
delete data;
}
- return 0;
+ return nullptr;
}
void QQuickPathAnimationUpdater::setValue(qreal v)
@@ -955,7 +955,7 @@ void QQuickPathAnimationUpdater::setValue(qreal v)
qreal angle;
bool fixed = orientation == QQuickPathAnimation::Fixed;
- QPointF currentPos = !painterPath.isEmpty() ? path->sequentialPointAt(painterPath, pathLength, attributePoints, prevBez, v, fixed ? 0 : &angle) : path->sequentialPointAt(v, fixed ? 0 : &angle);
+ QPointF currentPos = !painterPath.isEmpty() ? path->sequentialPointAt(painterPath, pathLength, attributePoints, prevBez, v, fixed ? nullptr : &angle) : path->sequentialPointAt(v, fixed ? nullptr : &angle);
//adjust position according to anchor point
if (!anchorPoint.isNull()) {
diff --git a/src/quick/items/qquickitemanimation_p.h b/src/quick/items/qquickitemanimation_p.h
index 3b3fad9cc4..b803455f12 100644
--- a/src/quick/items/qquickitemanimation_p.h
+++ b/src/quick/items/qquickitemanimation_p.h
@@ -68,7 +68,7 @@ class Q_AUTOTEST_EXPORT QQuickParentAnimation : public QQuickAnimationGroup
Q_PROPERTY(QQuickItem *via READ via WRITE setVia NOTIFY viaChanged)
public:
- QQuickParentAnimation(QObject *parent=0);
+ QQuickParentAnimation(QObject *parent=nullptr);
virtual ~QQuickParentAnimation();
QQuickItem *target() const;
@@ -89,7 +89,7 @@ protected:
QAbstractAnimationJob* transition(QQuickStateActions &actions,
QQmlProperties &modified,
TransitionDirection direction,
- QObject *defaultTarget = 0) override;
+ QObject *defaultTarget = nullptr) override;
};
class QQuickAnchorAnimationPrivate;
@@ -102,7 +102,7 @@ class Q_AUTOTEST_EXPORT QQuickAnchorAnimation : public QQuickAbstractAnimation
Q_PROPERTY(QEasingCurve easing READ easing WRITE setEasing NOTIFY easingChanged)
public:
- QQuickAnchorAnimation(QObject *parent=0);
+ QQuickAnchorAnimation(QObject *parent=nullptr);
virtual ~QQuickAnchorAnimation();
QQmlListProperty<QQuickItem> targets();
@@ -121,7 +121,7 @@ protected:
QAbstractAnimationJob* transition(QQuickStateActions &actions,
QQmlProperties &modified,
TransitionDirection direction,
- QObject *defaultTarget = 0) override;
+ QObject *defaultTarget = nullptr) override;
};
#if QT_CONFIG(quick_path)
@@ -145,7 +145,7 @@ class Q_AUTOTEST_EXPORT QQuickPathAnimation : public QQuickAbstractAnimation
Q_PROPERTY(qreal endRotation READ endRotation WRITE setEndRotation NOTIFY endRotationChanged)
public:
- QQuickPathAnimation(QObject *parent=0);
+ QQuickPathAnimation(QObject *parent=nullptr);
virtual ~QQuickPathAnimation();
enum Orientation {
@@ -188,7 +188,7 @@ protected:
QAbstractAnimationJob* transition(QQuickStateActions &actions,
QQmlProperties &modified,
TransitionDirection direction,
- QObject *defaultTarget = 0) override;
+ QObject *defaultTarget = nullptr) override;
Q_SIGNALS:
void durationChanged(int);
void easingChanged(const QEasingCurve &);
diff --git a/src/quick/items/qquickitemanimation_p_p.h b/src/quick/items/qquickitemanimation_p_p.h
index 2d075dfab3..83b9899197 100644
--- a/src/quick/items/qquickitemanimation_p_p.h
+++ b/src/quick/items/qquickitemanimation_p_p.h
@@ -65,7 +65,7 @@ class QQuickParentAnimationPrivate : public QQuickAnimationGroupPrivate
Q_DECLARE_PUBLIC(QQuickParentAnimation)
public:
QQuickParentAnimationPrivate()
- : QQuickAnimationGroupPrivate(), target(0), newParent(0), via(0) {}
+ : QQuickAnimationGroupPrivate(), target(nullptr), newParent(nullptr), via(nullptr) {}
QQuickItem *target;
QQuickItem *newParent;
@@ -91,7 +91,7 @@ public:
class QQuickPathAnimationUpdater : public QQuickBulkValueUpdater
{
public:
- QQuickPathAnimationUpdater() : path(0), pathLength(0), target(0), reverse(false),
+ QQuickPathAnimationUpdater() : path(nullptr), pathLength(0), target(nullptr), reverse(false),
fromSourced(false), fromDefined(false), toDefined(false),
toX(0), toY(0), currentV(0), orientation(QQuickPathAnimation::Fixed),
entryInterval(0), exitInterval(0) {}
@@ -128,10 +128,10 @@ class QQuickPathAnimationPrivate;
class QQuickPathAnimationAnimator : public QQuickBulkValueAnimator
{
public:
- QQuickPathAnimationAnimator(QQuickPathAnimationPrivate * = 0);
+ QQuickPathAnimationAnimator(QQuickPathAnimationPrivate * = nullptr);
~QQuickPathAnimationAnimator();
- void clearTemplate() { animationTemplate = 0; }
+ void clearTemplate() { animationTemplate = nullptr; }
QQuickPathAnimationUpdater *pathUpdater() const { return static_cast<QQuickPathAnimationUpdater*>(getAnimValue()); }
private:
@@ -142,7 +142,7 @@ class QQuickPathAnimationPrivate : public QQuickAbstractAnimationPrivate
{
Q_DECLARE_PUBLIC(QQuickPathAnimation)
public:
- QQuickPathAnimationPrivate() : path(0), target(0),
+ QQuickPathAnimationPrivate() : path(nullptr), target(nullptr),
orientation(QQuickPathAnimation::Fixed), entryDuration(0), exitDuration(0), duration(250) {}
QQuickPath *path;
diff --git a/src/quick/items/qquickitemchangelistener_p.h b/src/quick/items/qquickitemchangelistener_p.h
index cb0af75c4c..31d06c9983 100644
--- a/src/quick/items/qquickitemchangelistener_p.h
+++ b/src/quick/items/qquickitemchangelistener_p.h
@@ -135,7 +135,7 @@ public:
virtual void itemImplicitWidthChanged(QQuickItem *) {}
virtual void itemImplicitHeightChanged(QQuickItem *) {}
- virtual QQuickAnchorsPrivate *anchorPrivate() { return 0; }
+ virtual QQuickAnchorsPrivate *anchorPrivate() { return nullptr; }
};
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickitemgrabresult.cpp b/src/quick/items/qquickitemgrabresult.cpp
index c3f8d4f024..003fde8c9e 100644
--- a/src/quick/items/qquickitemgrabresult.cpp
+++ b/src/quick/items/qquickitemgrabresult.cpp
@@ -62,9 +62,9 @@ class QQuickItemGrabResultPrivate : public QObjectPrivate
{
public:
QQuickItemGrabResultPrivate()
- : cacheEntry(0)
- , qmlEngine(0)
- , texture(0)
+ : cacheEntry(nullptr)
+ , qmlEngine(nullptr)
+ , texture(nullptr)
{
}
@@ -266,7 +266,7 @@ void QQuickItemGrabResult::render()
d->image = d->texture->toImage();
delete d->texture;
- d->texture = 0;
+ d->texture = nullptr;
disconnect(d->window.data(), &QQuickWindow::beforeSynchronizing, this, &QQuickItemGrabResult::setup);
disconnect(d->window.data(), &QQuickWindow::afterRendering, this, &QQuickItemGrabResult::render);
@@ -281,17 +281,17 @@ QQuickItemGrabResult *QQuickItemGrabResultPrivate::create(QQuickItem *item, cons
if (size.width() < 1 || size.height() < 1) {
qmlWarning(item) << "grabToImage: item has invalid dimensions";
- return 0;
+ return nullptr;
}
if (!item->window()) {
qmlWarning(item) << "grabToImage: item is not attached to a window";
- return 0;
+ return nullptr;
}
if (!item->window()->isVisible()) {
qmlWarning(item) << "grabToImage: item's window is not visible";
- return 0;
+ return nullptr;
}
QQuickItemGrabResult *result = new QQuickItemGrabResult();
diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp
index 62312845b2..51a91e1f7a 100644
--- a/src/quick/items/qquickitemsmodule.cpp
+++ b/src/quick/items/qquickitemsmodule.cpp
@@ -74,7 +74,9 @@
#if QT_CONFIG(quick_positioners)
#include "qquickpositioners_p.h"
#endif
+#if QT_CONFIG(quick_repeater)
#include "qquickrepeater_p.h"
+#endif
#include "qquickloader_p.h"
#if QT_CONFIG(quick_animatedimage)
#include "qquickanimatedimage_p.h"
@@ -111,6 +113,10 @@
#include <private/qqmlmetatype_p.h>
#include <QtQuick/private/qquickaccessibleattached_p.h>
+QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcTransient)
+QT_END_NAMESPACE
+
static QQmlPrivate::AutoParentResult qquickitem_autoParent(QObject *obj, QObject *parent)
{
// When setting a parent (especially during dynamic object creation) in QML,
@@ -125,6 +131,7 @@ static QQmlPrivate::AutoParentResult qquickitem_autoParent(QObject *obj, QObject
QQuickWindow *win = qmlobject_cast<QQuickWindow *>(obj);
if (win) {
// A Window inside an Item should be transient for that item's window
+ qCDebug(lcTransient) << win << "is transient for" << parentItem->window();
win->setTransientParent(parentItem->window());
return QQmlPrivate::Parented;
}
@@ -134,6 +141,7 @@ static QQmlPrivate::AutoParentResult qquickitem_autoParent(QObject *obj, QObject
QQuickWindow *win = qmlobject_cast<QQuickWindow *>(obj);
if (win) {
// A Window inside a Window should be transient for it
+ qCDebug(lcTransient) << win << "is transient for" << parentWindow;
win->setTransientParent(parentWindow);
return QQmlPrivate::Parented;
} else {
@@ -207,7 +215,9 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor)
qmlRegisterType<QQuickPathView>(uri,major,minor,"PathView");
#endif
qmlRegisterType<QQuickRectangle>(uri,major,minor,"Rectangle");
+#if QT_CONFIG(quick_repeater)
qmlRegisterType<QQuickRepeater>(uri,major,minor,"Repeater");
+#endif
qmlRegisterType<QQuickTranslate>(uri,major,minor,"Translate");
qmlRegisterType<QQuickRotation>(uri,major,minor,"Rotation");
qmlRegisterType<QQuickScale>(uri,major,minor,"Scale");
@@ -290,7 +300,8 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor)
qmlRegisterType<QQuickMultiPointTouchArea>("QtQuick", 2, 0, "MultiPointTouchArea");
qmlRegisterType<QQuickTouchPoint>("QtQuick", 2, 0, "TouchPoint");
- qmlRegisterType<QQuickGrabGestureEvent>();
+ qmlRegisterUncreatableType<QQuickGrabGestureEvent>(uri,major,minor, "GestureEvent",
+ QQuickMouseEvent::tr("GestureEvent is only available in the context of handling the gestureStarted signal from MultiPointTouchArea"));
#if QT_CONFIG(accessibility)
qmlRegisterUncreatableType<QQuickAccessibleAttached>("QtQuick", 2, 0, "Accessible",QQuickAccessibleAttached::tr("Accessible is only available via attached properties"));
@@ -406,6 +417,11 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor)
#if QT_CONFIG(quick_path)
qmlRegisterType<QQuickPathAngleArc>(uri, 2, 11, "PathAngleArc");
#endif
+
+#if QT_CONFIG(quick_animatedimage)
+ qmlRegisterType<QQuickAnimatedImage, 11>(uri, 2, 11,"AnimatedImage");
+#endif
+ qmlRegisterType<QQuickItem, 11>(uri, 2, 11,"Item");
}
static void initResources()
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index 1d0d042839..f2e055e874 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -54,7 +54,7 @@ Q_LOGGING_CATEGORY(lcItemViewDelegateLifecycle, "qt.quick.itemview.lifecycle")
FxViewItem::FxViewItem(QQuickItem *i, QQuickItemView *v, bool own, QQuickItemViewAttached *attached)
: item(i)
, view(v)
- , transitionableItem(0)
+ , transitionableItem(nullptr)
, attached(attached)
, ownItem(own)
, releaseAfterTransition(false)
@@ -69,9 +69,9 @@ FxViewItem::~FxViewItem()
delete transitionableItem;
if (ownItem && item) {
trackGeometry(false);
- item->setParentItem(0);
+ item->setParentItem(nullptr);
item->deleteLater();
- item = 0;
+ item = nullptr;
}
}
@@ -275,7 +275,7 @@ QQuickItemView::~QQuickItemView()
QQuickItem *QQuickItemView::currentItem() const
{
Q_D(const QQuickItemView);
- return d->currentItem ? d->currentItem->item : 0;
+ return d->currentItem ? d->currentItem->item : nullptr;
}
QVariant QQuickItemView::model() const
@@ -304,12 +304,12 @@ void QQuickItemView::setModel(const QVariant &m)
QQmlInstanceModel *oldModel = d->model;
d->clear();
- d->model = 0;
+ d->model = nullptr;
d->setPosition(d->contentStartOffset());
d->modelVariant = model;
QObject *object = qvariant_cast<QObject*>(model);
- QQmlInstanceModel *vim = 0;
+ QQmlInstanceModel *vim = nullptr;
if (object && (vim = qobject_cast<QQmlInstanceModel *>(object))) {
if (d->ownModel) {
delete oldModel;
@@ -362,7 +362,7 @@ QQmlComponent *QQuickItemView::delegate() const
return dataModel->delegate();
}
- return 0;
+ return nullptr;
}
void QQuickItemView::setDelegate(QQmlComponent *delegate)
@@ -382,7 +382,7 @@ void QQuickItemView::setDelegate(QQmlComponent *delegate)
if (isComponentComplete()) {
d->releaseVisibleItems();
d->releaseItem(d->currentItem);
- d->currentItem = 0;
+ d->currentItem = nullptr;
d->updateSectionCriteria();
d->refill();
d->moveReason = QQuickItemViewPrivate::SetIndex;
@@ -586,7 +586,7 @@ QQmlComponent *QQuickItemView::header() const
QQuickItem *QQuickItemView::headerItem() const
{
Q_D(const QQuickItemView);
- return d->header ? d->header->item : 0;
+ return d->header ? d->header->item : nullptr;
}
void QQuickItemView::setHeader(QQmlComponent *headerComponent)
@@ -595,7 +595,7 @@ void QQuickItemView::setHeader(QQmlComponent *headerComponent)
if (d->headerComponent != headerComponent) {
d->applyPendingChanges();
delete d->header;
- d->header = 0;
+ d->header = nullptr;
d->headerComponent = headerComponent;
d->markExtentsDirty();
@@ -621,7 +621,7 @@ QQmlComponent *QQuickItemView::footer() const
QQuickItem *QQuickItemView::footerItem() const
{
Q_D(const QQuickItemView);
- return d->footer ? d->footer->item : 0;
+ return d->footer ? d->footer->item : nullptr;
}
void QQuickItemView::setFooter(QQmlComponent *footerComponent)
@@ -630,7 +630,7 @@ void QQuickItemView::setFooter(QQmlComponent *footerComponent)
if (d->footerComponent != footerComponent) {
d->applyPendingChanges();
delete d->footer;
- d->footer = 0;
+ d->footer = nullptr;
d->footerComponent = footerComponent;
if (isComponentComplete()) {
@@ -666,7 +666,7 @@ void QQuickItemView::setHighlight(QQmlComponent *highlightComponent)
QQuickItem *QQuickItemView::highlightItem() const
{
Q_D(const QQuickItemView);
- return d->highlight ? d->highlight->item : 0;
+ return d->highlight ? d->highlight->item : nullptr;
}
bool QQuickItemView::highlightFollowsCurrentItem() const
@@ -799,7 +799,7 @@ void QQuickItemView::setHighlightMoveDuration(int duration)
QQuickTransition *QQuickItemView::populateTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->populateTransition : 0;
+ return d->transitioner ? d->transitioner->populateTransition : nullptr;
}
void QQuickItemView::setPopulateTransition(QQuickTransition *transition)
@@ -815,7 +815,7 @@ void QQuickItemView::setPopulateTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::addTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->addTransition : 0;
+ return d->transitioner ? d->transitioner->addTransition : nullptr;
}
void QQuickItemView::setAddTransition(QQuickTransition *transition)
@@ -831,7 +831,7 @@ void QQuickItemView::setAddTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::addDisplacedTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->addDisplacedTransition : 0;
+ return d->transitioner ? d->transitioner->addDisplacedTransition : nullptr;
}
void QQuickItemView::setAddDisplacedTransition(QQuickTransition *transition)
@@ -847,7 +847,7 @@ void QQuickItemView::setAddDisplacedTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::moveTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->moveTransition : 0;
+ return d->transitioner ? d->transitioner->moveTransition : nullptr;
}
void QQuickItemView::setMoveTransition(QQuickTransition *transition)
@@ -863,7 +863,7 @@ void QQuickItemView::setMoveTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::moveDisplacedTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->moveDisplacedTransition : 0;
+ return d->transitioner ? d->transitioner->moveDisplacedTransition : nullptr;
}
void QQuickItemView::setMoveDisplacedTransition(QQuickTransition *transition)
@@ -879,7 +879,7 @@ void QQuickItemView::setMoveDisplacedTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::removeTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->removeTransition : 0;
+ return d->transitioner ? d->transitioner->removeTransition : nullptr;
}
void QQuickItemView::setRemoveTransition(QQuickTransition *transition)
@@ -895,7 +895,7 @@ void QQuickItemView::setRemoveTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::removeDisplacedTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->removeDisplacedTransition : 0;
+ return d->transitioner ? d->transitioner->removeDisplacedTransition : nullptr;
}
void QQuickItemView::setRemoveDisplacedTransition(QQuickTransition *transition)
@@ -911,7 +911,7 @@ void QQuickItemView::setRemoveDisplacedTransition(QQuickTransition *transition)
QQuickTransition *QQuickItemView::displacedTransition() const
{
Q_D(const QQuickItemView);
- return d->transitioner ? d->transitioner->displacedTransition : 0;
+ return d->transitioner ? d->transitioner->displacedTransition : nullptr;
}
void QQuickItemView::setDisplacedTransition(QQuickTransition *transition)
@@ -926,7 +926,6 @@ void QQuickItemView::setDisplacedTransition(QQuickTransition *transition)
void QQuickItemViewPrivate::positionViewAtIndex(int index, int mode)
{
- Q_Q(QQuickItemView);
if (!isValid())
return;
if (mode < QQuickItemView::Beginning || mode > QQuickItemView::SnapPosition)
@@ -953,11 +952,16 @@ void QQuickItemViewPrivate::positionViewAtIndex(int index, int mode)
item = visibleItem(idx);
}
if (item) {
+ const bool stickyHeader = hasStickyHeader();
+ const bool stickyFooter = hasStickyFooter();
+ const qreal stickyHeaderSize = stickyHeader ? headerSize() : 0;
+ const qreal stickyFooterSize = stickyFooter ? footerSize() : 0;
+
const qreal itemPos = item->position();
switch (mode) {
case QQuickItemView::Beginning:
pos = itemPos;
- if (header && (index < 0 || hasStickyHeader()))
+ if (header && (index < 0 || stickyHeader))
pos -= headerSize();
break;
case QQuickItemView::Center:
@@ -965,30 +969,29 @@ void QQuickItemViewPrivate::positionViewAtIndex(int index, int mode)
break;
case QQuickItemView::End:
pos = itemPos - viewSize + item->size();
- if (footer && (index >= modelCount || hasStickyFooter()))
+ if (footer && (index >= modelCount || stickyFooter))
pos += footerSize();
break;
case QQuickItemView::Visible:
- if (itemPos > pos + viewSize)
- pos = itemPos - viewSize + item->size();
- else if (item->endPosition() <= pos)
- pos = itemPos;
+ if (itemPos > pos + viewSize - stickyFooterSize)
+ pos = item->endPosition() - viewSize + stickyFooterSize;
+ else if (item->endPosition() <= pos - stickyHeaderSize)
+ pos = itemPos - stickyHeaderSize;
break;
case QQuickItemView::Contain:
- if (item->endPosition() >= pos + viewSize)
- pos = itemPos - viewSize + item->size();
- if (itemPos < pos)
- pos = itemPos;
+ if (item->endPosition() >= pos + viewSize + stickyFooterSize)
+ pos = itemPos - viewSize + item->size() + stickyFooterSize;
+ if (itemPos - stickyHeaderSize < pos)
+ pos = itemPos - stickyHeaderSize;
break;
case QQuickItemView::SnapPosition:
- pos = itemPos - highlightRangeStart;
+ pos = itemPos - highlightRangeStart - stickyHeaderSize;
break;
}
pos = qMin(pos, maxExtent);
qreal minExtent = calculatedMinExtent();
pos = qMax(pos, minExtent);
moveReason = QQuickItemViewPrivate::Other;
- q->cancelFlick();
setPosition(pos);
if (highlight) {
@@ -1231,7 +1234,7 @@ void QQuickItemViewPrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometry
// start new transitions
bool prevInLayout = inLayout;
if (!inLayout) {
- FxViewItem *actualItem = transitioner ? visibleItem(currentIndex) : 0;
+ FxViewItem *actualItem = transitioner ? visibleItem(currentIndex) : nullptr;
if (actualItem && actualItem->transitionRunning())
inLayout = true;
}
@@ -1246,16 +1249,26 @@ void QQuickItemViewPrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometry
void QQuickItemView::destroyRemoved()
{
Q_D(QQuickItemView);
+
+ bool hasRemoveTransition = false;
+ bool hasRemoveTransitionAsTarget = false;
+ if (d->transitioner) {
+ hasRemoveTransition = d->transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, false);
+ hasRemoveTransitionAsTarget = d->transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, true);
+ }
+
for (QList<FxViewItem*>::Iterator it = d->visibleItems.begin();
it != d->visibleItems.end();) {
FxViewItem *item = *it;
if (item->index == -1 && (!item->attached || item->attached->delayRemove() == false)) {
- if (d->transitioner && d->transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, true)) {
+ if (hasRemoveTransitionAsTarget) {
// don't remove from visibleItems until next layout()
d->runDelayedRemoveTransition = true;
QObject::disconnect(item->attached, SIGNAL(delayRemoveChanged()), this, SLOT(destroyRemoved()));
++it;
} else {
+ if (hasRemoveTransition)
+ d->runDelayedRemoveTransition = true;
d->releaseItem(item);
it = d->visibleItems.erase(it);
}
@@ -1384,7 +1397,6 @@ void QQuickItemView::trackedPositionChanged()
pos = qMax(trackedPos, toItemPos);
}
if (viewPos != pos) {
- cancelFlick();
d->calcVelocity = true;
d->setPosition(pos);
d->calcVelocity = false;
@@ -1546,14 +1558,14 @@ QQuickItemViewPrivate::QQuickItemViewPrivate()
, layoutDirection(Qt::LeftToRight), verticalLayoutDirection(QQuickItemView::TopToBottom)
, moveReason(Other)
, visibleIndex(0)
- , currentIndex(-1), currentItem(0)
- , trackedItem(0), requestedIndex(-1)
- , highlightComponent(0), highlight(0)
+ , currentIndex(-1), currentItem(nullptr)
+ , trackedItem(nullptr), requestedIndex(-1)
+ , highlightComponent(nullptr), highlight(nullptr)
, highlightRange(QQuickItemView::NoHighlightRange)
, highlightRangeStart(0), highlightRangeEnd(0)
, highlightMoveDuration(150)
- , headerComponent(0), header(0), footerComponent(0), footer(0)
- , transitioner(0)
+ , headerComponent(nullptr), header(nullptr), footerComponent(nullptr), footer(nullptr)
+ , transitioner(nullptr)
, minExtent(0), maxExtent(0)
, ownModel(false), wrap(false)
, keyNavigationEnabled(true)
@@ -1571,7 +1583,7 @@ QQuickItemViewPrivate::QQuickItemViewPrivate()
QQuickItemViewPrivate::~QQuickItemViewPrivate()
{
if (transitioner)
- transitioner->setChangeListener(0);
+ transitioner->setChangeListener(nullptr);
delete transitioner;
}
@@ -1637,7 +1649,7 @@ FxViewItem *QQuickItemViewPrivate::visibleItem(int modelIndex) const {
return item;
}
}
- return 0;
+ return nullptr;
}
// should rename to firstItemInView() to avoid confusion with other "*visible*" methods
@@ -1697,7 +1709,7 @@ void QQuickItemViewPrivate::updateCurrent(int modelIndex)
if (currentItem->attached)
currentItem->attached->setIsCurrentItem(false);
releaseItem(currentItem);
- currentItem = 0;
+ currentItem = nullptr;
currentIndex = modelIndex;
emit q->currentIndexChanged();
emit q->currentItemChanged();
@@ -1717,7 +1729,7 @@ void QQuickItemViewPrivate::updateCurrent(int modelIndex)
FxViewItem *oldCurrentItem = currentItem;
int oldCurrentIndex = currentIndex;
currentIndex = modelIndex;
- currentItem = createItem(modelIndex, false);
+ currentItem = createItem(modelIndex, QQmlIncubator::AsynchronousIfNested);
if (oldCurrentItem && oldCurrentItem->attached && (!currentItem || oldCurrentItem->item != currentItem->item))
oldCurrentItem->attached->setIsCurrentItem(false);
if (currentItem) {
@@ -1738,7 +1750,9 @@ void QQuickItemViewPrivate::updateCurrent(int modelIndex)
void QQuickItemViewPrivate::clear()
{
+ Q_Q(QQuickItemView);
currentChanges.reset();
+ bufferedChanges.reset();
timeline.clear();
releaseVisibleItems();
@@ -1750,10 +1764,13 @@ void QQuickItemViewPrivate::clear()
}
releasePendingTransition.clear();
+ auto oldCurrentItem = currentItem;
releaseItem(currentItem);
- currentItem = 0;
+ currentItem = nullptr;
+ if (oldCurrentItem)
+ emit q->currentItemChanged();
createHighlight();
- trackedItem = 0;
+ trackedItem = nullptr;
if (requestedIndex >= 0) {
if (model)
@@ -1796,56 +1813,61 @@ void QQuickItemViewPrivate::refill(qreal from, qreal to)
if (!isValid() || !q->isComponentComplete())
return;
- bufferPause.stop();
- currentChanges.reset();
+ do {
+ bufferPause.stop();
+ if (currentChanges.hasPendingChanges() || bufferedChanges.hasPendingChanges()) {
+ currentChanges.reset();
+ bufferedChanges.reset();
+ releaseVisibleItems();
+ }
- int prevCount = itemCount;
- itemCount = model->count();
- qreal bufferFrom = from - buffer;
- qreal bufferTo = to + buffer;
- qreal fillFrom = from;
- qreal fillTo = to;
-
- bool added = addVisibleItems(fillFrom, fillTo, bufferFrom, bufferTo, false);
- bool removed = removeNonVisibleItems(bufferFrom, bufferTo);
-
- if (requestedIndex == -1 && buffer && bufferMode != NoBuffer) {
- if (added) {
- // We've already created a new delegate this frame.
- // Just schedule a buffer refill.
- bufferPause.start();
- } else {
- if (bufferMode & BufferAfter)
- fillTo = bufferTo;
- if (bufferMode & BufferBefore)
- fillFrom = bufferFrom;
- added |= addVisibleItems(fillFrom, fillTo, bufferFrom, bufferTo, true);
+ int prevCount = itemCount;
+ itemCount = model->count();
+ qreal bufferFrom = from - buffer;
+ qreal bufferTo = to + buffer;
+ qreal fillFrom = from;
+ qreal fillTo = to;
+
+ bool added = addVisibleItems(fillFrom, fillTo, bufferFrom, bufferTo, false);
+ bool removed = removeNonVisibleItems(bufferFrom, bufferTo);
+
+ if (requestedIndex == -1 && buffer && bufferMode != NoBuffer) {
+ if (added) {
+ // We've already created a new delegate this frame.
+ // Just schedule a buffer refill.
+ bufferPause.start();
+ } else {
+ if (bufferMode & BufferAfter)
+ fillTo = bufferTo;
+ if (bufferMode & BufferBefore)
+ fillFrom = bufferFrom;
+ added |= addVisibleItems(fillFrom, fillTo, bufferFrom, bufferTo, true);
+ }
}
- }
- if (added || removed) {
- markExtentsDirty();
- updateBeginningEnd();
- visibleItemsChanged();
- updateHeader();
- updateFooter();
- updateViewport();
- }
+ if (added || removed) {
+ markExtentsDirty();
+ updateBeginningEnd();
+ visibleItemsChanged();
+ updateHeader();
+ updateFooter();
+ updateViewport();
+ }
- if (prevCount != itemCount)
- emit q->countChanged();
+ if (prevCount != itemCount)
+ emit q->countChanged();
+ } while (currentChanges.hasPendingChanges() || bufferedChanges.hasPendingChanges());
}
void QQuickItemViewPrivate::regenerate(bool orientationChanged)
{
Q_Q(QQuickItemView);
if (q->isComponentComplete()) {
- currentChanges.reset();
if (orientationChanged) {
delete header;
- header = 0;
+ header = nullptr;
delete footer;
- footer = 0;
+ footer = nullptr;
}
clear();
updateHeader();
@@ -1876,6 +1898,9 @@ void QQuickItemViewPrivate::layout()
inLayout = true;
+ // viewBounds contains bounds before any add/remove/move operation to the view
+ QRectF viewBounds(q->contentX(), q->contentY(), q->width(), q->height());
+
if (!isValid() && !visibleItems.count()) {
clear();
setPosition(contentStartOffset());
@@ -1934,14 +1959,14 @@ void QQuickItemViewPrivate::layout()
if (transitioner) {
// items added in the last refill() may need to be transitioned in - e.g. a remove
// causes items to slide up into view
- if (transitioner->canTransition(QQuickItemViewTransitioner::MoveTransition, false)
- || transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, false)) {
+ if (lastIndexInView != -1 &&
+ (transitioner->canTransition(QQuickItemViewTransitioner::MoveTransition, false)
+ || transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, false))) {
translateAndTransitionItemsAfter(lastIndexInView, insertionPosChanges, removalPosChanges);
}
prepareVisibleItemTransitions();
- QRectF viewBounds(q->contentX(), q->contentY(), q->width(), q->height());
for (QList<FxViewItem*>::Iterator it = releasePendingTransition.begin();
it != releasePendingTransition.end(); ) {
FxViewItem *item = *it;
@@ -1978,7 +2003,6 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
}
updateUnrequestedIndexes();
- moveReason = QQuickItemViewPrivate::Other;
FxViewItem *prevVisibleItemsFirst = visibleItems.count() ? *visibleItems.constBegin() : 0;
int prevItemCount = itemCount;
@@ -2100,8 +2124,11 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
if (currentChanges.currentRemoved && currentItem) {
if (currentItem->item && currentItem->attached)
currentItem->attached->setIsCurrentItem(false);
+ auto oldCurrentItem = currentItem;
releaseItem(currentItem);
- currentItem = 0;
+ currentItem = nullptr;
+ if (oldCurrentItem)
+ emit q->currentItemChanged();
}
if (!currentIndexCleared)
updateCurrent(currentChanges.newCurrentIndex);
@@ -2313,12 +2340,12 @@ void QQuickItemViewPrivate::viewItemTransitionFinished(QQuickItemViewTransitiona
When the item becomes available, refill() will be called and the item
will be returned on the next call to createItem().
*/
-FxViewItem *QQuickItemViewPrivate::createItem(int modelIndex, bool asynchronous)
+FxViewItem *QQuickItemViewPrivate::createItem(int modelIndex, QQmlIncubator::IncubationMode incubationMode)
{
Q_Q(QQuickItemView);
- if (requestedIndex == modelIndex && asynchronous)
- return 0;
+ if (requestedIndex == modelIndex && incubationMode == QQmlIncubator::Asynchronous)
+ return nullptr;
for (int i=0; i<releasePendingTransition.count(); i++) {
if (releasePendingTransition.at(i)->index == modelIndex
@@ -2328,14 +2355,20 @@ FxViewItem *QQuickItemViewPrivate::createItem(int modelIndex, bool asynchronous)
}
}
- if (asynchronous)
- requestedIndex = modelIndex;
inRequest = true;
- QObject* object = model->object(modelIndex, asynchronous);
+ QObject* object = model->object(modelIndex, incubationMode);
QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
+
if (!item) {
- if (object) {
+ if (!object) {
+ if (requestedIndex == -1 && model->incubationStatus(modelIndex) == QQmlIncubator::Loading) {
+ // The reason we didn't receive an item is because it's incubating async. We keep track
+ // of this by assigning the index we're waiting for to 'requestedIndex'. This will e.g. let
+ // the view avoid unnecessary layout calls until the item has been loaded.
+ requestedIndex = modelIndex;
+ }
+ } else {
model->release(object);
if (!delegateValidated) {
delegateValidated = true;
@@ -2344,7 +2377,7 @@ FxViewItem *QQuickItemViewPrivate::createItem(int modelIndex, bool asynchronous)
}
}
inRequest = false;
- return 0;
+ return nullptr;
} else {
item->setParentItem(q->contentItem());
if (requestedIndex == modelIndex)
@@ -2397,7 +2430,7 @@ void QQuickItemView::destroyingItem(QObject *object)
Q_D(QQuickItemView);
QQuickItem* item = qmlobject_cast<QQuickItem*>(object);
if (item) {
- item->setParentItem(0);
+ item->setParentItem(nullptr);
d->unrequestedItems.remove(item);
}
}
@@ -2408,7 +2441,7 @@ bool QQuickItemViewPrivate::releaseItem(FxViewItem *item)
if (!item || !model)
return true;
if (trackedItem == item)
- trackedItem = 0;
+ trackedItem = nullptr;
item->trackGeometry(false);
QQmlInstanceModel::ReleaseFlags flags = model->release(item->item);
@@ -2418,7 +2451,7 @@ bool QQuickItemViewPrivate::releaseItem(FxViewItem *item)
QQuickItemPrivate::get(item->item)->setCulled(true);
unrequestedItems.insert(item->item, model->indexOf(item->item, q));
} else if (flags & QQmlInstanceModel::Destroyed) {
- item->item->setParentItem(0);
+ item->item->setParentItem(nullptr);
}
}
delete item;
@@ -2434,7 +2467,7 @@ QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component,
{
Q_Q(const QQuickItemView);
- QQuickItem *item = 0;
+ QQuickItem *item = nullptr;
if (component) {
QQmlContext *creationContext = component->creationContext();
QQmlContext *context = new QQmlContext(
diff --git a/src/quick/items/qquickitemview_p.h b/src/quick/items/qquickitemview_p.h
index b38bc6174f..483fc1a09f 100644
--- a/src/quick/items/qquickitemview_p.h
+++ b/src/quick/items/qquickitemview_p.h
@@ -128,7 +128,7 @@ public:
};
Q_ENUM(VerticalLayoutDirection)
- QQuickItemView(QQuickFlickablePrivate &dd, QQuickItem *parent = 0);
+ QQuickItemView(QQuickFlickablePrivate &dd, QQuickItem *parent = nullptr);
~QQuickItemView();
QVariant model() const;
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
index 374b8388ba..e250cf0ccb 100644
--- a/src/quick/items/qquickitemview_p_p.h
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -206,7 +206,7 @@ public:
void refill(qreal from, qreal to);
void mirrorChange() override;
- FxViewItem *createItem(int modelIndex, bool asynchronous = false);
+ FxViewItem *createItem(int modelIndex,QQmlIncubator::IncubationMode incubationMode = QQmlIncubator::AsynchronousIfNested);
virtual bool releaseItem(FxViewItem *item);
QQuickItem *createHighlightItem() const;
diff --git a/src/quick/items/qquickitemviewtransition.cpp b/src/quick/items/qquickitemviewtransition.cpp
index 745e5b275f..5cd28d0acb 100644
--- a/src/quick/items/qquickitemviewtransition.cpp
+++ b/src/quick/items/qquickitemviewtransition.cpp
@@ -69,11 +69,11 @@ protected:
QQuickItemViewTransitionJob::QQuickItemViewTransitionJob()
- : m_transitioner(0)
- , m_item(0)
+ : m_transitioner(nullptr)
+ , m_item(nullptr)
, m_type(QQuickItemViewTransitioner::NoTransition)
, m_isTarget(false)
- , m_wasDeleted(0)
+ , m_wasDeleted(nullptr)
{
}
@@ -143,12 +143,12 @@ void QQuickItemViewTransitionJob::finished()
m_transitioner->finishedTransition(this, m_item);
if (deleted)
return;
- m_wasDeleted = 0;
+ m_wasDeleted = nullptr;
- m_transitioner = 0;
+ m_transitioner = nullptr;
}
- m_item = 0;
+ m_item = nullptr;
m_toPos.setX(0);
m_toPos.setY(0);
m_type = QQuickItemViewTransitioner::NoTransition;
@@ -157,12 +157,12 @@ void QQuickItemViewTransitionJob::finished()
QQuickItemViewTransitioner::QQuickItemViewTransitioner()
- : populateTransition(0)
- , addTransition(0), addDisplacedTransition(0)
- , moveTransition(0), moveDisplacedTransition(0)
- , removeTransition(0), removeDisplacedTransition(0)
- , displacedTransition(0)
- , changeListener(0)
+ : populateTransition(nullptr)
+ , addTransition(nullptr), addDisplacedTransition(nullptr)
+ , moveTransition(nullptr), moveDisplacedTransition(nullptr)
+ , removeTransition(nullptr), removeDisplacedTransition(nullptr)
+ , displacedTransition(nullptr)
+ , changeListener(nullptr)
, usePopulateTransition(false)
{
}
@@ -172,7 +172,7 @@ QQuickItemViewTransitioner::~QQuickItemViewTransitioner()
typedef QSet<QQuickItemViewTransitionJob *>::iterator JobIt;
for (JobIt it = runningJobs.begin(), end = runningJobs.end(); it != end; ++it)
- (*it)->m_transitioner = 0;
+ (*it)->m_transitioner = nullptr;
}
bool QQuickItemViewTransitioner::canTransition(QQuickItemViewTransitioner::TransitionType type, bool asTarget) const
@@ -249,12 +249,12 @@ void QQuickItemViewTransitioner::resetTargetLists()
QQuickTransition *QQuickItemViewTransitioner::transitionObject(QQuickItemViewTransitioner::TransitionType type, bool asTarget) const
{
if (type == QQuickItemViewTransitioner::NoTransition)
- return 0;
+ return nullptr;
if (type == PopulateTransition)
asTarget = true; // no separate displaced transition
- QQuickTransition *trans = 0;
+ QQuickTransition *trans = nullptr;
switch (type) {
case NoTransition:
break;
@@ -276,7 +276,7 @@ QQuickTransition *QQuickItemViewTransitioner::transitionObject(QQuickItemViewTra
trans = displacedTransition;
if (trans && trans->enabled())
return trans;
- return 0;
+ return nullptr;
}
const QList<int> &QQuickItemViewTransitioner::targetIndexes(QQuickItemViewTransitioner::TransitionType type) const
@@ -328,7 +328,7 @@ void QQuickItemViewTransitioner::finishedTransition(QQuickItemViewTransitionJob
QQuickItemViewTransitionableItem::QQuickItemViewTransitionableItem(QQuickItem *i)
: item(i)
- , transition(0)
+ , transition(nullptr)
, nextTransitionType(QQuickItemViewTransitioner::NoTransition)
, isTransitionTarget(false)
, nextTransitionToSet(false)
@@ -563,7 +563,7 @@ void QQuickItemViewTransitionableItem::stopTransition()
QQuickViewTransitionAttached::QQuickViewTransitionAttached(QObject *parent)
- : QObject(parent), m_item(0), m_index(-1)
+ : QObject(parent), m_item(nullptr), m_index(-1)
{
}
/*!
diff --git a/src/quick/items/qquickitemviewtransition_p.h b/src/quick/items/qquickitemviewtransition_p.h
index 3d2f5361b1..29a62f7f10 100644
--- a/src/quick/items/qquickitemviewtransition_p.h
+++ b/src/quick/items/qquickitemviewtransition_p.h
@@ -58,6 +58,8 @@ QT_REQUIRE_CONFIG(quick_viewtransitions);
#include <QtCore/qobject.h>
#include <QtCore/qpoint.h>
#include <QtQml/qqml.h>
+#include <private/qqmlguard_p.h>
+#include <private/qquicktransition_p.h>
QT_BEGIN_NAMESPACE
@@ -115,14 +117,14 @@ public:
QList<QObject *> moveTransitionTargets;
QList<QObject *> removeTransitionTargets;
- QQuickTransition *populateTransition;
- QQuickTransition *addTransition;
- QQuickTransition *addDisplacedTransition;
- QQuickTransition *moveTransition;
- QQuickTransition *moveDisplacedTransition;
- QQuickTransition *removeTransition;
- QQuickTransition *removeDisplacedTransition;
- QQuickTransition *displacedTransition;
+ QQmlGuard<QQuickTransition> populateTransition;
+ QQmlGuard<QQuickTransition> addTransition;
+ QQmlGuard<QQuickTransition> addDisplacedTransition;
+ QQmlGuard<QQuickTransition> moveTransition;
+ QQmlGuard<QQuickTransition> moveDisplacedTransition;
+ QQmlGuard<QQuickTransition> removeTransition;
+ QQmlGuard<QQuickTransition> removeDisplacedTransition;
+ QQmlGuard<QQuickTransition> displacedTransition;
private:
friend class QQuickItemViewTransitionJob;
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index a6236d9801..33becd71ec 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -176,9 +176,9 @@ public:
, snapMode(QQuickListView::NoSnap)
, headerPositioning(QQuickListView::InlineHeader)
, footerPositioning(QQuickListView::InlineFooter)
- , highlightPosAnimator(0), highlightWidthAnimator(0), highlightHeightAnimator(0)
+ , highlightPosAnimator(nullptr), highlightWidthAnimator(nullptr), highlightHeightAnimator(nullptr)
, highlightMoveVelocity(400), highlightResizeVelocity(400), highlightResizeDuration(-1)
- , sectionCriteria(0), currentSectionItem(0), nextSectionItem(0)
+ , sectionCriteria(nullptr), currentSectionItem(nullptr), nextSectionItem(nullptr)
, overshootDist(0.0), correctFlick(false), inFlickCorrection(false)
{
highlightMoveDuration = -1; //override default value set in base class
@@ -195,8 +195,8 @@ public:
//----------------------------------------------------------------------------
QQuickViewSection::QQuickViewSection(QQuickListView *parent)
- : QObject(parent), m_criteria(FullString), m_delegate(0), m_labelPositioning(InlineLabels)
- , m_view(parent ? QQuickListViewPrivate::get(parent) : 0)
+ : QObject(parent), m_criteria(FullString), m_delegate(nullptr), m_labelPositioning(InlineLabels)
+ , m_view(parent ? QQuickListViewPrivate::get(parent) : nullptr)
{
}
@@ -258,7 +258,7 @@ public:
}
inline QQuickItem *section() const {
- return item && attached ? static_cast<QQuickListViewAttached*>(attached)->m_sectionItem : 0;
+ return item && attached ? static_cast<QQuickListViewAttached*>(attached)->m_sectionItem : nullptr;
}
void setSection(QQuickItem *s) {
static_cast<QQuickListViewAttached*>(attached)->m_sectionItem = s;
@@ -389,7 +389,7 @@ bool QQuickListViewPrivate::isBottomToTop() const
FxViewItem *QQuickListViewPrivate::itemBefore(int modelIndex) const
{
if (modelIndex < visibleIndex)
- return 0;
+ return nullptr;
int idx = 1;
int lastIndex = -1;
while (idx < visibleItems.count()) {
@@ -402,7 +402,7 @@ FxViewItem *QQuickListViewPrivate::itemBefore(int modelIndex) const
}
if (lastIndex == modelIndex-1)
return visibleItems.constLast();
- return 0;
+ return nullptr;
}
void QQuickListViewPrivate::setPosition(qreal pos)
@@ -530,7 +530,7 @@ qreal QQuickListViewPrivate::snapPosAt(qreal pos)
FxViewItem *QQuickListViewPrivate::snapItemAt(qreal pos)
{
- FxViewItem *snapItem = 0;
+ FxViewItem *snapItem = nullptr;
qreal prevItemSize = 0;
for (FxViewItem *item : qAsConst(visibleItems)) {
if (item->index == -1)
@@ -561,13 +561,13 @@ void QQuickListViewPrivate::clear()
{
for (int i = 0; i < sectionCacheSize; ++i) {
delete sectionCache[i];
- sectionCache[i] = 0;
+ sectionCache[i] = nullptr;
}
visiblePos = 0;
releaseSectionItem(currentSectionItem);
- currentSectionItem = 0;
+ currentSectionItem = nullptr;
releaseSectionItem(nextSectionItem);
- nextSectionItem = 0;
+ nextSectionItem = nullptr;
lastVisibleSection = QString();
QQuickItemViewPrivate::clear();
}
@@ -629,13 +629,13 @@ bool QQuickListViewPrivate::releaseItem(FxViewItem *item)
if (!sectionCache[i]) {
sectionCache[i] = att->m_sectionItem;
sectionCache[i]->setVisible(false);
- att->m_sectionItem = 0;
+ att->m_sectionItem = nullptr;
break;
}
++i;
} while (i < sectionCacheSize);
delete att->m_sectionItem;
- att->m_sectionItem = 0;
+ att->m_sectionItem = nullptr;
}
return released;
@@ -669,11 +669,13 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
}
}
+ QQmlIncubator::IncubationMode incubationMode = doBuffer ? QQmlIncubator::Asynchronous : QQmlIncubator::AsynchronousIfNested;
+
bool changed = false;
- FxListItemSG *item = 0;
+ FxListItemSG *item = nullptr;
qreal pos = itemEnd;
while (modelIndex < model->count() && pos <= fillTo) {
- if (!(item = static_cast<FxListItemSG*>(createItem(modelIndex, doBuffer))))
+ if (!(item = static_cast<FxListItemSG*>(createItem(modelIndex, incubationMode))))
break;
qCDebug(lcItemViewDelegateLifecycle) << "refill: append item" << modelIndex << "pos" << pos << "buffer" << doBuffer << "item" << (QObject *)(item->item);
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
@@ -690,7 +692,7 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
return changed;
while (visibleIndex > 0 && visibleIndex <= model->count() && visiblePos > fillFrom) {
- if (!(item = static_cast<FxListItemSG*>(createItem(visibleIndex-1, doBuffer))))
+ if (!(item = static_cast<FxListItemSG*>(createItem(visibleIndex-1, incubationMode))))
break;
qCDebug(lcItemViewDelegateLifecycle) << "refill: prepend item" << visibleIndex-1 << "current top pos" << visiblePos << "buffer" << doBuffer << "item" << (QObject *)(item->item);
--visibleIndex;
@@ -720,7 +722,7 @@ void QQuickListViewPrivate::removeItem(FxViewItem *item)
bool QQuickListViewPrivate::removeNonVisibleItems(qreal bufferFrom, qreal bufferTo)
{
- FxViewItem *item = 0;
+ FxViewItem *item = nullptr;
bool changed = false;
// Remove items from the start of the view.
@@ -862,16 +864,16 @@ void QQuickListViewPrivate::createHighlight()
bool changed = false;
if (highlight) {
if (trackedItem == highlight)
- trackedItem = 0;
+ trackedItem = nullptr;
delete highlight;
- highlight = 0;
+ highlight = nullptr;
delete highlightPosAnimator;
delete highlightWidthAnimator;
delete highlightHeightAnimator;
- highlightPosAnimator = 0;
- highlightWidthAnimator = 0;
- highlightHeightAnimator = 0;
+ highlightPosAnimator = nullptr;
+ highlightWidthAnimator = nullptr;
+ highlightHeightAnimator = nullptr;
changed = true;
}
@@ -960,13 +962,13 @@ bool QQuickListViewPrivate::movingFromHighlight()
QQuickItem * QQuickListViewPrivate::getSectionItem(const QString &section)
{
Q_Q(QQuickListView);
- QQuickItem *sectionItem = 0;
+ QQuickItem *sectionItem = nullptr;
int i = sectionCacheSize-1;
while (i >= 0 && !sectionCache[i])
--i;
if (i >= 0) {
sectionItem = sectionCache[i];
- sectionCache[i] = 0;
+ sectionCache[i] = nullptr;
sectionItem->setVisible(true);
QQmlContext *context = QQmlEngine::contextForObject(sectionItem)->parentContext();
context->setContextProperty(QLatin1String("section"), section);
@@ -1023,13 +1025,13 @@ void QQuickListViewPrivate::releaseSectionItems()
if (listItem->section()) {
qreal pos = listItem->position();
releaseSectionItem(listItem->section());
- listItem->setSection(0);
+ listItem->setSection(nullptr);
listItem->setPosition(pos);
}
}
for (int i = 0; i < sectionCacheSize; ++i) {
delete sectionCache[i];
- sectionCache[i] = 0;
+ sectionCache[i] = nullptr;
}
}
@@ -1051,7 +1053,7 @@ void QQuickListViewPrivate::updateInlineSection(FxListItemSG *listItem)
} else if (listItem->section()) {
qreal pos = listItem->position();
releaseSectionItem(listItem->section());
- listItem->setSection(0);
+ listItem->setSection(nullptr);
listItem->setPosition(pos);
}
}
@@ -1067,8 +1069,8 @@ void QQuickListViewPrivate::updateStickySections()
qreal startPos = hasStickyHeader() ? header->endPosition() : viewPos;
qreal endPos = hasStickyFooter() ? footer->position() : viewPos + size();
- QQuickItem *sectionItem = 0;
- QQuickItem *lastSectionItem = 0;
+ QQuickItem *sectionItem = nullptr;
+ QQuickItem *lastSectionItem = nullptr;
int index = 0;
while (index < visibleItems.count()) {
if (QQuickItem *section = static_cast<FxListItemSG *>(visibleItems.at(index))->section()) {
@@ -1127,7 +1129,7 @@ void QQuickListViewPrivate::updateStickySections()
currentSectionItem->setX(pos);
} else if (currentSectionItem) {
releaseSectionItem(currentSectionItem);
- currentSectionItem = 0;
+ currentSectionItem = nullptr;
}
// Next section footer
@@ -1159,7 +1161,7 @@ void QQuickListViewPrivate::updateStickySections()
nextSectionItem->setX(pos);
} else if (nextSectionItem) {
releaseSectionItem(nextSectionItem);
- nextSectionItem = 0;
+ nextSectionItem = nullptr;
}
}
@@ -1175,7 +1177,7 @@ void QQuickListViewPrivate::updateSections()
QString prevSection;
if (visibleIndex > 0)
prevSection = sectionAt(visibleIndex-1);
- QQuickListViewAttached *prevAtt = 0;
+ QQuickListViewAttached *prevAtt = nullptr;
int prevIdx = -1;
int idx = -1;
for (FxViewItem *item : qAsConst(visibleItems)) {
@@ -1466,9 +1468,6 @@ void QQuickListViewPrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometry
void QQuickListViewPrivate::fixupPosition()
{
- if ((haveHighlightRange && highlightRange == QQuickListView::StrictlyEnforceRange)
- || snapMode != QQuickListView::NoSnap)
- moveReason = Other;
if (orient == QQuickListView::Vertical)
fixupY();
else
@@ -3267,11 +3266,11 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
} else {
for (i = count-1; i >= 0 && pos >= from; --i) {
// item is before first visible e.g. in cache buffer
- FxViewItem *item = 0;
+ FxViewItem *item = nullptr;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i))))
item->index = modelIndex + i;
if (!item)
- item = createItem(modelIndex + i);
+ item = createItem(modelIndex + i, QQmlIncubator::Synchronous);
if (!item)
return false;
@@ -3308,12 +3307,12 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
} else {
for (int i = 0; i < count && pos <= lastVisiblePos; ++i) {
visibleAffected = true;
- FxViewItem *item = 0;
+ FxViewItem *item = nullptr;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i))))
item->index = modelIndex + i;
bool newItem = !item;
if (!item)
- item = createItem(modelIndex + i);
+ item = createItem(modelIndex + i, QQmlIncubator::Synchronous);
if (!item)
return false;
diff --git a/src/quick/items/qquicklistview_p.h b/src/quick/items/qquicklistview_p.h
index f8db0f0f8f..9a9b325b1e 100644
--- a/src/quick/items/qquicklistview_p.h
+++ b/src/quick/items/qquicklistview_p.h
@@ -71,7 +71,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickViewSection : public QObject
Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
Q_PROPERTY(int labelPositioning READ labelPositioning WRITE setLabelPositioning NOTIFY labelPositioningChanged)
public:
- QQuickViewSection(QQuickListView *parent=0);
+ QQuickViewSection(QQuickListView *parent=nullptr);
QString property() const { return m_property; }
void setProperty(const QString &);
@@ -132,7 +132,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickListView : public QQuickItemView
Q_CLASSINFO("DefaultProperty", "data")
public:
- QQuickListView(QQuickItem *parent=0);
+ QQuickListView(QQuickItem *parent=nullptr);
~QQuickListView();
qreal spacing() const;
@@ -206,7 +206,7 @@ class QQuickListViewAttached : public QQuickItemViewAttached
public:
QQuickListViewAttached(QObject *parent)
- : QQuickItemViewAttached(parent), m_sectionItem(0) {}
+ : QQuickItemViewAttached(parent), m_sectionItem(nullptr) {}
~QQuickListViewAttached() {}
public:
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp
index 27afe5a5db..34f30e81a3 100644
--- a/src/quick/items/qquickloader.cpp
+++ b/src/quick/items/qquickloader.cpp
@@ -48,11 +48,13 @@
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcTransient)
+
static const QQuickItemPrivate::ChangeTypes watchedChanges
= QQuickItemPrivate::Geometry | QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight;
QQuickLoaderPrivate::QQuickLoaderPrivate()
- : item(0), object(0), component(0), itemContext(0), incubator(0), updatingSize(false),
+ : item(nullptr), object(nullptr), component(nullptr), itemContext(nullptr), incubator(nullptr), updatingSize(false),
active(true), loadingFromSource(false), asynchronous(false)
{
}
@@ -60,7 +62,7 @@ QQuickLoaderPrivate::QQuickLoaderPrivate()
QQuickLoaderPrivate::~QQuickLoaderPrivate()
{
delete itemContext;
- itemContext = 0;
+ itemContext = nullptr;
delete incubator;
disposeInitialPropertyValues();
}
@@ -94,7 +96,13 @@ void QQuickLoaderPrivate::clear()
incubator->clear();
delete itemContext;
- itemContext = 0;
+ itemContext = nullptr;
+
+ // Prevent any bindings from running while waiting for deletion. Without
+ // this we may get transient errors from use of 'parent', for example.
+ QQmlContext *context = qmlContext(object);
+ if (context)
+ QQmlContextData::get(context)->invalidate();
if (loadingFromSource && component) {
// disconnect since we deleteLater
@@ -103,7 +111,7 @@ void QQuickLoaderPrivate::clear()
QObject::disconnect(component, SIGNAL(progressChanged(qreal)),
q, SIGNAL(progressChanged()));
component->deleteLater();
- component = 0;
+ component = nullptr;
}
componentStrongReference.clear();
source = QUrl();
@@ -114,13 +122,13 @@ void QQuickLoaderPrivate::clear()
// We can't delete immediately because our item may have triggered
// the Loader to load a different item.
- item->setParentItem(0);
+ item->setParentItem(nullptr);
item->setVisible(false);
- item = 0;
+ item = nullptr;
}
if (object) {
object->deleteLater();
- object = 0;
+ object = nullptr;
}
}
@@ -348,22 +356,28 @@ void QQuickLoader::setActive(bool newVal)
if (d->incubator) {
d->incubator->clear();
delete d->itemContext;
- d->itemContext = 0;
+ d->itemContext = nullptr;
}
+ // Prevent any bindings from running while waiting for deletion. Without
+ // this we may get transient errors from use of 'parent', for example.
+ QQmlContext *context = qmlContext(d->object);
+ if (context)
+ QQmlContextData::get(context)->invalidate();
+
if (d->item) {
QQuickItemPrivate *p = QQuickItemPrivate::get(d->item);
p->removeItemChangeListener(d, watchedChanges);
// We can't delete immediately because our item may have triggered
// the Loader to load a different item.
- d->item->setParentItem(0);
+ d->item->setParentItem(nullptr);
d->item->setVisible(false);
- d->item = 0;
+ d->item = nullptr;
}
if (d->object) {
d->object->deleteLater();
- d->object = 0;
+ d->object = nullptr;
emit itemChanged();
}
emit statusChanged();
@@ -485,7 +499,7 @@ void QQuickLoader::setSourceComponent(QQmlComponent *comp)
void QQuickLoader::resetSourceComponent()
{
- setSourceComponent(0);
+ setSourceComponent(nullptr);
}
void QQuickLoader::loadFromSourceComponent()
@@ -642,7 +656,7 @@ void QQuickLoaderPrivate::setInitialState(QObject *obj)
if (obj) {
QQml_setParent_noEvent(itemContext, obj);
QQml_setParent_noEvent(obj, q);
- itemContext = 0;
+ itemContext = nullptr;
}
if (initialPropertyValues.isUndefined())
@@ -650,7 +664,7 @@ void QQuickLoaderPrivate::setInitialState(QObject *obj)
QQmlComponentPrivate *d = QQmlComponentPrivate::get(component);
Q_ASSERT(d && d->engine);
- QV4::ExecutionEngine *v4 = QV8Engine::getV4(d->engine);
+ QV4::ExecutionEngine *v4 = d->engine->handle();
Q_ASSERT(v4);
QV4::Scope scope(v4);
QV4::ScopedValue ipv(scope, initialPropertyValues.value());
@@ -672,6 +686,13 @@ void QQuickLoaderPrivate::incubatorStateChanged(QQmlIncubator::Status status)
if (status == QQmlIncubator::Ready) {
object = incubator->object();
item = qmlobject_cast<QQuickItem*>(object);
+ if (!item) {
+ QQuickWindow *window = qmlobject_cast<QQuickWindow*>(object);
+ if (window) {
+ qCDebug(lcTransient) << window << "is transient for" << q->window();
+ window->setTransientParent(q->window());
+ }
+ }
emit q->itemChanged();
initResize();
incubator->clear();
@@ -679,7 +700,7 @@ void QQuickLoaderPrivate::incubatorStateChanged(QQmlIncubator::Status status)
if (!incubator->errors().isEmpty())
QQmlEnginePrivate::warning(qmlEngine(q), incubator->errors());
delete itemContext;
- itemContext = 0;
+ itemContext = nullptr;
delete incubator->object();
source = QUrl();
emit q->itemChanged();
@@ -816,6 +837,18 @@ void QQuickLoader::componentComplete()
}
}
+void QQuickLoader::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)
+{
+ if (change == ItemSceneChange) {
+ QQuickWindow *loadedWindow = qmlobject_cast<QQuickWindow *>(item());
+ if (loadedWindow) {
+ qCDebug(lcTransient) << loadedWindow << "is transient for" << value.window;
+ loadedWindow->setTransientParent(value.window);
+ }
+ }
+ QQuickItem::itemChange(change, value);
+}
+
/*!
\qmlsignal QtQuick::Loader::loaded()
diff --git a/src/quick/items/qquickloader_p.h b/src/quick/items/qquickloader_p.h
index 27e5d1ec8b..de1dfa9da5 100644
--- a/src/quick/items/qquickloader_p.h
+++ b/src/quick/items/qquickloader_p.h
@@ -69,7 +69,7 @@ class Q_AUTOTEST_EXPORT QQuickLoader : public QQuickImplicitSizeItem
Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
public:
- QQuickLoader(QQuickItem *parent = 0);
+ QQuickLoader(QQuickItem *parent = nullptr);
virtual ~QQuickLoader();
bool active() const;
@@ -107,6 +107,7 @@ Q_SIGNALS:
protected:
void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
void componentComplete() override;
+ void itemChange(ItemChange change, const ItemChangeData &value) override;
private:
void setSource(const QUrl &sourceUrl, bool needsClear);
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp
index 96f34ef276..052da9fe82 100644
--- a/src/quick/items/qquickmousearea.cpp
+++ b/src/quick/items/qquickmousearea.cpp
@@ -60,13 +60,13 @@ Q_DECLARE_LOGGING_CATEGORY(DBG_HOVER_TRACE)
QQuickMouseAreaPrivate::QQuickMouseAreaPrivate()
: enabled(true), scrollGestureEnabled(true), hovered(false), longPress(false),
moved(false), stealMouse(false), doubleClick(false), preventStealing(false),
- propagateComposedEvents(false), overThreshold(false), pressed(0),
+ propagateComposedEvents(false), overThreshold(false), pressed(nullptr),
pressAndHoldInterval(-1)
#if QT_CONFIG(draganddrop)
- , drag(0)
+ , drag(nullptr)
#endif
#if QT_CONFIG(cursor)
- , cursor(0)
+ , cursor(nullptr)
#endif
{
}
@@ -99,6 +99,7 @@ void QQuickMouseAreaPrivate::saveEvent(QMouseEvent *event)
lastButton = event->button();
lastButtons = event->buttons();
lastModifiers = event->modifiers();
+ lastFlags = event->flags();
}
bool QQuickMouseAreaPrivate::isPressAndHoldConnected()
@@ -784,7 +785,7 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event)
#endif
QQuickMouseEvent &me = d->quickMouseEvent;
- me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress);
+ me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress, event->flags());
me.setSource(event->source());
emit mouseXChanged(&me);
me.setPosition(d->lastPos);
@@ -827,7 +828,8 @@ void QQuickMouseArea::mouseDoubleClickEvent(QMouseEvent *event)
if (d->enabled) {
d->saveEvent(event);
QQuickMouseEvent &me = d->quickMouseEvent;
- me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
+ me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true,
+ false, event->flags());
me.setSource(event->source());
me.setAccepted(d->isDoubleClickConnected());
emit this->doubleClicked(&me);
@@ -908,7 +910,7 @@ void QQuickMouseArea::ungrabMouse()
if (d->pressed) {
// if our mouse grab has been removed (probably by Flickable), fix our
// state
- d->pressed = 0;
+ d->pressed = nullptr;
d->stealMouse = false;
d->doubleClick = false;
d->overThreshold = false;
@@ -942,7 +944,7 @@ bool QQuickMouseArea::sendMouseEvent(QMouseEvent *event)
QPointF localPos = mapFromScene(event->windowPos());
QQuickWindow *c = window();
- QQuickItem *grabber = c ? c->mouseGrabberItem() : 0;
+ QQuickItem *grabber = c ? c->mouseGrabberItem() : nullptr;
bool stealThisEvent = d->stealMouse;
if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) {
QMouseEvent mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(),
@@ -963,7 +965,7 @@ bool QQuickMouseArea::sendMouseEvent(QMouseEvent *event)
default:
break;
}
- grabber = c ? c->mouseGrabberItem() : 0;
+ grabber = c ? c->mouseGrabberItem() : nullptr;
if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
grabMouse();
@@ -1028,7 +1030,7 @@ void QQuickMouseArea::timerEvent(QTimerEvent *event)
if (d->pressed && dragged == false && d->hovered == true) {
d->longPress = true;
QQuickMouseEvent &me = d->quickMouseEvent;
- me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress);
+ me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress, d->lastFlags);
me.setSource(Qt::MouseEventSynthesizedByQt);
me.setAccepted(d->isPressAndHoldConnected());
emit pressAndHold(&me);
@@ -1207,7 +1209,7 @@ bool QQuickMouseArea::setPressed(Qt::MouseButton button, bool p, Qt::MouseEventS
if (wasPressed != p) {
QQuickMouseEvent &me = d->quickMouseEvent;
- me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, isclick, d->longPress);
+ me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, isclick, d->longPress, d->lastFlags);
me.setSource(source);
if (p) {
d->pressed |= button;
@@ -1418,7 +1420,7 @@ QSGNode *QQuickMouseArea::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
Q_D(QQuickMouseArea);
if (!qmlVisualTouchDebugging())
- return 0;
+ return nullptr;
QSGInternalRectangleNode *rectangle = static_cast<QSGInternalRectangleNode *>(oldNode);
if (!rectangle) rectangle = d->sceneGraphContext()->createInternalRectangleNode();
diff --git a/src/quick/items/qquickmousearea_p.h b/src/quick/items/qquickmousearea_p.h
index ae6c56726e..0a8449957f 100644
--- a/src/quick/items/qquickmousearea_p.h
+++ b/src/quick/items/qquickmousearea_p.h
@@ -87,7 +87,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickMouseArea : public QQuickItem
Q_PROPERTY(int pressAndHoldInterval READ pressAndHoldInterval WRITE setPressAndHoldInterval NOTIFY pressAndHoldIntervalChanged RESET resetPressAndHoldInterval REVISION 9)
public:
- QQuickMouseArea(QQuickItem *parent=0);
+ QQuickMouseArea(QQuickItem *parent=nullptr);
~QQuickMouseArea();
qreal mouseX() const;
diff --git a/src/quick/items/qquickmousearea_p_p.h b/src/quick/items/qquickmousearea_p_p.h
index 2fa5f7cd44..0dd2690d43 100644
--- a/src/quick/items/qquickmousearea_p_p.h
+++ b/src/quick/items/qquickmousearea_p_p.h
@@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE
class QQuickMouseEvent;
class QQuickMouseArea;
+class QQuickPointerMask;
class QQuickMouseAreaPrivate : public QQuickItemPrivate
{
Q_DECLARE_PUBLIC(QQuickMouseArea)
@@ -99,6 +100,7 @@ public:
#if QT_CONFIG(draganddrop)
QQuickDrag *drag;
#endif
+ QPointer<QQuickPointerMask> mask;
QPointF startScene;
QPointF targetStartPos;
QPointF lastPos;
@@ -112,6 +114,7 @@ public:
#endif
QQuickMouseEvent quickMouseEvent;
QQuickWheelEvent quickWheelEvent;
+ Qt::MouseEventFlags lastFlags;
};
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp
index bdf30469ce..dc168073e4 100644
--- a/src/quick/items/qquickmultipointtoucharea.cpp
+++ b/src/quick/items/qquickmultipointtoucharea.cpp
@@ -285,6 +285,43 @@ void QQuickTouchPoint::setUniqueId(const QPointingDeviceUniqueId &id)
emit uniqueIdChanged();
}
+
+/*!
+ \qmltype GestureEvent
+ \instantiates QQuickGrabGestureEvent
+ \inqmlmodule QtQuick
+ \ingroup qtquick-input-events
+ \brief The parameter given with the gestureStarted signal
+
+ The GestureEvent object has the current touch points, which you may choose
+ to interpret as a gesture, and an invokable method to grab the involved
+ points exclusively.
+*/
+
+/*!
+ \qmlproperty real QtQuick::GestureEvent::dragThreshold
+
+ This property holds the system setting for the distance a finger must move
+ before it is interpreted as a drag. It comes from
+ QStyleHints::startDragDistance().
+*/
+
+/*!
+ \qmlproperty list<TouchPoint> QtQuick::GestureEvent::touchPoints
+
+ This property holds the set of current touch points.
+*/
+
+/*!
+ \qmlmethod QtQuick::GestureEvent::grab()
+
+ Acquires an exclusive grab of the mouse and all the \l touchPoints, and
+ calls \l {QQuickItem::setKeepTouchGrab()}{setKeepTouchGrab()} and
+ \l {QQuickItem::setKeepMouseGrab()}{setKeepMouseGrab()} so that any
+ parent Item that \l {QQuickItem::filtersChildMouseEvents()}{filters} its
+ children's events will not be allowed to take over the grabs.
+*/
+
/*!
\qmltype MultiPointTouchArea
\instantiates QQuickMultiPointTouchArea
@@ -504,7 +541,7 @@ void QQuickMultiPointTouchArea::touchEvent(QTouchEvent *event)
case QEvent::TouchEnd: {
//if e.g. a parent Flickable has the mouse grab, don't process the touch events
QQuickWindow *c = window();
- QQuickItem *grabber = c ? c->mouseGrabberItem() : 0;
+ QQuickItem *grabber = c ? c->mouseGrabberItem() : nullptr;
if (grabber && grabber != this && grabber->keepMouseGrab() && grabber->isEnabled()) {
QQuickItem *item = this;
while ((item = item->parentItem())) {
@@ -682,7 +719,7 @@ void QQuickMultiPointTouchArea::clearTouchLists()
void QQuickMultiPointTouchArea::addTouchPoint(const QTouchEvent::TouchPoint *p)
{
- QQuickTouchPoint *dtp = 0;
+ QQuickTouchPoint *dtp = nullptr;
for (QQuickTouchPoint* tp : qAsConst(_touchPrototypes)) {
if (!tp->inUse()) {
tp->setInUse(true);
@@ -691,7 +728,7 @@ void QQuickMultiPointTouchArea::addTouchPoint(const QTouchEvent::TouchPoint *p)
}
}
- if (dtp == 0)
+ if (dtp == nullptr)
dtp = new QQuickTouchPoint(false);
dtp->setPointId(p->id());
updateTouchPoint(dtp,p);
@@ -702,7 +739,7 @@ void QQuickMultiPointTouchArea::addTouchPoint(const QTouchEvent::TouchPoint *p)
void QQuickMultiPointTouchArea::addTouchPoint(const QMouseEvent *e)
{
- QQuickTouchPoint *dtp = 0;
+ QQuickTouchPoint *dtp = nullptr;
for (QQuickTouchPoint *tp : qAsConst(_touchPrototypes))
if (!tp->inUse()) {
tp->setInUse(true);
@@ -710,7 +747,7 @@ void QQuickMultiPointTouchArea::addTouchPoint(const QMouseEvent *e)
break;
}
- if (dtp == 0)
+ if (dtp == nullptr)
dtp = new QQuickTouchPoint(false);
updateTouchPoint(dtp, e);
dtp->setPressed(true);
@@ -883,7 +920,7 @@ bool QQuickMultiPointTouchArea::sendMouseEvent(QMouseEvent *event)
QPointF localPos = mapFromScene(event->windowPos());
QQuickWindow *c = window();
- QQuickItem *grabber = c ? c->mouseGrabberItem() : 0;
+ QQuickItem *grabber = c ? c->mouseGrabberItem() : nullptr;
bool stealThisEvent = _stealMouse;
if ((stealThisEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) {
QMouseEvent mouseEvent(event->type(), localPos, event->windowPos(), event->screenPos(),
@@ -907,7 +944,7 @@ bool QQuickMultiPointTouchArea::sendMouseEvent(QMouseEvent *event)
default:
break;
}
- grabber = c ? c->mouseGrabberItem() : 0;
+ grabber = c ? c->mouseGrabberItem() : nullptr;
if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
grabMouse();
@@ -954,7 +991,7 @@ bool QQuickMultiPointTouchArea::childMouseEventFilter(QQuickItem *receiver, QEve
bool QQuickMultiPointTouchArea::shouldFilter(QEvent *event)
{
QQuickWindow *c = window();
- QQuickItem *grabber = c ? c->mouseGrabberItem() : 0;
+ QQuickItem *grabber = c ? c->mouseGrabberItem() : nullptr;
bool disabledItem = grabber && !grabber->isEnabled();
bool stealThisEvent = _stealMouse;
bool containsPoint = false;
@@ -995,7 +1032,7 @@ QSGNode *QQuickMultiPointTouchArea::updatePaintNode(QSGNode *oldNode, UpdatePain
Q_UNUSED(data);
if (!qmlVisualTouchDebugging())
- return 0;
+ return nullptr;
QSGInternalRectangleNode *rectangle = static_cast<QSGInternalRectangleNode *>(oldNode);
if (!rectangle) rectangle = QQuickItemPrivate::get(this)->sceneGraphContext()->createInternalRectangleNode();
diff --git a/src/quick/items/qquickmultipointtoucharea_p.h b/src/quick/items/qquickmultipointtoucharea_p.h
index 64fe81563d..f1550b4ac6 100644
--- a/src/quick/items/qquickmultipointtoucharea_p.h
+++ b/src/quick/items/qquickmultipointtoucharea_p.h
@@ -86,16 +86,7 @@ class Q_AUTOTEST_EXPORT QQuickTouchPoint : public QObject
public:
QQuickTouchPoint(bool qmlDefined = true)
- : _id(0),
- _x(0.0), _y(0.0),
- _pressure(0.0),
- _rotation(0),
- _qmlDefined(qmlDefined),
- _inUse(false),
- _pressed(false),
- _startX(0.0), _startY(0.0),
- _previousX(0.0), _previousY(0.0),
- _sceneX(0.0), _sceneY(0.0)
+ : _qmlDefined(qmlDefined)
{}
int pointId() const { return _id; }
@@ -171,23 +162,23 @@ Q_SIGNALS:
private:
friend class QQuickMultiPointTouchArea;
- int _id;
- qreal _x;
- qreal _y;
- qreal _pressure;
- qreal _rotation;
+ int _id = 0;
+ qreal _x = 0.0;
+ qreal _y = 0.0;
+ qreal _pressure = 0.0;
+ qreal _rotation = 0;
QSizeF _ellipseDiameters;
QVector2D _velocity;
QRectF _area;
bool _qmlDefined;
- bool _inUse; //whether the point is currently in use (only valid when _qmlDefined == true)
- bool _pressed;
- qreal _startX;
- qreal _startY;
- qreal _previousX;
- qreal _previousY;
- qreal _sceneX;
- qreal _sceneY;
+ bool _inUse = false; //whether the point is currently in use (only valid when _qmlDefined == true)
+ bool _pressed = false;
+ qreal _startX = 0.0;
+ qreal _startY = 0.0;
+ qreal _previousX = 0.0;
+ qreal _previousY = 0.0;
+ qreal _sceneX = 0.0;
+ qreal _sceneY = 0.0;
QPointingDeviceUniqueId _uniqueId;
};
@@ -197,7 +188,7 @@ class QQuickGrabGestureEvent : public QObject
Q_PROPERTY(QQmlListProperty<QObject> touchPoints READ touchPoints)
Q_PROPERTY(qreal dragThreshold READ dragThreshold)
public:
- QQuickGrabGestureEvent() : _grab(false), _dragThreshold(QGuiApplication::styleHints()->startDragDistance()) {}
+ QQuickGrabGestureEvent() : _dragThreshold(QGuiApplication::styleHints()->startDragDistance()) {}
Q_INVOKABLE void grab() { _grab = true; }
bool wantsGrab() const { return _grab; }
@@ -209,7 +200,7 @@ public:
private:
friend class QQuickMultiPointTouchArea;
- bool _grab;
+ bool _grab = false;
qreal _dragThreshold;
QList<QObject*> _touchPoints;
};
@@ -224,7 +215,7 @@ class Q_AUTOTEST_EXPORT QQuickMultiPointTouchArea : public QQuickItem
Q_PROPERTY(bool mouseEnabled READ mouseEnabled WRITE setMouseEnabled NOTIFY mouseEnabledChanged)
public:
- QQuickMultiPointTouchArea(QQuickItem *parent=0);
+ QQuickMultiPointTouchArea(QQuickItem *parent=nullptr);
~QQuickMultiPointTouchArea();
int minimumTouchPoints() const;
@@ -235,7 +226,7 @@ public:
void setMouseEnabled(bool arg);
QQmlListProperty<QQuickTouchPoint> touchPoints() {
- return QQmlListProperty<QQuickTouchPoint>(this, 0, QQuickMultiPointTouchArea::touchPoint_append, QQuickMultiPointTouchArea::touchPoint_count, QQuickMultiPointTouchArea::touchPoint_at, 0);
+ return QQmlListProperty<QQuickTouchPoint>(this, nullptr, QQuickMultiPointTouchArea::touchPoint_append, QQuickMultiPointTouchArea::touchPoint_count, QQuickMultiPointTouchArea::touchPoint_at, nullptr);
}
static void touchPoint_append(QQmlListProperty<QQuickTouchPoint> *list, QQuickTouchPoint* touch) {
diff --git a/src/quick/items/qquickopenglinfo.cpp b/src/quick/items/qquickopenglinfo.cpp
index 7f5364031a..73f9c85e94 100644
--- a/src/quick/items/qquickopenglinfo.cpp
+++ b/src/quick/items/qquickopenglinfo.cpp
@@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE
*/
QQuickOpenGLInfo::QQuickOpenGLInfo(QQuickItem *item)
: QObject(item)
- , m_window(0)
+ , m_window(nullptr)
, m_majorVersion(2)
, m_minorVersion(0)
, m_profile(NoProfile)
@@ -150,12 +150,12 @@ QQuickOpenGLInfo *QQuickOpenGLInfo::qmlAttachedProperties(QObject *object)
{
if (QQuickItem *item = qobject_cast<QQuickItem *>(object))
return new QQuickOpenGLInfo(item);
- return 0;
+ return nullptr;
}
void QQuickOpenGLInfo::updateFormat()
{
- QOpenGLContext *context = 0;
+ QOpenGLContext *context = nullptr;
if (m_window)
context = m_window->openglContext();
QSurfaceFormat format = context ? context->format() : QSurfaceFormat::defaultFormat();
diff --git a/src/quick/items/qquickopenglshadereffect.cpp b/src/quick/items/qquickopenglshadereffect.cpp
index c3e0ba05bd..cad598d2c0 100644
--- a/src/quick/items/qquickopenglshadereffect.cpp
+++ b/src/quick/items/qquickopenglshadereffect.cpp
@@ -139,7 +139,7 @@ namespace {
expected = TypeIdentifier;
break;
}
- // Fall through.
+ Q_FALLTHROUGH();
case TypeIdentifier:
typeIndex = idIndex;
typeLength = idLength;
@@ -422,8 +422,9 @@ void QQuickOpenGLShaderEffectCommon::updateShader(QQuickItem *item,
d.specialType = UniformData::Opacity;
uniformData[Key::FragmentShader].append(d);
signalMappers[Key::FragmentShader].append(0);
- const int mappedId = 1 | (Key::FragmentShader << 16);
- auto mapper = new QtPrivate::MappedSlotObject([this, mappedId](){mappedPropertyChanged(mappedId);});
+ auto mapper = new QtPrivate::MappedSlotObject([this](){
+ mappedPropertyChanged(1 | (Key::FragmentShader << 16));
+ });
const char *sourceName = "source";
d.name = sourceName;
d.setValueFromProperty(item, itemMetaObject);
@@ -483,7 +484,7 @@ void QQuickOpenGLShaderEffectCommon::updateMaterial(QQuickOpenGLShaderEffectNode
if (d.specialType != UniformData::Sampler && d.specialType != UniformData::SamplerExternal)
continue;
QSGTextureProvider *oldProvider = material->textureProviders.at(index);
- QSGTextureProvider *newProvider = 0;
+ QSGTextureProvider *newProvider = nullptr;
QQuickItem *source = qobject_cast<QQuickItem *>(qvariant_cast<QObject *>(d.value));
if (source && source->isTextureProvider())
newProvider = source->textureProvider();
@@ -623,7 +624,7 @@ QQuickOpenGLShaderEffect::QQuickOpenGLShaderEffect(QQuickShaderEffect *item, QOb
, m_item(item)
, m_itemMetaObject(nullptr)
, m_meshResolution(1, 1)
- , m_mesh(0)
+ , m_mesh(nullptr)
, m_cullMode(QQuickShaderEffect::NoCulling)
, m_status(QQuickShaderEffect::Uncompiled)
, m_common(this, [this](int mappedId){this->propertyChanged(mappedId);})
@@ -712,7 +713,7 @@ void QQuickOpenGLShaderEffect::setMesh(const QVariant &mesh)
if (newMesh && newMesh == m_mesh)
return;
if (m_mesh)
- disconnect(m_mesh, SIGNAL(geometryChanged()), this, 0);
+ disconnect(m_mesh, SIGNAL(geometryChanged()), this, nullptr);
m_mesh = newMesh;
if (m_mesh) {
connect(m_mesh, SIGNAL(geometryChanged()), this, SLOT(updateGeometry()));
@@ -765,7 +766,7 @@ QString QQuickOpenGLShaderEffect::parseLog()
maybeUpdateShaders(true);
if (m_dirtyParseLog) {
- m_common.updateParseLog(m_mesh != 0);
+ m_common.updateParseLog(m_mesh != nullptr);
m_dirtyParseLog = false;
}
return m_common.parseLog;
@@ -837,7 +838,7 @@ QSGNode *QQuickOpenGLShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQuic
if (m_common.attributes.isEmpty() || m_item->width() <= 0 || m_item->height() <= 0) {
if (node)
delete node;
- return 0;
+ return nullptr;
}
if (!node) {
@@ -896,7 +897,7 @@ QSGNode *QQuickOpenGLShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQuic
bool geometryUsesTextureSubRect = false;
if (m_supportsAtlasTextures && material->textureProviders.size() == 1) {
QSGTextureProvider *provider = material->textureProviders.at(0);
- if (provider->texture()) {
+ if (provider && provider->texture()) {
srcRect = provider->texture()->normalizedTextureSubRect();
geometryUsesTextureSubRect = true;
}
@@ -913,7 +914,7 @@ QSGNode *QQuickOpenGLShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQuic
}
if (m_dirtyMesh) {
- node->setGeometry(0);
+ node->setGeometry(nullptr);
m_dirtyMesh = false;
m_dirtyGeometry = true;
}
@@ -934,7 +935,7 @@ QSGNode *QQuickOpenGLShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQuic
emit m_item->statusChanged();
}
delete node;
- return 0;
+ return nullptr;
}
geometry = mesh->updateGeometry(geometry, m_common.attributes.count(), posIndex, srcRect, rect);
diff --git a/src/quick/items/qquickopenglshadereffect_p.h b/src/quick/items/qquickopenglshadereffect_p.h
index f602bd8b8e..a15d85bff3 100644
--- a/src/quick/items/qquickopenglshadereffect_p.h
+++ b/src/quick/items/qquickopenglshadereffect_p.h
@@ -120,8 +120,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickOpenGLShaderEffect : public QObject
Q_OBJECT
public:
- QQuickOpenGLShaderEffect(QQuickShaderEffect *item, QObject *parent = 0);
- ~QQuickOpenGLShaderEffect();
+ QQuickOpenGLShaderEffect(QQuickShaderEffect *item, QObject *parent = nullptr);
+ ~QQuickOpenGLShaderEffect() override;
QByteArray fragmentShader() const { return m_common.source.sourceCode[Key::FragmentShader]; }
void setFragmentShader(const QByteArray &code);
diff --git a/src/quick/items/qquickopenglshadereffectnode.cpp b/src/quick/items/qquickopenglshadereffectnode.cpp
index a6431135eb..d51419a275 100644
--- a/src/quick/items/qquickopenglshadereffectnode.cpp
+++ b/src/quick/items/qquickopenglshadereffectnode.cpp
@@ -111,7 +111,7 @@ void QQuickCustomMaterialShader::updateState(const RenderState &state, QSGMateri
{
typedef QQuickOpenGLShaderEffectMaterial::UniformData UniformData;
- Q_ASSERT(newEffect != 0);
+ Q_ASSERT(newEffect != nullptr);
QQuickOpenGLShaderEffectMaterial *material = static_cast<QQuickOpenGLShaderEffectMaterial *>(newEffect);
if (!material->m_emittedLogChanged && material->m_node) {
@@ -239,7 +239,7 @@ void QQuickCustomMaterialShader::updateState(const RenderState &state, QSGMateri
functions->glActiveTexture(GL_TEXTURE0);
const QQuickOpenGLShaderEffectMaterial *oldMaterial = static_cast<const QQuickOpenGLShaderEffectMaterial *>(oldEffect);
- if (oldEffect == 0 || material->cullMode != oldMaterial->cullMode) {
+ if (oldEffect == nullptr || material->cullMode != oldMaterial->cullMode) {
switch (material->cullMode) {
case QQuickShaderEffect::FrontFaceCulling:
functions->glEnable(GL_CULL_FACE);
diff --git a/src/quick/items/qquickopenglshadereffectnode_p.h b/src/quick/items/qquickopenglshadereffectnode_p.h
index 68eece7660..7c75bb3126 100644
--- a/src/quick/items/qquickopenglshadereffectnode_p.h
+++ b/src/quick/items/qquickopenglshadereffectnode_p.h
@@ -109,7 +109,7 @@ public:
}
};
- explicit QQuickOpenGLShaderEffectMaterial(QQuickOpenGLShaderEffectNode *node = 0);
+ explicit QQuickOpenGLShaderEffectMaterial(QQuickOpenGLShaderEffectNode *node = nullptr);
QSGMaterialType *type() const override;
QSGMaterialShader *createShader() const override;
int compare(const QSGMaterial *other) const override;
@@ -149,7 +149,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickOpenGLShaderEffectNode : public QObject, publ
Q_OBJECT
public:
QQuickOpenGLShaderEffectNode();
- virtual ~QQuickOpenGLShaderEffectNode();
+ ~QQuickOpenGLShaderEffectNode() override;
void preprocess() override;
diff --git a/src/quick/items/qquickpainteditem.cpp b/src/quick/items/qquickpainteditem.cpp
index 34d71f00e8..57848919f3 100644
--- a/src/quick/items/qquickpainteditem.cpp
+++ b/src/quick/items/qquickpainteditem.cpp
@@ -53,7 +53,7 @@ class QQuickPaintedItemTextureProvider : public QSGTextureProvider
{
public:
QSGPainterNode *node;
- QSGTexture *texture() const override { return node ? node->texture() : 0; }
+ QSGTexture *texture() const override { return node ? node->texture() : nullptr; }
void fireTextureChanged() { emit textureChanged(); }
};
@@ -133,12 +133,12 @@ QQuickPaintedItemPrivate::QQuickPaintedItemPrivate()
, contentsScale(1.0)
, fillColor(Qt::transparent)
, renderTarget(QQuickPaintedItem::Image)
- , performanceHints(0)
+ , performanceHints(nullptr)
, opaquePainting(false)
, antialiasing(false)
, mipmap(false)
- , textureProvider(0)
- , node(0)
+ , textureProvider(nullptr)
+ , node(nullptr)
{
}
@@ -566,10 +566,10 @@ QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDat
if (width() <= 0 || height() <= 0) {
delete oldNode;
if (d->textureProvider) {
- d->textureProvider->node = 0;
+ d->textureProvider->node = nullptr;
d->textureProvider->fireTextureChanged();
}
- return 0;
+ return nullptr;
}
QSGPainterNode *node = static_cast<QSGPainterNode *>(oldNode);
@@ -628,17 +628,17 @@ void QQuickPaintedItem::releaseResources()
Q_D(QQuickPaintedItem);
if (d->textureProvider) {
QQuickWindowQObjectCleanupJob::schedule(window(), d->textureProvider);
- d->textureProvider = 0;
+ d->textureProvider = nullptr;
}
- d->node = 0; // Managed by the scene graph, just clear the pointer.
+ d->node = nullptr; // Managed by the scene graph, just clear the pointer.
}
void QQuickPaintedItem::invalidateSceneGraph()
{
Q_D(QQuickPaintedItem);
delete d->textureProvider;
- d->textureProvider = 0;
- d->node = 0; // Managed by the scene graph, just clear the pointer
+ d->textureProvider = nullptr;
+ d->node = nullptr; // Managed by the scene graph, just clear the pointer
}
/*!
@@ -666,7 +666,7 @@ QSGTextureProvider *QQuickPaintedItem::textureProvider() const
QQuickWindow *w = window();
if (!w || !w->openglContext() || QThread::currentThread() != w->openglContext()->thread()) {
qWarning("QQuickPaintedItem::textureProvider: can only be queried on the rendering thread of an exposed window");
- return 0;
+ return nullptr;
}
#endif
if (!d->textureProvider)
@@ -675,6 +675,10 @@ QSGTextureProvider *QQuickPaintedItem::textureProvider() const
return d->textureProvider;
}
+
+/*!
+ \reimp
+*/
void QQuickPaintedItem::itemChange(ItemChange change, const ItemChangeData &value)
{
if (change == ItemDevicePixelRatioHasChanged)
diff --git a/src/quick/items/qquickpainteditem.h b/src/quick/items/qquickpainteditem.h
index 66a0ea83c9..b057f4295d 100644
--- a/src/quick/items/qquickpainteditem.h
+++ b/src/quick/items/qquickpainteditem.h
@@ -58,7 +58,7 @@ class Q_QUICK_EXPORT QQuickPaintedItem : public QQuickItem
public:
explicit QQuickPaintedItem(QQuickItem *parent = nullptr);
- virtual ~QQuickPaintedItem();
+ ~QQuickPaintedItem() override;
enum RenderTarget {
Image,
diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp
index aac2b0296a..be94cdef42 100644
--- a/src/quick/items/qquickpathview.cpp
+++ b/src/quick/items/qquickpathview.cpp
@@ -66,7 +66,7 @@ const qreal MinimumFlickVelocity = 75.0;
static QQmlOpenMetaObjectType *qPathViewAttachedType = nullptr;
QQuickPathViewAttached::QQuickPathViewAttached(QObject *parent)
-: QObject(parent), m_percent(-1), m_view(0), m_onPath(false), m_isCurrent(false)
+: QObject(parent), m_percent(-1), m_view(nullptr), m_onPath(false), m_isCurrent(false)
{
if (qPathViewAttachedType) {
m_metaobject = new QQmlOpenMetaObject(this, qPathViewAttachedType);
@@ -129,7 +129,7 @@ QQuickItem *QQuickPathViewPrivate::getItem(int modelIndex, qreal z, bool async)
requestedIndex = modelIndex;
requestedZ = z;
inRequest = true;
- QObject *object = model->object(modelIndex, async);
+ QObject *object = model->object(modelIndex, async ? QQmlIncubator::Asynchronous : QQmlIncubator::AsynchronousIfNested);
QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
if (!item) {
if (object) {
diff --git a/src/quick/items/qquickpincharea.cpp b/src/quick/items/qquickpincharea.cpp
index 476acd3a3e..7ae0f9b7e3 100644
--- a/src/quick/items/qquickpincharea.cpp
+++ b/src/quick/items/qquickpincharea.cpp
@@ -151,7 +151,7 @@ QT_BEGIN_NAMESPACE
*/
QQuickPinch::QQuickPinch()
- : m_target(0), m_minScale(1.0), m_maxScale(1.0)
+ : m_target(nullptr), m_minScale(1.0), m_maxScale(1.0)
, m_minRotation(0.0), m_maxRotation(0.0)
, m_axis(NoDrag), m_xmin(-FLT_MAX), m_xmax(FLT_MAX)
, m_ymin(-FLT_MAX), m_ymax(FLT_MAX), m_active(false)
@@ -644,7 +644,8 @@ bool QQuickPinchArea::childMouseEventFilter(QQuickItem *i, QEvent *e)
return QQuickItem::childMouseEventFilter(i, e);
switch (e->type()) {
case QEvent::TouchBegin:
- clearPinch(); // fall through
+ clearPinch();
+ Q_FALLTHROUGH();
case QEvent::TouchUpdate: {
QTouchEvent *touch = static_cast<QTouchEvent*>(e);
d->touchPoints.clear();
diff --git a/src/quick/items/qquickpincharea_p.h b/src/quick/items/qquickpincharea_p.h
index 2363f1e2d4..8eff53e6dc 100644
--- a/src/quick/items/qquickpincharea_p.h
+++ b/src/quick/items/qquickpincharea_p.h
@@ -84,7 +84,7 @@ public:
void resetTarget() {
if (!m_target)
return;
- m_target = 0;
+ m_target = nullptr;
Q_EMIT targetChanged();
}
@@ -270,7 +270,7 @@ class Q_AUTOTEST_EXPORT QQuickPinchArea : public QQuickItem
Q_PROPERTY(QQuickPinch *pinch READ pinch CONSTANT)
public:
- QQuickPinchArea(QQuickItem *parent=0);
+ QQuickPinchArea(QQuickItem *parent=nullptr);
~QQuickPinchArea();
bool isEnabled() const;
diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp
index e752e2538f..493db51666 100644
--- a/src/quick/items/qquickpositioners.cpp
+++ b/src/quick/items/qquickpositioners.cpp
@@ -69,7 +69,7 @@ void QQuickBasePositionerPrivate::unwatchChanges(QQuickItem* other)
QQuickBasePositioner::PositionedItem::PositionedItem(QQuickItem *i)
: item(i)
- , transitionableItem(0)
+ , transitionableItem(nullptr)
, index(-1)
, isNew(false)
, isVisible(true)
@@ -203,7 +203,7 @@ void QQuickBasePositioner::setSpacing(qreal s)
QQuickTransition *QQuickBasePositioner::populate() const
{
Q_D(const QQuickBasePositioner);
- return d->transitioner ? d->transitioner->populateTransition : 0;
+ return d->transitioner ? d->transitioner->populateTransition : nullptr;
}
void QQuickBasePositioner::setPopulate(QQuickTransition *transition)
@@ -220,7 +220,7 @@ void QQuickBasePositioner::setPopulate(QQuickTransition *transition)
QQuickTransition *QQuickBasePositioner::move() const
{
Q_D(const QQuickBasePositioner);
- return d->transitioner ? d->transitioner->displacedTransition : 0;
+ return d->transitioner ? d->transitioner->displacedTransition : nullptr;
}
void QQuickBasePositioner::setMove(QQuickTransition *mt)
@@ -238,7 +238,7 @@ void QQuickBasePositioner::setMove(QQuickTransition *mt)
QQuickTransition *QQuickBasePositioner::add() const
{
Q_D(const QQuickBasePositioner);
- return d->transitioner ? d->transitioner->addTransition : 0;
+ return d->transitioner ? d->transitioner->addTransition : nullptr;
}
void QQuickBasePositioner::setAdd(QQuickTransition *add)
@@ -460,15 +460,15 @@ void QQuickBasePositioner::updateAttachedProperties(QQuickPositionerAttached *sp
// be changed to run only when there are attached properties present. This
// could be a flag in the positioner that is set by the attached property
// constructor.
- QQuickPositionerAttached *prevLastProperty = 0;
- QQuickPositionerAttached *lastProperty = 0;
+ QQuickPositionerAttached *prevLastProperty = nullptr;
+ QQuickPositionerAttached *lastProperty = nullptr;
for (int ii = 0; ii < positionedItems.count(); ++ii) {
const PositionedItem &child = positionedItems.at(ii);
if (!child.item)
continue;
- QQuickPositionerAttached *property = 0;
+ QQuickPositionerAttached *property = nullptr;
if (specificProperty) {
if (specificPropertyOwner == child.item) {
@@ -503,7 +503,7 @@ void QQuickBasePositioner::updateAttachedProperties(QQuickPositionerAttached *sp
if (!child.item)
continue;
- QQuickPositionerAttached *property = 0;
+ QQuickPositionerAttached *property = nullptr;
if (specificProperty) {
if (specificPropertyOwner == child.item) {
diff --git a/src/quick/items/qquickpositioners_p.h b/src/quick/items/qquickpositioners_p.h
index ce583aefe8..94a737e1f1 100644
--- a/src/quick/items/qquickpositioners_p.h
+++ b/src/quick/items/qquickpositioners_p.h
@@ -132,7 +132,7 @@ public:
static QQuickPositionerAttached *qmlAttachedProperties(QObject *obj);
- void updateAttachedProperties(QQuickPositionerAttached *specificProperty = 0, QQuickItem *specificPropertyOwner = 0) const;
+ void updateAttachedProperties(QQuickPositionerAttached *specificProperty = nullptr, QQuickItem *specificPropertyOwner = nullptr) const;
qreal padding() const;
void setPadding(qreal padding);
@@ -231,7 +231,7 @@ class Q_AUTOTEST_EXPORT QQuickColumn : public QQuickBasePositioner
{
Q_OBJECT
public:
- QQuickColumn(QQuickItem *parent=0);
+ QQuickColumn(QQuickItem *parent=nullptr);
protected:
void doPositioning(QSizeF *contentSize) override;
@@ -247,7 +247,7 @@ class Q_AUTOTEST_EXPORT QQuickRow: public QQuickBasePositioner
Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
public:
- QQuickRow(QQuickItem *parent=0);
+ QQuickRow(QQuickItem *parent=nullptr);
Qt::LayoutDirection layoutDirection() const;
void setLayoutDirection (Qt::LayoutDirection);
@@ -281,7 +281,7 @@ class Q_AUTOTEST_EXPORT QQuickGrid : public QQuickBasePositioner
Q_PROPERTY(VAlignment verticalItemAlignment READ vItemAlign WRITE setVItemAlign NOTIFY verticalAlignmentChanged REVISION 1)
public:
- QQuickGrid(QQuickItem *parent=0);
+ QQuickGrid(QQuickItem *parent=nullptr);
int rows() const { return m_rows; }
void setRows(const int rows);
@@ -360,7 +360,7 @@ class Q_AUTOTEST_EXPORT QQuickFlow: public QQuickBasePositioner
Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
public:
- QQuickFlow(QQuickItem *parent=0);
+ QQuickFlow(QQuickItem *parent=nullptr);
enum Flow { LeftToRight, TopToBottom };
Q_ENUM(Flow)
diff --git a/src/quick/items/qquickrectangle.cpp b/src/quick/items/qquickrectangle.cpp
index 9308553a79..3895f59ae1 100644
--- a/src/quick/items/qquickrectangle.cpp
+++ b/src/quick/items/qquickrectangle.cpp
@@ -414,7 +414,7 @@ void QQuickRectangle::setGradient(QQuickGradient *gradient)
void QQuickRectangle::resetGradient()
{
- setGradient(0);
+ setGradient(nullptr);
}
/*!
@@ -489,7 +489,7 @@ QSGNode *QQuickRectangle::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
if (width() <= 0 || height() <= 0
|| (d->color.alpha() == 0 && (!d->pen || d->pen->width() == 0 || d->pen->color().alpha() == 0))) {
delete oldNode;
- return 0;
+ return nullptr;
}
QSGInternalRectangleNode *rectangle = static_cast<QSGInternalRectangleNode *>(oldNode);
diff --git a/src/quick/items/qquickrectangle_p.h b/src/quick/items/qquickrectangle_p.h
index 52f0bc975b..c07ad835fb 100644
--- a/src/quick/items/qquickrectangle_p.h
+++ b/src/quick/items/qquickrectangle_p.h
@@ -67,7 +67,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickPen : public QObject
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY penChanged)
Q_PROPERTY(bool pixelAligned READ pixelAligned WRITE setPixelAligned NOTIFY penChanged)
public:
- QQuickPen(QObject *parent=0);
+ QQuickPen(QObject *parent=nullptr);
qreal width() const;
void setWidth(qreal w);
@@ -98,7 +98,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickGradientStop : public QObject
Q_PROPERTY(QColor color READ color WRITE setColor)
public:
- QQuickGradientStop(QObject *parent=0);
+ QQuickGradientStop(QObject *parent=nullptr);
qreal position() const;
void setPosition(qreal position);
@@ -122,8 +122,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickGradient : public QObject
Q_CLASSINFO("DefaultProperty", "stops")
public:
- QQuickGradient(QObject *parent=0);
- ~QQuickGradient();
+ QQuickGradient(QObject *parent=nullptr);
+ ~QQuickGradient() override;
QQmlListProperty<QQuickGradientStop> stops();
@@ -151,7 +151,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickRectangle : public QQuickItem
Q_PROPERTY(QQuickPen * border READ border CONSTANT)
Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
public:
- QQuickRectangle(QQuickItem *parent=0);
+ QQuickRectangle(QQuickItem *parent=nullptr);
QColor color() const;
void setColor(const QColor &);
diff --git a/src/quick/items/qquickrendercontrol.cpp b/src/quick/items/qquickrendercontrol.cpp
index 58b76fa862..49568db552 100644
--- a/src/quick/items/qquickrendercontrol.cpp
+++ b/src/quick/items/qquickrendercontrol.cpp
@@ -133,11 +133,11 @@ extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_
\inmodule QtQuick
*/
-QSGContext *QQuickRenderControlPrivate::sg = 0;
+QSGContext *QQuickRenderControlPrivate::sg = nullptr;
QQuickRenderControlPrivate::QQuickRenderControlPrivate()
: initialized(0),
- window(0)
+ window(nullptr)
{
if (!sg) {
qAddPostRoutine(cleanup);
@@ -149,7 +149,7 @@ QQuickRenderControlPrivate::QQuickRenderControlPrivate()
void QQuickRenderControlPrivate::cleanup()
{
delete sg;
- sg = 0;
+ sg = nullptr;
}
/*!
@@ -173,7 +173,7 @@ QQuickRenderControl::~QQuickRenderControl()
invalidate();
if (d->window)
- QQuickWindowPrivate::get(d->window)->renderControl = 0;
+ QQuickWindowPrivate::get(d->window)->renderControl = nullptr;
// It is likely that the cleanup in windowDestroyed() is not called since
// the standard pattern is to destroy the rendercontrol before the QQuickWindow.
@@ -187,16 +187,16 @@ void QQuickRenderControlPrivate::windowDestroyed()
{
if (window) {
rc->invalidate();
- QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
delete QQuickWindowPrivate::get(window)->animationController;
- QQuickWindowPrivate::get(window)->animationController = 0;
+ QQuickWindowPrivate::get(window)->animationController = nullptr;
#if QT_CONFIG(quick_shadereffect) && QT_CONFIG(opengl)
QQuickOpenGLShaderEffectMaterial::cleanupMaterialCache();
#endif
- window = 0;
+ window = nullptr;
}
}
@@ -452,11 +452,11 @@ void QQuickRenderControlPrivate::maybeUpdate()
QWindow *QQuickRenderControl::renderWindowFor(QQuickWindow *win, QPoint *offset)
{
if (!win)
- return 0;
+ return nullptr;
QQuickRenderControl *rc = QQuickWindowPrivate::get(win)->renderControl;
if (rc)
return rc->renderWindow(offset);
- return 0;
+ return nullptr;
}
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickrendercontrol.h b/src/quick/items/qquickrendercontrol.h
index a626216f84..8ec9b8aafc 100644
--- a/src/quick/items/qquickrendercontrol.h
+++ b/src/quick/items/qquickrendercontrol.h
@@ -56,7 +56,7 @@ class Q_QUICK_EXPORT QQuickRenderControl : public QObject
public:
explicit QQuickRenderControl(QObject *parent = nullptr);
- ~QQuickRenderControl();
+ ~QQuickRenderControl() override;
void prepareThread(QThread *targetThread);
void initialize(QOpenGLContext *gl);
diff --git a/src/quick/items/qquickrepeater.cpp b/src/quick/items/qquickrepeater.cpp
index 6fc4c0553a..b95fa3c410 100644
--- a/src/quick/items/qquickrepeater.cpp
+++ b/src/quick/items/qquickrepeater.cpp
@@ -50,7 +50,7 @@
QT_BEGIN_NAMESPACE
QQuickRepeaterPrivate::QQuickRepeaterPrivate()
- : model(0)
+ : model(nullptr)
, ownModel(false)
, dataSourceIsObject(false)
, delegateValidated(false)
@@ -216,8 +216,8 @@ void QQuickRepeater::setModel(const QVariant &m)
d->dataSource = model;
QObject *object = qvariant_cast<QObject*>(model);
d->dataSourceAsObject = object;
- d->dataSourceIsObject = object != 0;
- QQmlInstanceModel *vim = 0;
+ d->dataSourceIsObject = object != nullptr;
+ QQmlInstanceModel *vim = nullptr;
if (object && (vim = qobject_cast<QQmlInstanceModel *>(object))) {
if (d->ownModel) {
delete d->model;
@@ -288,7 +288,7 @@ QQmlComponent *QQuickRepeater::delegate() const
return dataModel->delegate();
}
- return 0;
+ return nullptr;
}
void QQuickRepeater::setDelegate(QQmlComponent *delegate)
@@ -339,7 +339,7 @@ QQuickItem *QQuickRepeater::itemAt(int index) const
Q_D(const QQuickRepeater);
if (index >= 0 && index < d->deletables.count())
return d->deletables[index];
- return 0;
+ return nullptr;
}
void QQuickRepeater::componentComplete()
@@ -374,9 +374,12 @@ void QQuickRepeater::clear()
if (complete)
emit itemRemoved(i, item);
d->model->release(item);
- item->setParentItem(0);
}
}
+ for (QQuickItem *item : qAsConst(d->deletables)) {
+ if (item)
+ item->setParentItem(nullptr);
+ }
}
d->deletables.clear();
d->itemCount = 0;
@@ -401,7 +404,7 @@ void QQuickRepeater::regenerate()
void QQuickRepeaterPrivate::requestItems()
{
for (int i = 0; i < itemCount; i++) {
- QObject *object = model->object(i, false);
+ QObject *object = model->object(i, QQmlIncubator::AsynchronousIfNested);
if (object)
model->release(object);
}
@@ -410,7 +413,7 @@ void QQuickRepeaterPrivate::requestItems()
void QQuickRepeater::createdItem(int index, QObject *)
{
Q_D(QQuickRepeater);
- QObject *object = d->model->object(index, false);
+ QObject *object = d->model->object(index, QQmlIncubator::AsynchronousIfNested);
QQuickItem *item = qmlobject_cast<QQuickItem*>(object);
emit itemAdded(index, item);
}
@@ -479,7 +482,7 @@ void QQuickRepeater::modelUpdated(const QQmlChangeSet &changeSet, bool reset)
emit itemRemoved(index, item);
if (item) {
d->model->release(item);
- item->setParentItem(0);
+ item->setParentItem(nullptr);
}
--d->itemCount;
}
@@ -495,13 +498,20 @@ void QQuickRepeater::modelUpdated(const QQmlChangeSet &changeSet, bool reset)
QQuickItem *stackBefore = index + items.count() < d->deletables.count()
? d->deletables.at(index + items.count())
: this;
- for (int i = index; i < index + items.count(); ++i)
- d->deletables.at(i)->stackBefore(stackBefore);
+ if (stackBefore) {
+ for (int i = index; i < index + items.count(); ++i) {
+ if (i < d->deletables.count()) {
+ QPointer<QQuickItem> item = d->deletables.at(i);
+ if (item)
+ item->stackBefore(stackBefore);
+ }
+ }
+ }
} else for (int i = 0; i < insert.count; ++i) {
int modelIndex = index + i;
++d->itemCount;
- d->deletables.insert(modelIndex, 0);
- QObject *object = d->model->object(modelIndex, false);
+ d->deletables.insert(modelIndex, nullptr);
+ QObject *object = d->model->object(modelIndex, QQmlIncubator::AsynchronousIfNested);
if (object)
d->model->release(object);
}
diff --git a/src/quick/items/qquickrepeater_p.h b/src/quick/items/qquickrepeater_p.h
index b630999547..dbe3cd0c55 100644
--- a/src/quick/items/qquickrepeater_p.h
+++ b/src/quick/items/qquickrepeater_p.h
@@ -53,6 +53,10 @@
#include "qquickitem.h"
+#include <private/qtquickglobal_p.h>
+
+QT_REQUIRE_CONFIG(quick_repeater);
+
QT_BEGIN_NAMESPACE
class QQmlChangeSet;
@@ -68,7 +72,7 @@ class Q_AUTOTEST_EXPORT QQuickRepeater : public QQuickItem
Q_CLASSINFO("DefaultProperty", "delegate")
public:
- QQuickRepeater(QQuickItem *parent=0);
+ QQuickRepeater(QQuickItem *parent=nullptr);
virtual ~QQuickRepeater();
QVariant model() const;
diff --git a/src/quick/items/qquickrepeater_p_p.h b/src/quick/items/qquickrepeater_p_p.h
index 64380688c9..942f428904 100644
--- a/src/quick/items/qquickrepeater_p_p.h
+++ b/src/quick/items/qquickrepeater_p_p.h
@@ -56,6 +56,8 @@
#include <QtCore/qpointer.h>
+QT_REQUIRE_CONFIG(quick_repeater);
+
QT_BEGIN_NAMESPACE
class QQmlContext;
diff --git a/src/quick/items/qquickscalegrid_p_p.h b/src/quick/items/qquickscalegrid_p_p.h
index 7f6a31a7bd..5752f61e3f 100644
--- a/src/quick/items/qquickscalegrid_p_p.h
+++ b/src/quick/items/qquickscalegrid_p_p.h
@@ -71,7 +71,7 @@ class Q_AUTOTEST_EXPORT QQuickScaleGrid : public QObject
Q_PROPERTY(int bottom READ bottom WRITE setBottom NOTIFY borderChanged)
public:
- QQuickScaleGrid(QObject *parent=0);
+ QQuickScaleGrid(QObject *parent=nullptr);
~QQuickScaleGrid();
bool isNull() const;
diff --git a/src/quick/items/qquickscreen.cpp b/src/quick/items/qquickscreen.cpp
index 6a3eab957e..aea7e44a65 100644
--- a/src/quick/items/qquickscreen.cpp
+++ b/src/quick/items/qquickscreen.cpp
@@ -423,8 +423,8 @@ QScreen *QQuickScreenInfo::wrappedScreen() const
QQuickScreenAttached::QQuickScreenAttached(QObject* attachee)
: QQuickScreenInfo(attachee)
- , m_window(NULL)
- , m_updateMask(0)
+ , m_window(nullptr)
+ , m_updateMask(nullptr)
, m_updateMaskSet(false)
{
m_attachee = qobject_cast<QQuickItem*>(attachee);
@@ -475,7 +475,7 @@ void QQuickScreenAttached::windowChanged(QQuickWindow* c)
if (m_window)
disconnect(m_window, SIGNAL(screenChanged(QScreen*)), this, SLOT(screenChanged(QScreen*)));
m_window = c;
- screenChanged(c ? c->screen() : NULL);
+ screenChanged(c ? c->screen() : nullptr);
if (c)
connect(c, SIGNAL(screenChanged(QScreen*)), this, SLOT(screenChanged(QScreen*)));
}
diff --git a/src/quick/items/qquickshadereffect_p.h b/src/quick/items/qquickshadereffect_p.h
index 30bd018098..cabad930fc 100644
--- a/src/quick/items/qquickshadereffect_p.h
+++ b/src/quick/items/qquickshadereffect_p.h
@@ -91,7 +91,7 @@ public:
};
Q_ENUM(Status)
- QQuickShaderEffect(QQuickItem *parent = 0);
+ QQuickShaderEffect(QQuickItem *parent = nullptr);
QByteArray fragmentShader() const;
void setFragmentShader(const QByteArray &code);
diff --git a/src/quick/items/qquickshadereffectmesh_p.h b/src/quick/items/qquickshadereffectmesh_p.h
index f3ac956f60..5d6641429a 100644
--- a/src/quick/items/qquickshadereffectmesh_p.h
+++ b/src/quick/items/qquickshadereffectmesh_p.h
@@ -76,7 +76,7 @@ class QQuickShaderEffectMesh : public QObject
{
Q_OBJECT
public:
- QQuickShaderEffectMesh(QObject *parent = 0);
+ QQuickShaderEffectMesh(QObject *parent = nullptr);
virtual bool validateAttributes(const QVector<QByteArray> &attributes, int *posIndex) = 0;
// If 'geometry' != 0, 'attrCount' is the same as last time the function was called.
virtual QSGGeometry *updateGeometry(QSGGeometry *geometry, int attrCount, int posIndex,
@@ -94,7 +94,7 @@ class QQuickGridMesh : public QQuickShaderEffectMesh
Q_OBJECT
Q_PROPERTY(QSize resolution READ resolution WRITE setResolution NOTIFY resolutionChanged)
public:
- QQuickGridMesh(QObject *parent = 0);
+ QQuickGridMesh(QObject *parent = nullptr);
bool validateAttributes(const QVector<QByteArray> &attributes, int *posIndex) override;
QSGGeometry *updateGeometry(QSGGeometry *geometry, int attrCount, int posIndex,
const QRectF &srcRect, const QRectF &rect) override;
@@ -121,7 +121,7 @@ class QQuickBorderImageMesh : public QQuickShaderEffectMesh
Q_PROPERTY(TileMode horizontalTileMode READ horizontalTileMode WRITE setHorizontalTileMode NOTIFY horizontalTileModeChanged)
Q_PROPERTY(TileMode verticalTileMode READ verticalTileMode WRITE setVerticalTileMode NOTIFY verticalTileModeChanged)
public:
- QQuickBorderImageMesh(QObject *parent = 0);
+ QQuickBorderImageMesh(QObject *parent = nullptr);
bool validateAttributes(const QVector<QByteArray> &attributes, int *posIndex) override;
QSGGeometry *updateGeometry(QSGGeometry *geometry, int attrCount, int posIndex,
diff --git a/src/quick/items/qquickshadereffectsource.cpp b/src/quick/items/qquickshadereffectsource.cpp
index b4a45431c5..4782672858 100644
--- a/src/quick/items/qquickshadereffectsource.cpp
+++ b/src/quick/items/qquickshadereffectsource.cpp
@@ -56,7 +56,7 @@ class QQuickShaderEffectSourceTextureProvider : public QSGTextureProvider
Q_OBJECT
public:
QQuickShaderEffectSourceTextureProvider()
- : sourceTexture(0)
+ : sourceTexture(nullptr)
, mipmapFiltering(QSGTexture::None)
, filtering(QSGTexture::Nearest)
, horizontalWrap(QSGTexture::ClampToEdge)
@@ -183,10 +183,10 @@ public:
QQuickShaderEffectSource::QQuickShaderEffectSource(QQuickItem *parent)
: QQuickItem(parent)
- , m_provider(0)
- , m_texture(0)
+ , m_provider(nullptr)
+ , m_texture(nullptr)
, m_wrapMode(ClampToEdge)
- , m_sourceItem(0)
+ , m_sourceItem(nullptr)
, m_textureSize(0, 0)
, m_format(RGBA)
, m_samples(0)
@@ -246,7 +246,7 @@ QSGTextureProvider *QQuickShaderEffectSource::textureProvider() const
const QQuickItemPrivate *d = QQuickItemPrivate::get(this);
if (!d->window || !d->sceneGraphRenderContext() || QThread::currentThread() != d->sceneGraphRenderContext()->thread()) {
qWarning("QQuickShaderEffectSource::textureProvider: can only be queried on the rendering thread of an exposed window");
- return 0;
+ return nullptr;
}
if (!m_provider) {
@@ -334,8 +334,8 @@ void QQuickShaderEffectSource::setSourceItem(QQuickItem *item)
if (m_sourceItem) {
if (window() == m_sourceItem->window()
- || (window() == 0 && m_sourceItem->window())
- || (m_sourceItem->window() == 0 && window())) {
+ || (window() == nullptr && m_sourceItem->window())
+ || (m_sourceItem->window() == nullptr && window())) {
QQuickItemPrivate *d = QQuickItemPrivate::get(item);
// 'item' needs a window to get a scene graph node. It usually gets one through its
// parent, but if the source item is "inline" rather than a reference -- i.e.
@@ -350,7 +350,7 @@ void QQuickShaderEffectSource::setSourceItem(QQuickItem *item)
connect(m_sourceItem, SIGNAL(destroyed(QObject*)), this, SLOT(sourceItemDestroyed(QObject*)));
} else {
qWarning("ShaderEffectSource: sourceItem and ShaderEffectSource must both be children of the same window.");
- m_sourceItem = 0;
+ m_sourceItem = nullptr;
}
}
update();
@@ -361,7 +361,7 @@ void QQuickShaderEffectSource::sourceItemDestroyed(QObject *item)
{
Q_ASSERT(item == m_sourceItem);
Q_UNUSED(item);
- m_sourceItem = 0;
+ m_sourceItem = nullptr;
update();
emit sourceItemChanged();
}
@@ -662,8 +662,8 @@ void QQuickShaderEffectSource::releaseResources()
if (m_texture || m_provider) {
window()->scheduleRenderJob(new QQuickShaderEffectSourceCleanup(m_texture, m_provider),
QQuickWindow::AfterSynchronizingStage);
- m_texture = 0;
- m_provider = 0;
+ m_texture = nullptr;
+ m_provider = nullptr;
}
}
@@ -684,9 +684,9 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint
{
if (!m_sourceItem || m_sourceItem->width() <= 0 || m_sourceItem->height() <= 0) {
if (m_texture)
- m_texture->setItem(0);
+ m_texture->setItem(nullptr);
delete oldNode;
- return 0;
+ return nullptr;
}
ensureTexture();
@@ -745,7 +745,7 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint
// Don't create the paint node if we're not spanning any area
if (width() <= 0 || height() <= 0) {
delete oldNode;
- return 0;
+ return nullptr;
}
QSGInternalImageNode *node = static_cast<QSGInternalImageNode *>(oldNode);
@@ -779,8 +779,8 @@ void QQuickShaderEffectSource::invalidateSceneGraph()
delete m_texture;
if (m_provider)
delete m_provider;
- m_texture = 0;
- m_provider = 0;
+ m_texture = nullptr;
+ m_provider = nullptr;
}
void QQuickShaderEffectSource::itemChange(ItemChange change, const ItemChangeData &value)
diff --git a/src/quick/items/qquickshadereffectsource_p.h b/src/quick/items/qquickshadereffectsource_p.h
index 185c5179b6..d5bb33902a 100644
--- a/src/quick/items/qquickshadereffectsource_p.h
+++ b/src/quick/items/qquickshadereffectsource_p.h
@@ -113,8 +113,8 @@ public:
};
Q_ENUM(TextureMirroring)
- QQuickShaderEffectSource(QQuickItem *parent = 0);
- ~QQuickShaderEffectSource();
+ QQuickShaderEffectSource(QQuickItem *parent = nullptr);
+ ~QQuickShaderEffectSource() override;
WrapMode wrapMode() const;
void setWrapMode(WrapMode mode);
diff --git a/src/quick/items/qquicksprite.cpp b/src/quick/items/qquicksprite.cpp
index 8013c57938..99b1b1f430 100644
--- a/src/quick/items/qquicksprite.cpp
+++ b/src/quick/items/qquicksprite.cpp
@@ -100,7 +100,7 @@ QT_BEGIN_NAMESPACE
/*!
\qmlproperty int QtQuick::Sprite::frameDuration
- Duration of each frame of the animation. Values below 0 are invalid.
+ Duration of each frame of the animation in milliseconds. Values below 0 are invalid.
If frameRate is valid then it will be used to calculate the duration of the frames.
If not, and frameDuration is valid, then frameDuration will be used. Otherwise duration is used.
@@ -237,12 +237,12 @@ int QQuickSprite::variedDuration() const //Deals with precedence when multiple d
if (m_frameRate != unsetDuration) {
qreal fpms = (m_frameRate
- + (m_frameRateVariation * QRandomGenerator::getReal() * 2)
+ + (m_frameRateVariation * QRandomGenerator::global()->generateDouble() * 2)
- m_frameRateVariation) / 1000.0;
return qMax(qreal(0.0) , m_frames / fpms);
} else if (m_frameDuration != unsetDuration) {
int mspf = m_frameDuration
- + (m_frameDurationVariation * QRandomGenerator::getReal() * 2)
+ + (m_frameDurationVariation * QRandomGenerator::global()->generateDouble() * 2)
- m_frameDurationVariation;
return qMax(0, m_frames * mspf);
} else if (duration() >= 0) {
diff --git a/src/quick/items/qquicksprite_p.h b/src/quick/items/qquicksprite_p.h
index 2f7f6da5c0..8e119a80a9 100644
--- a/src/quick/items/qquicksprite_p.h
+++ b/src/quick/items/qquicksprite_p.h
@@ -88,8 +88,8 @@ class Q_QUICK_EXPORT QQuickSprite : public QQuickStochasticState
Q_PROPERTY(int frameDurationVariation READ frameDurationVariation WRITE setFrameDurationVariation NOTIFY frameDurationVariationChanged)
public:
- explicit QQuickSprite(QObject *parent = 0);
- ~QQuickSprite();
+ explicit QQuickSprite(QObject *parent = nullptr);
+ ~QQuickSprite() override;
QUrl source() const
{
diff --git a/src/quick/items/qquickspriteengine.cpp b/src/quick/items/qquickspriteengine.cpp
index 9deb223957..1fd15e61e3 100644
--- a/src/quick/items/qquickspriteengine.cpp
+++ b/src/quick/items/qquickspriteengine.cpp
@@ -544,7 +544,7 @@ void QQuickStochasticEngine::restart(int index)
if (m_addAdvance)
m_startTimes[index] += m_advanceTime.elapsed();
if (randomStart)
- m_startTimes[index] -= QRandomGenerator::bounded(m_duration.at(index));
+ m_startTimes[index] -= QRandomGenerator::global()->bounded(m_duration.at(index));
int time = m_duration.at(index) + m_startTimes.at(index);
for (int i=0; i<m_stateUpdates.count(); i++)
m_stateUpdates[i].second.removeAll(index);
@@ -558,13 +558,13 @@ void QQuickSpriteEngine::restart(int index) //Reimplemented to recognize and han
if (m_loaded && m_sprites.at(m_things.at(index))->frameSync()) {//Manually advanced
m_startTimes[index] = 0;
if (randomStart && m_sprites.at(m_things.at(index))->m_generatedCount)
- m_startTimes[index] += QRandomGenerator::bounded(m_sprites.at(m_things.at(index))->m_generatedCount);
+ m_startTimes[index] += QRandomGenerator::global()->bounded(m_sprites.at(m_things.at(index))->m_generatedCount);
} else {
m_startTimes[index] = m_timeOffset;
if (m_addAdvance)
m_startTimes[index] += m_advanceTime.elapsed();
if (randomStart)
- m_startTimes[index] -= QRandomGenerator::bounded(m_duration.at(index));
+ m_startTimes[index] -= QRandomGenerator::global()->bounded(m_duration.at(index));
int time = spriteDuration(index) + m_startTimes.at(index);
if (randomStart) {
int curTime = m_timeOffset + (m_addAdvance ? m_advanceTime.elapsed() : 0);
@@ -630,7 +630,7 @@ int QQuickStochasticEngine::nextState(int curState, int curThing)
int nextIdx = -1;
int goalPath = goalSeek(curState, curThing);
if (goalPath == -1){//Random
- qreal r = QRandomGenerator::getReal();
+ qreal r = QRandomGenerator::global()->generateDouble();
qreal total = 0.0;
for (QVariantMap::const_iterator iter=m_states.at(curState)->m_to.constBegin();
iter!=m_states.at(curState)->m_to.constEnd(); ++iter)
@@ -720,7 +720,7 @@ int QQuickStochasticEngine::goalSeek(int curIdx, int spriteIdx, int dist)
if (options.count()==1)
return *(options.begin());
int option = -1;
- qreal r = QRandomGenerator::getReal();
+ qreal r = QRandomGenerator::global()->generateDouble();
qreal total = 0;
for (QSet<int>::const_iterator iter=options.constBegin();
iter!=options.constEnd(); ++iter)
diff --git a/src/quick/items/qquickspriteengine_p.h b/src/quick/items/qquickspriteengine_p.h
index a1c156fa94..da917683b6 100644
--- a/src/quick/items/qquickspriteengine_p.h
+++ b/src/quick/items/qquickspriteengine_p.h
@@ -81,11 +81,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickStochasticState : public QObject //Currently
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
public:
- QQuickStochasticState(QObject* parent = 0)
+ QQuickStochasticState(QObject* parent = nullptr)
: QObject(parent)
- , m_duration(-1)
- , m_durationVariation(0)
- , m_randomStart(false)
{
}
@@ -113,7 +110,7 @@ public:
virtual int variedDuration() const
{
return qMax(qreal(0.0) , m_duration
- + (m_durationVariation * QRandomGenerator::bounded(2.0))
+ + (m_durationVariation * QRandomGenerator::global()->bounded(2.0))
- m_durationVariation);
}
@@ -179,11 +176,11 @@ public Q_SLOTS:
private:
QString m_name;
QVariantMap m_to;
- int m_duration;
- int m_durationVariation;
+ int m_duration = -1;
+ int m_durationVariation = 0;
friend class QQuickStochasticEngine;
- bool m_randomStart;
+ bool m_randomStart = false;
};
class Q_QUICK_PRIVATE_EXPORT QQuickStochasticEngine : public QObject
@@ -193,9 +190,9 @@ class Q_QUICK_PRIVATE_EXPORT QQuickStochasticEngine : public QObject
Q_PROPERTY(QString globalGoal READ globalGoal WRITE setGlobalGoal NOTIFY globalGoalChanged)
Q_PROPERTY(QQmlListProperty<QQuickStochasticState> states READ states)
public:
- explicit QQuickStochasticEngine(QObject *parent = 0);
- QQuickStochasticEngine(const QList<QQuickStochasticState*> &states, QObject *parent = 0);
- ~QQuickStochasticEngine();
+ explicit QQuickStochasticEngine(QObject *parent = nullptr);
+ QQuickStochasticEngine(const QList<QQuickStochasticState*> &states, QObject *parent = nullptr);
+ ~QQuickStochasticEngine() override;
QQmlListProperty<QQuickStochasticState> states()
{
@@ -270,9 +267,9 @@ class Q_QUICK_PRIVATE_EXPORT QQuickSpriteEngine : public QQuickStochasticEngine
Q_OBJECT
Q_PROPERTY(QQmlListProperty<QQuickSprite> sprites READ sprites)
public:
- explicit QQuickSpriteEngine(QObject *parent = 0);
- QQuickSpriteEngine(const QList<QQuickSprite*> &sprites, QObject *parent = 0);
- ~QQuickSpriteEngine();
+ explicit QQuickSpriteEngine(QObject *parent = nullptr);
+ QQuickSpriteEngine(const QList<QQuickSprite*> &sprites, QObject *parent = nullptr);
+ ~QQuickSpriteEngine() override;
QQmlListProperty<QQuickSprite> sprites()
{
return QQmlListProperty<QQuickSprite>(this, m_sprites);
@@ -303,7 +300,7 @@ public:
QImage assembledImage(int maxSize = 2048);
private:
- int pseudospriteProgress(int, int, int *rd = 0) const;
+ int pseudospriteProgress(int, int, int *rd = nullptr) const;
QList<QQuickSprite*> m_sprites;
bool m_startedImageAssembly;
bool m_loaded;
diff --git a/src/quick/items/qquickspritesequence.cpp b/src/quick/items/qquickspritesequence.cpp
index ae466aa482..0a39c09ebc 100644
--- a/src/quick/items/qquickspritesequence.cpp
+++ b/src/quick/items/qquickspritesequence.cpp
@@ -199,7 +199,7 @@ void QQuickSpriteSequence::createEngine()
if (!d->m_goalState.isEmpty())
d->m_spriteEngine->setGoal(d->m_spriteEngine->stateIndex(d->m_goalState));
} else {
- d->m_spriteEngine = 0;
+ d->m_spriteEngine = nullptr;
}
reset();
}
diff --git a/src/quick/items/qquickspritesequence_p.h b/src/quick/items/qquickspritesequence_p.h
index ffcefecaec..899ce79e0e 100644
--- a/src/quick/items/qquickspritesequence_p.h
+++ b/src/quick/items/qquickspritesequence_p.h
@@ -77,7 +77,7 @@ class Q_AUTOTEST_EXPORT QQuickSpriteSequence : public QQuickItem
Q_CLASSINFO("DefaultProperty", "sprites")
public:
- explicit QQuickSpriteSequence(QQuickItem *parent = 0);
+ explicit QQuickSpriteSequence(QQuickItem *parent = nullptr);
QQmlListProperty<QQuickSprite> sprites();
diff --git a/src/quick/items/qquickstateoperations.cpp b/src/quick/items/qquickstateoperations.cpp
index 386bb058b5..a85b9663d3 100644
--- a/src/quick/items/qquickstateoperations.cpp
+++ b/src/quick/items/qquickstateoperations.cpp
@@ -51,8 +51,8 @@ class QQuickParentChangePrivate : public QQuickStateOperationPrivate
{
Q_DECLARE_PUBLIC(QQuickParentChange)
public:
- QQuickParentChangePrivate() : target(0), parent(0), origParent(0), origStackBefore(0),
- rewindParent(0), rewindStackBefore(0) {}
+ QQuickParentChangePrivate() : target(nullptr), parent(nullptr), origParent(nullptr), origStackBefore(nullptr),
+ rewindParent(nullptr), rewindStackBefore(nullptr) {}
QQuickItem *target;
QPointer<QQuickItem> parent;
@@ -68,7 +68,7 @@ public:
QQmlNullableValue<QQmlScriptString> scaleString;
QQmlNullableValue<QQmlScriptString> rotationString;
- void doChange(QQuickItem *targetParent, QQuickItem *stackBefore = 0);
+ void doChange(QQuickItem *targetParent, QQuickItem *stackBefore = nullptr);
};
void QQuickParentChangePrivate::doChange(QQuickItem *targetParent, QQuickItem *stackBefore)
@@ -524,13 +524,13 @@ void QQuickParentChange::saveCurrentValues()
{
Q_D(QQuickParentChange);
if (!d->target) {
- d->rewindParent = 0;
- d->rewindStackBefore = 0;
+ d->rewindParent = nullptr;
+ d->rewindStackBefore = nullptr;
return;
}
d->rewindParent = d->target->parentItem();
- d->rewindStackBefore = 0;
+ d->rewindStackBefore = nullptr;
if (!d->rewindParent)
return;
@@ -588,7 +588,7 @@ class QQuickAnchorSetPrivate : public QObjectPrivate
Q_DECLARE_PUBLIC(QQuickAnchorSet)
public:
QQuickAnchorSetPrivate()
- : usedAnchors(0), resetAnchors(0)
+ : usedAnchors(nullptr), resetAnchors(nullptr)
{
}
@@ -771,7 +771,7 @@ class QQuickAnchorChangesPrivate : public QQuickStateOperationPrivate
{
public:
QQuickAnchorChangesPrivate()
- : target(0), anchorSet(new QQuickAnchorSet)
+ : target(nullptr), anchorSet(new QQuickAnchorSet)
{
}
@@ -855,7 +855,7 @@ QQuickAnchorChanges::ActionList QQuickAnchorChanges::actions()
Q_D(QQuickAnchorChanges);
//### ASSERT these are all 0?
d->leftBinding = d->rightBinding = d->hCenterBinding = d->topBinding
- = d->bottomBinding = d->vCenterBinding = d->baselineBinding = 0;
+ = d->bottomBinding = d->vCenterBinding = d->baselineBinding = nullptr;
d->leftProp = QQmlProperty(d->target, QLatin1String("anchors.left"));
d->rightProp = QQmlProperty(d->target, QLatin1String("anchors.right"));
@@ -1236,20 +1236,20 @@ void QQuickAnchorChanges::copyOriginals(QQuickStateActionEvent *other)
//clear old values from other
//### could this be generalized for all QQuickStateActionEvents, and called after copyOriginals?
- acp->leftBinding = 0;
- acp->rightBinding = 0;
- acp->hCenterBinding = 0;
- acp->topBinding = 0;
- acp->bottomBinding = 0;
- acp->vCenterBinding = 0;
- acp->baselineBinding = 0;
- acp->origLeftBinding = 0;
- acp->origRightBinding = 0;
- acp->origHCenterBinding = 0;
- acp->origTopBinding = 0;
- acp->origBottomBinding = 0;
- acp->origVCenterBinding = 0;
- acp->origBaselineBinding = 0;
+ acp->leftBinding = nullptr;
+ acp->rightBinding = nullptr;
+ acp->hCenterBinding = nullptr;
+ acp->topBinding = nullptr;
+ acp->bottomBinding = nullptr;
+ acp->vCenterBinding = nullptr;
+ acp->baselineBinding = nullptr;
+ acp->origLeftBinding = nullptr;
+ acp->origRightBinding = nullptr;
+ acp->origHCenterBinding = nullptr;
+ acp->origTopBinding = nullptr;
+ acp->origBottomBinding = nullptr;
+ acp->origVCenterBinding = nullptr;
+ acp->origBaselineBinding = nullptr;
saveCurrentValues();
}
diff --git a/src/quick/items/qquickstateoperations_p.h b/src/quick/items/qquickstateoperations_p.h
index d61ed294cb..e947b2213f 100644
--- a/src/quick/items/qquickstateoperations_p.h
+++ b/src/quick/items/qquickstateoperations_p.h
@@ -75,7 +75,7 @@ class Q_AUTOTEST_EXPORT QQuickParentChange : public QQuickStateOperation, public
Q_PROPERTY(QQmlScriptString scale READ scale WRITE setScale)
Q_PROPERTY(QQmlScriptString rotation READ rotation WRITE setRotation)
public:
- QQuickParentChange(QObject *parent=0);
+ QQuickParentChange(QObject *parent=nullptr);
~QQuickParentChange();
QQuickItem *object() const;
@@ -138,7 +138,7 @@ class Q_AUTOTEST_EXPORT QQuickAnchorSet : public QObject
Q_PROPERTY(QQmlScriptString baseline READ baseline WRITE setBaseline RESET resetBaseline)
public:
- QQuickAnchorSet(QObject *parent=0);
+ QQuickAnchorSet(QObject *parent=nullptr);
virtual ~QQuickAnchorSet();
QQmlScriptString left() const;
@@ -187,7 +187,7 @@ class Q_AUTOTEST_EXPORT QQuickAnchorChanges : public QQuickStateOperation, publi
Q_PROPERTY(QQuickAnchorSet *anchors READ anchors CONSTANT)
public:
- QQuickAnchorChanges(QObject *parent=0);
+ QQuickAnchorChanges(QObject *parent=nullptr);
~QQuickAnchorChanges();
ActionList actions() override;
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 5f58f0cdde..383aa2b821 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -74,7 +74,7 @@ Q_DECLARE_LOGGING_CATEGORY(DBG_HOVER_TRACE)
const QChar QQuickTextPrivate::elideChar = QChar(0x2026);
QQuickTextPrivate::QQuickTextPrivate()
- : fontInfo(font), elideLayout(0), textLine(0), lineWidth(0)
+ : fontInfo(font), elideLayout(nullptr), textLine(nullptr), lineWidth(0)
, color(0xFF000000), linkColor(0xFF0000FF), styleColor(0xFF000000)
, lineCount(1), multilengthEos(-1)
, elideMode(QQuickText::ElideNone), hAlign(QQuickText::AlignLeft), vAlign(QQuickText::AlignTop)
@@ -103,7 +103,7 @@ QQuickTextPrivate::ExtraData::ExtraData()
, explicitRightPadding(false)
, explicitBottomPadding(false)
, lineHeight(1.0)
- , doc(0)
+ , doc(nullptr)
, minimumPixelSize(12)
, minimumPointSize(12)
, nbActiveDownloads(0)
@@ -124,7 +124,7 @@ void QQuickTextPrivate::init()
QQuickTextPrivate::~QQuickTextPrivate()
{
delete elideLayout;
- delete textLine; textLine = 0;
+ delete textLine; textLine = nullptr;
if (extra.isAllocated()) {
qDeleteAll(extra->imgTags);
@@ -478,7 +478,7 @@ void QQuickTextPrivate::updateSize()
}
QQuickTextLine::QQuickTextLine()
- : QObject(), m_line(0), m_height(0), m_lineOffset(0)
+ : QObject(), m_line(nullptr), m_height(0), m_lineOffset(0)
{
}
@@ -1110,7 +1110,7 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline)
layout.clearLayout();
} else {
delete elideLayout;
- elideLayout = 0;
+ elideLayout = nullptr;
}
QTextLine firstLine = visibleCount == 1 && elideLayout
@@ -1507,9 +1507,9 @@ QQuickText::~QQuickText()
\qmlproperty bool QtQuick::Text::font.kerning
\since 5.10
- Enables or disables the kerning OpenType feature when shaping the text. This may improve performance
- when creating or changing the text, at the expense of some cosmetic features. The default value
- is true.
+ Enables or disables the kerning OpenType feature when shaping the text. Disabling this may
+ improve performance when creating or changing the text, at the expense of some cosmetic
+ features. The default value is true.
\qml
Text { text: "OATS FLAVOUR WAY"; font.kerning: false }
@@ -2363,10 +2363,10 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data
if (d->text.isEmpty()) {
delete oldNode;
- return 0;
+ return nullptr;
}
- if (d->updateType != QQuickTextPrivate::UpdatePaintNode && oldNode != 0) {
+ if (d->updateType != QQuickTextPrivate::UpdatePaintNode && oldNode != nullptr) {
// Update done in preprocess() in the nodes
d->updateType = QQuickTextPrivate::UpdateNone;
return oldNode;
@@ -2376,7 +2376,7 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data
const qreal dy = QQuickTextUtil::alignedY(d->layedOutTextRect.height() + d->lineHeightOffset(), d->availableHeight(), d->vAlign) + topPadding();
- QQuickTextNode *node = 0;
+ QQuickTextNode *node = nullptr;
if (!oldNode)
node = new QQuickTextNode(this);
else
@@ -2918,14 +2918,14 @@ void QQuickText::invalidateFontCaches()
{
Q_D(QQuickText);
- if (d->richText && d->extra.isAllocated() && d->extra->doc != 0) {
+ if (d->richText && d->extra.isAllocated() && d->extra->doc != nullptr) {
QTextBlock block;
for (block = d->extra->doc->firstBlock(); block.isValid(); block = block.next()) {
- if (block.layout() != 0 && block.layout()->engine() != 0)
+ if (block.layout() != nullptr && block.layout()->engine() != nullptr)
block.layout()->engine()->resetFontEngineCache();
}
} else {
- if (d->layout.engine() != 0)
+ if (d->layout.engine() != nullptr)
d->layout.engine()->resetFontEngineCache();
}
}
diff --git a/src/quick/items/qquicktext_p.h b/src/quick/items/qquicktext_p.h
index 6c48dd86a9..15e989c13d 100644
--- a/src/quick/items/qquicktext_p.h
+++ b/src/quick/items/qquicktext_p.h
@@ -102,8 +102,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickText : public QQuickImplicitSizeItem
Q_PROPERTY(QSizeF advance READ advance NOTIFY contentSizeChanged REVISION 10)
public:
- QQuickText(QQuickItem *parent=0);
- ~QQuickText();
+ QQuickText(QQuickItem *parent=nullptr);
+ ~QQuickText() override;
enum HAlignment { AlignLeft = Qt::AlignLeft,
AlignRight = Qt::AlignRight,
@@ -289,7 +289,7 @@ Q_SIGNALS:
Q_REVISION(9) void fontInfoChanged();
protected:
- QQuickText(QQuickTextPrivate &dd, QQuickItem *parent = 0);
+ QQuickText(QQuickTextPrivate &dd, QQuickItem *parent = nullptr);
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
diff --git a/src/quick/items/qquicktext_p_p.h b/src/quick/items/qquicktext_p_p.h
index 6fd0876a5f..b0b1492d57 100644
--- a/src/quick/items/qquicktext_p_p.h
+++ b/src/quick/items/qquicktext_p_p.h
@@ -83,7 +83,7 @@ public:
void setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height);
int lineHeightOffset() const;
- QString elidedText(qreal lineWidth, const QTextLine &line, QTextLine *nextLine = 0) const;
+ QString elidedText(qreal lineWidth, const QTextLine &line, QTextLine *nextLine = nullptr) const;
void elideFormats(int start, int length, int offset, QVector<QTextLayout::FormatRange> *elidedFormats);
void clearFormats();
diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp
index 874c02fc99..e3080dfe48 100644
--- a/src/quick/items/qquicktextcontrol.cpp
+++ b/src/quick/items/qquicktextcontrol.cpp
@@ -95,7 +95,7 @@ static QTextLine currentTextLine(const QTextCursor &cursor)
}
QQuickTextControlPrivate::QQuickTextControlPrivate()
- : doc(0),
+ : doc(nullptr),
#if QT_CONFIG(im)
preeditCursor(0),
#endif
diff --git a/src/quick/items/qquicktextcontrol_p.h b/src/quick/items/qquicktextcontrol_p.h
index 862a81af28..c99736a874 100644
--- a/src/quick/items/qquicktextcontrol_p.h
+++ b/src/quick/items/qquicktextcontrol_p.h
@@ -77,7 +77,7 @@ class Q_AUTOTEST_EXPORT QQuickTextControl : public QInputControl
Q_OBJECT
Q_DECLARE_PRIVATE(QQuickTextControl)
public:
- explicit QQuickTextControl(QTextDocument *doc, QObject *parent = 0);
+ explicit QQuickTextControl(QTextDocument *doc, QObject *parent = nullptr);
virtual ~QQuickTextControl();
QTextDocument *document() const;
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 8f3a8998f5..352fc48970 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -139,7 +139,7 @@ namespace {
class RootNode : public QSGTransformNode
{
public:
- RootNode() : cursorNode(0), frameDecorationsNode(0)
+ RootNode() : cursorNode(nullptr), frameDecorationsNode(nullptr)
{ }
void resetFrameDecorations(QQuickTextNode* newNode)
@@ -358,9 +358,9 @@ QString QQuickTextEdit::text() const
\qmlproperty bool QtQuick::TextEdit::font.kerning
\since 5.10
- Enables or disables the kerning OpenType feature when shaping the text. This may improve performance
- when creating or changing the text, at the expense of some cosmetic features. The default value
- is true.
+ Enables or disables the kerning OpenType feature when shaping the text. Disabling this may
+ improve performance when creating or changing the text, at the expense of some cosmetic
+ features. The default value is true.
\qml
TextEdit { text: "OATS FLAVOUR WAY"; kerning: font.false }
@@ -1968,12 +1968,11 @@ void QQuickTextEdit::triggerPreprocess()
}
typedef QQuickTextEditPrivate::Node TextNode;
-typedef QList<TextNode*>::iterator TextNodeIterator;
+using TextNodeIterator = QQuickTextEditPrivate::TextNodeIterator;
-
-static bool comesBefore(TextNode* n1, TextNode* n2)
+static inline bool operator<(const TextNode &n1, const TextNode &n2)
{
- return n1->startPos() < n2->startPos();
+ return n1.startPos() < n2.startPos();
}
static inline void updateNodeTransform(QQuickTextNode* node, const QPointF &topLeft)
@@ -1992,12 +1991,12 @@ static inline void updateNodeTransform(QQuickTextNode* node, const QPointF &topL
void QQuickTextEdit::invalidateFontCaches()
{
Q_D(QQuickTextEdit);
- if (d->document == 0)
+ if (d->document == nullptr)
return;
QTextBlock block;
for (block = d->document->firstBlock(); block.isValid(); block = block.next()) {
- if (block.layout() != 0 && block.layout()->engine() != 0)
+ if (block.layout() != nullptr && block.layout()->engine() != nullptr)
block.layout()->engine()->resetFontEngineCache();
}
}
@@ -2015,7 +2014,7 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
Q_UNUSED(updatePaintNodeData);
Q_D(QQuickTextEdit);
- if (d->updateType != QQuickTextEditPrivate::UpdatePaintNode && oldNode != 0) {
+ if (d->updateType != QQuickTextEditPrivate::UpdatePaintNode && oldNode != nullptr) {
// Update done in preprocess() in the nodes
d->updateType = QQuickTextEditPrivate::UpdateNone;
return oldNode;
@@ -2026,13 +2025,12 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
if (!oldNode) {
// If we had any QQuickTextNode node references, they were deleted along with the root node
// But here we must delete the Node structures in textNodeMap
- qDeleteAll(d->textNodeMap);
d->textNodeMap.clear();
}
RootNode *rootNode = static_cast<RootNode *>(oldNode);
TextNodeIterator nodeIterator = d->textNodeMap.begin();
- while (nodeIterator != d->textNodeMap.end() && !(*nodeIterator)->dirty())
+ while (nodeIterator != d->textNodeMap.end() && !nodeIterator->dirty())
++nodeIterator;
QQuickTextNodeEngine engine;
@@ -2045,20 +2043,19 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
int firstDirtyPos = 0;
if (nodeIterator != d->textNodeMap.end()) {
- firstDirtyPos = (*nodeIterator)->startPos();
+ firstDirtyPos = nodeIterator->startPos();
do {
- rootNode->removeChildNode((*nodeIterator)->textNode());
- delete (*nodeIterator)->textNode();
- delete *nodeIterator;
+ rootNode->removeChildNode(nodeIterator->textNode());
+ delete nodeIterator->textNode();
nodeIterator = d->textNodeMap.erase(nodeIterator);
- } while (nodeIterator != d->textNodeMap.end() && (*nodeIterator)->dirty());
+ } while (nodeIterator != d->textNodeMap.end() && nodeIterator->dirty());
}
// FIXME: the text decorations could probably be handled separately (only updated for affected textFrames)
rootNode->resetFrameDecorations(d->createTextNode());
resetEngine(&frameDecorationsEngine, d->color, d->selectedTextColor, d->selectionColor);
- QQuickTextNode *node = 0;
+ QQuickTextNode *node = nullptr;
int currentNodeSize = 0;
int nodeStart = firstDirtyPos;
@@ -2068,7 +2065,8 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
rootNode->setMatrix(basePositionMatrix);
QPointF nodeOffset;
- TextNode *firstCleanNode = (nodeIterator != d->textNodeMap.end()) ? *nodeIterator : 0;
+ const TextNode firstCleanNode = (nodeIterator != d->textNodeMap.end()) ? *nodeIterator
+ : TextNode();
QList<QTextFrame *> frames;
frames.append(d->document->rootFrame());
@@ -2078,7 +2076,8 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
frames.append(textFrame->childFrames());
frameDecorationsEngine.addFrameDecorations(d->document, textFrame);
- if (textFrame->lastPosition() < firstDirtyPos || (firstCleanNode && textFrame->firstPosition() >= firstCleanNode->startPos()))
+ if (textFrame->lastPosition() < firstDirtyPos
+ || textFrame->firstPosition() >= firstCleanNode.startPos())
continue;
node = d->createTextNode();
resetEngine(&engine, d->color, d->selectedTextColor, d->selectionColor);
@@ -2118,8 +2117,8 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
engine.addTextBlock(d->document, block, -nodeOffset, d->color, QColor(), selectionStart(), selectionEnd() - 1);
currentNodeSize += block.length();
- if ((it.atEnd()) || (firstCleanNode && block.next().position() >= firstCleanNode->startPos())) // last node that needed replacing or last block of the frame
- break;
+ if ((it.atEnd()) || block.next().position() >= firstCleanNode.startPos())
+ break; // last node that needed replacing or last block of the frame
QList<int>::const_iterator lowerBound = std::lower_bound(frameBoundaries.constBegin(), frameBoundaries.constEnd(), block.next().position());
if (currentNodeSize > nodeBreakingSize || lowerBound == frameBoundaries.constEnd() || *lowerBound > nodeStart) {
@@ -2137,16 +2136,19 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
// Now prepend the frame decorations since we want them rendered first, with the text nodes and cursor in front.
rootNode->prependChildNode(rootNode->frameDecorationsNode);
- Q_ASSERT(nodeIterator == d->textNodeMap.end() || (*nodeIterator) == firstCleanNode);
+ Q_ASSERT(nodeIterator == d->textNodeMap.end()
+ || (nodeIterator->textNode() == firstCleanNode.textNode()
+ && nodeIterator->startPos() == firstCleanNode.startPos()));
// Update the position of the subsequent text blocks.
- if (firstCleanNode) {
- QPointF oldOffset = firstCleanNode->textNode()->matrix().map(QPointF(0,0));
- QPointF currentOffset = d->document->documentLayout()->blockBoundingRect(d->document->findBlock(firstCleanNode->startPos())).topLeft();
+ if (firstCleanNode.textNode() != nullptr) {
+ QPointF oldOffset = firstCleanNode.textNode()->matrix().map(QPointF(0,0));
+ QPointF currentOffset = d->document->documentLayout()->blockBoundingRect(
+ d->document->findBlock(firstCleanNode.startPos())).topLeft();
QPointF delta = currentOffset - oldOffset;
while (nodeIterator != d->textNodeMap.end()) {
- QMatrix4x4 transformMatrix = (*nodeIterator)->textNode()->matrix();
+ QMatrix4x4 transformMatrix = nodeIterator->textNode()->matrix();
transformMatrix.translate(delta.x(), delta.y());
- (*nodeIterator)->textNode()->setMatrix(transformMatrix);
+ nodeIterator->textNode()->setMatrix(transformMatrix);
++nodeIterator;
}
@@ -2154,11 +2156,11 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *
// Since we iterate over blocks from different text frames that are potentially not sorted
// we need to ensure that our list of nodes is sorted again:
- std::sort(d->textNodeMap.begin(), d->textNodeMap.end(), &comesBefore);
+ std::sort(d->textNodeMap.begin(), d->textNodeMap.end());
}
- if (d->cursorComponent == 0) {
- QSGInternalRectangleNode* cursor = 0;
+ if (d->cursorComponent == nullptr) {
+ QSGInternalRectangleNode* cursor = nullptr;
if (!isReadOnly() && d->cursorVisible && d->control->cursorOn())
cursor = d->sceneGraphContext()->createInternalRectangleNode(d->control->cursorRect(), d->color);
rootNode->resetCursorNode(cursor);
@@ -2333,22 +2335,26 @@ void QQuickTextEdit::markDirtyNodesForRange(int start, int end, int charDelta)
if (start == end)
return;
- TextNode dummyNode(start, 0);
- TextNodeIterator it = std::lower_bound(d->textNodeMap.begin(), d->textNodeMap.end(), &dummyNode, &comesBefore);
+ TextNode dummyNode(start);
+
+ const TextNodeIterator textNodeMapBegin = d->textNodeMap.begin();
+ const TextNodeIterator textNodeMapEnd = d->textNodeMap.end();
+
+ TextNodeIterator it = std::lower_bound(textNodeMapBegin, textNodeMapEnd, dummyNode);
// qLowerBound gives us the first node past the start of the affected portion, rewind to the first node
// that starts at the last position before the edit position. (there might be several because of images)
- if (it != d->textNodeMap.begin()) {
+ if (it != textNodeMapBegin) {
--it;
- TextNode otherDummy((*it)->startPos(), 0);
- it = std::lower_bound(d->textNodeMap.begin(), d->textNodeMap.end(), &otherDummy, &comesBefore);
+ TextNode otherDummy(it->startPos());
+ it = std::lower_bound(textNodeMapBegin, textNodeMapEnd, otherDummy);
}
// mark the affected nodes as dirty
- while (it != d->textNodeMap.end()) {
- if ((*it)->startPos() <= end)
- (*it)->setDirty();
+ while (it != textNodeMapEnd) {
+ if (it->startPos() <= end)
+ it->setDirty();
else if (charDelta)
- (*it)->moveStartPos(charDelta);
+ it->moveStartPos(charDelta);
else
return;
++it;
@@ -2533,8 +2539,8 @@ void QQuickTextEdit::updateWholeDocument()
{
Q_D(QQuickTextEdit);
if (!d->textNodeMap.isEmpty()) {
- for (TextNode* node : qAsConst(d->textNodeMap))
- node->setDirty();
+ for (TextNode &node : d->textNodeMap)
+ node.setDirty();
}
polish();
@@ -2678,7 +2684,7 @@ void QQuickTextEditPrivate::handleFocusEvent(QFocusEvent *event)
void QQuickTextEditPrivate::addCurrentTextNodeToRoot(QQuickTextNodeEngine *engine, QSGTransformNode *root, QQuickTextNode *node, TextNodeIterator &it, int startPos)
{
engine->addToSceneGraph(node, QQuickText::Normal, QColor());
- it = textNodeMap.insert(it, new TextNode(startPos, node));
+ it = textNodeMap.insert(it, TextNode(startPos, node));
++it;
root->appendChildNode(node);
}
diff --git a/src/quick/items/qquicktextedit_p.h b/src/quick/items/qquicktextedit_p.h
index c883e39168..7a847ffeae 100644
--- a/src/quick/items/qquicktextedit_p.h
+++ b/src/quick/items/qquicktextedit_p.h
@@ -114,7 +114,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTextEdit : public QQuickImplicitSizeItem
Q_PROPERTY(qreal tabStopDistance READ tabStopDistance WRITE setTabStopDistance NOTIFY tabStopDistanceChanged REVISION 10)
public:
- QQuickTextEdit(QQuickItem *parent=0);
+ QQuickTextEdit(QQuickItem *parent=nullptr);
enum HAlignment {
AlignLeft = Qt::AlignLeft,
@@ -384,7 +384,7 @@ private:
void invalidateFontCaches();
protected:
- QQuickTextEdit(QQuickTextEditPrivate &dd, QQuickItem *parent = 0);
+ QQuickTextEdit(QQuickTextEditPrivate &dd, QQuickItem *parent = nullptr);
void geometryChanged(const QRectF &newGeometry,
const QRectF &oldGeometry) override;
diff --git a/src/quick/items/qquicktextedit_p_p.h b/src/quick/items/qquicktextedit_p_p.h
index 09718cb49a..46d3d5ff6b 100644
--- a/src/quick/items/qquicktextedit_p_p.h
+++ b/src/quick/items/qquicktextedit_p_p.h
@@ -59,6 +59,8 @@
#include <QtCore/qlist.h>
#include <private/qlazilyallocated_p.h>
+#include <limits>
+
QT_BEGIN_NAMESPACE
class QTextLayout;
class QQuickTextDocumentWithImageResources;
@@ -74,7 +76,8 @@ public:
typedef QQuickTextEdit Public;
struct Node {
- explicit Node(int startPos, QQuickTextNode* node)
+ explicit Node(int startPos = std::numeric_limits<int>::max(),
+ QQuickTextNode *node = nullptr)
: m_startPos(startPos), m_node(node), m_dirty(false) { }
QQuickTextNode* textNode() const { return m_node; }
void moveStartPos(int delta) { Q_ASSERT(m_startPos + delta > 0); m_startPos += delta; }
@@ -87,7 +90,7 @@ public:
QQuickTextNode* m_node;
bool m_dirty;
};
- typedef QList<Node*>::iterator TextNodeIterator;
+ typedef QList<Node>::iterator TextNodeIterator;
struct ExtraData {
ExtraData();
@@ -109,8 +112,8 @@ public:
QQuickTextEditPrivate()
: color(QRgb(0xFF000000)), selectionColor(QRgb(0xFF000080)), selectedTextColor(QRgb(0xFFFFFFFF))
, textMargin(0.0), xoff(0), yoff(0)
- , font(sourceFont), cursorComponent(0), cursorItem(0), document(0), control(0)
- , quickDocument(0), lastSelectionStart(0), lastSelectionEnd(0), lineCount(0)
+ , font(sourceFont), cursorComponent(nullptr), cursorItem(nullptr), document(nullptr), control(nullptr)
+ , quickDocument(nullptr), lastSelectionStart(0), lastSelectionEnd(0), lineCount(0)
, hAlign(QQuickTextEdit::AlignLeft), vAlign(QQuickTextEdit::AlignTop)
, format(QQuickTextEdit::PlainText), wrapMode(QQuickTextEdit::NoWrap)
, renderType(QQuickTextUtil::textRenderType<QQuickTextEdit>())
@@ -128,11 +131,6 @@ public:
{
}
- ~QQuickTextEditPrivate()
- {
- qDeleteAll(textNodeMap);
- }
-
static QQuickTextEditPrivate *get(QQuickTextEdit *item) {
return static_cast<QQuickTextEditPrivate *>(QObjectPrivate::get(item)); }
@@ -186,7 +184,7 @@ public:
QQuickTextDocumentWithImageResources *document;
QQuickTextControl *control;
QQuickTextDocument *quickDocument;
- QList<Node*> textNodeMap;
+ QList<Node> textNodeMap;
int lastSelectionStart;
int lastSelectionEnd;
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index d516b6f30c..b19c13c5ee 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -384,9 +384,9 @@ QString QQuickTextInputPrivate::realText() const
\qmlproperty bool QtQuick::TextInput::font.kerning
\since 5.10
- Enables or disables the kerning OpenType feature when shaping the text. This may improve performance
- when creating or changing the text, at the expense of some cosmetic features. The default value
- is true.
+ Enables or disables the kerning OpenType feature when shaping the text. Disabling this may
+ improve performance when creating or changing the text, at the expense of some cosmetic
+ features. The default value is true.
\qml
TextInput { text: "OATS FLAVOUR WAY"; font.kerning: false }
@@ -1108,7 +1108,8 @@ void QQuickTextInputPrivate::checkIsValid()
Q_Q(QQuickTextInput);
ValidatorState state = hasAcceptableInput(m_text);
- m_validInput = state != InvalidInput;
+ if (!m_maskData)
+ m_validInput = state != InvalidInput;
if (state != AcceptableInput) {
if (m_acceptableInput) {
m_acceptableInput = false;
@@ -1862,7 +1863,7 @@ void QQuickTextInput::invalidateFontCaches()
{
Q_D(QQuickTextInput);
- if (d->m_textLayout.engine() != 0)
+ if (d->m_textLayout.engine() != nullptr)
d->m_textLayout.engine()->resetFontEngineCache();
}
@@ -1885,7 +1886,7 @@ QSGNode *QQuickTextInput::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
Q_UNUSED(data);
Q_D(QQuickTextInput);
- if (d->updateType != QQuickTextInputPrivate::UpdatePaintNode && oldNode != 0) {
+ if (d->updateType != QQuickTextInputPrivate::UpdatePaintNode && oldNode != nullptr) {
// Update done in preprocess() in the nodes
d->updateType = QQuickTextInputPrivate::UpdateNone;
return oldNode;
@@ -1894,13 +1895,13 @@ QSGNode *QQuickTextInput::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
d->updateType = QQuickTextInputPrivate::UpdateNone;
QQuickTextNode *node = static_cast<QQuickTextNode *>(oldNode);
- if (node == 0)
+ if (node == nullptr)
node = new QQuickTextNode(this);
d->textNode = node;
- const bool showCursor = !isReadOnly() && d->cursorItem == 0 && d->cursorVisible && d->m_blinkStatus;
+ const bool showCursor = !isReadOnly() && d->cursorItem == nullptr && d->cursorVisible && d->m_blinkStatus;
- if (!d->textLayoutDirty && oldNode != 0) {
+ if (!d->textLayoutDirty && oldNode != nullptr) {
if (showCursor)
node->setCursor(cursorRectangle(), d->color);
else
@@ -3561,11 +3562,15 @@ bool QQuickTextInputPrivate::finishChange(int validateFromState, bool update, bo
#if QT_CONFIG(validator)
if (m_validator) {
QString textCopy = m_text;
+ if (m_maskData)
+ textCopy = maskString(0, m_text, true);
int cursorCopy = m_cursor;
QValidator::State state = m_validator->validate(textCopy, cursorCopy);
+ if (m_maskData)
+ textCopy = m_text;
m_validInput = state != QValidator::Invalid;
m_acceptableInput = state == QValidator::Acceptable;
- if (m_validInput) {
+ if (m_validInput && !m_maskData) {
if (m_text != textCopy) {
internalSetText(textCopy, cursorCopy);
return true;
@@ -3574,31 +3579,8 @@ bool QQuickTextInputPrivate::finishChange(int validateFromState, bool update, bo
}
}
#endif
-
- if (m_maskData) {
- m_validInput = true;
- if (m_text.length() != m_maxLength) {
- m_validInput = false;
- m_acceptableInput = false;
- } else {
- for (int i = 0; i < m_maxLength; ++i) {
- if (m_maskData[i].separator) {
- if (m_text.at(i) != m_maskData[i].maskChar) {
- m_validInput = false;
- m_acceptableInput = false;
- break;
- }
- } else {
- if (!isValidInput(m_text.at(i), m_maskData[i].maskChar)) {
- m_acceptableInput = false;
- if (m_text.at(i) != m_blank)
- m_validInput = false;
- break;
- }
- }
- }
- }
- }
+ if (m_maskData)
+ checkIsValid();
if (validateFromState >= 0 && wasValidInput && !m_validInput) {
if (m_transactions.count())
@@ -3846,7 +3828,7 @@ void QQuickTextInputPrivate::parseInputMask(const QString &maskFields)
if (maskFields.isEmpty() || delimiter == 0) {
if (m_maskData) {
delete [] m_maskData;
- m_maskData = 0;
+ m_maskData = nullptr;
m_maxLength = 32767;
internalSetText(QString());
}
diff --git a/src/quick/items/qquicktextinput_p.h b/src/quick/items/qquicktextinput_p.h
index b7d3fb00fa..c46a2f8128 100644
--- a/src/quick/items/qquicktextinput_p.h
+++ b/src/quick/items/qquicktextinput_p.h
@@ -115,7 +115,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTextInput : public QQuickImplicitSizeItem
Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged REVISION 6)
public:
- QQuickTextInput(QQuickItem * parent=0);
+ QQuickTextInput(QQuickItem * parent=nullptr);
~QQuickTextInput();
void componentComplete() override;
@@ -363,7 +363,7 @@ private:
void ensureActiveFocus();
protected:
- QQuickTextInput(QQuickTextInputPrivate &dd, QQuickItem *parent = 0);
+ QQuickTextInput(QQuickTextInputPrivate &dd, QQuickItem *parent = nullptr);
void geometryChanged(const QRectF &newGeometry,
const QRectF &oldGeometry) override;
diff --git a/src/quick/items/qquicktextinput_p_p.h b/src/quick/items/qquicktextinput_p_p.h
index c795aebfa9..a2e2f0f66d 100644
--- a/src/quick/items/qquicktextinput_p_p.h
+++ b/src/quick/items/qquicktextinput_p_p.h
@@ -99,9 +99,9 @@ public:
QQuickTextInputPrivate()
: hscroll(0)
, vscroll(0)
- , cursorItem(0)
- , textNode(0)
- , m_maskData(0)
+ , cursorItem(nullptr)
+ , textNode(nullptr)
+ , m_maskData(nullptr)
, color(QRgb(0xFF000000))
, selectionColor(QRgb(0xFF000080))
, selectedTextColor(QRgb(0xFFFFFFFF))
diff --git a/src/quick/items/qquicktextnode.cpp b/src/quick/items/qquicktextnode.cpp
index cf4e71adf5..13a8219cbd 100644
--- a/src/quick/items/qquicktextnode.cpp
+++ b/src/quick/items/qquicktextnode.cpp
@@ -78,7 +78,7 @@ namespace {
Creates an empty QQuickTextNode
*/
QQuickTextNode::QQuickTextNode(QQuickItem *ownerElement)
- : m_cursorNode(0), m_ownerElement(ownerElement), m_useNativeRenderer(false)
+ : m_cursorNode(nullptr), m_ownerElement(ownerElement), m_useNativeRenderer(false)
{
#ifdef QSG_RUNTIME_DESCRIPTION
qsgnode_set_description(this, QLatin1String("text"));
@@ -125,7 +125,7 @@ QSGGlyphNode *QQuickTextNode::addGlyphs(const QPointF &position, const QGlyphRun
node->geometry()->setIndexDataPattern(QSGGeometry::StaticPattern);
node->geometry()->setVertexDataPattern(QSGGeometry::StaticPattern);
- if (parentNode == 0)
+ if (parentNode == nullptr)
parentNode = this;
parentNode->appendChildNode(node);
@@ -134,7 +134,7 @@ QSGGlyphNode *QQuickTextNode::addGlyphs(const QPointF &position, const QGlyphRun
void QQuickTextNode::setCursor(const QRectF &rect, const QColor &color)
{
- if (m_cursorNode != 0)
+ if (m_cursorNode != nullptr)
delete m_cursorNode;
QSGRenderContext *sg = QQuickItemPrivate::get(m_ownerElement)->sceneGraphRenderContext();
@@ -147,7 +147,7 @@ void QQuickTextNode::clearCursor()
if (m_cursorNode)
removeChildNode(m_cursorNode);
delete m_cursorNode;
- m_cursorNode = 0;
+ m_cursorNode = nullptr;
}
void QQuickTextNode::addRectangleNode(const QRectF &rect, const QColor &color)
@@ -273,9 +273,9 @@ void QQuickTextNode::addTextLayout(const QPointF &position, QTextLayout *textLay
void QQuickTextNode::deleteContent()
{
- while (firstChild() != 0)
+ while (firstChild() != nullptr)
delete firstChild();
- m_cursorNode = 0;
+ m_cursorNode = nullptr;
qDeleteAll(m_textures);
m_textures.clear();
}
diff --git a/src/quick/items/qquicktextnodeengine.cpp b/src/quick/items/qquicktextnodeengine.cpp
index c179ab7163..a53ca2a2a4 100644
--- a/src/quick/items/qquicktextnodeengine.cpp
+++ b/src/quick/items/qquicktextnodeengine.cpp
@@ -75,7 +75,7 @@ QQuickTextNodeEngine::BinaryTreeNode::BinaryTreeNode(const QGlyphRun &g,
: glyphRun(g)
, boundingRect(brect)
, selectionState(selState)
- , clipNode(0)
+ , clipNode(nullptr)
, decorations(decs)
, color(c)
, backgroundColor(bc)
@@ -256,10 +256,10 @@ void QQuickTextNodeEngine::processCurrentLine()
QVarLengthArray<TextDecoration> pendingOverlines;
QVarLengthArray<TextDecoration> pendingStrikeOuts;
if (!sortedIndexes.isEmpty()) {
- QQuickDefaultClipNode *currentClipNode = m_hasSelection ? new QQuickDefaultClipNode(QRectF()) : 0;
+ QQuickDefaultClipNode *currentClipNode = m_hasSelection ? new QQuickDefaultClipNode(QRectF()) : nullptr;
bool currentClipNodeUsed = false;
for (int i=0; i<=sortedIndexes.size(); ++i) {
- BinaryTreeNode *node = 0;
+ BinaryTreeNode *node = nullptr;
if (i < sortedIndexes.size()) {
int sortedIndex = sortedIndexes.at(i);
Q_ASSERT(sortedIndex < m_currentLineTree.size());
@@ -275,7 +275,7 @@ void QQuickTextNodeEngine::processCurrentLine()
decorationRect.setY(m_position.y() + m_currentLine.y());
decorationRect.setHeight(m_currentLine.height());
- if (node != 0)
+ if (node != nullptr)
decorationRect.setRight(node->boundingRect.left());
TextDecoration textDecoration(currentSelectionState, decorationRect, lastColor);
@@ -295,14 +295,14 @@ void QQuickTextNodeEngine::processCurrentLine()
// If we've reached an unselected node from a selected node, we add the
// selection rect to the graph, and we add decoration every time the
// selection state changes, because that means the text color changes
- if (node == 0 || node->selectionState != currentSelectionState) {
+ if (node == nullptr || node->selectionState != currentSelectionState) {
currentRect.setY(m_position.y() + m_currentLine.y());
currentRect.setHeight(m_currentLine.height());
if (currentSelectionState == Selected)
m_selectionRects.append(currentRect);
- if (currentClipNode != 0) {
+ if (currentClipNode != nullptr) {
if (!currentClipNodeUsed) {
delete currentClipNode;
} else {
@@ -312,13 +312,13 @@ void QQuickTextNodeEngine::processCurrentLine()
}
}
- if (node != 0 && m_hasSelection)
+ if (node != nullptr && m_hasSelection)
currentClipNode = new QQuickDefaultClipNode(QRectF());
else
- currentClipNode = 0;
+ currentClipNode = nullptr;
currentClipNodeUsed = false;
- if (node != 0) {
+ if (node != nullptr) {
currentSelectionState = node->selectionState;
currentRect = node->boundingRect;
@@ -333,7 +333,7 @@ void QQuickTextNodeEngine::processCurrentLine()
currentRect = currentRect.united(node->boundingRect);
}
- if (node != 0) {
+ if (node != nullptr) {
if (node->selectionState == Selected) {
node->clipNode = currentClipNode;
currentClipNodeUsed = true;
@@ -449,7 +449,7 @@ void QQuickTextNodeEngine::addTextObject(const QPointF &position, const QTextCha
QTextFrameFormat::Position layoutPosition)
{
QTextObjectInterface *handler = textDocument->documentLayout()->handlerForObject(format.objectType());
- if (handler != 0) {
+ if (handler != nullptr) {
QImage image;
QSizeF size = handler->intrinsicSize(textDocument, pos, format);
@@ -651,7 +651,7 @@ void QQuickTextNodeEngine::addFrameDecorations(QTextDocument *document, QTextFra
QTextFrameFormat frameFormat = frame->format().toFrameFormat();
QTextTable *table = qobject_cast<QTextTable *>(frame);
- QRectF boundingRect = table == 0
+ QRectF boundingRect = table == nullptr
? documentLayout->frameBoundingRect(frame)
: documentLayout->tableBoundingRect(table);
@@ -674,7 +674,7 @@ void QQuickTextNodeEngine::addFrameDecorations(QTextDocument *document, QTextFra
addBorder(boundingRect.adjusted(frameFormat.leftMargin(), frameFormat.topMargin(),
-frameFormat.rightMargin(), -frameFormat.bottomMargin()),
borderWidth, borderStyle, borderBrush);
- if (table != 0) {
+ if (table != nullptr) {
int rows = table->rows();
int columns = table->columns();
@@ -781,7 +781,7 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
// Add all text with unselected color first
for (int i = 0; i < nodes.size(); ++i) {
const BinaryTreeNode *node = nodes.at(i);
- parentNode->addGlyphs(node->position, node->glyphRun, node->color, style, styleColor, 0);
+ parentNode->addGlyphs(node->position, node->glyphRun, node->color, style, styleColor, nullptr);
}
for (int i = 0; i < imageNodes.size(); ++i) {
@@ -812,7 +812,7 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
for (int i = 0; i < nodes.size(); ++i) {
const BinaryTreeNode *node = nodes.at(i);
QQuickDefaultClipNode *clipNode = node->clipNode;
- if (clipNode != 0 && clipNode->parent() == 0)
+ if (clipNode != nullptr && clipNode->parent() == nullptr)
parentNode->appendChildNode(clipNode);
if (node->selectionState == Selected) {
@@ -820,26 +820,26 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
int previousNodeIndex = i - 1;
int nextNodeIndex = i + 1;
const BinaryTreeNode *previousNode = previousNodeIndex < 0 ? 0 : nodes.at(previousNodeIndex);
- while (previousNode != 0 && qFuzzyCompare(previousNode->boundingRect.left(), node->boundingRect.left()))
+ while (previousNode != nullptr && qFuzzyCompare(previousNode->boundingRect.left(), node->boundingRect.left()))
previousNode = --previousNodeIndex < 0 ? 0 : nodes.at(previousNodeIndex);
const BinaryTreeNode *nextNode = nextNodeIndex == nodes.size() ? 0 : nodes.at(nextNodeIndex);
- if (previousNode != 0 && previousNode->selectionState == Unselected)
+ if (previousNode != nullptr && previousNode->selectionState == Unselected)
parentNode->addGlyphs(previousNode->position, previousNode->glyphRun, color, style, styleColor, clipNode);
- if (nextNode != 0 && nextNode->selectionState == Unselected)
+ if (nextNode != nullptr && nextNode->selectionState == Unselected)
parentNode->addGlyphs(nextNode->position, nextNode->glyphRun, color, style, styleColor, clipNode);
// If the previous or next node completely overlaps this one, then we have already drawn the glyphs of
// this node
bool drawCurrent = false;
- if (previousNode != 0 || nextNode != 0) {
+ if (previousNode != nullptr || nextNode != nullptr) {
for (int i = 0; i < node->ranges.size(); ++i) {
const QPair<int, int> &range = node->ranges.at(i);
int rangeLength = range.second - range.first + 1;
- if (previousNode != 0) {
+ if (previousNode != nullptr) {
for (int j = 0; j < previousNode->ranges.size(); ++j) {
const QPair<int, int> &otherRange = previousNode->ranges.at(j);
@@ -853,7 +853,7 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
}
}
- if (nextNode != 0 && rangeLength > 0) {
+ if (nextNode != nullptr && rangeLength > 0) {
for (int j = 0; j < nextNode->ranges.size(); ++j) {
const QPair<int, int> &otherRange = nextNode->ranges.at(j);
@@ -896,8 +896,8 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
void QQuickTextNodeEngine::mergeFormats(QTextLayout *textLayout, QVarLengthArray<QTextLayout::FormatRange> *mergedFormats)
{
- Q_ASSERT(mergedFormats != 0);
- if (textLayout == 0)
+ Q_ASSERT(mergedFormats != nullptr);
+ if (textLayout == nullptr)
return;
QVector<QTextLayout::FormatRange> additionalFormats = textLayout->formats();
@@ -911,7 +911,7 @@ void QQuickTextNodeEngine::mergeFormats(QTextLayout *textLayout, QVarLengthArray
QTextLayout::FormatRange *lastFormat = mergedFormats->data() + mergedFormats->size() - 1;
if (additionalFormat.start < lastFormat->start + lastFormat->length) {
- QTextLayout::FormatRange *mergedRange = 0;
+ QTextLayout::FormatRange *mergedRange = nullptr;
int length = additionalFormat.length;
if (additionalFormat.start > lastFormat->start) {
diff --git a/src/quick/items/qquicktextutil.cpp b/src/quick/items/qquicktextutil.cpp
index 6aa6c5cb4b..eb356a9c48 100644
--- a/src/quick/items/qquicktextutil.cpp
+++ b/src/quick/items/qquicktextutil.cpp
@@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
QQuickItem *QQuickTextUtil::createCursor(
QQmlComponent *component, QQuickItem *parent, const QRectF &rectangle, const char *className)
{
- QQuickItem *item = 0;
+ QQuickItem *item = nullptr;
if (component->isReady()) {
QQmlContext *creationContext = component->creationContext();
diff --git a/src/quick/items/qquicktranslate_p.h b/src/quick/items/qquicktranslate_p.h
index b0199cef40..b6ea43342c 100644
--- a/src/quick/items/qquicktranslate_p.h
+++ b/src/quick/items/qquicktranslate_p.h
@@ -66,7 +66,7 @@ class Q_AUTOTEST_EXPORT QQuickTranslate : public QQuickTransform
Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
public:
- QQuickTranslate(QObject *parent = 0);
+ QQuickTranslate(QObject *parent = nullptr);
~QQuickTranslate();
qreal x() const;
@@ -96,7 +96,7 @@ class Q_AUTOTEST_EXPORT QQuickScale : public QQuickTransform
Q_PROPERTY(qreal yScale READ yScale WRITE setYScale NOTIFY yScaleChanged)
Q_PROPERTY(qreal zScale READ zScale WRITE setZScale NOTIFY zScaleChanged)
public:
- QQuickScale(QObject *parent = 0);
+ QQuickScale(QObject *parent = nullptr);
~QQuickScale();
QVector3D origin() const;
@@ -133,7 +133,7 @@ class Q_AUTOTEST_EXPORT QQuickRotation : public QQuickTransform
Q_PROPERTY(qreal angle READ angle WRITE setAngle NOTIFY angleChanged)
Q_PROPERTY(QVector3D axis READ axis WRITE setAxis NOTIFY axisChanged)
public:
- QQuickRotation(QObject *parent = 0);
+ QQuickRotation(QObject *parent = nullptr);
~QQuickRotation();
QVector3D origin() const;
@@ -164,7 +164,7 @@ class Q_AUTOTEST_EXPORT QQuickMatrix4x4 : public QQuickTransform
Q_PROPERTY(QMatrix4x4 matrix READ matrix WRITE setMatrix NOTIFY matrixChanged)
public:
- QQuickMatrix4x4(QObject *parent = 0);
+ QQuickMatrix4x4(QObject *parent = nullptr);
~QQuickMatrix4x4();
QMatrix4x4 matrix() const;
diff --git a/src/quick/items/qquickview.cpp b/src/quick/items/qquickview.cpp
index 954ea5553a..17f6539974 100644
--- a/src/quick/items/qquickview.cpp
+++ b/src/quick/items/qquickview.cpp
@@ -70,13 +70,13 @@ void QQuickViewPrivate::init(QQmlEngine* e)
{
// The content item has CppOwnership policy (set in QQuickWindow). Ensure the presence of a JS
// wrapper so that the garbage collector can see the policy.
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine.data());
+ QV4::ExecutionEngine *v4 = engine.data()->handle();
QV4::QObjectWrapper::wrap(v4, contentItem);
}
}
QQuickViewPrivate::QQuickViewPrivate()
- : root(0), component(0), resizeMode(QQuickView::SizeViewToRootObject), initialSize(0,0)
+ : root(nullptr), component(nullptr), resizeMode(QQuickView::SizeViewToRootObject), initialSize(0,0)
{
}
@@ -94,11 +94,11 @@ void QQuickViewPrivate::execute()
if (root) {
delete root;
- root = 0;
+ root = nullptr;
}
if (component) {
delete component;
- component = 0;
+ component = nullptr;
}
if (!source.isEmpty()) {
QML_MEMORY_SCOPE_URL(engine.data()->baseUrl().resolved(source));
@@ -202,6 +202,16 @@ QQuickView::QQuickView(QQmlEngine* engine, QWindow *parent)
}
/*!
+ \internal
+*/
+QQuickView::QQuickView(const QUrl &source, QQuickRenderControl *control)
+ : QQuickWindow(*(new QQuickViewPrivate), control)
+{
+ d_func()->init();
+ setSource(source);
+}
+
+/*!
Destroys the QQuickView.
*/
QQuickView::~QQuickView()
@@ -210,7 +220,7 @@ QQuickView::~QQuickView()
// be a child of the QQuickViewPrivate, and will be destroyed by its dtor
Q_D(QQuickView);
delete d->root;
- d->root = 0;
+ d->root = nullptr;
}
/*!
@@ -254,7 +264,7 @@ void QQuickView::setContent(const QUrl& url, QQmlComponent *component, QObject*
if (d->component && d->component->isError()) {
const QList<QQmlError> errorList = d->component->errors();
for (const QQmlError &error : errorList) {
- QMessageLogger(error.url().toString().toLatin1().constData(), error.line(), 0).warning()
+ QMessageLogger(error.url().toString().toLatin1().constData(), error.line(), nullptr).warning()
<< error;
}
emit statusChanged(status());
@@ -283,7 +293,7 @@ QUrl QQuickView::source() const
QQmlEngine* QQuickView::engine() const
{
Q_D(const QQuickView);
- return d->engine ? const_cast<QQmlEngine *>(d->engine.data()) : 0;
+ return d->engine ? const_cast<QQmlEngine *>(d->engine.data()) : nullptr;
}
/*!
@@ -296,7 +306,7 @@ QQmlEngine* QQuickView::engine() const
QQmlContext* QQuickView::rootContext() const
{
Q_D(const QQuickView);
- return d->engine ? d->engine.data()->rootContext() : 0;
+ return d->engine ? d->engine.data()->rootContext() : nullptr;
}
/*!
@@ -465,7 +475,7 @@ void QQuickView::continueExecute()
if (d->component->isError()) {
const QList<QQmlError> errorList = d->component->errors();
for (const QQmlError &error : errorList) {
- QMessageLogger(error.url().toString().toLatin1().constData(), error.line(), 0).warning()
+ QMessageLogger(error.url().toString().toLatin1().constData(), error.line(), nullptr).warning()
<< error;
}
emit statusChanged(status());
@@ -477,7 +487,7 @@ void QQuickView::continueExecute()
if (d->component->isError()) {
const QList<QQmlError> errorList = d->component->errors();
for (const QQmlError &error : errorList) {
- QMessageLogger(error.url().toString().toLatin1().constData(), error.line(), 0).warning()
+ QMessageLogger(error.url().toString().toLatin1().constData(), error.line(), nullptr).warning()
<< error;
}
emit statusChanged(status());
@@ -511,7 +521,7 @@ void QQuickViewPrivate::setRootObject(QObject *obj)
<< "Ensure your QML code is written for QtQuick 2, and uses a root that is or" << endl
<< "inherits from QtQuick's Item (not a Timer, QtObject, etc)." << endl;
delete obj;
- root = 0;
+ root = nullptr;
}
if (root) {
initialSize = rootObjectSize();
diff --git a/src/quick/items/qquickview.h b/src/quick/items/qquickview.h
index 014d02e7f5..ecae25e90b 100644
--- a/src/quick/items/qquickview.h
+++ b/src/quick/items/qquickview.h
@@ -62,7 +62,8 @@ public:
explicit QQuickView(QWindow *parent = nullptr);
QQuickView(QQmlEngine* engine, QWindow *parent);
explicit QQuickView(const QUrl &source, QWindow *parent = nullptr);
- virtual ~QQuickView();
+ QQuickView(const QUrl &source, QQuickRenderControl *renderControl);
+ ~QQuickView() override;
QUrl source() const;
diff --git a/src/quick/items/qquickview_p.h b/src/quick/items/qquickview_p.h
index f92d4b95d6..3f284c0519 100644
--- a/src/quick/items/qquickview_p.h
+++ b/src/quick/items/qquickview_p.h
@@ -93,7 +93,7 @@ public:
void updateSize();
void setRootObject(QObject *);
- void init(QQmlEngine* e = 0);
+ void init(QQmlEngine* e = nullptr);
QSize rootObjectSize() const;
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index 462790e1b1..26b97d452a 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtQuick module of the Qt Toolkit.
@@ -78,6 +78,9 @@
# include <private/qopenglvertexarrayobject_p.h>
# include <private/qsgdefaultrendercontext_p.h>
#endif
+#ifndef QT_NO_DEBUG_STREAM
+#include <private/qdebug_p.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -88,6 +91,7 @@ Q_LOGGING_CATEGORY(DBG_MOUSE_TARGET, "qt.quick.mouse.target")
Q_LOGGING_CATEGORY(DBG_HOVER_TRACE, "qt.quick.hover.trace")
Q_LOGGING_CATEGORY(DBG_FOCUS, "qt.quick.focus")
Q_LOGGING_CATEGORY(DBG_DIRTY, "qt.quick.dirty")
+Q_LOGGING_CATEGORY(lcTransient, "qt.quick.window.transient")
extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha);
@@ -481,25 +485,25 @@ void QQuickWindowPrivate::renderSceneGraph(const QSize &size)
}
QQuickWindowPrivate::QQuickWindowPrivate()
- : contentItem(0)
- , activeFocusItem(0)
+ : contentItem(nullptr)
+ , activeFocusItem(nullptr)
#if QT_CONFIG(cursor)
- , cursorItem(0)
+ , cursorItem(nullptr)
#endif
#if QT_CONFIG(draganddrop)
- , dragGrabber(0)
+ , dragGrabber(nullptr)
#endif
, touchMouseId(-1)
, touchMouseDevice(nullptr)
, touchMousePressTimestamp(0)
- , dirtyItemList(0)
+ , dirtyItemList(nullptr)
, devicePixelRatio(0)
- , context(0)
- , renderer(0)
- , windowManager(0)
- , renderControl(0)
+ , context(nullptr)
+ , renderer(nullptr)
+ , windowManager(nullptr)
+ , renderControl(nullptr)
, pointerEventRecursionGuard(0)
- , customRenderStage(0)
+ , customRenderStage(nullptr)
, clearColor(Qt::white)
, clearBeforeRendering(true)
, persistentGLContext(true)
@@ -509,10 +513,10 @@ QQuickWindowPrivate::QQuickWindowPrivate()
, allowChildEventFiltering(true)
, allowDoubleClick(true)
, lastFocusReason(Qt::OtherFocusReason)
- , renderTarget(0)
+ , renderTarget(nullptr)
, renderTargetId(0)
- , vaoHelper(0)
- , incubationController(0)
+ , vaoHelper(nullptr)
+ , incubationController(nullptr)
{
#if QT_CONFIG(draganddrop)
dragGrabber = new QQuickDragGrabber;
@@ -578,13 +582,21 @@ void QQuickWindowPrivate::init(QQuickWindow *c, QQuickRenderControl *control)
QObject::connect(q, SIGNAL(focusObjectChanged(QObject*)), q, SIGNAL(activeFocusItemChanged()));
QObject::connect(q, SIGNAL(screenChanged(QScreen*)), q, SLOT(handleScreenChanged(QScreen*)));
-
+ QObject::connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
+ q, SLOT(handleApplicationStateChanged(Qt::ApplicationState)));
QObject::connect(q, SIGNAL(frameSwapped()), q, SLOT(runJobsAfterSwap()), Qt::DirectConnection);
if (QQmlInspectorService *service = QQmlDebugConnector::service<QQmlInspectorService>())
service->addWindow(q);
}
+void QQuickWindow::handleApplicationStateChanged(Qt::ApplicationState state)
+{
+ Q_D(QQuickWindow);
+ if (state != Qt::ApplicationActive && d->contentItem)
+ d->contentItem->windowDeactivateEvent();
+}
+
/*!
\property QQuickWindow::data
\internal
@@ -592,7 +604,7 @@ void QQuickWindowPrivate::init(QQuickWindow *c, QQuickRenderControl *control)
QQmlListProperty<QObject> QQuickWindowPrivate::data()
{
- return QQmlListProperty<QObject>(q_func(), 0, QQuickWindowPrivate::data_append,
+ return QQmlListProperty<QObject>(q_func(), nullptr, QQuickWindowPrivate::data_append,
QQuickWindowPrivate::data_count,
QQuickWindowPrivate::data_at,
QQuickWindowPrivate::data_clear);
@@ -749,45 +761,6 @@ bool QQuickWindowPrivate::deliverTouchAsMouse(QQuickItem *item, QQuickPointerEve
return false;
}
-void QQuickWindowPrivate::setMouseGrabber(QQuickItem *grabber)
-{
- Q_Q(QQuickWindow);
- if (q->mouseGrabberItem() == grabber)
- return;
-
- QQuickItem *oldGrabber = q->mouseGrabberItem();
- qCDebug(DBG_MOUSE_TARGET) << "grabber" << oldGrabber << "->" << grabber;
-
- if (grabber && touchMouseId != -1 && touchMouseDevice) {
- // update the touch item for mouse touch id to the new grabber
- qCDebug(DBG_TOUCH_TARGET) << "TP (mouse)" << hex << touchMouseId << "->" << q->mouseGrabberItem();
- auto point = pointerEventInstance(touchMouseDevice)->pointById(touchMouseId);
- if (point) {
- auto originalEvent = pointerEventInstance(point->pointerEvent()->device());
- for (int i = 0; i < originalEvent->pointCount(); ++i)
- originalEvent->point(i)->cancelExclusiveGrab();
- point->setGrabberItem(grabber);
- for (auto handler : point->passiveGrabbers())
- point->cancelPassiveGrab(handler);
- }
- } else {
- QQuickPointerEvent *event = pointerEventInstance(QQuickPointerDevice::genericMouseDevice());
- Q_ASSERT(event->pointCount() == 1);
- auto point = event->point(0);
- point->setGrabberItem(grabber);
- for (auto handler : point->passiveGrabbers())
- point->cancelPassiveGrab(handler);
- }
-
-
- if (oldGrabber) {
- QEvent e(QEvent::UngrabMouse);
- hasFiltered.clear();
- if (!sendFilteredMouseEvent(&e, oldGrabber, oldGrabber->parentItem()))
- oldGrabber->mouseUngrabEvent();
- }
-}
-
void QQuickWindowPrivate::grabTouchPoints(QObject *grabber, const QVector<int> &ids)
{
for (int i = 0; i < ids.count(); ++i) {
@@ -835,18 +808,25 @@ void QQuickWindowPrivate::removeGrabber(QQuickItem *grabber, bool mouse, bool to
{
Q_Q(QQuickWindow);
if (Q_LIKELY(mouse) && q->mouseGrabberItem() == grabber) {
- qCDebug(DBG_MOUSE_TARGET) << "removeGrabber" << q->mouseGrabberItem() << "-> null";
- setMouseGrabber(nullptr);
+ bool fromTouch = isDeliveringTouchAsMouse();
+ auto point = fromTouch ?
+ pointerEventInstance(touchMouseDevice)->pointById(touchMouseId) :
+ pointerEventInstance(QQuickPointerDevice::genericMouseDevice())->point(0);
+ QQuickItem *oldGrabber = point->grabberItem();
+ qCDebug(DBG_MOUSE_TARGET) << "removeGrabber" << oldGrabber << "-> null";
+ point->setGrabberItem(nullptr);
+ sendUngrabEvent(oldGrabber, fromTouch);
}
if (Q_LIKELY(touch)) {
bool ungrab = false;
const auto touchDevices = QQuickPointerDevice::touchDevices();
for (auto device : touchDevices) {
- auto pointerEvent = pointerEventInstance(device);
- for (int i = 0; i < pointerEvent->pointCount(); ++i) {
- if (pointerEvent->point(i)->exclusiveGrabber() == grabber) {
- pointerEvent->point(i)->setGrabberItem(nullptr);
- ungrab = true;
+ if (auto pointerEvent = queryPointerEventInstance(device)) {
+ for (int i = 0; i < pointerEvent->pointCount(); ++i) {
+ if (pointerEvent->point(i)->exclusiveGrabber() == grabber) {
+ pointerEvent->point(i)->setGrabberItem(nullptr);
+ ungrab = true;
+ }
}
}
}
@@ -855,6 +835,19 @@ void QQuickWindowPrivate::removeGrabber(QQuickItem *grabber, bool mouse, bool to
}
}
+void QQuickWindowPrivate::sendUngrabEvent(QQuickItem *grabber, bool touch)
+{
+ if (!grabber)
+ return;
+ QEvent e(QEvent::UngrabMouse);
+ hasFiltered.clear();
+ if (!sendFilteredMouseEvent(&e, grabber, grabber->parentItem())) {
+ grabber->mouseUngrabEvent();
+ if (touch)
+ grabber->touchUngrabEvent();
+ }
+}
+
/*!
Translates the data in \a touchEvent to this window. This method leaves the item local positions in
\a touchEvent untouched (these are filled in later).
@@ -898,12 +891,12 @@ void QQuickWindowPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, Q
qCDebug(DBG_FOCUS) << " item:" << (QObject *)item;
qCDebug(DBG_FOCUS) << " activeFocusItem:" << (QObject *)activeFocusItem;
- QQuickItemPrivate *scopePrivate = scope ? QQuickItemPrivate::get(scope) : 0;
+ QQuickItemPrivate *scopePrivate = scope ? QQuickItemPrivate::get(scope) : nullptr;
QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
- QQuickItem *oldActiveFocusItem = 0;
+ QQuickItem *oldActiveFocusItem = nullptr;
QQuickItem *currentActiveFocusItem = activeFocusItem;
- QQuickItem *newActiveFocusItem = 0;
+ QQuickItem *newActiveFocusItem = nullptr;
bool sendFocusIn = false;
lastFocusReason = reason;
@@ -929,7 +922,7 @@ void QQuickWindowPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, Q
QGuiApplication::inputMethod()->commit();
#endif
- activeFocusItem = 0;
+ activeFocusItem = nullptr;
QQuickItem *afi = oldActiveFocusItem;
while (afi && afi != scope) {
@@ -1009,7 +1002,7 @@ void QQuickWindowPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
qCDebug(DBG_FOCUS) << " item:" << (QObject *)item;
qCDebug(DBG_FOCUS) << " activeFocusItem:" << (QObject *)activeFocusItem;
- QQuickItemPrivate *scopePrivate = 0;
+ QQuickItemPrivate *scopePrivate = nullptr;
if (scope) {
scopePrivate = QQuickItemPrivate::get(scope);
if ( !scopePrivate->subFocusItem )
@@ -1017,8 +1010,8 @@ void QQuickWindowPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
}
QQuickItem *currentActiveFocusItem = activeFocusItem;
- QQuickItem *oldActiveFocusItem = 0;
- QQuickItem *newActiveFocusItem = 0;
+ QQuickItem *oldActiveFocusItem = nullptr;
+ QQuickItem *newActiveFocusItem = nullptr;
lastFocusReason = reason;
@@ -1035,7 +1028,7 @@ void QQuickWindowPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
QGuiApplication::inputMethod()->commit();
#endif
- activeFocusItem = 0;
+ activeFocusItem = nullptr;
if (oldActiveFocusItem) {
QQuickItem *afi = oldActiveFocusItem;
@@ -1284,13 +1277,21 @@ QQuickWindow::QQuickWindow(QQuickWindowPrivate &dd, QWindow *parent)
\internal
*/
QQuickWindow::QQuickWindow(QQuickRenderControl *control)
- : QWindow(*(new QQuickWindowPrivate), 0)
+ : QWindow(*(new QQuickWindowPrivate), nullptr)
{
Q_D(QQuickWindow);
d->init(this, control);
}
-
+/*!
+ \internal
+*/
+QQuickWindow::QQuickWindow(QQuickWindowPrivate &dd, QQuickRenderControl *control)
+ : QWindow(dd, nullptr)
+{
+ Q_D(QQuickWindow);
+ d->init(this, control);
+}
/*!
Destroys the window.
@@ -1306,11 +1307,13 @@ QQuickWindow::~QQuickWindow()
d->windowManager->windowDestroyed(this);
}
- delete d->incubationController; d->incubationController = 0;
+ delete d->incubationController; d->incubationController = nullptr;
#if QT_CONFIG(draganddrop)
- delete d->dragGrabber; d->dragGrabber = 0;
+ delete d->dragGrabber; d->dragGrabber = nullptr;
#endif
- delete d->contentItem; d->contentItem = 0;
+ delete d->contentItem; d->contentItem = nullptr;
+ qDeleteAll(d->pointerEventInstances);
+ d->pointerEventInstances.clear();
d->renderJobMutex.lock();
qDeleteAll(d->beforeSynchronizingJobs);
@@ -1511,15 +1514,16 @@ QQuickItem *QQuickWindow::mouseGrabberItem() const
{
Q_D(const QQuickWindow);
- if (d->touchMouseId != -1 && d->touchMouseDevice) {
- QQuickPointerEvent *event = d->pointerEventInstance(d->touchMouseDevice);
- auto point = event->pointById(d->touchMouseId);
- return point ? point->grabberItem() : nullptr;
+ if (d->isDeliveringTouchAsMouse()) {
+ if (QQuickPointerEvent *event = d->queryPointerEventInstance(d->touchMouseDevice)) {
+ auto point = event->pointById(d->touchMouseId);
+ return point ? point->grabberItem() : nullptr;
+ }
+ } else if (QQuickPointerEvent *event = d->queryPointerEventInstance(QQuickPointerDevice::genericMouseDevice())) {
+ Q_ASSERT(event->pointCount());
+ return event->point(0)->grabberItem();
}
-
- QQuickPointerEvent *event = d->pointerEventInstance(QQuickPointerDevice::genericMouseDevice());
- Q_ASSERT(event->pointCount());
- return event->point(0)->grabberItem();
+ return nullptr;
}
@@ -1693,8 +1697,10 @@ void QQuickWindowPrivate::deliverToPassiveGrabbers(const QVector<QPointer <QQuic
alreadyFiltered = sendFilteredPointerEvent(pointerEvent, par);
sendFilteredPointerEventResult << qMakePair<QQuickItem*, bool>(par, alreadyFiltered);
}
- if (!alreadyFiltered)
+ if (!alreadyFiltered) {
+ pointerEvent->localize(handler->parentItem());
handler->handlePointerEvent(pointerEvent);
+ }
}
}
}
@@ -1709,28 +1715,31 @@ void QQuickWindowPrivate::deliverMouseEvent(QQuickPointerMouseEvent *pointerEven
if (point->exclusiveGrabber()) {
if (auto grabber = point->grabberItem()) {
+ bool handled = false;
if (sendFilteredPointerEvent(pointerEvent, grabber))
- return;
+ handled = true;
// if the grabber is an Item:
// if the update consists of changing button state, don't accept it unless
// the button is one in which the grabber is interested
Qt::MouseButtons acceptedButtons = grabber->acceptedMouseButtons();
- if (pointerEvent->button() != Qt::NoButton && acceptedButtons
+ if (!handled && pointerEvent->button() != Qt::NoButton && acceptedButtons
&& !(acceptedButtons & pointerEvent->button())) {
pointerEvent->setAccepted(false);
- return;
+ handled = true;
}
// send update
- QPointF localPos = grabber->mapFromScene(lastMousePosition);
- auto me = pointerEvent->asMouseEvent(localPos);
- me->accept();
- QCoreApplication::sendEvent(grabber, me);
- point->setAccepted(me->isAccepted());
+ if (!handled) {
+ QPointF localPos = grabber->mapFromScene(lastMousePosition);
+ auto me = pointerEvent->asMouseEvent(localPos);
+ me->accept();
+ QCoreApplication::sendEvent(grabber, me);
+ point->setAccepted(me->isAccepted());
+ }
// release event: ungrab if no buttons are pressed anymore
if (mouseIsReleased)
- setMouseGrabber(nullptr);
+ removeGrabber(grabber, true, isDeliveringTouchAsMouse());
} else {
// if the grabber is not an Item, it must be a PointerHandler
auto handler = point->grabberPointerHandler();
@@ -1740,6 +1749,7 @@ void QQuickWindowPrivate::deliverMouseEvent(QQuickPointerMouseEvent *pointerEven
if (mouseIsReleased)
point->setGrabberPointerHandler(nullptr, true);
}
+ deliverToPassiveGrabbers(point->passiveGrabbers(), pointerEvent);
} else {
bool delivered = false;
if (pointerEvent->isPressEvent()) {
@@ -1756,6 +1766,8 @@ void QQuickWindowPrivate::deliverMouseEvent(QQuickPointerMouseEvent *pointerEven
QVector<QQuickItem *> targetItems = pointerTargets(contentItem, point->scenePosition(), false, false);
for (QQuickItem *item : targetItems) {
QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+ if (!itemPrivate->extra.isAllocated() || itemPrivate->extra->pointerHandlers.isEmpty())
+ continue;
pointerEvent->localize(item);
if (!sendFilteredPointerEvent(pointerEvent, item)) {
if (itemPrivate->handlePointerEvent(pointerEvent, true)) // avoid re-delivering to grabbers
@@ -1931,7 +1943,8 @@ bool QQuickWindowPrivate::deliverNativeGestureEvent(QQuickItem *item, QNativeGes
{
QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
- if ((itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) && !item->contains(event->localPos()))
+ QPointF p = item->mapFromScene(event->windowPos());
+ if ((itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) && !item->contains(p))
return false;
QList<QQuickItem *> children = itemPrivate->paintOrderChildItems();
@@ -1954,7 +1967,6 @@ bool QQuickWindowPrivate::deliverNativeGestureEvent(QQuickItem *item, QNativeGes
}
// If still not accepted, try direct delivery to the item
- QPointF p = item->mapFromScene(event->localPos());
if (item->contains(p)) {
QNativeGestureEvent copy(event->gestureType(), event->device(), p, event->windowPos(), event->screenPos(),
event->value(), 0L, 0L); // TODO can't copy things I can't access
@@ -1975,15 +1987,16 @@ bool QQuickWindowPrivate::deliverTouchCancelEvent(QTouchEvent *event)
qCDebug(DBG_TOUCH) << event;
Q_Q(QQuickWindow);
+ if (q->mouseGrabberItem())
+ q->mouseGrabberItem()->ungrabMouse();
+ touchMouseId = -1;
+ touchMouseDevice = nullptr;
+
// A TouchCancel event will typically not contain any points.
// Deliver it to all items and handlers that have active touches.
QQuickPointerEvent *pointerEvent = pointerEventInstance(QQuickPointerDevice::touchDevice(event->device()));
for (int i = 0; i < pointerEvent->pointCount(); ++i)
pointerEvent->point(i)->cancelExclusiveGrabImpl(event);
- touchMouseId = -1;
- touchMouseDevice = nullptr;
- if (q->mouseGrabberItem())
- q->mouseGrabberItem()->ungrabMouse();
// The next touch event can only be a TouchBegin, so clean up.
pointerEvent->clearGrabbers();
@@ -2202,7 +2215,7 @@ void QQuickWindowPrivate::flushFrameSynchronousEvents()
}
}
-QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QQuickPointerDevice *device, QEvent::Type eventType) const
+QQuickPointerEvent *QQuickWindowPrivate::queryPointerEventInstance(QQuickPointerDevice *device, QEvent::Type eventType) const
{
// Search for a matching reusable event object.
for (QQuickPointerEvent *e : pointerEventInstances) {
@@ -2215,9 +2228,14 @@ QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QQuickPointerDevic
if (e->device() == device)
return e;
}
+ return nullptr;
+}
- // Not found: we have to create a suitable event instance.
- QQuickPointerEvent *ev = nullptr;
+QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QQuickPointerDevice *device, QEvent::Type eventType) const
+{
+ QQuickPointerEvent *ev = queryPointerEventInstance(device, eventType);
+ if (ev)
+ return ev;
QQuickWindow *q = const_cast<QQuickWindow*>(q_func());
switch (device->type()) {
case QQuickPointerDevice::Mouse:
@@ -2278,6 +2296,7 @@ QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QEvent *event) con
void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event)
{
+ Q_Q(QQuickWindow);
// If users spin the eventloop as a result of event delivery, we disable
// event compression and send events directly. This is because we consider
// the usecase a bit evil, but we at least don't want to lose events.
@@ -2287,8 +2306,10 @@ void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event)
if (event->asPointerMouseEvent()) {
deliverMouseEvent(event->asPointerMouseEvent());
// failsafe: never allow any kind of grab to persist after release
- if (event->isReleaseEvent() && event->buttons() == Qt::NoButton)
+ if (event->isReleaseEvent() && event->buttons() == Qt::NoButton) {
event->clearGrabbers();
+ sendUngrabEvent(q->mouseGrabberItem(), false);
+ }
} else if (event->asPointerTouchEvent()) {
deliverTouchEvent(event->asPointerTouchEvent());
} else {
@@ -2399,6 +2420,7 @@ void QQuickWindowPrivate::deliverTouchEvent(QQuickPointerTouchEvent *event)
// Deliver touch points to existing grabbers
void QQuickWindowPrivate::deliverUpdatedTouchPoints(QQuickPointerTouchEvent *event)
{
+ bool done = false;
const auto grabbers = event->exclusiveGrabbers();
for (auto grabber : grabbers) {
// The grabber is guaranteed to be either an item or a handler.
@@ -2408,52 +2430,50 @@ void QQuickWindowPrivate::deliverUpdatedTouchPoints(QQuickPointerTouchEvent *eve
QQuickPointerHandler *handler = static_cast<QQuickPointerHandler *>(grabber);
receiver = static_cast<QQuickPointerHandler *>(grabber)->parentItem();
if (sendFilteredPointerEvent(event, receiver))
- return;
+ done = true;
event->localize(receiver);
handler->handlePointerEvent(event);
- if (event->allPointsAccepted())
- return;
}
+ if (done)
+ break;
// If the grabber is an item or the grabbing handler didn't handle it,
// then deliver the event to the item (which may have multiple handlers).
deliverMatchingPointsToItem(receiver, event);
}
- // If some points weren't grabbed, deliver only to non-grabber PointerHandlers
- if (!event->allPointsGrabbed()) {
- int pointCount = event->pointCount();
+ // Deliver to each eventpoint's passive grabbers (but don't visit any handler more than once)
+ int pointCount = event->pointCount();
+ for (int i = 0; i < pointCount; ++i) {
+ QQuickEventPoint *point = event->point(i);
+ deliverToPassiveGrabbers(point->passiveGrabbers(), event);
+ }
- // Deliver to each eventpoint's passive grabbers (but don't visit any handler more than once)
+ if (done)
+ return;
+
+ // If some points weren't grabbed, deliver only to non-grabber PointerHandlers in reverse paint order
+ if (!event->allPointsGrabbed()) {
+ QVector<QQuickItem *> targetItems;
for (int i = 0; i < pointCount; ++i) {
QQuickEventPoint *point = event->point(i);
- deliverToPassiveGrabbers(point->passiveGrabbers(), event);
- }
-
- // If some points weren't grabbed, deliver to non-grabber PointerHandlers in reverse paint order
- if (!event->allPointsGrabbed()) {
- QVector<QQuickItem *> targetItems;
- for (int i = 0; i < pointCount; ++i) {
- QQuickEventPoint *point = event->point(i);
- if (point->state() == QQuickEventPoint::Pressed)
- continue; // presses were delivered earlier; not the responsibility of deliverUpdatedTouchPoints
- QVector<QQuickItem *> targetItemsForPoint = pointerTargets(contentItem, point->scenePosition(), false, false);
- if (targetItems.count()) {
- targetItems = mergePointerTargets(targetItems, targetItemsForPoint);
- } else {
- targetItems = targetItemsForPoint;
- }
- }
-
- for (QQuickItem *item: targetItems) {
- if (grabbers.contains(item))
- continue;
- QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
- event->localize(item);
- itemPrivate->handlePointerEvent(event, true); // avoid re-delivering to grabbers
- if (event->allPointsGrabbed())
- break;
+ if (point->state() == QQuickEventPoint::Pressed)
+ continue; // presses were delivered earlier; not the responsibility of deliverUpdatedTouchPoints
+ QVector<QQuickItem *> targetItemsForPoint = pointerTargets(contentItem, point->scenePosition(), false, false);
+ if (targetItems.count()) {
+ targetItems = mergePointerTargets(targetItems, targetItemsForPoint);
+ } else {
+ targetItems = targetItemsForPoint;
}
}
+ for (QQuickItem *item : targetItems) {
+ if (grabbers.contains(item))
+ continue;
+ QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+ event->localize(item);
+ itemPrivate->handlePointerEvent(event, true); // avoid re-delivering to grabbers
+ if (event->allPointsGrabbed())
+ break;
+ }
}
}
@@ -2492,7 +2512,7 @@ bool QQuickWindowPrivate::deliverPressOrReleaseEvent(QQuickPointerEvent *event,
continue;
deliverMatchingPointsToItem(item, event, handlersOnly);
if (event->allPointsAccepted())
- break;
+ handlersOnly = true;
}
return event->allPointsAccepted();
@@ -2507,13 +2527,12 @@ void QQuickWindowPrivate::deliverMatchingPointsToItem(QQuickItem *item, QQuickPo
// Let the Item's handlers (if any) have the event first.
// However, double click should never be delivered to handlers.
if (!pointerEvent->isDoubleClickEvent()) {
+ bool wasAccepted = pointerEvent->allPointsAccepted();
itemPrivate->handlePointerEvent(pointerEvent);
- allowDoubleClick = !(pointerEvent->asPointerMouseEvent() && pointerEvent->isPressEvent() && pointerEvent->allPointsAccepted());
+ allowDoubleClick = wasAccepted || !(pointerEvent->asPointerMouseEvent() && pointerEvent->isPressEvent() && pointerEvent->allPointsAccepted());
}
if (handlersOnly)
return;
- if (pointerEvent->allPointsAccepted() && !pointerEvent->isReleaseEvent())
- return;
// If all points are released and the item is not the grabber, it doesn't get the event.
// But if at least one point is still pressed, we might be in a potential gesture-takeover scenario.
@@ -2525,8 +2544,6 @@ void QQuickWindowPrivate::deliverMatchingPointsToItem(QQuickItem *item, QQuickPo
auto event = pointerEvent->asPointerMouseEvent();
if (event && item->acceptedMouseButtons() & event->button()) {
auto point = event->point(0);
- if (point->isAccepted())
- return;
// The only reason to already have a mouse grabber here is
// synthetic events - flickable sends one when setPressDelay is used.
auto oldMouseGrabber = q->mouseGrabberItem();
@@ -2747,7 +2764,7 @@ QQuickItem *QQuickWindowPrivate::findCursorItem(QQuickItem *item, const QPointF
if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) {
QPointF p = item->mapFromScene(scenePos);
if (!item->contains(p))
- return 0;
+ return nullptr;
}
if (itemPrivate->subtreeCursorEnabled) {
@@ -2766,7 +2783,7 @@ QQuickItem *QQuickWindowPrivate::findCursorItem(QQuickItem *item, const QPointF
if (item->contains(p))
return item;
}
- return 0;
+ return nullptr;
}
#endif
@@ -2820,17 +2837,10 @@ bool QQuickWindowPrivate::sendFilteredPointerEventImpl(QQuickPointerEvent *event
// get a touch event customized for delivery to filteringParent
QScopedPointer<QTouchEvent> filteringParentTouchEvent(pte->touchEventForItem(receiver, true));
if (filteringParentTouchEvent) {
- QVarLengthArray<QPair<QQuickPointerHandler *, QQuickEventPoint *>, 32> passiveGrabsToCancel;
if (filteringParent->childMouseEventFilter(receiver, filteringParentTouchEvent.data())) {
qCDebug(DBG_TOUCH) << "touch event intercepted by childMouseEventFilter of " << filteringParent;
skipDelivery.append(filteringParent);
for (auto point: qAsConst(filteringParentTouchEvent->touchPoints())) {
- auto pointerEventPoint = pte->pointById(point.id());
- for (auto handler : pointerEventPoint->passiveGrabbers()) {
- QPair<QQuickPointerHandler *, QQuickEventPoint *> grab(handler, pointerEventPoint);
- if (!passiveGrabsToCancel.contains(grab))
- passiveGrabsToCancel.append(grab);
- }
QQuickEventPoint *pt = event->pointById(point.id());
pt->setAccepted();
pt->setGrabberItem(filteringParent);
@@ -2876,12 +2886,6 @@ bool QQuickWindowPrivate::sendFilteredPointerEventImpl(QQuickPointerEvent *event
touchMouseUnset = false; // We want to leave touchMouseId and touchMouseDevice set
if (mouseEvent->isAccepted())
filteringParent->grabMouse();
- auto pointerEventPoint = pte->pointById(tp.id());
- for (auto handler : pointerEventPoint->passiveGrabbers()) {
- QPair<QQuickPointerHandler *, QQuickEventPoint *> grab(handler, pointerEventPoint);
- if (!passiveGrabsToCancel.contains(grab))
- passiveGrabsToCancel.append(grab);
- }
}
filtered = true;
}
@@ -2897,8 +2901,6 @@ bool QQuickWindowPrivate::sendFilteredPointerEventImpl(QQuickPointerEvent *event
}
}
}
- for (auto grab : passiveGrabsToCancel)
- grab.second->cancelPassiveGrab(grab.first);
}
}
}
@@ -2972,8 +2974,10 @@ void QQuickWindowPrivate::data_append(QQmlListProperty<QObject> *property, QObje
if (!o)
return;
QQuickWindow *that = static_cast<QQuickWindow *>(property->object);
- if (QQuickWindow *window = qmlobject_cast<QQuickWindow *>(o))
+ if (QQuickWindow *window = qmlobject_cast<QQuickWindow *>(o)) {
+ qCDebug(lcTransient) << window << "is transient for" << that;
window->setTransientParent(that);
+ }
QQmlListProperty<QObject> itemProperty = QQuickItemPrivate::get(that->contentItem())->data();
itemProperty.append(&itemProperty, o);
}
@@ -3039,6 +3043,7 @@ void QQuickWindowPrivate::contextCreationFailureMessage(const QSurfaceFormat &fo
#if QT_DEPRECATED_SINCE(5, 8)
+// ### Qt6: remove
/*!
Propagates an event \a e to a QQuickItem \a item on the window.
@@ -3048,7 +3053,6 @@ void QQuickWindowPrivate::contextCreationFailureMessage(const QSurfaceFormat &fo
\deprecated
*/
-// ### Qt6: remove
bool QQuickWindow::sendEvent(QQuickItem *item, QEvent *e)
{
Q_D(QQuickWindow);
@@ -3105,15 +3109,15 @@ void QQuickWindowPrivate::cleanupNodesOnShutdown(QQuickItem *item)
QQuickItemPrivate *p = QQuickItemPrivate::get(item);
if (p->itemNodeInstance) {
delete p->itemNodeInstance;
- p->itemNodeInstance = 0;
+ p->itemNodeInstance = nullptr;
if (p->extra.isAllocated()) {
- p->extra->opacityNode = 0;
- p->extra->clipNode = 0;
- p->extra->rootNode = 0;
+ p->extra->opacityNode = nullptr;
+ p->extra->clipNode = nullptr;
+ p->extra->rootNode = nullptr;
}
- p->paintNode = 0;
+ p->paintNode = nullptr;
p->dirty(QQuickItemPrivate::Window);
}
@@ -3125,7 +3129,7 @@ void QQuickWindowPrivate::cleanupNodesOnShutdown(QQuickItem *item)
if (index >= 0) {
const QMetaMethod &method = mo->method(index);
// Skip functions named invalidateSceneGraph() in QML items.
- if (strstr(method.enclosingMetaObject()->className(), "_QML_") == 0)
+ if (strstr(method.enclosingMetaObject()->className(), "_QML_") == nullptr)
method.invoke(item, Qt::DirectConnection);
}
}
@@ -3153,7 +3157,7 @@ void QQuickWindowPrivate::updateDirtyNodes()
cleanupNodes();
QQuickItem *updateList = dirtyItemList;
- dirtyItemList = 0;
+ dirtyItemList = nullptr;
if (updateList) QQuickItemPrivate::get(updateList)->prevDirtyItem = &updateList;
while (updateList) {
@@ -3169,7 +3173,7 @@ void QQuickWindowPrivate::updateDirtyNodes()
static inline QSGNode *qquickitem_before_paintNode(QQuickItemPrivate *d)
{
const QList<QQuickItem *> childItems = d->paintOrderChildItems();
- QQuickItem *before = 0;
+ QQuickItem *before = nullptr;
for (int i=0; i<childItems.size(); ++i) {
QQuickItemPrivate *dd = QQuickItemPrivate::get(childItems.at(i));
// Perform the same check as the in fetchNextNode below.
@@ -3178,7 +3182,7 @@ static inline QSGNode *qquickitem_before_paintNode(QQuickItemPrivate *d)
else
break;
}
- return Q_UNLIKELY(before) ? QQuickItemPrivate::get(before)->itemNode() : 0;
+ return Q_UNLIKELY(before) ? QQuickItemPrivate::get(before)->itemNode() : nullptr;
}
static QSGNode *fetchNextNode(QQuickItemPrivate *itemPriv, int &ii, bool &returnedPaintNode)
@@ -3210,7 +3214,7 @@ static QSGNode *fetchNextNode(QQuickItemPrivate *itemPriv, int &ii, bool &return
return childPrivate->itemNode();
}
- return 0;
+ return nullptr;
}
void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
@@ -3245,10 +3249,10 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
}
bool clipEffectivelyChanged = (dirty & (QQuickItemPrivate::Clip | QQuickItemPrivate::Window)) &&
- ((item->clip() == false) != (itemPriv->clipNode() == 0));
+ ((item->clip() == false) != (itemPriv->clipNode() == nullptr));
int effectRefCount = itemPriv->extra.isAllocated()?itemPriv->extra->effectRefCount:0;
bool effectRefEffectivelyChanged = (dirty & (QQuickItemPrivate::EffectReference | QQuickItemPrivate::Window)) &&
- ((effectRefCount == 0) != (itemPriv->rootNode() == 0));
+ ((effectRefCount == 0) != (itemPriv->rootNode() == nullptr));
if (clipEffectivelyChanged) {
QSGNode *parent = itemPriv->opacityNode() ? (QSGNode *) itemPriv->opacityNode() :
@@ -3256,7 +3260,7 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
QSGNode *child = itemPriv->rootNode();
if (item->clip()) {
- Q_ASSERT(itemPriv->clipNode() == 0);
+ Q_ASSERT(itemPriv->clipNode() == nullptr);
QQuickDefaultClipNode *clip = new QQuickDefaultClipNode(item->clipRect());
itemPriv->extra.value().clipNode = clip;
clip->update();
@@ -3282,7 +3286,7 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
}
delete itemPriv->clipNode();
- itemPriv->extra->clipNode = 0;
+ itemPriv->extra->clipNode = nullptr;
}
}
@@ -3297,18 +3301,18 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
parent = itemPriv->itemNode();
if (itemPriv->extra.isAllocated() && itemPriv->extra->effectRefCount) {
- Q_ASSERT(itemPriv->rootNode() == 0);
+ Q_ASSERT(itemPriv->rootNode() == nullptr);
QSGRootNode *root = new QSGRootNode();
itemPriv->extra->rootNode = root;
parent->reparentChildNodesTo(root);
parent->appendChildNode(root);
} else {
- Q_ASSERT(itemPriv->rootNode() != 0);
+ Q_ASSERT(itemPriv->rootNode() != nullptr);
QSGRootNode *root = itemPriv->rootNode();
parent->removeChildNode(root);
root->reparentChildNodesTo(parent);
delete itemPriv->rootNode();
- itemPriv->extra->rootNode = 0;
+ itemPriv->extra->rootNode = nullptr;
}
}
@@ -3334,7 +3338,7 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
int added = 0;
int removed = 0;
int replaced = 0;
- QSGNode *desiredNode = 0;
+ QSGNode *desiredNode = nullptr;
while (currentNode && (desiredNode = fetchNextNode(itemPriv, ii, fetchedPaintNode))) {
// uh oh... reality and our utopic paradise are diverging!
@@ -3419,11 +3423,11 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
updatePaintNodeData.transformNode = itemPriv->itemNode();
itemPriv->paintNode = item->updatePaintNode(itemPriv->paintNode, &updatePaintNodeData);
- Q_ASSERT(itemPriv->paintNode == 0 ||
- itemPriv->paintNode->parent() == 0 ||
+ Q_ASSERT(itemPriv->paintNode == nullptr ||
+ itemPriv->paintNode->parent() == nullptr ||
itemPriv->paintNode->parent() == itemPriv->childContainerNode());
- if (itemPriv->paintNode && itemPriv->paintNode->parent() == 0) {
+ if (itemPriv->paintNode && itemPriv->paintNode->parent() == nullptr) {
QSGNode *before = qquickitem_before_paintNode(itemPriv);
if (before && before->parent()) {
Q_ASSERT(before->parent() == itemPriv->childContainerNode());
@@ -3434,7 +3438,7 @@ void QQuickWindowPrivate::updateDirtyNode(QQuickItem *item)
}
} else if (itemPriv->paintNode) {
delete itemPriv->paintNode;
- itemPriv->paintNode = 0;
+ itemPriv->paintNode = nullptr;
}
}
@@ -3486,14 +3490,14 @@ void QQuickWindow::cleanupSceneGraph()
Q_D(QQuickWindow);
#if QT_CONFIG(opengl)
delete d->vaoHelper;
- d->vaoHelper = 0;
+ d->vaoHelper = nullptr;
#endif
if (!d->renderer)
return;
delete d->renderer->rootNode();
delete d->renderer;
- d->renderer = 0;
+ d->renderer = nullptr;
d->runAndClearJobs(&d->beforeSynchronizingJobs);
d->runAndClearJobs(&d->afterSynchronizingJobs);
@@ -3504,6 +3508,7 @@ void QQuickWindow::cleanupSceneGraph()
void QQuickWindow::setTransientParent_helper(QQuickWindow *window)
{
+ qCDebug(lcTransient) << this << "is transient for" << window;
setTransientParent(window);
disconnect(sender(), SIGNAL(windowChanged(QQuickWindow*)),
this, SLOT(setTransientParent_helper(QQuickWindow*)));
@@ -3542,7 +3547,7 @@ QOpenGLContext *QQuickWindow::openglContext() const
bool QQuickWindow::isSceneGraphInitialized() const
{
Q_D(const QQuickWindow);
- return d->context != 0 && d->context->isValid();
+ return d->context != nullptr && d->context->isValid();
}
/*!
@@ -3720,7 +3725,7 @@ void QQuickWindow::setRenderTarget(uint fboId, const QSize &size)
d->renderTargetSize = size;
// Unset any previously set instance...
- d->renderTarget = 0;
+ d->renderTarget = nullptr;
}
@@ -3834,7 +3839,7 @@ QQmlIncubationController *QQuickWindow::incubationController() const
Q_D(const QQuickWindow);
if (!d->windowManager)
- return 0; // TODO: make sure that this is safe
+ return nullptr; // TODO: make sure that this is safe
if (!d->incubationController)
d->incubationController = new QQuickWindowIncubationController(d->windowManager);
@@ -4078,7 +4083,7 @@ bool QQuickWindow::clearBeforeRendering() const
QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image) const
{
- return createTextureFromImage(image, 0);
+ return createTextureFromImage(image, nullptr);
}
@@ -4127,7 +4132,7 @@ QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, CreateText
{
Q_D(const QQuickWindow);
if (!isSceneGraphInitialized()) // check both for d->context and d->context->isValid()
- return 0;
+ return nullptr;
uint flags = 0;
if (options & TextureCanUseAtlas) flags |= QSGRenderContext::CreateTexture_Atlas;
if (options & TextureHasMipmaps) flags |= QSGRenderContext::CreateTexture_Mipmap;
@@ -4173,7 +4178,7 @@ QSGTexture *QQuickWindow::createTextureFromId(uint id, const QSize &size, Create
Q_UNUSED(size)
Q_UNUSED(options)
#endif
- return 0;
+ return nullptr;
}
/*!
@@ -4287,7 +4292,7 @@ void QQuickWindow::resetOpenGLState()
int maxAttribs;
gl->glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxAttribs);
for (int i=0; i<maxAttribs; ++i) {
- gl->glVertexAttribPointer(i, 4, GL_FLOAT, GL_FALSE, 0, 0);
+ gl->glVertexAttribPointer(i, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
gl->glDisableVertexAttribArray(i);
}
}
@@ -4946,6 +4951,37 @@ void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
QQuickWindowPrivate::textRenderType = renderType;
}
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug debug, const QQuickWindow *win)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace();
+ if (!win) {
+ debug << "QQuickWindow(0)";
+ return debug;
+ }
+
+ debug << win->metaObject()->className() << '(' << static_cast<const void *>(win);
+ if (win->isActive())
+ debug << " active";
+ if (win->isExposed())
+ debug << " exposed";
+ debug << ", visibility=" << win->visibility() << ", flags=" << win->flags();
+ if (!win->title().isEmpty())
+ debug << ", title=" << win->title();
+ if (!win->objectName().isEmpty())
+ debug << ", name=" << win->objectName();
+ if (win->parent())
+ debug << ", parent=" << static_cast<const void *>(win->parent());
+ if (win->transientParent())
+ debug << ", transientParent=" << static_cast<const void *>(win->transientParent());
+ debug << ", geometry=";
+ QtDebugUtils::formatQRect(debug, win->geometry());
+ debug << ')';
+ return debug;
+}
+#endif
+
#include "moc_qquickwindow.cpp"
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickwindow.h b/src/quick/items/qquickwindow.h
index e5b54c8fb9..817178fdac 100644
--- a/src/quick/items/qquickwindow.h
+++ b/src/quick/items/qquickwindow.h
@@ -110,7 +110,7 @@ public:
explicit QQuickWindow(QWindow *parent = nullptr);
explicit QQuickWindow(QQuickRenderControl *renderControl);
- virtual ~QQuickWindow();
+ ~QQuickWindow() override;
QQuickItem *contentItem() const;
@@ -204,6 +204,7 @@ public Q_SLOTS:
protected:
QQuickWindow(QQuickWindowPrivate &dd, QWindow *parent = nullptr);
+ QQuickWindow(QQuickWindowPrivate &dd, QQuickRenderControl *control);
void exposeEvent(QExposeEvent *) override;
void resizeEvent(QResizeEvent *) override;
@@ -233,7 +234,7 @@ private Q_SLOTS:
void handleScreenChanged(QScreen *screen);
void setTransientParent_helper(QQuickWindow *window);
void runJobsAfterSwap();
-
+ void handleApplicationStateChanged(Qt::ApplicationState state);
private:
friend class QQuickItem;
friend class QQuickWidget;
@@ -242,6 +243,10 @@ private:
Q_DISABLE_COPY(QQuickWindow)
};
+#ifndef QT_NO_DEBUG_STREAM
+QDebug Q_QUICK_EXPORT operator<<(QDebug debug, const QQuickWindow *item);
+#endif
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QQuickWindow *)
diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h
index 8ac6cdfa36..82c01e7f54 100644
--- a/src/quick/items/qquickwindow_p.h
+++ b/src/quick/items/qquickwindow_p.h
@@ -114,9 +114,9 @@ public:
static inline QQuickWindowPrivate *get(QQuickWindow *c) { return c->d_func(); }
QQuickWindowPrivate();
- virtual ~QQuickWindowPrivate();
+ ~QQuickWindowPrivate() override;
- void init(QQuickWindow *, QQuickRenderControl *control = 0);
+ void init(QQuickWindow *, QQuickRenderControl *control = nullptr);
QQuickRootItem *contentItem;
QSet<QQuickItem *> parentlessItems;
@@ -141,11 +141,12 @@ public:
// Mouse positions are saved in widget coordinates
QPointF lastMousePosition;
bool deliverTouchAsMouse(QQuickItem *item, QQuickPointerEvent *pointerEvent);
+ bool isDeliveringTouchAsMouse() const { return touchMouseId != -1 && touchMouseDevice; }
void translateTouchEvent(QTouchEvent *touchEvent);
- void setMouseGrabber(QQuickItem *grabber);
void grabTouchPoints(QObject *grabber, const QVector<int> &ids);
void removeGrabber(QQuickItem *grabber, bool mouse = true, bool touch = true);
- static QMouseEvent *cloneMouseEvent(QMouseEvent *event, QPointF *transformedLocalPos = 0);
+ void sendUngrabEvent(QQuickItem *grabber, bool touch);
+ static QMouseEvent *cloneMouseEvent(QMouseEvent *event, QPointF *transformedLocalPos = nullptr);
void deliverToPassiveGrabbers(const QVector<QPointer <QQuickPointerHandler> > &passiveGrabbers, QQuickPointerEvent *pointerEvent);
void deliverMouseEvent(QQuickPointerMouseEvent *pointerEvent);
bool sendFilteredMouseEvent(QEvent *event, QQuickItem *receiver, QQuickItem *filteringParent);
@@ -167,6 +168,7 @@ public:
// the device-specific event instances which are reused during event delivery
mutable QVector<QQuickPointerEvent *> pointerEventInstances;
+ QQuickPointerEvent *queryPointerEventInstance(QQuickPointerDevice *device, QEvent::Type eventType = QEvent::None) const;
QQuickPointerEvent *pointerEventInstance(QQuickPointerDevice *device, QEvent::Type eventType = QEvent::None) const;
// delivery of pointer events:
@@ -203,8 +205,8 @@ public:
};
Q_DECLARE_FLAGS(FocusOptions, FocusOption)
- void setFocusInScope(QQuickItem *scope, QQuickItem *item, Qt::FocusReason reason, FocusOptions = 0);
- void clearFocusInScope(QQuickItem *scope, QQuickItem *item, Qt::FocusReason reason, FocusOptions = 0);
+ void setFocusInScope(QQuickItem *scope, QQuickItem *item, Qt::FocusReason reason, FocusOptions = nullptr);
+ void clearFocusInScope(QQuickItem *scope, QQuickItem *item, Qt::FocusReason reason, FocusOptions = nullptr);
static void notifyFocusChangesRecur(QQuickItem **item, int remaining);
void clearFocusObject() override;
diff --git a/src/quick/items/qquickwindowattached.cpp b/src/quick/items/qquickwindowattached.cpp
index d3835ed45c..37f0a812e7 100644
--- a/src/quick/items/qquickwindowattached.cpp
+++ b/src/quick/items/qquickwindowattached.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
QQuickWindowAttached::QQuickWindowAttached(QObject* attachee)
: QObject(attachee)
- , m_window(NULL)
+ , m_window(nullptr)
{
m_attachee = qobject_cast<QQuickItem*>(attachee);
if (m_attachee && m_attachee->window()) // It might not be in a window yet
diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp
index 45e3f0004d..ab3f49d5b6 100644
--- a/src/quick/items/qquickwindowmodule.cpp
+++ b/src/quick/items/qquickwindowmodule.cpp
@@ -52,6 +52,8 @@
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcTransient)
+
class QQuickWindowQmlImplPrivate : public QQuickWindowPrivate
{
public:
@@ -112,7 +114,7 @@ void QQuickWindowQmlImpl::classBegin()
{
// The content item has CppOwnership policy (set in QQuickWindow). Ensure the presence of a JS
// wrapper so that the garbage collector can see the policy.
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(e);
+ QV4::ExecutionEngine *v4 = e->handle();
QV4::QObjectWrapper::wrap(v4, d->contentItem);
}
}
@@ -121,7 +123,13 @@ void QQuickWindowQmlImpl::componentComplete()
{
Q_D(QQuickWindowQmlImpl);
d->complete = true;
- if (transientParent() && !transientParent()->isVisible()) {
+ QQuickItem *itemParent = qmlobject_cast<QQuickItem *>(QObject::parent());
+ if (itemParent && !itemParent->window()) {
+ qCDebug(lcTransient) << "window" << title() << "has invisible Item parent" << itemParent << "transientParent"
+ << transientParent() << "declared visibility" << d->visibility << "; delaying show";
+ connect(itemParent, &QQuickItem::windowChanged, this,
+ &QQuickWindowQmlImpl::setWindowVisibility, Qt::QueuedConnection);
+ } else if (transientParent() && !transientParent()->isVisible()) {
connect(transientParent(), &QQuickWindow::visibleChanged, this,
&QQuickWindowQmlImpl::setWindowVisibility, Qt::QueuedConnection);
} else {
@@ -135,9 +143,10 @@ void QQuickWindowQmlImpl::setWindowVisibility()
if (transientParent() && !transientParent()->isVisible())
return;
- if (sender()) {
- disconnect(transientParent(), &QWindow::visibleChanged, this,
- &QQuickWindowQmlImpl::setWindowVisibility);
+ if (QQuickItem *senderItem = qmlobject_cast<QQuickItem *>(sender())) {
+ disconnect(senderItem, &QQuickItem::windowChanged, this, &QQuickWindowQmlImpl::setWindowVisibility);
+ } else if (sender()) {
+ disconnect(transientParent(), &QWindow::visibleChanged, this, &QQuickWindowQmlImpl::setWindowVisibility);
}
// We have deferred window creation until we have the full picture of what