| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Usefull for the POV of the scene and let the BSP update its internal
structure before the next event loop reentrancy.
|
|
|
|
|
|
| |
This basically move some logic from the scene to the index base class.
Lot of work need to be done in order to benefits from the device
transform. The sorting needs to be move in the BSP tree.
|
|\
| |
| |
| | |
qt-main/qgraphicssceneindex
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When we have already a pixmap of an item in the cache, we should
remove the entry from the cache otherwise when we will repaint/modify
the copy of the pixmap (the copy of the cache) then we will trigger a
deep copy ; this is because both entries in the cache and our copy
share the same data and if you modify one of them a copy is triggered.
I have added a benchmark as well to test that.
Reviewed-by:bnilsen
Reviewed-by:andreas
|
| |
| |
| |
| |
| |
| |
| |
| | |
We have to replace the pixmap in the cache if it was previously there,
we don't need to insert a new pixmap if a full update has been
triggered.
Reviewed-by:mbm
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This commit add a new API to add/find/remove pixmaps into QPixmapCache.
This new extension is based on a key that the cache give you during
the insertion. This key is internally a int which makes all operations
in the cache much more faster that the string approach.
Auto-tests has been extended as well and a benchmark has been added to
compare both approach. I also depecrate the find method for the
string API to have a method pointer based and not reference based like
the Qt policy says.
Reviewed-by: bnilsen
Reviewed-by: andreas
Followed-deeply-by: trond
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
QStyleOptionGraphicsItem extends QStyleOption with three values:
1) matrix, 2) levelOfDetail, 3) exposedRect, and they all
involve expensive QTranform operations when calculated. We
pass style option(s) to drawItems() and paint(), but the
extended values are usually not in use. We can therefore gain
quite some nice speedup by making them opt-in with the
QGraphicsItem::ItemUsesExtendedStyleOption flag.
Additionally, QStyleOptionGraphicsItem::levelOfDetail has been
obsoleted, and a new function QStyleOptionGraphicsItem::
levelOfDetailFromTransform(const QTransform &) has been added.
Me and Andreas don't consider this change to be too controversial
even though it changes the behavior.
Auto tests still pass.
Reviewed-by: Andreas
|
| |\
| | |
| | |
| | |
| | | |
Conflicts:
tools/macdeployqt/shared/shared.cpp
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
QGraphicsItem::deviceTransform() returns the item-to-device transform,
provided with the device-to-scene transform, and combining it with the
item's scene transform. This function is meant to handle items that
enable ItemIgnoresTransformations, but it happened to not work properly
for items that _don't_ enable that flag. Unfortunately this bug is
hard to work around for users from the outside, as it requires you to
check if the item or any ancestor enables ItemIgnoresTransformations.
The fix also removes unnecessary branchs inside QGV so that we use the
same function for all items.
Reviewed-by: bnilsen
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The bug report came from the Declarative UI project as part of Kinetic.
In FxFlickable the mouse is explicitly grabbed inside the mouse press
event handler, and it's (explicitly) released in the release handler.
When doing this, lastMouseGrabber is 0, and the double-click is delivered
as a press. The fix is to not convert the double-click to a press if the
receiver is the first and only mouse grabber (i.e., lastMouseGrabber is
0).
The fix isn't entirely correct, as it can in theory allow an item to
receive a double-click event as the first received event. This seems
to only be possible in the case of using explicit mouse grabbing in
combinations with the press and release event handlers so it's quite
a corner case.
Reviewed-by: Alexis
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It was not a good idea to delete all items in the middle of the loop
when clearing the scene since we change the content of indexedItems
by deleting one of them.
We need to store first all top level items in a temporary list
and then delete them in one shot (that will delete their children
as well).
|
|\ \ \
| |/ /
| | |
| | |
| | |
| | |
| | | |
qt-main/qgraphicssceneindex
Conflicts:
src/gui/graphicsview/qgraphicsitem.cpp
|
| |\ \
| | |/
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/gui/graphicsview/qgraphicsitem.cpp
tools/qdoc3/test/assistant.qdocconf
tools/qdoc3/test/designer.qdocconf
tools/qdoc3/test/linguist.qdocconf
tools/qdoc3/test/qmake.qdocconf
tools/qdoc3/test/qt-build-docs.qdocconf
tools/qdoc3/test/qt.qdocconf
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
into it."
This reverts commit 0985805ab3c7de5b15c115a98afb15944b6d93b9.
The Elastic Nodes example shows a black background for the cache pixmap
if the call to fill isn't there. Alexis and I both agree that it makes
no sense that we fill the pixmap with transparent pixels instead of
just drawing with QPainter::CompositionMode_Source, but since this
regression was introduced after 4.5.0 was released we must revert before
we investigate further.
Reviewed-by: Alexis
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Previously we were calling two times itemChange on the parent to give
QGraphicsItem::ItemChildAddedChange. We don't need that. One is enough.
BT : yes
Task-number: BT
Reviewed-by: Andreas
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Change fd4d94df4eb16e9e54f61dd8ee45914e24832ae9 introduced mouse grab
and keyboard grab support to Graphics View (this was as part of 4.4).
The change was missing a large set of autotests that I wrote to test
the behavior of these features. As part of task 245317, which involves
investigating modality in Graphics View, I figured it would be a good
idea to start off but reconstructing these autotests. So this change
is mainly about adding autotests for mouse grabbing. And of course,
as it always is, I found two bugs while writing these tests.
1) Calling QGraphicsItem::grabMouse() while the item is holding the
implicit mouse grab will now upgrade the implicit grab to an
explicit grab.
2) Adding a popup to the scene will automatically grab the mouse.
Before, the popup would get the grab on show(), but if it was
already visible when added to the scene it would not gain the
grab.
Task-number: 245317
Reviewed-by: jasplin
|
| |\ \
| | |/
| | |
| | |
| | | |
Conflicts:
src/gui/graphicsview/qgraphicsitem.cpp
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The problem here is that we are filling the sceneEventFilters map
when we install evenfilter but we never remove the references of an
item if it has been removed from the scene or deleted. The deletion can
keep stale pointers into the map and a crash can happen.
BT:yes
Task-number:250272
Reviewed-by: bnilsen
Reviewed-by: andreas
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The function was added in fde7f3d03782c801901f511131458d6fcb1021a5
and we believe qFuzzyIsNull is a better naming and more in line
with qFuzzyCompare.
Reviewed-by: Lars Knoll
Reviewed-by: nrc
Reviewed-by: Samuel
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We basically add a new index that implement the old BSP logic but in a
separate class instead of living into the QGraphicsScene. It will be
much more easier to add a new index method or for people to use their
own
Conflicts:
src/gui/graphicsview/qgraphicsitem.cpp
src/gui/graphicsview/qgraphicssceneindex.h
|
| | |
| | |
| | |
| | |
| | |
| | | |
commit basically remove the list of unindexingItems and use the linear index instead.
Details: We now must be able to get rid of the timer which is the BSP role.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
delete it.
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|/ /
| |
| |
| | |
QGraphicsScene
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We don't need mouse tracking unless there are items in the
scene that either accept hover events or have a cursor set.
This cut-off is extremely efficient in the common case since
all items ignore hover events and use the standard cursor
by default.
We no longer dig for items and do lots of intersection and
calculating just for fun :-) We even get rid of the overhead
of 2 x QCoreApplication::sendEvent!
The next step is to optimize the items(*) functions to
simply check for hasCursor()/acceptsHoverEvents() before
we do complex checks like intersects/collidesWithPath() etc.
Auto test included.
Reviewed-by: Andreas
|
| |
| |
| |
| |
| | |
qIsFuzzyNull is much cheaper than qFuzzyCompare, and
in this case qIsFuzzyNull will do the trick.
|
|\ \
| |/
| |
| |
| |
| |
| |
| | |
Conflicts:
src/gui/graphicsview/qgraphicsitem.cpp
src/gui/graphicsview/qgraphicsitem_p.h
src/gui/graphicsview/qgraphicsscene.cpp
src/gui/painting/qtransform.cpp
|
| |
| |
| |
| |
| | |
RevBy: Olivier
AutoTest: Still pass
|
| |
| |
| |
| |
| | |
RevBy: Andreas
AutoTest: included
|
| |
| |
| |
| |
| | |
Implement specialized (and more efficient versions) of item_helper()
and child_helper() that test for QPointF in the scene.
|
| |
| |
| |
| | |
AutoTest: Still pass
|
| |
| |
| |
| | |
RevBy: Andreas
|
| |
| |
| |
| |
| |
| |
| | |
RevBy: Olivier
AutoTest: Still pass.
Details: Items usually don't have effective opacity, i.e. it is 1.0, so
don't bother doing fuzzy compare if that's the case.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
RevBy: Alexis
AutoTest: Still pass
Details: findItems() does almost exactly the same as
QGraphicsView::items, the only difference is that it checks
whether we are about to redraw all items. Next step
is to optimize the items_helper functions.
The patch does also include a fix for
::items/childItems_helper(const QPainterPath ...); it didn't
take Qt::Intersects/ContainsItemBoundingRect into account
(in the same fashion as we do in the other helper functions).
|
| |
| |
| |
| |
| | |
RevBy: bnilsen
AutoTest: All pass + plasma ok
|
| |
| |
| |
| | |
Details: Be a little bit smarter before doing *= :)
|
| |
| |
| |
| |
| |
| | |
RevBy: Andreas
Details: Note that isNull() implies isEmpty(), but it only catches
the cases where width and height is 0.
|
|\ \
| |/
| |
| |
| | |
Conflicts:
tools/linguist/shared/profileevaluator.cpp
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Right before Qt 4.5.0 was released, Alexis and I submitted change
7e9b000ee418ef2d9c8fadb2c6b8870e0335bd5e, which accidentally introduced
a rounding error causing items whose bounding rect contains fractional
numbers (e.g., QRectF(-0.5, -0.5, 11, 11)), to always be drawn with a
one-pixel strech even if otherwise untransformed. This caused a
significant slowdown for pixmap items and any shape item that uses
almost any pen width != 0, if they enable ItemCoordinateCache.
The fix is to consistently use the aligned rectangle both when generating
the cache pixmap and when drawing it.
Reviewed-by: Alexis
|
| |
|
|
|