From 09117c4f6d2820883b02a4ef63e455565c186cb0 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Sat, 18 Apr 2020 11:50:44 +0200 Subject: [PATCH] avoid useless constraints --- playground/anchors/AnchorBox.cpp | 15 ++++++++------- playground/anchors/AnchorBox.h | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/playground/anchors/AnchorBox.cpp b/playground/anchors/AnchorBox.cpp index 5cba5761..5b6ebd68 100644 --- a/playground/anchors/AnchorBox.cpp +++ b/playground/anchors/AnchorBox.cpp @@ -229,8 +229,8 @@ void AnchorBox::updateHints() Solver solver; - setupAnchorConstraints( solver ); - setupSizeConstraints( solver ); + setupAnchorConstraints( false, solver ); + setupSizeConstraints( true, solver ); { solver.updateVariables(); @@ -305,8 +305,8 @@ void AnchorBox::updateVariables( qreal width, qreal height ) if ( !solver.hasConstraints() ) { - setupAnchorConstraints( solver ); - setupSizeConstraints( solver ); + setupAnchorConstraints( true, solver ); + setupSizeConstraints( true, solver ); const double strength = 0.9 * Strength::required; @@ -320,7 +320,7 @@ void AnchorBox::updateVariables( qreal width, qreal height ) solver.updateVariables(); } -void AnchorBox::setupAnchorConstraints( Solver& solver ) +void AnchorBox::setupAnchorConstraints( bool layoutChildren, Solver& solver ) { auto& geometries = m_data->geometries; @@ -367,7 +367,7 @@ void AnchorBox::setupAnchorConstraints( Solver& solver ) solver.addConstraint( expr1 == expr2 ); #if 1 - if ( anchor.item2 != this ) + if ( layoutChildren && anchor.item2 != this ) { const auto o = qskOrientation( anchor.edge1 ); @@ -386,7 +386,7 @@ void AnchorBox::setupAnchorConstraints( Solver& solver ) } } -void AnchorBox::setupSizeConstraints( Solver& solver ) +void AnchorBox::setupSizeConstraints( bool layoutChildren, Solver& solver ) { auto& geometries = m_data->geometries; @@ -409,6 +409,7 @@ void AnchorBox::setupSizeConstraints( Solver& solver ) solver.addConstraint( r.height() >= minSize.height() ); } + if ( layoutChildren ) { // preferred size const auto prefSize = qskSizeConstraint( item, Qt::PreferredSize ); diff --git a/playground/anchors/AnchorBox.h b/playground/anchors/AnchorBox.h index 73a6a7ce..57fe526d 100644 --- a/playground/anchors/AnchorBox.h +++ b/playground/anchors/AnchorBox.h @@ -40,8 +40,8 @@ class AnchorBox : public QskControl private: void updateHints(); void updateVariables( qreal width, qreal height ); - void setupAnchorConstraints( Solver& ); - void setupSizeConstraints( Solver& ); + void setupAnchorConstraints( bool layoutChildren, Solver& ); + void setupSizeConstraints( bool layoutChildren, Solver& ); class PrivateData; std::unique_ptr< PrivateData > m_data;