summaryrefslogtreecommitdiff
path: root/src/gui/graphicsview/qgraphicsscene_bsp.cpp
diff options
context:
space:
mode:
authorAlexis Menard <alexis.menard@trolltech.com>2009-04-07 20:42:53 +0200
committerAlexis Menard <alexis.menard@trolltech.com>2009-04-07 20:42:53 +0200
commit226baa99f53eeeff2489148c9187c19f5bc86f0e (patch)
tree9dae513b7d8da6667d7a2f86a5334326a6c29e34 /src/gui/graphicsview/qgraphicsscene_bsp.cpp
parenta779817905ae66de9333fbe3896b0ff1c3990581 (diff)
downloadqt4-tools-226baa99f53eeeff2489148c9187c19f5bc86f0e.tar.gz
Remove the indexing (BSP) logic from the scene
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
Diffstat (limited to 'src/gui/graphicsview/qgraphicsscene_bsp.cpp')
-rw-r--r--src/gui/graphicsview/qgraphicsscene_bsp.cpp40
1 files changed, 13 insertions, 27 deletions
diff --git a/src/gui/graphicsview/qgraphicsscene_bsp.cpp b/src/gui/graphicsview/qgraphicsscene_bsp.cpp
index a81b14d1f1..f8fa4500c8 100644
--- a/src/gui/graphicsview/qgraphicsscene_bsp.cpp
+++ b/src/gui/graphicsview/qgraphicsscene_bsp.cpp
@@ -83,8 +83,8 @@ public:
}
};
-QGraphicsSceneBspTree::QGraphicsSceneBspTree(QObject *parent)
- : QGraphicsSceneIndex(parent), depth(0), leafCnt(0)
+QGraphicsSceneBspTree::QGraphicsSceneBspTree()
+ : leafCnt(0)
{
insertVisitor = new QGraphicsSceneInsertItemBspTreeVisitor;
removeVisitor = new QGraphicsSceneRemoveItemBspTreeVisitor;
@@ -100,7 +100,7 @@ QGraphicsSceneBspTree::~QGraphicsSceneBspTree()
void QGraphicsSceneBspTree::initialize(const QRectF &rect, int depth)
{
- sceneRect = rect;
+ this->rect = rect;
leafCnt = 0;
nodes.resize((1 << (depth + 1)) - 1);
nodes.fill(Node());
@@ -117,29 +117,19 @@ void QGraphicsSceneBspTree::clear()
leaves.clear();
}
-QRectF QGraphicsSceneBspTree::rect() const
-{
- return sceneRect;
-}
-
-void QGraphicsSceneBspTree::setRect(const QRectF &rect)
-{
- sceneRect = rect;
-}
-
-void QGraphicsSceneBspTree::insertItem(QGraphicsItem *item)
+void QGraphicsSceneBspTree::insertItem(QGraphicsItem *item, const QRectF &rect)
{
insertVisitor->item = item;
- climbTree(insertVisitor, item->sceneBoundingRect());
+ climbTree(insertVisitor, rect);
}
-void QGraphicsSceneBspTree::removeItem(QGraphicsItem *item)
+void QGraphicsSceneBspTree::removeItem(QGraphicsItem *item, const QRectF &rect)
{
removeVisitor->item = item;
- climbTree(removeVisitor, item->sceneBoundingRect());
+ climbTree(removeVisitor, rect);
}
-void QGraphicsSceneBspTree::removeItems(const QList<QGraphicsItem *> &items)
+void QGraphicsSceneBspTree::removeItems(const QSet<QGraphicsItem *> &items)
{
for (int i = 0; i < leaves.size(); ++i) {
QList<QGraphicsItem *> newItemList;
@@ -247,10 +237,8 @@ void QGraphicsSceneBspTree::initialize(const QRectF &rect, int depth, int index)
void QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor *visitor, const QPointF &pos, int index)
{
- if (nodes.isEmpty()) {
- // should never happen for bsp tree internal to QGraphicsScene
- initialize(sceneRect, 0);
- }
+ if (nodes.isEmpty())
+ return;
const Node &node = nodes.at(index);
int childIndex = firstChildIndex(index);
@@ -279,10 +267,8 @@ void QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor *visitor, con
void QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor *visitor, const QRectF &rect, int index)
{
- if (nodes.isEmpty()) {
- // should never happen for bsp tree internal to QGraphicsScene
- initialize(sceneRect, 0);
- }
+ if (nodes.isEmpty())
+ return;
const Node &node = nodes.at(index);
int childIndex = firstChildIndex(index);
@@ -316,7 +302,7 @@ void QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor *visitor, con
QRectF QGraphicsSceneBspTree::rectForIndex(int index) const
{
if (index <= 0)
- return sceneRect;
+ return rect;
int parentIdx = parentIndex(index);
QRectF rect = rectForIndex(parentIdx);