diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2009-04-23 22:34:42 -0400 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2009-04-23 22:34:42 -0400 |
| commit | 6d3d4591b189d4e7965234c6851d35b9c0366fa5 (patch) | |
| tree | dc51864fcab9b83225d6259421e336ae5c831b22 | |
| parent | 79084dd438e612ee07e2312b4231873e98230a17 (diff) | |
| download | sigen-6d3d4591b189d4e7965234c6851d35b9c0366fa5.tar.gz sigen-6d3d4591b189d4e7965234c6851d35b9c0366fa5.tar.xz sigen-6d3d4591b189d4e7965234c6851d35b9c0366fa5.zip | |
Fix the code that finds unfit areas between rectangles
| -rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapPlacement.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp b/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp index 236a0cad..da95141e 100644 --- a/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp +++ b/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp @@ -200,23 +200,35 @@ void WorldMapPlacement::addRect(const QRectF& rect) continue; foreach (const QRectF& rect, m_rects) { - if ((rect.top() < newRect.bottom()) || (newRect.top() < rect.bottom())) + if ((rect.left() < newRect.right()) && (newRect.left() < rect.right())) { const int left = qMax(rect.left(), newRect.left()); const int right = qMin(rect.right(), newRect.right()); - if (m_size.height() < (newRect.top() - rect.bottom())) - queue.enqueue(QRect(left, rect.bottom(), right, newRect.top())); - else if (m_size.height() < (rect.top() - newRect.bottom())) - queue.enqueue(QRect(left, newRect.bottom(), right, rect.top())); + if (newRect.bottom() < rect.top()) + { + if ((rect.top() - newRect.bottom()) < m_size.height()) + queue.enqueue(QRectF(QPointF(left, newRect.bottom()), QPointF(right, rect.top()))); + } + else if (rect.bottom() < newRect.top()) + { + if ((newRect.top() - rect.bottom()) < m_size.height()) + queue.enqueue(QRectF(QPointF(left, rect.bottom()), QPointF(right, newRect.top()))); + } } - else if ((rect.left() < newRect.right()) || (newRect.left() < rect.right())) + else if ((rect.top() < newRect.bottom()) && (newRect.top() < rect.bottom())) { const int top = qMax(rect.top(), newRect.top()); const int bottom = qMin(rect.bottom(), newRect.bottom()); - if (m_size.width() < (newRect.left() - rect.right())) - queue.enqueue(QRect(rect.right(), top, newRect.left(), bottom)); - else if (m_size.width() < (rect.right() - newRect.left())) - queue.enqueue(QRect(newRect.right(), top, rect.left(), bottom)); + if (rect.right() < newRect.left()) + { + if ((newRect.left() - rect.right()) < m_size.width()) + queue.enqueue(QRectF(QPointF(rect.right(), top), QPointF(newRect.left(), bottom))); + } + else if (newRect.right() < rect.left()) + { + if ((rect.left() - newRect.right()) < m_size.width()) + queue.enqueue(QRectF(QPointF(newRect.right(), top), QPointF(rect.left(), bottom))); + } } } m_rects.append(newRect.toRect()); |
