summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2018-06-04 12:54:32 -0700
committerNicolas Roard <nicolasroard@google.com>2018-06-04 12:54:32 -0700
commit406e6406c502b4467775a417155e7a4b92e787f7 (patch)
tree8f7cb7dff3293246d289dafefb29ad519e4d0046
parente3b523ed7c0a98486941063b9ca72bb25c0f5f8c (diff)
downloadsherpa-406e6406c502b4467775a417155e7a4b92e787f7.tar.gz
Correctly take in account max dimension for ratio
Fixes: 79962504 Test: added check 201 added RatioTest.testRatioMax() Change-Id: I5c86a76c630f3f0c7634fcde4da09ab03f9c14ae
-rw-r--r--solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java4
-rw-r--r--solver/src/test/java/android/support/constraint/solver/RatioTest.java27
2 files changed, 29 insertions, 2 deletions
diff --git a/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java b/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java
index 0302056..a5e143d 100644
--- a/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java
+++ b/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java
@@ -2647,9 +2647,9 @@ public class ConstraintWidget {
applyCentering = true;
applyBoundsCheck = true;
int strength = SolverVariable.STRENGTH_HIGHEST;
- if (!useRatio && mResolvedDimensionRatioSide != UNKNOWN) {
+ if (!useRatio && mResolvedDimensionRatioSide != UNKNOWN && matchMaxDimension <= 0) {
// useRatio is true if the side we base ourselves on for the ratio is this one
- // in that case, we need to have a stronger constraint.
+ // if that's not the case, we need to have a stronger constraint.
strength = SolverVariable.STRENGTH_FIXED;
}
system.addEquality(begin, beginTarget, beginAnchor.getMargin(), strength);
diff --git a/solver/src/test/java/android/support/constraint/solver/RatioTest.java b/solver/src/test/java/android/support/constraint/solver/RatioTest.java
index 3ce404b..16b745a 100644
--- a/solver/src/test/java/android/support/constraint/solver/RatioTest.java
+++ b/solver/src/test/java/android/support/constraint/solver/RatioTest.java
@@ -26,6 +26,33 @@ import static org.testng.Assert.assertEquals;
public class RatioTest {
@Test
+ public void testRatioMax() {
+ ConstraintWidgetContainer root = new ConstraintWidgetContainer(0, 0, 1000, 1000);
+ ConstraintWidget A = new ConstraintWidget(100, 100);
+ root.setDebugName("root");
+ root.add(A);
+ A.setDebugName("A");
+
+ A.connect(ConstraintAnchor.Type.LEFT, root, ConstraintAnchor.Type.LEFT);
+
+ A.connect(ConstraintAnchor.Type.TOP, root, ConstraintAnchor.Type.TOP);
+ A.connect(ConstraintAnchor.Type.BOTTOM, root, ConstraintAnchor.Type.BOTTOM);
+
+ A.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT);
+ A.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT);
+ A.setVerticalMatchStyle(ConstraintWidget.MATCH_CONSTRAINT_RATIO, 0, 150, 0);
+ A.setDimensionRatio("W,16:9");
+
+ root.setOptimizationLevel(Optimizer.OPTIMIZATION_NONE);
+ root.layout();
+
+ System.out.println("a) root: " + root + " A: " + A);
+ assertEquals(A.getWidth(), 267);
+ assertEquals(A.getHeight(), 150);
+ assertEquals(A.getTop(), 425);
+ }
+
+ @Test
public void testRatioSingleTarget() {
ConstraintWidgetContainer root = new ConstraintWidgetContainer(0, 0, 1000, 1000);
ConstraintWidget A = new ConstraintWidget(100, 100);