diff options
author | Marc Mutz <[email protected]> | 2025-03-12 14:15:12 +0100 |
---|---|---|
committer | Marc Mutz <[email protected]> | 2025-03-12 23:51:40 +0000 |
commit | 3aa431e3fe42d7eb943f6b9920ad47b074856abe (patch) | |
tree | 8f012187f5abe396a606c8dbe8dbd05132da8d43 /src/widgets/graphicsview | |
parent | 49809c6e41101a11b5a264c7e8b4d4ce05d3c04a (diff) |
QGraphicsAnchorLayout: make createSlack() return a proper struct
... instead of std::pair.
This is in preparation of breaking QSimplexVariable up into
QSimplexVariable (with protected dtor) and trivial subclass
QConcreteSimplexVariable, to statically ensure that we're not deleting
derived classes (AnchorData) through QSimplexVariable pointers (which
is UB, and subject to a Coverity complaint).
This is basically the same program we did for QBrushData, culminating
in 3bbc9e29ef59683351cf35c19a8bd4a030615c64.
This second patch modernizes the code a bit and, by scoping the
variable holding the return value of createSlack() tighter, allows the
use of auto and therefore isolates the code from the changes in the
final patch of the series.
Pick-to: 6.9 6.8 6.5
Coverity-Id: 390828
Change-Id: I15b51a3118c7ef33e8351a3e198abaebf4300d61
Reviewed-by: Mate Barany <[email protected]>
Diffstat (limited to 'src/widgets/graphicsview')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp index 7ae5911e7bb..f8388f8ba0c 100644 --- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp @@ -2761,9 +2761,13 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *> } enum slackType { Grower = -1, Shrinker = 1 }; -static std::pair<QSimplexVariable *, QSimplexConstraint *> createSlack(QSimplexConstraint *sizeConstraint, - qreal interval, slackType type) +static auto createSlack(QSimplexConstraint *sizeConstraint, qreal interval, slackType type) { + struct R { + QSimplexVariable *slack; + QSimplexConstraint *limit; + }; + QSimplexVariable *slack = new QSimplexVariable; sizeConstraint->variables.insert(slack, type); @@ -2772,7 +2776,7 @@ static std::pair<QSimplexVariable *, QSimplexConstraint *> createSlack(QSimplexC limit->ratio = QSimplexConstraint::LessOrEqual; limit->constant = interval; - return std::pair(slack, limit); + return R{slack, limit}; } bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint *> &constraints, @@ -2815,48 +2819,47 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint sizeConstraint->constant = ad->prefSize + g_offset; // Can easily shrink - std::pair<QSimplexVariable *, QSimplexConstraint *> slack; const qreal softShrinkInterval = ad->prefSize - ad->minPrefSize; if (softShrinkInterval) { - slack = createSlack(sizeConstraint, softShrinkInterval, Shrinker); - preferredVariables += slack.first; - preferredConstraints += slack.second; + auto r = createSlack(sizeConstraint, softShrinkInterval, Shrinker); + preferredVariables += r.slack; + preferredConstraints += r.limit; // Add to objective with ratio == 1 (soft) - objective.variables.insert(slack.first, 1.0); + objective.variables.insert(r.slack, 1.0); } // Can easily grow const qreal softGrowInterval = ad->maxPrefSize - ad->prefSize; if (softGrowInterval) { - slack = createSlack(sizeConstraint, softGrowInterval, Grower); - preferredVariables += slack.first; - preferredConstraints += slack.second; + auto r = createSlack(sizeConstraint, softGrowInterval, Grower); + preferredVariables += r.slack; + preferredConstraints += r.limit; // Add to objective with ratio == 1 (soft) - objective.variables.insert(slack.first, 1.0); + objective.variables.insert(r.slack, 1.0); } // Can shrink if really necessary const qreal hardShrinkInterval = ad->minPrefSize - ad->minSize; if (hardShrinkInterval) { - slack = createSlack(sizeConstraint, hardShrinkInterval, Shrinker); - preferredVariables += slack.first; - preferredConstraints += slack.second; + auto r = createSlack(sizeConstraint, hardShrinkInterval, Shrinker); + preferredVariables += r.slack; + preferredConstraints += r.limit; // Add to objective with ratio == N (hard) - objective.variables.insert(slack.first, variables.size()); + objective.variables.insert(r.slack, variables.size()); } // Can grow if really necessary const qreal hardGrowInterval = ad->maxSize - ad->maxPrefSize; if (hardGrowInterval) { - slack = createSlack(sizeConstraint, hardGrowInterval, Grower); - preferredVariables += slack.first; - preferredConstraints += slack.second; + auto r = createSlack(sizeConstraint, hardGrowInterval, Grower); + preferredVariables += r.slack; + preferredConstraints += r.limit; // Add to objective with ratio == N (hard) - objective.variables.insert(slack.first, variables.size()); + objective.variables.insert(r.slack, variables.size()); } } |