summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qmdiarea.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2013-10-05 01:43:29 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-26 22:02:53 +0100
commitca6b36e21fb99ddc01a954e4734c24aa2732780c (patch)
tree039bc9437840e2e428285b91afca51e89e35517f /src/widgets/widgets/qmdiarea.cpp
parent1e4d70b5b626f70c6d36731c08c2367febf95f27 (diff)
QMdiArea: don't use out parameters, return by value
Change-Id: I787b56033899d6845886c4707cf3acf7428f94a2 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/widgets/widgets/qmdiarea.cpp')
-rw-r--r--src/widgets/widgets/qmdiarea.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp
index f06370bbcf..d0488d5955 100644
--- a/src/widgets/widgets/qmdiarea.cpp
+++ b/src/widgets/widgets/qmdiarea.cpp
@@ -447,9 +447,11 @@ QRect MinOverlapPlacer::findMinOverlapRect(const QVector<QRect> &source, const Q
\internal
Gets candidates for the final placement.
*/
-void MinOverlapPlacer::getCandidatePlacements(const QSize &size, const QVector<QRect> &rects,
- const QRect &domain,QVector<QRect> &candidates)
+QVector<QRect> MinOverlapPlacer::getCandidatePlacements(const QSize &size, const QVector<QRect> &rects,
+ const QRect &domain)
{
+ QVector<QRect> result;
+
QVector<int> xlist;
xlist.reserve(2 + rects.size());
xlist << domain.left() << domain.right() - size.width() + 1;
@@ -471,10 +473,11 @@ void MinOverlapPlacer::getCandidatePlacements(const QSize &size, const QVector<Q
std::sort(ylist.begin(), ylist.end());
ylist.erase(std::unique(ylist.begin(), ylist.end()), ylist.end());
- candidates.reserve(candidates.size() + ylist.size() * xlist.size());
+ result.reserve(ylist.size() * xlist.size());
foreach (int y, ylist)
foreach (int x, xlist)
- candidates << QRect(QPoint(x, y), size);
+ result << QRect(QPoint(x, y), size);
+ return result;
}
/*!
@@ -482,9 +485,11 @@ void MinOverlapPlacer::getCandidatePlacements(const QSize &size, const QVector<Q
Finds all rectangles in 'source' not completely inside 'domain'. The result is stored
in 'result' and also removed from 'source'.
*/
-void MinOverlapPlacer::findNonInsiders(const QRect &domain, QVector<QRect> &source,
- QVector<QRect> &result)
+QVector<QRect> MinOverlapPlacer::findNonInsiders(const QRect &domain, QVector<QRect> &source)
{
+ QVector<QRect> result;
+ result.reserve(source.size());
+
QMutableVectorIterator<QRect> it(source);
while (it.hasNext()) {
const QRect srcRect = it.next();
@@ -493,6 +498,8 @@ void MinOverlapPlacer::findNonInsiders(const QRect &domain, QVector<QRect> &sour
it.remove();
}
}
+
+ return result;
}
/*!
@@ -500,9 +507,11 @@ void MinOverlapPlacer::findNonInsiders(const QRect &domain, QVector<QRect> &sour
Finds all rectangles in 'source' that overlaps 'domain' by the maximum overlap area
between 'domain' and any rectangle in 'source'. The result is stored in 'result'.
*/
-void MinOverlapPlacer::findMaxOverlappers(const QRect &domain, const QVector<QRect> &source,
- QVector<QRect> &result)
+QVector<QRect> MinOverlapPlacer::findMaxOverlappers(const QRect &domain, const QVector<QRect> &source)
{
+ QVector<QRect> result;
+ result.reserve(source.size());
+
int maxOverlap = -1;
foreach (const QRect &srcRect, source) {
QRect intersection = domain.intersected(srcRect);
@@ -515,6 +524,8 @@ void MinOverlapPlacer::findMaxOverlappers(const QRect &domain, const QVector<QRe
result << srcRect;
}
}
+
+ return result;
}
/*!
@@ -526,14 +537,12 @@ void MinOverlapPlacer::findMaxOverlappers(const QRect &domain, const QVector<QRe
QPoint MinOverlapPlacer::findBestPlacement(const QRect &domain, const QVector<QRect> &rects,
QVector<QRect> &source)
{
- QVector<QRect> nonInsiders;
- findNonInsiders(domain, source, nonInsiders);
+ const QVector<QRect> nonInsiders = findNonInsiders(domain, source);
if (!source.empty())
return findMinOverlapRect(source, rects).topLeft();
- QVector<QRect> maxOverlappers;
- findMaxOverlappers(domain, nonInsiders, maxOverlappers);
+ QVector<QRect> maxOverlappers = findMaxOverlappers(domain, nonInsiders);
return findMinOverlapRect(maxOverlappers, rects).topLeft();
}
@@ -554,8 +563,7 @@ QPoint MinOverlapPlacer::place(const QSize &size, const QVector<QRect> &rects,
return QPoint();
}
- QVector<QRect> candidates;
- getCandidatePlacements(size, rects, domain, candidates);
+ QVector<QRect> candidates = getCandidatePlacements(size, rects, domain);
return findBestPlacement(domain, rects, candidates);
}