After d04982dc84d66bec92b4b3767538676cf925ef17 in qtbase,
QTest::touchEvent() and QTouchEventSequence::commit()
slow down every sequence of touch events, so we don't
need to do it in individual tests.
Change-Id: Id8133b100797d4bd2d7282ee874dbb81ed2cab47
Reviewed-by: Liang Qi <liang.qi@qt.io>
... when all (or almost all) items are in the cache.
When all items are in cache, check lower bound is equal
to upper_bound.
In rare cases, especially when almost all items are in cache,
the inserting code was used (not only appending and prepending).
In this code there was not bound check before creation of item
and there was such situation:
1. Create item by inserting code (without bound check)
2. At the next call of refill() remove this item by life cycle
because this item does not meet the conditions. And go to step 1.
In other words at the first call we create some item, at the second
remove this item. And again.
So we had infinite construction/destruction loop. To break it we
should check position of new item before creation in inserting code
too (like we do in appending and prepending code).
Task-number: QTBUG-37815
Change-Id: I015cdeb67ca5fcd06c34b3145b49cbd3e38d4078
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
By storing the cached data in QStandardPaths::CacheDir + "/qmlcache/"
+ sha1(filename)
Change-Id: I6a8b4ca701019204fff362504697c3dac9f54bf1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Apparently, QTest::mouseEvent() disregards the wall time for the time
stamps for events, but synthesizes the timestamps instead.
The proper way is to specify the waiting time in the delay argument.
This will adjust both the timestamp and perform a qWait() before the
event handler is called.
Without this patch, the qWait(doubleClickInterval) was disregarded, which
lead to that a doubleclick event was generated, and it failed with the
following message:
Actual (((window->rootObject()->property("doubleClicks").toInt()))): 2
Expected (1) : 1
tst_qquickmousearea.cpp(1105) : failure location
Change-Id: Ieda3b670d3cda0bd522db2f9677dad5745c88a21
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
First call of QQuickPathView::refill() did not use currentIndex
for item prepending and there was situation when items were
not created, e.g.:
PathView with current item in center and currentIndex was set
so that item with index 0 was after current item and before path
end. The result of this situation: items from path begin to current
item were not created.
The reason was that idx always equaled (modelCount-1) for item
prepending.
Now first filling uses currentIndex to calculate valid idx.
Task-number: QTBUG-53464
Change-Id: I7e343b0712c9c5c5cd56b1d8e020cf8c0f6e6301
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
By default, TextInput updates its implicit width to match the content
width. This implies that when TextInput does not have an explicit width
set, there is no need to handle horizontal alignment.
TextField wants to override the default implicit width, so it disables
the "implicit resizing" feature of TextInput. In this scenario, the
implicit width does not match the content width. Therefore the text
layouting code should also treat the item as if it had an explicit width
set to achieve the correct horizontal alignment.
Task-number: QTBUG-55138
Change-Id: I8c04971a6aff44c6f1734df50153a9788849e98a
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
By specification, date conversion functions for dates before the epoch
are not DST corrected. We converted QTime to a QDateTime where we set
the date part to Jan. 1, 1970, and then convert that to msecs since the
epoch UTC. For places on Earth where they had DST on that day (e.g.
Hobart in Australia), strange things happen: conversion from a QTime to
DateObject will use DST (because it's after the epoch in local time),
but conversions from DateObject to QTime won't use the DST because it's
before the epoch (in UTC).
Now as everyone knows, a 24-hour clock time has no meaning without a
date, only "elapsed time" has. But users still expect to be able to pass
QTime to QML/JS. So, we do the conversion on day 0 of month 0 of year 0,
and all of it in local time. This gives a stable conversion in both
directions, and the values in both C++ and QML/JS are the same for any
timezone (with or without DST) on this planet.
Task-number: QTBUG-54378
Change-Id: I892e16a93f015e92d311c6cae3ae7768b7373f6a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
New Logging Categories can be defined by using the
LoggingCategory type and define a name for the category
When the id of a valid LoggingCategory is provided as
the first argument to console.log and friends the
LoggingCategory is used instead of the default "qml"
LoggingCategory
[ChangeLog][QML Elements] Added a LoggingCategory type and added support
for it to the console object
Change-Id: Ifaeed5f71de6ea6d8172d8c838d6e7789c4d6b9d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
And add accessors. This makes it easier later on to change the storage
of the fields.
Change-Id: I21163668ac83a7d52f398981baf3c27ef161c177
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Do not skip qmldir loading when using an import qualifier and the
resolved uri is remote. This makes the import behavior the same in all
cases.
Task-number: QTBUG-55002
Change-Id: I99d68be02ddd062e387d36946e730df076e80a8d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This is similar to the Qt.quit() function but also specifies the return
code that the event loop will return.
[ChangeLog][QtQml] Added exit(int retCode) method to the Qt global object.
An application can call Qt.exit to specify a return code of the engine.
Task-number: QTBUG-54360
Change-Id: Iaa319e6dc4d6b99dc3a5c01845e87b936fd2cab0
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This branch contains changes to the Mouse and Touch event delivery. It
cleans up much of the existing code and adds a new class:
QQuickPointerEvent (and two sub classes for touch and mouse at this
point in time, tablet will be added eventually). The pointer event
contains QQuickEventPoint instances.
Thanks to the new pointer event class, we cache more data, reducing
allocations and making delivery significantly easier.
This lays the basis for a new way of pointer handling in Qt Quick which
will use pointer events directly to have a more powerful abstraction
over the basic events, while being more flexible.
Change-Id: I30a90220f62314d504dd3b5e079b75fc6f4d2c74
This is a partial revert of 90b06e2773, as it had unwanted side
effects. The original intention was to make assignment from char to
string possible, or more specifically, we wanted a solution where a
QChar could be assigned to a QString, as a character and not a string
representation of its value. While this behavior is desirable for
QChar, we most likely want the opposite for the regular character types.
Task-number: QTBUG-49232
Change-Id: I82d5f72b900fe984c4db1478fd52a9eb69ad2ee6
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
[ChangeLog][QtQml][Important Behavior Changes] A JS null value converted
to a QVariant now has type QMetaType::Nullptr rather than
QMetaType::VoidStar.
Change-Id: I91a64e444ada0f1884fe807f9973348ba1a878ff
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Local aliases are always "resolved". We must be careful not to access
the same field in the union otherwise and mistake it as property index.
Change-Id: I6369cdba145a62dcdaa10d8f4ee84bfa3cbfa0e3
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
A call to a handler of Component.onDestruction may end up causing WeakValues
such as QQmlData::jsWrapper to be set again, even though they've been set to
undefined in an earlier iteration of the loop that walks through the weak
references. That in turn may result in invalid object references to objects
that are scheduled for destruction by the collector.
So after calling all destroy handlers for QObjects, reset all of the weak
values again.
Task-number: QTBUG-54939
Change-Id: I00ebabb76274e296fb1bd90d8d3e21dbbb920b57
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Except on Windows, where there is still one bug to fix.
Change-Id: I1a22f42859733eedd37596a3e8fc09680720ff10
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This means we now respect -callgrind to show instruction counts (for instance).
If benchmarks don't already throw out outliers and perform averaging, we should
roll those features into testlib, not replace it.
Change-Id: I21a3c4b41ec80a49b5b61bfe957f1165ac865010
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
I have no idea what this was theoretically supposed to be testing, but it looks
completely bogus (not representative of a real world scenario), is subject to
massive variance thanks to memory allocation, and generally doesn't seem useful
Change-Id: Ib7adc8a4753e49d2a3bd9515273bca79a88a5749
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
There is no real sense in testing what boils down to operator new/delete plus a
little PLT overhead. For one thing, the allocator is too variant to test at such
a level. For another, it's not representative of any real-world scenario.
Change-Id: Ib455bb00839ff4e25099977059759a7b328db306
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This is literally just testing operator new and delete, with a little PLT
overhead. It is not useful as a result (not a real-world scenario, and obscenely
variant thanks to allocators not being predictable in behavior).
Change-Id: I42f758c503b37ff880fc4f0e38c220d0638356e9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
It sometimes happens on touchscreens that mouse events occur too close
together. We cannot calculate velocity based on zero elapsed time,
so just ignore the event.
Task-number: QTBUG-45527
Change-Id: I120e73cfa60e2fcc594cb1f3b69f530e746abddd
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
If we succeeded in saving the compilation unit to disk, then attempt to use it
right away. This replaces the C++ heap usage for the compilation unit data as
well as the anonymous allocated executable memory with file-backed mmap'ed
memory. That means the memory can be discarded when overall availability is low
and paged in on-demand.
Change-Id: Ide1b1e11752d861eb049a99a26ca12cec5e2502e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Make sure to save the .qmlc/.jsc files to the location
determined by the file selectors.
Change-Id: If535bb1e4f0d20ac692b3d8e6d563f77cd00446b
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
When loading a QML component from the disk cache, compare the checksum
of the dependent types against the checksum when the cache was created.
Any change in the meta-object of a dependent type should trigger a
re-creation discard of the cache and consequent re-creation (in the
test-case).
Unfortunately this also requires extending the existing hack in the unit
test to deal with the low second precision on HFS+ in order to pass the
tests.
Change-Id: Ib8e899347680f7be676788388e9c23a09b0277e3
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This helps in making it clear when an index is a plain old number and
when it consists of an encoded value type index.
Change-Id: Ic50d95caf244ed0ee2d62bdba53910a371cfee04
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Conflicts:
src/quick/items/qquickwindow.cpp: we need the fix for QTBUG-31861 but
now using QQuickPointerMouseEvent
src/quick/items/qquickwindow_p.h: hover events need timestamps (e4f7ab42)
tests/auto/quick/qquickwindow/tst_qquickwindow.cpp: added test for QTBUG-31861
Change-Id: Ic120513b69b318df3ba62d8174c276cbf6b7b55e
This is a test for commit 49c892328223dfa2502b462d8e5e8e181f4f6cd5
in qtbase
Change-Id: Id7be42ddd9136b73af08093117316fe2e86a000a
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
EcmaScript doesn't in fact require the date to be represented in
english. Thus, only test for the year number to be contained in the
date string.
Change-Id: I5b89c14a833b317f259f4cd2855b3f24310a7d72
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
These tests now can find their data files even when running from
a different directory than the source directory, and they no longer
misuse QUrl::fromLocalFile for a relative URL (resolved with
QUrl::resolved).
Change-Id: If18afd2e29571cca2a4c820eda6b9f6713e08a92
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Conflicts:
src/quick/items/qquickshadereffect.cpp
5.7 had a bug-fix in code dev has replaced wholesale.
src/quick/items/qquickwindow.cpp
src/quick/items/qquickwindow_p.h
One side changed a method's signature; the other side renamed a method
declared adjacent to it and changed some code using it, moving some
from the public class to its private partner.
tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
One side added a blank line before a comment the other re-wrote.
Kept the re-write, killed the stray blank.
.qmake.conf
Ignore 5.7's change to MODULE_VERSION.
src/qml/compiler/qqmltypecompiler.cpp
src/qml/compiler/qqmlpropertyvalidator.cpp
5.7 changed code in the former that dev moved to the latter.
Reflect 5.7's changes there, adapted to dev's form.
src/qml/qml/qqmlobjectcreator.cpp
One side added new QVariant types; the other changed how it handled
each type of QVariant (without git seeing any conflict); adapted the
new stanzas to work the same as the transformed ones.
tests/manual/v4/test262
dev had a broken sha1 for it; so used 5.7's 9741ac4655808ac46c127e3d1d8ba3d27ada618e
Change-Id: I1fbe2255b97d6ef405cdd1d0cea7fab8dc351d6f
Reduce allocations of events, just refill the local pos.
Change-Id: I2948faf0e302bff315e482f2c1432fe0def19bc5
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This code joins lists of "target item" which are joins of where several
touch points should be delivered.
Change-Id: I15ab4b7f70b8930d15368bf4cba0893ab339fa2a
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
By running an md5 hash over the meta-object data and string tables this will
allow us to detect changes to meta-objects and invalidate QML disk caches.
Change-Id: I15b92de4cdf0cb525281b86e1c7b8ba0b11347a0
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This will be used later for calculating checksums of the meta-object
data.
Change-Id: Iba925eae298cbfc7b89196f4dd6fb2854ce75e2e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
That the EventItem would get an event is a bug in the current event
handling, there is no reason for it to receive anything when it doesn't
accept mouse/touch.
Change-Id: I4079e6cb396cc1913f795015dcc7839ca79edb70
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
The touchmouse test needs adjusting since we don't see ungrab events any
more (which makes sense, nobody actively grabbed anything there).
The comment about storing the touchMouseId early enough is invalid - any
item that wants to steal the grab, has to call grab anyway.
The reason to only update the grab when there is no grabber set yet, is
that in the filterChildMouse stuff some other item might steal the
event, setting the grabber there - that must not be overridden when we
come back to the original event handling.
Change-Id: I4f191b16f4d76113d0c88414b5a80eb1baf99be1
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This will allow us to #define them away on -no-qml-debug, saving two
pointers per engine.
Change-Id: I400cffd32cd7f55ff0e68565734b6002b9f901d5
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
The extern declaration needs Q_CORE_EXPORT (which resolves to an import
declaration on MSVC). Also, the type of the qt_qhash_seed variable is
a QBasicAtomicInt, not int, so with proper signature mangling it would
not resolve (since memory layout is the same for an int and
a QBasicAtomicInt, it would just work for linkers that did not
detect it.)
Change-Id: I92375afcfc13e045e78a4d6cfdd539bd01b66136
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
There is already a comment in the test that points that are pressed
must be released again.
Change-Id: I3190b9f98769f7a3838ff703e5557ee321c71604
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This changes that items that explicitly do not accept a press
event, will no longer get a cancel event.
[ChangeLog][QtQuick] MouseArea no longer thinks it's pressed when
it does not accept the press event. When a press event is not accepted,
MouseArea also no longer receives a cancel event.
Change-Id: I8419cef60d7cc32aab15e9027fafb73cc08001ba
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
With this we can get rid of "itemForTouchPointId" which kept track of
the individual grabbing of touch points. The new approach allows big
cleanups and makes understanding the code easier.
Change-Id: I19f7cda1b430e088ada707b2e75d97ca8dbadcc5
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
The cancel event must have the device set, otherwise it may not be
delivered properly.
Change-Id: I7f7899fdbfd8fd68e9e19bcd043a46ddb31516cd
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
The valueChanged() signal was emitted when the property was written with
the same value. This increased the potential for binding loops in user
code.
Change-Id: Ifeb8f6f23e2022aa35cb6cac7cf1a3dbc0e8ca2f
Task-number: QTBUG-48136
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
[ChangeLog][QtQuick] Added properties to access color values for the HSV
and HSL color models to the basic QML color type.
Task-number: QTBUG-48723
Change-Id: I45fa52f9f3878553e1b3d0a34b47804ede7794f8
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Pass property reads/writes through utility functions in QQmlProperty,
which in turn will try to use accessors when available (and no
interceptors have to be called).
Change-Id: I60ecfc202b6024bfe4a33206a46299787b152546
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Perform various basic checks before proceeding to load an existing cache file,
including the qt version, architecture, data structure version and others.
Change-Id: Ie822b056e944ac120643aad260e97f62616688bf
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
When using setAcceptedMouseButtons to only allow the LeftButton, the
user can click the LeftButton and while still holding it press the
RightButton. There would be a press event sent for both. To resolve this,
a check needed to be added to ensure the acceptedMouseButtons are
checked when a second press comes in.
[ChangeLog][QtQuick][QQuickItem] Fixed issue with mouse button events
being sent even when they were disabled by setAcceptedMouseButtons.
Change-Id: I064f3ff56ede12b1572e172be326eb337e280750
Task-number: QTBUG-31861
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This makes it easy to avoid casts when using the classes.
Change-Id: I27bd1244bffb3a7d2cdb4572c229333e4c499d9b
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Just like it's possible to assign "1,2,3" to a QVector3D, the same
should be possible for a QVector2D and a QQuaternion.
Task-number: QTBUG-54858
Change-Id: I8f394279dcdf5c057876efaa316b4bad51a4c126
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
With the JIT and moth supporting persistence, we can enable the disk
cache tests unconditionally.
Change-Id: I6d6652411237001433a32a2de21d1f78f51b43ef
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Specifically: don't de-reference a result and assume that it's not-null.
Task-number: QTBUG-54687
Change-Id: If07d3250a95a7815ab7a3262b88e0227965ef8e7
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This is useful for conditions which can't be tested using tryCompare.
One such situation is that of the currentItem property of ListView.
In Qt Quick Controls 2, the currentItem property of the ListView that
is internally a child of Tumbler can be null for a certain period of
time, so using tryCompare() would result in errors due to trying to
access a property of a null object:
tryCompare(tumblerView.currentItem, "text", "2")
The current workaround is to use wait(50) in a for loop, which is ugly
and could lead to flaky tests:
for (var delay = 1000; delay >= 0; delay -= 50) {
if (tumblerView.currentItem)
break;
wait(50);
}
verify(tumblerView.currentItem);
compare(tumblerView.currentItem.text, data.currentIndex.toString());
Using tryVerify(), we can first ensure that currentItem isn't null, and
then use a regular synchronous compare afterwards:
tryVerify(function(){ return tumblerView.currentItem; });
compare(tumbler.currentItem.text, data.currentIndex.toString());
[ChangeLog][QtTest][TestCase] Added tryVerify() function to allow
verification of asynchronous conditions that can't be tested using
tryCompare().
Change-Id: Ie93052b650f7fe0bf26853054a8f0f35a483e387
Task-number: QTBUG-19708
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Instead of relying on two time stamps in the file system (source file and cache
file), make the determination on whether the source file is newer than the
cache solely depend on the time stamp of only the source file. This means that
when cache files are stored in archives for example their modification date
does not need to be preserved upon extraction.
Change-Id: I0b4362663868c6fb9bd7e106028161b2d67274d4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
FAIL! : tst_QQuickView::resizemodeitem() Compared values are not the same
Actual (sizeListener.at(i)): QSize(80x100)
Expected (view->size()) : QSize(200x300)
Loc: [tst_qquickview.cpp(172)]
The "SizeChangesListener" can be instantiated too early, catching
signals from the previous resize events. Make sure to flush all events
before.
Change-Id: Ib0933429f5c589f120c263619f00893fa813e361
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
The same condition is tested in the line above.
Change-Id: I99720e3603b1ae5e2f5161696f1de3dd03f6ff50
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This patch is just here for documentation of this behavior and does not
come with a fix yet. This hotspot was found while profiling the example
code attached to QTBUG-34391. It is triggered by the repeated calls
to _q_itemsMoved in QQmlDelegateModel::_q_layoutChanged.
Change-Id: I758744b3650c3c47dc86b914b823c3e9f96ce81e
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Daniel Vrátil <daniel.vratil@kdab.com>
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Conflicts:
examples/quick/demos/photoviewer/deployment.pri
One side made it redundant; the other removed part of it; remove it all !
src/quick/scenegraph/util/qsgatlastexture.cpp
One side changed a preprocessor condition, the other a code condition,
on adjacent lines; keep both changes.
tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
One side changed a condition, the other the content of its block; keep both.
Change-Id: Idb8937f92a7edb28212449dfe0c5cfdb8e6de986
The resolution of aliases needs to to be solved in iterations as an alias can
refer to another alias, which may not be created yet in the property cache by
the time we try to perform the resolution. Therefore the alias resolution code
works off a list of pending aliases after the initial pass of resolution. This
also requires the ability to detect circular references.
Change-Id: Id4e159b9c713aa8a8a095759e22e3fac456a38a0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The scene graph might decide to do an initial rendering, before the
first SceneGraphContextFrame.
Change-Id: Ie6d96574b5585cfda4dcd258b6031303f9a37715
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
When assigning an object to a property that is a QQmlComponent, we implicitly
"wrap" a Component {} around the object declaration. In the QML IR this is only
half-heartedly represented. In order to correctly determine dependencies later
when saving and to support QML files that use implicit components but don't
import QtQml or QtQuick explicitly, we must also extend the file imports
accordingly. This is now done (and tested) by emulating a "import QtQml 2.0 as
QmlInternals" and then using "QmlInternals.Component".
Change-Id: I26f4f53a35675b52d4bd39f23359b0ac8f9678c5
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The code used the size of the internal class in an inconsistent
way. It should simply compute and work with the old internal
class size, as that reflects the old object layout.
[ChangeLog][QtQml] Fix assertion when deleting properties of JS objects
Task-number: QTBUG-54589
Change-Id: Ie3db70437e780215d08a1a96491db75f8b859754
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
The goal is to make the compiled data structures persistent on disk. In order
to make it possible to create these data structures on a "host" system that may
have a different endianness than the target system, we now make all the word
sized fields little-endian. The template wrappers from QJson provide
zero-overhead access for little-endian machines (the vast majority) while
maintaining a large degree of source compatibility.
Change-Id: I3d30da1fcf3bffb98dbe9337d3a35482fb7b57c8
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
So gui-private API isn't necessary anymore.
Same as change 94324bd93f
Task-number: QTBUG-44030
Change-Id: I780cc1eedf9285336b96219a1fb1cd4016512701
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
We must iterate a (cheap) copy of changeListeners, because the
container might be indirectly modified during the loop. For example,
listeners may remove themselves from the list. In such scenario, the
copy gets detached and the loop remains safe.
I've added notes in comments, and extended the tests to prevent the
issue re-surfacing again.
Change-Id: Ib48d6e0765d45370d2fffa119a4c351e0119e40a
Task-number: QTBUG-54732
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
On QQuickView/QQuickWidget size update we used set width (with the notify
signal emission) and then height (with signal emission again). This way code,
relying on width and height would be triggered twice and at the first time
with there would be outdated height value.
The new code takes care on proper value for both width and height.
Change-Id: I6525911c40af0ca6a26ab3e7dac16d32a96d9a27
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This prevents re-calculation of what actually changed, and removes the
now unused parameter newGeometry. Other than this change calculation,
the only place where oldGeometry was used is
QQuickListViewPrivate::itemGeometryChanged. To get rid of oldGeometry
too, QQuickListViewPrivate now stores the current (i.e. last known)
geometry, and updates it in itemGeometryChanged.
Change-Id: I8a5286d08a04132c9a4c81de7ce221f5676946e6
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
The test makes sure that no events are delivered after the initial press
is released. In this context QTRY_* makes little sense, since we are
confirming that the defaults have not changed.
Thus rather spin the event loop 11 times and hope that if we would
accidentally deliver events that we shouldn't, it will be caught in that
time.
Change-Id: Iadeed07a81978aa6679e5513c1fe0aebcaeeb997
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Verify the fix in f7e462b.
Task-number: QTBUG-54019
Change-Id: Ia9846f9b79473ea4f72e895320cf01d5d85cc1a3
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
The first test covers a use-case currently only otherwise see in
QtQuickControls, and so having it here allows for catching regressions in that
area before hitting the next qt5 build.
Having an alias refer to another alias property within the same file only works
if the second alias is resolved/processed before the first one. This works by
chance when relying on the order of processing reverse to the declaration, but
that's a bug. It should work regardless of the order. That is what the second
test-case demonstrates and that is why it is marked as failure.
Change-Id: Iba386437d21efa868d9814221092df5f7ef6f1f6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
When having a ShaderEffect and an Image sharing the texture via supportsAtlasTextures
This used to work fine in 5.4 but 38cab579a0
removed the check for the provider not being null
Change-Id: I18cb969dbf8011ea01543cc079214e8ecbb66623
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
On macOS the mouse move events go through qcursor's setPos. That in turn
uses a native event, so the waits are there for a good reason.
Change-Id: Icb616d303c5280f2a9ba5f78cf07032c298b84a7
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
- Don't use a signal mapper, but handle the mapping using a custom slot
object and a lambda to do the dispatching ourselves.
- Don't do meta-calls by property name, but by index.
- Cache the meta-object.
- Resolve the property indices by using the QML property cache.
For a shader with 6 property connections, the time spent goes from 320k
instructions to 80k instructions (valgrind on x86_64).
Task-number: QTBUG-53901
Change-Id: I2809198cf62f9716b3683798222203fc3e97fbb3
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Make it more reliable and faster - average run time goes down by ~400 ms
while the test passes reliable for me after this change.
Most QTRY_* will return instantly since the condition will be good in
any case.
On my laptop the test tended to fail roughly every 4th run without this
patch. The failure was the second click on the new window not working
without the QTRY_VERIFY.
Removing the extra 200 ms wait time is what makes it faster - I see no
good reason for the wait here.
Change-Id: I5f45da91ef04a9b807ff0e9362c9d9b3881c227d
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
The test was expanded slightly and documented, so that it's easier to
understand the strangeness of the center.
On my display the dragThreshold is returned as 16 while the test assued
it's always <= 10.
Explain the math and the coordinate changes due to everything being in
item coordinates.
Change-Id: I4bf72271895ecd9e248154c08bf36eab376c6d79
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
The test would crash half the time on my laptop due to the scene graph
not being initialized and then returning a nullptr for the texture.
At that point texture->hasAlphaChannel() crashes.
Change-Id: I9220d9bd6abe6381752c26335f2b60fa8d2adccf
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
At the moment, defining leftMargin (or topMargin) and contentWidth
(or contentHeight) so that "leftMargin+contentWidth < flickable.width"
(or topMargin+contentHeight < flickable.height) leads to widthRatio
(or heightRatio) having value != 1.
The value should, however, be 1, as the content is completely visible
inside the view, margins included.
As a sideeffect, under the assumptions described above, it will now
not be possible to scroll the leftMargin (or topMargin) out of screen,
something which was possible (and it shouldn't have) before this fix.
Task-number: QTBUG-53726
Change-Id: I22426c8038e90a2cfc7445914206eae0e781a3fb
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
QOpenGLWidget has offered a lot more fine-grained control over the lifetime
of the OpenGL context it uses for rendering. In practice QQuickWidget also
requires at least a part of this. To unify the behavior when it comes to
reparenting to a different top-level window, add the bail out condition for
AA_ShareOpenGLContexts to QQuickWidget as well.
[ChangeLog][QtQuick][Important Behavior Changes] QQuickWidget now behaves
identically to QOpenGLWidget when it comes to handling window changes when
reparenting the widget into a hierarchy belonging to another top-level
widget. Previously the OpenGL context always got destroyed and recreated
in order to ensure texture resource sharing with the new top-level widget.
From now on this is only true when when AA_ShareOpenGLContexts it not set.
Task-number: QTBUG-54133
Change-Id: Ifda0db76fdf71dae1b9606fb5d59cee6edc2f5a4
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
A common usecase appears to be to set variables in the rootContext
before loading a url in a QQuickWidget. We there need to ensure there
is a QmlEngine to set variables on when this is attempted.
Change-Id: I07aff2104313eeb3fab902ea3c6043c3c82c50f7
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
I've seen people write
property SomeItem myProperty: null
This is an unnecessary initialization that ends up creating a binding
expression. Generally there's handling missing for null and undefined, but in
this very case we should just optimize away the initializer expression,
because QObject style properties are initialized to null by default, as opposed
to undefined.
Change-Id: I7af4cd45461304753c93cef3926f6e92d3b6c95d
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
When we can determine the type of a target property during type
compilation, we can skip a whole bunch of code that deals with
converting the result of a binding to the correct (target) type.
This removes 65 instructions on x86 for such typed bindings.
Change-Id: Id2c7c57b9ae6dfbeb921121beae9630604ca1d17
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
QQuickWidget may be used with just a root item, and won't need a
QmlEngine in that case. So if one isn't given to the constructor, only
create one when one is needed for evaluating source.
Change-Id: I96cfe5e2473d5d53fc2d52d4646d36c43f4ccb8a
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This caused MPTA to not emit onCanceled and caused the touch points
'pressed' property to not become 'false' after the MPTA was hidden or
disabled. We now ungrab the touch points where we already ungrabbed the
mouse.
Change-Id: I90a5d4fa4b3fa470b8b60881c80418e79061f001
Task-number: QTBUG-42928
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
QSGSimpleRectNode is deprecated -> use
QSGRectangleNode via QQuickWindow::createRectangleNode() instead.
QSGSimpleTextureNode is deprecated -> use
QSGImageNode via QQuickWindow::createImageNode() instead.
The OpenGL version of the simple rectangle node is switched over to
the vertex color material instead of flat, to allow for better batching.
Use the same concept for nine patch nodes. The "style" node from Quick Controls 1
is now QSGNinePatchNode in order to provide a proper cross-backend solution which
is already necessary due to the software backend, but now generalize it to apply
to the accelerated backends with proper materials as well. QC can now simply call
createNinePatchNode() without further ado.
Also fixes a bug with the D3D12 texture material not enabling blending
when needed.
When it comes to the internal class names, QSGRectangleNode and
QSGImageNode get the Internal prefix in the adaptation layer in order to
differentiate from the public API. This involves quite a lot of renaming,
but results in a nice and clean public API.
Change-Id: Iddf9f9412377843ea6d652bcf25e68d1d74659ea
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
The implementation of many (or all) runtime functions consist of first
creating a QV4::Scope, which saves and restores the JS stack pointer.
It also prevents tail-calls because of that restoring behavior. In many
cases it suffices to do that at the entry-point of the runtime.
The return value of a JS function call is now also stored in the scope.
Previously, all return values were stored in a ScopedValue, got loaded
on return, and immediately stored in another ScopedValue in the caller.
This resulted in a lot of stores, where now there is only one store
needed, and no extra ScopedValue for every function.
Change-Id: I13d80fc0ce72c5702ef1536d41d12f710c5914fa
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Let's revise our policy of offline/bytecode only shaders. ShaderEffect
benefits greatly from having runtime compilation support for HLSL
source strings, especially when dynamically constructing shader strings.
There is no reason not to support both approaches since we rely on d3dcompiler
for reflection anyhow.
What's more, we can call D3DCompile on a dedicated thread, keeping the
gui responsive while compilation is on-going.
Change-Id: Ie6c02c2aa0ebd0c8371bbf30b3ce6582128c457b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Remove the line that previously was a part of 'linecount' test BLACKLISTed
and now accidentally BLACKLISTed another test instead.
Change-Id: I3618fc0478d7a245c1c5aaaf6f38eb9359f523b0
Reviewed-by: Milla Pohjanheimo <milla.pohjanheimo@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Do not allow a frame size larger than the image size, otherwise
we would never leave "while (framesLeft > 0) {...}" as framesLeft is
never decremented because "copied/frameWidth" in the expression
"framesLeft -= copied/frameWidth;" always resolves to zero because
copied < frameWidth.
Task-number: QTBUG-53937
Change-Id: Ia777ec65d72562426b13533918efcaca5bcabdd7
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Commit v5.6.0-beta1~7 (ListView: Sanitize visibleItems list after model
insertions, 2015-12-07) introduced sanitizing of the container of visibleItems,
but it did not affect the return value of the
QQuickListViewPrivate::applyInsertionChange
function. The return value is used in
QQuickItemViewPrivate::layout()
to determine whether the layouting should proceed, or an early return is
possible instead. If the layouting does not proceed, then the newly inserted
visible items do not get painted, resulting in the linked bug.
The return value of the
QQuickListViewPrivate::applyInsertionChange
function was previously determined by whether the new count of visible items is
greater than the previous count. After the sanitation in commit
v5.6.0-beta1~7, this numeric comparison is no longer a good indicator of
whether a repaint is needed. Change the return value to indicate whether new
items were inserted which are visible in a more-direct way.
Verify that visible items are initialized correctly in tests. They should not
be 'culled'. It is necessary to invoke the layout method first to clear the
forceLayout state. Two pre-existing tests fail before the fix in this patch.
Change-Id: I625f1e02bf7001834adb147161a1e478a0ce2a0d
Task-number: QTBUG-53263
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Must be fixed on OS X now.
Task-number: QTBUG-53778
Change-Id: If94085210115534cf7a467100ec00fc419474c67
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
When running qmltest::itemgrabber we save grabbed image into the qmltest dir
but using this name later as 'source' (relative) url we fail to load image.
Task-number: QTBUG-53782
Change-Id: Ibd1f32d8bc13ff155b23491401075638cef16987
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
The string "1.0" can fail validation due to locale (requiring ',' for example).
Task-number: QTBUG-53779
Change-Id: I44b2b6886d96a7a32668bea56b5f34bb8d9db8d3
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Get rid of the m_isSingleton boolean by checking the
CompiledData::Unit::flags after the type compilation. This is more
compact and makes the singleton type checks independent from the IR.
Change-Id: I04189d284e6ea275ac8540918836b641914e7588
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit adds a small test that exercises a number of code paths
inside qv4mm.cpp which are normally gated via environment variables.
Change-Id: Ibe959387a9b86ce68df258513446d2165fe06ee2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Fold the functionality of reading QFile contents via QQmlFile into
QQmlDataBlob::Data. This reduces the dependency on QQmlFile - which is
scheduled for removal - and it makes it possible in the future to avoid
reading the file altogether if we have a cached compilation unit on
disk.
Change-Id: Ieeaf52b6fb1d25665cd3c3b196819e25aba3dd15
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
With text line width 50 'Hello world!' is split into 2 lines on OS X
10.11 and the test expectes 3 lines, let's try something less than 50
(44).
Task-number: QTBUG-53778
Change-Id: Id3254e9d89e7b41498ff8735eff97f0317ae9677
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Hidden behind a QML_DISK_CACHE=1 environment variable we will now attempt to
save a binary representation of the type compilation for Foo.qml next to it called
Foo.qmlc.
Change-Id: I27e800b50cdb186669256fd277578ea1f1e70513
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
To get QtWayland in the CI, we need to blacklist populateTransitions
on OpenSUSE 42.1
Task-number: QTBUG-53863
Change-Id: I7b8b1467757083ea630a0e08e7f27f4b2396e0b1
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
Just checking for references on m_compiledData is not enough. The
actual component can also be referenced. Thus it won't be deleted
on release(), but cannot be found in the type cache anymore.
Task-number: QTBUG-53761
(cherry picked from commit 2ac19881f9)
Change-Id: If254d5bca1f41ec948ec1438df0d37bf8d531bdf
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Just checking for references on m_compiledData is not enough. The
actual component can also be referenced. Thus it won't be deleted
on release(), but cannot be found in the type cache anymore.
Task-number: QTBUG-53761
Change-Id: I8567af8e75a078598e4fed31e4717134e1332278
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Part of 0e053528 was reverted in the merge, about lastTimestamp. It
will be applied later in separate commit.
qmltest::shadersource-dynamic-sourceobject::test_endresult() was
blacklisted on linux.
Conflicts:
.qmake.conf
tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
tests/auto/qmltest/BLACKLIST
tests/auto/qmltest/qmltest.pro
Task-number: QTBUG-53590
Task-number: QTBUG-53971
Change-Id: I48af90b49a3c7b29de16f4178a04807f8bc05130
The existing names are copy-paste duplication from the test above.
Change-Id: Ie50a0ed6530361c321b619549b3e3896472b7242
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Results are false positives for test failures when run due to small
differences in smoothing and scaling.
Change-Id: I95a75b6dd5d4bc97f0fc24167510477b11ab4b9e
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
The BoomBlock benchmark imports the Particles module which requires
OpenGL, so it will be skipped for -no-opengl builds.
Change-Id: I1754461f0920e85a51c5b1d5b3f5c8b2c5d26e18
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
We need to evaluate the expression for the "with" statement that is supposed to
define the new scope _before_ opening up the scope, otherwise - when the
evaluation of the expression throws an exception - we'll try to pop the "with"
scope we couldn't open in the first place.
[ChangeLog][QtQml] Fix crash when using the "with" statement with an expression
that throws an exception.
Task-number: QTBUG-53794
Change-Id: I7733f5a4c5d844916302b9a91c789a0f6b421e8a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
QJSEngine::newQMetaObject let us expose QMetaObject to the QJSEngine,
allowing to construct QObjects instance from javascript.
Additionally, enums values are exposed as property of the QMetaObject
wrapper.
(The engine takes ownership of the created objects)
Change-Id: I5428d4b7061cceacfa89f51e703dce3379b2c329
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Since commit 91d6a63ab3 a null JS value is
mapped to a QVariant(VoidStar) to properly create null JS values when
converting back again. However that broke the binding of values in the SQL
database, where it ended up mapping null to an empty string.
[ChangeLog][QtQml] Fix mapping of null JS values to null SQL values instead
of empty strings.
Task-number: QTBUG-53412
Change-Id: Icf1fea4674e9dd8bb5313e3770ed2d3f99849987
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
The unit data of QV4::CompiledData::CompilationUnit is read-only, which we
should "enforce" with a const, especially as in the future it may come from a
read-only mmap'ed chunk of memory.
Change-Id: I58dde9fe2494d3cfa52cdc9f612c7fa90b98aa26
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Support for HTTP PATCH method was added to QQmlXMLHttpRequest. Tests for
PATCH method in XMLHttpRequest were added.
[ChangeLog][QtQml][QQmlXMLHttpRequest] QQmlXMLHttpRequest now
supports the PATCH method in HTTP requests.
Task-number: QTBUG-38175
Change-Id: Ib3c104b558f626bb63624e234f1362adcf6cbd4d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This reverts commit 9c8dab5378
where commit e1400b5b4d was removed
due to the breakage of QtLocation tests.
After some hours of debugging it seems that the problem in QtLocation
was due to filtering of mouse move events in QDeclarativeGeoMapItemBase.
See QTBUG-52075
Task-number: QTBUG-52534
Change-Id: I00f002c1d6f60f74a148b5a6ac2b9f63e93718a9
Reviewed-by: Paolo Angelelli <paolo.angelelli@theqtcompany.com>
Reviewed-by: Michal Klocek <michal.klocek@theqtcompany.com>
Blacklisted or skipped broken and unstable test functions. Some
are moved to tests/auto/qmltest-blacklist folder.
Task-number: QTBUG-33723
Task-number: QTBUG-38290
Task-number: QTBUG-53778
Task-number: QTBUG-53779
Task-number: QTBUG-53780
Task-number: QTBUG-53781
Task-number: QTBUG-53782
Task-number: QTBUG-53785
Task-number: QTBUG-53793
Change-Id: I35594d0d054f4f5719f6549536a1fc5bd7e2518f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
QQmlCompiledData used to contain the binary data for instantiating QML types in
the QML VME. Nowadays the QML type compiler as well as the JavaScript compiler
create a QV4::CompiledData::CompilationUnit.
Change-Id: I155f62a5ecfb55a3fe230520231b6d8fd5b28ac9
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Rename RendererInfo to GraphicsInfo. Deprecate OpenGLInfo and move
the surface format properties into GraphicsInfo. Move also the
shader info properties from ShaderEffect.
Change-Id: I3b3f01080e059b3a30a132fd67de19a4bfca54ef
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
To get QtWayland in the CI for OpenSUSE 42.1, we need to blacklist
this test.
Task-number:QTBUG-53512
Change-Id: Ib150088e3843bab87f845d3502e8e2712fb8ff4b
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
We only need fields from the compilation unit, so let's pass that instead.
This is private, internal QQmlEngine API only used by QtQml and QtQuick.
Change-Id: I1a659654d95585b736384b5b519d05a4df3f9ead
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
By storing the object indices of named objects in the CompiledData::Object of a component,
we can achieve two things:
(1) We can eliminate the hash of vectors in QQmlCompiledData for the object-to-id mapping
(2) We can store the mapping from object name to integer object id in the CompilationUnit and
share it across different QQmlContextData instances (as long as it is not modified).
Also added a new test that verifies the functionality of a .qml file starting
with Component{} itself with object names, something that was previously only
implicitly tested through some of the examples (corkboards.qml for example).
Change-Id: I28c70217222dc0e5252bf5247b7e3fc4def47446
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Don't crash when using SignalTransition with a signal object instead of the
slot used to emit the signal. A signal object is just as good.
Task-number: QTBUG-53596
Change-Id: I8a419d16ec0c257c9a798a83ee5bad338794cdd2
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Some of the adapters immediately return dataReady() when reportData()
is invoked. This means that there is only one adapter in the start
times list then, which in turn causes all the data from that adapter
to be sent at once, without caring for the other adapters' timestamps.
Change-Id: Ic1e12fdcefb0a691067518fba100368f13c927f7
Task-number: QTBUG-53590
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Change-Id: I7cf6c5d3458b0c43283e63a7300ee9965ba803fb
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Frank Meerkoetter <frank.meerkoetter@basyskom.com>
When more than one font is needed to display the text in the layout,
then the line height of the layout may not be constant. This rewrites
the test to properly handle this case.
Task-number: QTBUG-51934
Change-Id: I0e0cdfdc06b4a39684b33d10efdd58f98dea06b8
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
It is unused now and we can remove it as well as its QByteArray based storage.
The non-emptyness of the meta-data QByteArray was also used to indicate whether
it is necessary to create a VME meta-object when instantiating an object. This
bit is now folded into the flag of the QFlagPointer storing the property
caches.
Change-Id: I3c3604c61ff16a4e76912e68b1c19afdb0f2bd9d
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
The remaining signal index for the changed signal of the alias target
is something that we need only once (when doing the initial alias endpoint
connection) and then we can retrieve it from the property cache.
Change-Id: Ifbd4625f9af3ca00c9b916eee5c82f58450d54ef
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
All listeners should get invoked, even if they remove themselves
while iterating the listeners. An index-based loop would skip the
next listener in the list. This change replaces the QPODVector with
a QVector, so we can make a cheap copy before iterating the listeners.
Change-Id: I2430b3763184a40ad1c5c3a68d36fecafcadb3ee
Task-number: QTBUG-53453
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
The others were changed in 5.6 commit 392c7b9. These are the last
remaining occurrences in 5.7.
Change-Id: I1b17e35b0d1dda6ad598c6c30727c1728b688074
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
If a role is unknown, trying to access it will crash in getExistingRole.
Fixed that and now return QVariant() for unknown roles.
Change-Id: Iad5c1292a4faee893fbc5a69984cf776aca85d70
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
For each type of VME meta object we store an array of integers holding the
meta-type ids of the QML declared properties. We can replace that array with
access to the QV4::CompiledData::Property entry for each property, where the
type is also accessible.
This is a fairly straight-forward change, except for the bit in
QV4::CompilationUnit where we delay the release of the CompiledData::Unit and
friends until the destructor instead of releasing it at unlink time. That
should be a safe change and is necessary as there are a few tests around where
the VME meta object still needs access to this meta-data at a very late stage
in the life-cycle right before the deferred deletion is run.
Change-Id: I431de15d12766df837c0e0251192df16a5a76868
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Sending focus events may result in further changes to which item actually has
focus, so we cannot blindly send the focus events without first checking that it
hasn't subsequently changed.
To accomplish this, we delay sending events as long as possible, ensuring that
all necessary bookkeeping is done first to ensure internal consistency.
Task-number: QTBUG-40145
Change-Id: I7d93b3f8e3fea2ecce2151c88c29601deda12453
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
All other changes are just to be able to include qv8engine_p.h in
qv4engine_p.h
Change-Id: I71ba2ec42cdc20d5c7d97a74b99b4d1ada1a5ed8
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Works now similarly as with very small text lengths (smaller than
elide characted length).
Change-Id: I0c4aafbcc50343bb0ec8b5f335045e1048a499fd
Task-number: QTBUG-34990
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
Get rid of the redundant MethodData meta-data that is stored per-type.
Change-Id: I9faa284bdd0c9f0c9ebb3c66905ab5e34a9ee3a4
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
This is a regression from commit 94e337fa95 where
we accidentally ended up not having a calling QML context set anymore when
initializing the properties on newly incubated objects as provided by the
caller. The QML context is necessary as for example when we set a URL property,
the URL can be relative and it will be resolved to the base url of the context
when written, such as in in QQmlPropertyPrivate::write.
Change-Id: I1d896381fc92f653a7d76f4d82174bca48828f5e
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
This reverts commit bad007360a.
The lookup in the global object is necessary to detect whether we've seen any
unresolved properties. This is used for the optimization of skipping binding
refresh updates when a context property changes.
Task-number: QTBUG-53431
Change-Id: Idb39a32e4b58b915496bbb9d8a098dc17a6f688a
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
the two flags are equivalent. use the same one everywhere.
Change-Id: I9ac0caad5a9a8d37813f8de4d81067e20656abc5
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
The default is to press/release in the center of the window, so we don't need to
DIY.
Change-Id: Id65b2b54c15d45e8d780a008d05275718f519a71
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
It should be possible to enumerate the properties of value types (gadgets),
in order for things like JSON.stringify(Qt.point(10, 20)) to return something
sensible.
Task-number: QTBUG-43382
Task-number: QTBUG-34878
Change-Id: I3a2c09151ebe97fd97760dfbbf5a4f58e022bc94
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
it requires a special import search path. it would be possible to hack
this into the test launcher, but that doesn't seem worth it (there are
other plugin examples already).
Change-Id: I147b802c690933803cb8f9cf35210618957a6998
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
the associated bugs are marked as fixed for a long time.
Change-Id: If8c8710bdf4b7b1962c9749b701cbd335d938fdb
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
The test assumed that the grabbed image of the window was the same
size as what was specified in QML, but QQuickWindow::grabWindow()
returns an image that is scaled by the screen's devicePixelRatio.
Change-Id: I5b361edb28bec562c7f528d06892277dcbe5769f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Only iterate over the enumerations/enumerators in the staticQtMetaObject
when a get() is done, and the key/value is not yet in stored in the
underlying Object. The whole cost of the iteration is now moved to get()
and advanceIterator(). The latter will add all items in one swoop, but
iteration over QtObject isn't used much (if at all). The get() will add
all key/value pairs up until it finds the requested key. Checking a
number of applications shows that none of them use all (or the "last")
key, so it will actually save entries (which equals memory) too.
This change reduces the instruction count for QtObject from 2.7M
instructions down to 95k. As this initialization is done from the
QQmlEngine constructor, it also speeds up that initialization.
Task-number: QTBUG-43770
Change-Id: I71331ff76bdacdd4790f7ff0430c4cbc214fe0ab
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Also make sure that we can easily deploy this test to devices by putting
all data inside a qrc file.
Change-Id: I175830fde51332b13068b163eba3d68c0535b712
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Don't store QQuickAnchorLine, but store both fields separately in
QQuickAnchorPrivate. This prevents padding of QQuickAnchorLine, saving
48 bytes on x86_64 (or any platform where structs are 8-byte aligned).
On x86_64, this also removes ~180 instructions for each QQuickAnchor
creation/removal, and speeds up the constructor by 25%.
While in the neighborhood, do a drive-by change and merge
QQuickAnchorLine::AnchorLine and QQuickAnchors::Anchor by removing the
former.
Change-Id: I50ab6252b1903f5f1a075174e6185c3048a8f8ec
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
This enables some of the tests to run in QML-only environments, without
QtQuick.
Change-Id: Icc7250b6ddab43730cb4744ffc4e0bade8574d26
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Some benchmarks - such as "elements" - rely on QQmlMetaType::qmlTypeNames(),
which is implicitly populated when other benchmarks import for example QtQuick.
However when calling them directly, the benchmark data set is much smaller.
Therefore let's add QtQuick to the "base" set that is always available.
Change-Id: I4b3696a426854195deb1c31ad24d80427da7b340
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
the manyWindows test passes now which is excellent.
Complex render / bug fix tests are skipped for now due to them doing
GL specific stuff no reasonable to investigate for now.
createTextureFromImage() gets its scenegraph-valid condition fixed as
well.
Change-Id: Ie72da127e7f219f3c3d024e9f896d1617d06ab85
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
BorderImageMesh provides an optimized way to use BorderImage-type
images with ShaderEffect.
[ChangeLog][QtQuick][ShaderEffect] Add new mesh type BorderImageMesh.
BorderImageMesh provides an optimized way to use BorderImage-type
images with ShaderEffect.
Change-Id: I73bdc8318a0facba6edc2634b5f4614996b39c1b
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Modeled after OpenGLInfo, RendererInfo.api is an easy to use attached
property that reports the current graphics API as long as the item is
associated with a window that has the scenegraph initialized.
Applications should not worry about this in general since they should
target one given API, however tests, examples and some advanced use cases
will find this handy. RendererInfo is also a great place to expose other
properties in the future.
Change-Id: Ie3411b8820fc4b74efd1b1d0143e936886f62d74
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Only supports QImage backing.
As a bonus add some notes to the Context2D docs too.
Change-Id: I18457a1f766d2f136c6864ec06fe596668d5e726
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
It is needed by the behavior of TabBar in universal style in QtQC2.
[ChangeLog][QtQuick][PathView] Added movementDirection property
Change-Id: Iedc214a12e7336e52125ec82b9ded45502905978
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
This reverts commit 91a96d1de9.
I've been told that the race condition in the networking stack has been
fixed on Windows.
Change-Id: Ica038229e8e164a199332288ed140ca6a1d3104c
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Cache the source size of the internal QMovie object during the
change of the 'source' property to ensure that always a valid source
size is returned without emitting more sourceSizeChanged() signals
than necessary.
Change-Id: I637b80efb133197b7345b09fcf8a7bb80c5643c9
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
For calls on properties of the scope or context object the thisObject parameter
in the callData is a reference to the QmlContext, not a real object - therefore
the toString conversion fails.
Task-number: QTBUG-52340
Change-Id: I08d01cc5c05920c2fac46ddd40fa41e630bcade3
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
It should be possible to write
property SomeUncreatableType blah;
It should not be possible to write:
property SomeUncreatableType blah: SomeUncreatableType {}
Task-number: QTBUG-36752
Change-Id: I2d1aa9f070a368f51844bbc0733d285022aab403
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Import (and clean up) the dropshadow from the shadereffects example.
This is very useful since it tests a lot more paths and cases than
the wobble.
To overcome the issue of not having some of functionality available before
the item is added to a window, make QQuickGenericShaderEffect smarter and
enhance the documentation.
The handling of vertical mirroring is revised. The GLSL and HLSL version of
the dropshadow shaders produce correct, identical output now.
Change-Id: I94800997bfba781140d80720eb6f340cda480747
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
The D3D12 node implementation is mostly missing. The rest of the enablers
should be in place now however.
Importing QtQuick 2.8 provides new properties for ShaderEffect:
- shaderType can be used to decide which language should be used
- shaderCompilationType tells if compilation is runtime or offline
- shaderSourceType tells if the vertex/fragmentShader properties refer
to source strings or source files or pre-compiled bytecode files
The last two are bitmasks. In practice however we will support only
one approach per backend for now (runtime + source string for OpenGL,
offline + bytecode for D3D12).
In addition to QSGShaderEffectNode, introduce the QSGGuiThreadShaderEffectManager
interface. This provides the gui thread bits for the above and performs shader
reflection. Backends that use the new ShaderEffect system must provide both.
For each ShaderEffect item there will be a manager (on the gui thread) and
a node (on the render thread).
Reflection is expected to be done via standard helper libs (d3d12shader
+ D3DReflect from d3dcompiler for the D3D12 backend), or via manually inspecting
SPIR-V, or parsing the source (like the GL path does now), or by using some
3rd party library (not recommended). In any case we require that reflection is
doable on the gui thread without dependencies to the actual graphics API.
The ShaderEffect documentation is greatly extended, covering HLSL and the new
properties.
The test app uses manually compiled shaders on its HLSL path for now. This
is because there is no story yet for build system integration for public
use (the internal HLSL -> bytecode in C header rule is only suitable for
the d3d12 plugin itself, apps need something different).
Change-Id: Id112104906fbcb26b9902a35f19d8d509b340d1b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This adds the Number.EPSILON property, the Number.isFinite, Number.isNaN,
and Math.sign methods introduced in ECMAScript 6.
Change-Id: Ib16408a63c202a4ef30a14334f65ac3a1a13cfaf
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
The d->active member variable should be changed regardless of the value
of Drag.dragType.
Task-number: QTBUG-52540
Change-Id: I7fa39ccf11b1200e9c2f6fe57cba58657b6cff74
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
This saves ~5% in QQuickAnchorsPrivate::itemGeometryChanged on x86_64.
Change-Id: Iccf782521e9c8523c41c6f2e6d87fad401762a9e
Reviewed-by: Michael Brasser <michael.brasser@live.com>
For example, the QML Engine is now able to locate QtQml.Models 2.x
in both of the following target/installation paths:
- QT_INSTALL_QML/QtQml/Models.2
- QT_INSTALL_QML/QtQml.2/Models
This is required for QtQuick Controls 2. The target path of the module
is QT_INSTALL_QML/QtQuick/Controls.2. The built-in styles are installed
as sub-directories to be able to locate them from the controls module.
Some of the built-in styles provide their own C++ extensions via style-
specific imports (eg. the Material attached property is imported from
QtQuick.Controls.Material 2.0). The problem is that the QML Engine does
not find the module from QT_INSTALL_QML/QtQuick/Controls.2/Material,
but requires it to be installed outside the main controls module ie.
QT_INSTALL_QML/QtQuick/Controls/Material(.2). This makes it a) hard to
locate the styles from the main controls module, and b) conflicts with
the target path of QtQuick Controls 1.
[ChangeLog][QtQml] Made the QML Engine capable of locating QML sub-
modules from within a versioned parent module path. For example,
QtQml.Models 2.x can be either in QT_INSTALL_QML/QtQml/Models.2 or
in QT_INSTALL_QML/QtQml.2/Models.
Change-Id: I2fe4bbdd6d04dd1e80cbe9b3e7e02617658a0756
Task-number: QTBUG-52556
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
This had the effect that overloaded methods were always mapped to the
wrong slot.
[ChangeLog][QtQml][Important Behavior Changes] When matching the method signature
of a invokable method to the slot in the metaobject, the matching function now
assigns the best match to a QJSValue if the parameter actually is a QJSValue. This
corrects the previous behavior, where QJSValue and int were given the same match score
even though QJSValue would have been the best match.
Task-number: QTBUG-51746
Change-Id: I906e7b006ee5af92ea760ed1625e5047aef123bf
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Test the new RenderTargetState as well.
Make releaseResources() optional. Code focusing on OpenGL only may not
want to care about providing an implementation for it. It is also more
compatible with the old private API this way.
Change-Id: I0dcec1d48708e71d778a8e5fea1b64d710bee67f
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This reverts commit e1400b5b4d,
which breaks qtlocation unit tests for drag support.
It is no longer possible to drag markers in mapviewer.
Task-number: QTBUG-52534
Change-Id: If713a8e45f64ea898f38fe3e39561ebc266403b2
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
When preventStealing is true both keepMouseGrab() and
d->stealMouse are true. This in turn enable the dragging immediately
since the condition "keepMouseGrab() && d->stealMouse && !d->drag->active()"
is true.
Conversely when preventStealing is false the dragging is enabled in the
next move event since keepMouseGrab() and d->stealMouse are set true
inside the last "if" "!keepMouseGrab() && ...check threshold..".
This patch adds a new boolean flag for storing if we detected a drag motion
(so we exceeded the threshold) and enable the dragging iff this flag is true.
With this change:
- if preventStealing is true (and so keepMouseGrab() and d->stealMouse) the
additional d->overThresHold prevent the start of dragging. At the same time
the last if (!keepMouseGrab()) cannot be executed since keepMouseGrab is true
and we still check for the threshold being exceeded.
- if preventStealing is false, we still check for exceeding the threshold and
if this happen we enter in the last "if" since !keepMousegrab() && d->overThreshold
is true taking the mouseGrab as without this patch
Task-number: QTBUG-52534
Change-Id: I2b14d3048b6f8223c90ce5e2fd26e7ca706cb56a
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
As loaded components are kept in a cache, they are never removed by the
garbage collector. So, if you periodically create new components, they
leak. This change adds a floating threshold for the number of
components. When that threshold is surpassed trimCache() is called and
unneeded components are removed.
Task-number: QTBUG-42055
Change-Id: I30e3e4ee287f6d34376713668009c67614a50e0c
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Creating a transient QML Window with visible set to false and then trying to
show() it in Component.onCompleted led to a race condition where the window
would be shown for a brief moment and then hidden again to enforce the delayed
initialization of the visible property. Fixed by tracking the value of the
visible property regardless of the 'completed' state.
The same problem was fixed for the visibility property.
Task-number: QTBUG-52573
Change-Id: I2a2ed7f359b951cb9189a7a6628d1d0cc1445d73
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Initializing paused to isPlaying() then checking it subsequently
agrees with isPaused() is an obvious copy-and-paste bug in the test,
which was meant to check runtime state wasn't changed by a snapshot.
Task-number: QTBUG-36717
Change-Id: I7a206b07071b862dbe4c0331af6bc32157a415b2
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
The dequeue offset won't wrap around when n > offset.
[ChangeLog][QtQml] Fix crash with Array.unshift()
Task-number: QTBUG-52065
Change-Id: I5e8b89ec964cd6397100442a5239254bca989a3f
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
C++11 was not automatically enabled, causing the build to fail.
load(qt_common) addresses the issue.
Change-Id: If54c5253942b057677035ed9c8785a2be535c41f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
which should route and place most of its work into the scenegraph.
And fix a test.
Change-Id: I04f29cba53c2bab62e41b3b524794d3c4d20a472
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Rename the C++ sources and classes. The QML type name remains the same.
No changes in functionality.
The shader effect, node, material (and uniform animator and particles and
bits and pieces here and there...) are highly interconnected and do not
follow the usual design practices for Quick and the scenegraph and the
adaptation layer. Therefore while we aim for keeping full compatibility
for GL apps, other backends will likely get a different ShaderEffect item
implementation.
The C++ class QQuickShaderEffect itself is currently a dummy with an
unchanged API. It is not in use for now but forms the basis for the
implementation for other backends. This will be covered in future commits.
Change-Id: Ia39ce4b303f8f33e2f241d11e35fa62423e43127
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
When a property is read from a QObject or the QML scope object, and we
can statically resolve the type to qreal/QObject/int/bool/QString, and
the property has an accessor declared for it, then use that accessor to
do the read.
This collapses the path of e.g.:
Runtime::getQmlScopeObjectProperty
-> QObjectWrapper::getProperty
-> QObjectWrapper::getProperty
-> LoadProperty
-> QQmlAccessor::read
(all of which do various checks for all the stuff mentioned above) to:
Runtime::accessQmlScopeObjectQRealProperty
-> QQmlAccessor::read
which is a simple 4-line function, and doesn't need to do any check.
According to valgrind, this saves 170 instructions on x86 for the
simple binding:
Item {
width: height
}
Change-Id: I0761d01e8f1a3c13ecbffe2d8e0317ce9c0a4db0
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Since commit 3b7e2a69f7 when calling a slot that
takes a QByteArray with a parameter that is not a QByteArray, we would end up
passing an empty QByteArray. This is a regression as previously we supported
the conversion code path, i.e. when passing a QString it would be converted to
utf-8, through QVariant's conversion code path. This code path needs to be
re-activated by removing this "shortcut". The shortcut is not necessary as the
execution engine's toVariant() function also knows how to apply the conversion.
Change-Id: I0600d195c94fa4e1e0b7ab807f045f0da42f595b
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
This test is for 24914b1acbfc5e45768dd1465b9e3f3e61185829 in qtbase.
Task-number: QTBUG-51759
Change-Id: I59081ec5268359f25c492f0536f985793e08e250
Reviewed-by: aavit <eirik.aavitsland@theqtcompany.com>
When instantiating static plugins no check is done whether the
QQmlExtensionInterface is declared. Therefore all user plugins are
instantiated in the Qml thread, which may cause problems.
Task-number: QTBUG-52012
Change-Id: Ia91ec5ec7b2a9721bd11e3648cdc161855b4454e
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Recursive and multisample support is left as a future exercise. Mipmapping
is not supported and is not planned for the time being.
Layers cannot currently be rendered on their own, although they have their
own independent render targets. Starting a layer just starts the next frame early,
putting all commands to the normal command list of that frame. Thus this is
not yet fully suitable for implementing grabs.
Buffer handling is revised to support multiple vertex, index or constant
buffers. This is essential since we are going to have multiple renderer
instances (and may also be needed for a more complex batching renderer
in the future)
QSGBasicImageNode::preprocess is changed not to regenerate the geometry on
every dynamic texture change. In most cases only the material needs to be
dirtied. Rebuilding the geometry is only necessary when the normalized
subrect or similar changes.
Change-Id: Id088c15d1b75022b54c1f8bff1656d2cd68fa7cc
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>