summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-04-23 22:34:42 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-04-23 22:34:42 -0400
commit6d3d4591b189d4e7965234c6851d35b9c0366fa5 (patch)
treedc51864fcab9b83225d6259421e336ae5c831b22
parent79084dd438e612ee07e2312b4231873e98230a17 (diff)
downloadsigen-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.cpp32
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());