Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I081d9b15796b4133d2ba6f1a862f15b873a4846d
This commit is contained in:
commit
fff4477661
|
|
@ -1045,6 +1045,10 @@ void QObjectWrapper::destroyObject(bool lastCall)
|
||||||
delete h->object;
|
delete h->object;
|
||||||
else
|
else
|
||||||
h->object->deleteLater();
|
h->object->deleteLater();
|
||||||
|
} else {
|
||||||
|
// If the object is C++-owned, we still have to release the weak reference we have
|
||||||
|
// to it.
|
||||||
|
ddata->jsWrapper.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
#include "PageAllocation.h"
|
#include "PageAllocation.h"
|
||||||
#include "StdLibExtras.h"
|
#include "StdLibExtras.h"
|
||||||
|
|
||||||
#include <QTime>
|
#include <QElapsedTimer>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QScopedValueRollback>
|
#include <QScopedValueRollback>
|
||||||
|
|
||||||
|
|
@ -568,18 +568,17 @@ void MemoryManager::runGC()
|
||||||
} else {
|
} else {
|
||||||
const size_t totalMem = getAllocatedMem();
|
const size_t totalMem = getAllocatedMem();
|
||||||
|
|
||||||
QTime t;
|
QElapsedTimer t;
|
||||||
t.start();
|
t.start();
|
||||||
mark();
|
mark();
|
||||||
int markTime = t.elapsed();
|
qint64 markTime = t.restart();
|
||||||
t.restart();
|
|
||||||
const size_t usedBefore = getUsedMem();
|
const size_t usedBefore = getUsedMem();
|
||||||
const size_t largeItemsBefore = getLargeItemsMem();
|
const size_t largeItemsBefore = getLargeItemsMem();
|
||||||
int chunksBefore = m_d->heapChunks.size();
|
int chunksBefore = m_d->heapChunks.size();
|
||||||
sweep();
|
sweep();
|
||||||
const size_t usedAfter = getUsedMem();
|
const size_t usedAfter = getUsedMem();
|
||||||
const size_t largeItemsAfter = getLargeItemsMem();
|
const size_t largeItemsAfter = getLargeItemsMem();
|
||||||
int sweepTime = t.elapsed();
|
qint64 sweepTime = t.elapsed();
|
||||||
|
|
||||||
qDebug() << "========== GC ==========";
|
qDebug() << "========== GC ==========";
|
||||||
qDebug() << "Marked object in" << markTime << "ms.";
|
qDebug() << "Marked object in" << markTime << "ms.";
|
||||||
|
|
|
||||||
|
|
@ -544,6 +544,9 @@ QPaintDevice* QQuickContext2DFBOTexture::beginPainting()
|
||||||
{
|
{
|
||||||
QQuickContext2DTexture::beginPainting();
|
QQuickContext2DTexture::beginPainting();
|
||||||
|
|
||||||
|
const qreal devicePixelRatio = (m_item && m_item->window()) ?
|
||||||
|
m_item->window()->effectiveDevicePixelRatio() : qApp->devicePixelRatio();
|
||||||
|
|
||||||
if (m_canvasWindow.size().isEmpty()) {
|
if (m_canvasWindow.size().isEmpty()) {
|
||||||
delete m_fbo;
|
delete m_fbo;
|
||||||
delete m_multisampledFbo;
|
delete m_multisampledFbo;
|
||||||
|
|
@ -558,7 +561,7 @@ QPaintDevice* QQuickContext2DFBOTexture::beginPainting()
|
||||||
delete m_paint_device;
|
delete m_paint_device;
|
||||||
m_paint_device = 0;
|
m_paint_device = 0;
|
||||||
|
|
||||||
m_fboSize = npotAdjustedSize(m_canvasWindow.size());
|
m_fboSize = npotAdjustedSize(m_canvasWindow.size() * devicePixelRatio);
|
||||||
m_canvasWindowChanged = false;
|
m_canvasWindowChanged = false;
|
||||||
|
|
||||||
if (doMultisampling()) {
|
if (doMultisampling()) {
|
||||||
|
|
@ -596,6 +599,7 @@ QPaintDevice* QQuickContext2DFBOTexture::beginPainting()
|
||||||
QOpenGLPaintDevice *gl_device = new QOpenGLPaintDevice(m_fbo->size());
|
QOpenGLPaintDevice *gl_device = new QOpenGLPaintDevice(m_fbo->size());
|
||||||
gl_device->setPaintFlipped(true);
|
gl_device->setPaintFlipped(true);
|
||||||
gl_device->setSize(m_fbo->size());
|
gl_device->setSize(m_fbo->size());
|
||||||
|
gl_device->setDevicePixelRatio(devicePixelRatio);
|
||||||
m_paint_device = gl_device;
|
m_paint_device = gl_device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -700,8 +704,12 @@ QPaintDevice* QQuickContext2DImageTexture::beginPainting()
|
||||||
if (m_canvasWindow.size().isEmpty())
|
if (m_canvasWindow.size().isEmpty())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
const qreal devicePixelRatio = (m_item && m_item->window()) ?
|
||||||
|
m_item->window()->effectiveDevicePixelRatio() : qApp->devicePixelRatio();
|
||||||
|
|
||||||
if (m_canvasWindowChanged) {
|
if (m_canvasWindowChanged) {
|
||||||
m_image = QImage(m_canvasWindow.size(), QImage::Format_ARGB32_Premultiplied);
|
m_image = QImage(m_canvasWindow.size() * devicePixelRatio, QImage::Format_ARGB32_Premultiplied);
|
||||||
|
m_image.setDevicePixelRatio(devicePixelRatio);
|
||||||
m_image.fill(0x00000000);
|
m_image.fill(0x00000000);
|
||||||
m_canvasWindowChanged = false;
|
m_canvasWindowChanged = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -872,7 +872,7 @@ void QQuickPositionerAttached::setIsLastItem(bool isLastItem)
|
||||||
the item that is being added. See the \l ViewTransition documentation for more details
|
the item that is being added. See the \l ViewTransition documentation for more details
|
||||||
and examples on using these transitions.
|
and examples on using these transitions.
|
||||||
|
|
||||||
\note This transition is not applied to the items that already part of the positioner
|
\note This transition is not applied to the items that are already part of the positioner
|
||||||
at the time of its creation. In this case, the \l populate transition is applied instead.
|
at the time of its creation. In this case, the \l populate transition is applied instead.
|
||||||
|
|
||||||
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
||||||
|
|
@ -1039,7 +1039,7 @@ void QQuickColumn::reportConflictingAnchors()
|
||||||
the item that is being added. See the \l ViewTransition documentation for more details
|
the item that is being added. See the \l ViewTransition documentation for more details
|
||||||
and examples on using these transitions.
|
and examples on using these transitions.
|
||||||
|
|
||||||
\note This transition is not applied to the items that already part of the positioner
|
\note This transition is not applied to the items that are already part of the positioner
|
||||||
at the time of its creation. In this case, the \l populate transition is applied instead.
|
at the time of its creation. In this case, the \l populate transition is applied instead.
|
||||||
|
|
||||||
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
||||||
|
|
@ -1307,7 +1307,7 @@ void QQuickRow::reportConflictingAnchors()
|
||||||
the item that is being added. See the \l ViewTransition documentation for more details
|
the item that is being added. See the \l ViewTransition documentation for more details
|
||||||
and examples on using these transitions.
|
and examples on using these transitions.
|
||||||
|
|
||||||
\note This transition is not applied to the items that already part of the positioner
|
\note This transition is not applied to the items that are already part of the positioner
|
||||||
at the time of its creation. In this case, the \l populate transition is applied instead.
|
at the time of its creation. In this case, the \l populate transition is applied instead.
|
||||||
|
|
||||||
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
||||||
|
|
@ -1882,7 +1882,7 @@ void QQuickGrid::reportConflictingAnchors()
|
||||||
the item that is being added. See the \l ViewTransition documentation for more details
|
the item that is being added. See the \l ViewTransition documentation for more details
|
||||||
and examples on using these transitions.
|
and examples on using these transitions.
|
||||||
|
|
||||||
\note This transition is not applied to the items that already part of the positioner
|
\note This transition is not applied to the items that are already part of the positioner
|
||||||
at the time of its creation. In this case, the \l populate transition is applied instead.
|
at the time of its creation. In this case, the \l populate transition is applied instead.
|
||||||
|
|
||||||
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
\sa populate, ViewTransition, {Qt Quick Examples - Positioners}
|
||||||
|
|
|
||||||
|
|
@ -366,7 +366,7 @@ QQuickPen *QQuickRectangle::border()
|
||||||
The gradient to use to fill the rectangle.
|
The gradient to use to fill the rectangle.
|
||||||
|
|
||||||
This property allows for the construction of simple vertical gradients.
|
This property allows for the construction of simple vertical gradients.
|
||||||
Other gradients may by formed by adding rotation to the rectangle.
|
Other gradients may be formed by adding rotation to the rectangle.
|
||||||
|
|
||||||
\div {class="float-left"}
|
\div {class="float-left"}
|
||||||
\inlineimage declarative-rect_gradient.png
|
\inlineimage declarative-rect_gradient.png
|
||||||
|
|
|
||||||
|
|
@ -187,6 +187,8 @@ QString QQuickImageResponse::errorString() const
|
||||||
This method is used to communicate that the response is no longer required by the engine.
|
This method is used to communicate that the response is no longer required by the engine.
|
||||||
|
|
||||||
It may be reimplemented to cancel a request in the provider side, however, it is not mandatory.
|
It may be reimplemented to cancel a request in the provider side, however, it is not mandatory.
|
||||||
|
|
||||||
|
A cancelled QQuickImageResponse still needs to emit finished().
|
||||||
*/
|
*/
|
||||||
void QQuickImageResponse::cancel()
|
void QQuickImageResponse::cancel()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -590,7 +590,6 @@ void QQuickPixmapReader::processJobs()
|
||||||
if (asyncResponse) {
|
if (asyncResponse) {
|
||||||
asyncResponses.remove(asyncResponse);
|
asyncResponses.remove(asyncResponse);
|
||||||
asyncResponse->cancel();
|
asyncResponse->cancel();
|
||||||
asyncResponse->deleteLater();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PIXMAP_PROFILE(pixmapStateChanged<QQuickProfiler::PixmapLoadingError>(job->url));
|
PIXMAP_PROFILE(pixmapStateChanged<QQuickProfiler::PixmapLoadingError>(job->url));
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@ private slots:
|
||||||
void returnToBounds();
|
void returnToBounds();
|
||||||
void returnToBounds_data();
|
void returnToBounds_data();
|
||||||
void wheel();
|
void wheel();
|
||||||
|
void trackpad();
|
||||||
void movingAndFlicking();
|
void movingAndFlicking();
|
||||||
void movingAndFlicking_data();
|
void movingAndFlicking_data();
|
||||||
void movingAndDragging();
|
void movingAndDragging();
|
||||||
|
|
@ -785,6 +786,50 @@ void tst_qquickflickable::wheel()
|
||||||
QCOMPARE(flick->property("movementsAfterEnd").value<int>(), 0); // QTBUG-55886
|
QCOMPARE(flick->property("movementsAfterEnd").value<int>(), 0); // QTBUG-55886
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_qquickflickable::trackpad()
|
||||||
|
{
|
||||||
|
QScopedPointer<QQuickView> window(new QQuickView);
|
||||||
|
window->setSource(testFileUrl("wheel.qml"));
|
||||||
|
window->show();
|
||||||
|
QVERIFY(QTest::qWaitForWindowActive(window.data()));
|
||||||
|
QVERIFY(window->rootObject() != 0);
|
||||||
|
|
||||||
|
QQuickFlickable *flick = window->rootObject()->findChild<QQuickFlickable*>("flick");
|
||||||
|
QVERIFY(flick != 0);
|
||||||
|
QSignalSpy moveEndSpy(flick, SIGNAL(movementEnded()));
|
||||||
|
QPoint pos(200, 200);
|
||||||
|
|
||||||
|
{
|
||||||
|
QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(0,-100), QPoint(0,-120), -120, Qt::Vertical, Qt::NoButton, Qt::NoModifier, Qt::ScrollBegin);
|
||||||
|
event.setAccepted(false);
|
||||||
|
QGuiApplication::sendEvent(window.data(), &event);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTRY_VERIFY(flick->contentY() > 0);
|
||||||
|
QCOMPARE(flick->contentX(), qreal(0));
|
||||||
|
|
||||||
|
flick->setContentY(0);
|
||||||
|
QCOMPARE(flick->contentY(), qreal(0));
|
||||||
|
|
||||||
|
{
|
||||||
|
QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(-100,0), QPoint(-120,0), -120, Qt::Horizontal, Qt::NoButton, Qt::NoModifier, Qt::ScrollUpdate);
|
||||||
|
event.setAccepted(false);
|
||||||
|
QGuiApplication::sendEvent(window.data(), &event);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTRY_VERIFY(flick->contentX() > 0);
|
||||||
|
QCOMPARE(flick->contentY(), qreal(0));
|
||||||
|
|
||||||
|
{
|
||||||
|
QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(0,0), QPoint(0,0), 0, Qt::Horizontal, Qt::NoButton, Qt::NoModifier, Qt::ScrollEnd);
|
||||||
|
event.setAccepted(false);
|
||||||
|
QGuiApplication::sendEvent(window.data(), &event);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTRY_COMPARE(moveEndSpy.count(), 1); // QTBUG-55871
|
||||||
|
QCOMPARE(flick->property("movementsAfterEnd").value<int>(), 0); // QTBUG-55886
|
||||||
|
}
|
||||||
|
|
||||||
void tst_qquickflickable::movingAndFlicking_data()
|
void tst_qquickflickable::movingAndFlicking_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<bool>("verticalEnabled");
|
QTest::addColumn<bool>("verticalEnabled");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue