Skip to content

Commit b952c2b

Browse files
geom3trikalice-i-cecileTimJentzsch
authored
Min values should override max values (#262)
* Fix for #261 * Update all implementations of `maybe_clamp` * Add entry to RELEASES.md for min/max fix #261 * Add tests for min/max overrides * Release notes clarity Co-authored-by: TimJentzsch <[email protected]> * Remove duplicate heading from RELEASES.md * Add generated tests for min_size overriding max_size * Add newline in RELEASES.md Co-authored-by: Alice Cecile <[email protected]> Co-authored-by: TimJentzsch <[email protected]>
1 parent e8f3623 commit b952c2b

11 files changed

+216
-5
lines changed

RELEASES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
## 0.2.1 (unreleased)
44

55
### Fixes
6+
67
- `taffy::compute_layout` has been made public allowing Taffy to be used with custom storage (#263)
78

9+
- In case of conflicts, `min_size` now overrides `max_size` which overrides `size` (#261)
10+
811
## 0.2.0
912

1013
### New features

benches/generated/min_height_overrides_max_height.rs

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

benches/generated/min_width_overrides_max_width.rs

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

benches/generated/mod.rs

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/math.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl MaybeMath<Option<f32>, Option<f32>> for Option<f32> {
4646

4747
fn maybe_clamp(self, min: Option<f32>, max: Option<f32>) -> Option<f32> {
4848
match (self, min, max) {
49-
(Some(base), Some(min), Some(max)) => Some(base.max(min).min(max)),
49+
(Some(base), Some(min), Some(max)) => Some(base.min(max).max(min)),
5050
(Some(base), None, Some(max)) => Some(base.min(max)),
5151
(Some(base), Some(min), None) => Some(base.max(min)),
5252
(Some(_), None, None) => self,
@@ -83,7 +83,7 @@ impl MaybeMath<f32, Option<f32>> for Option<f32> {
8383
}
8484

8585
fn maybe_clamp(self, min: f32, max: f32) -> Option<f32> {
86-
self.map(|val| val.max(min).min(max))
86+
self.map(|val| val.min(max).max(min))
8787
}
8888

8989
fn maybe_add(self, rhs: f32) -> Option<f32> {
@@ -112,7 +112,7 @@ impl MaybeMath<Option<f32>, f32> for f32 {
112112

113113
fn maybe_clamp(self, min: Option<f32>, max: Option<f32>) -> f32 {
114114
match (min, max) {
115-
(Some(min), Some(max)) => self.max(min).min(max),
115+
(Some(min), Some(max)) => self.min(max).max(min),
116116
(None, Some(max)) => self.min(max),
117117
(Some(min), None) => self.max(min),
118118
(None, None) => self,
@@ -152,7 +152,7 @@ impl MaybeMath<f32, AvailableSpace> for AvailableSpace {
152152

153153
fn maybe_clamp(self, min: f32, max: f32) -> AvailableSpace {
154154
match self {
155-
AvailableSpace::Definite(val) => AvailableSpace::Definite(val.max(min).min(max)),
155+
AvailableSpace::Definite(val) => AvailableSpace::Definite(val.min(max).max(min)),
156156
AvailableSpace::MinContent => AvailableSpace::MinContent,
157157
AvailableSpace::MaxContent => AvailableSpace::MaxContent,
158158
}
@@ -196,7 +196,7 @@ impl MaybeMath<Option<f32>, AvailableSpace> for AvailableSpace {
196196

197197
fn maybe_clamp(self, min: Option<f32>, max: Option<f32>) -> AvailableSpace {
198198
match (self, min, max) {
199-
(AvailableSpace::Definite(val), Some(min), Some(max)) => AvailableSpace::Definite(val.max(min).min(max)),
199+
(AvailableSpace::Definite(val), Some(min), Some(max)) => AvailableSpace::Definite(val.min(max).max(min)),
200200
(AvailableSpace::Definite(val), None, Some(max)) => AvailableSpace::Definite(val.min(max)),
201201
(AvailableSpace::Definite(val), Some(min), None) => AvailableSpace::Definite(val.max(min)),
202202
(AvailableSpace::Definite(val), None, None) => AvailableSpace::Definite(val),
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<script src="../scripts/gentest/test_helper.js"></script>
5+
<link rel="stylesheet" type="text/css" href="../scripts/gentest/test_base_style.css">
6+
<title>
7+
Test description
8+
</title>
9+
<head/>
10+
<body>
11+
12+
<div id="test-root">
13+
<div style="min-height: 100px; max-height: 50px;"></div>
14+
</div>
15+
16+
</body>
17+
</html>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<script src="../scripts/gentest/test_helper.js"></script>
5+
<link rel="stylesheet" type="text/css" href="../scripts/gentest/test_base_style.css">
6+
<title>
7+
Test description
8+
</title>
9+
<head/>
10+
<body>
11+
12+
<div id="test-root">
13+
<div style="min-width: 100px; max-width: 50px;"></div>
14+
</div>
15+
16+
</body>
17+
</html>

tests/generated/min_height_overrides_max_height.rs

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/generated/min_width_overrides_max_width.rs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/generated/mod.rs

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/min_max_overrides.rs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#[cfg(test)]
2+
mod min_max_overrides {
3+
4+
use taffy::prelude::*;
5+
6+
#[test]
7+
fn min_overrides_max() {
8+
let mut taffy = Taffy::new();
9+
10+
let child = taffy
11+
.new_leaf(Style {
12+
size: Size { width: Dimension::Points(50.0), height: Dimension::Points(50.0) },
13+
min_size: Size { width: Dimension::Points(100.0), height: Dimension::Points(100.0) },
14+
max_size: Size { width: Dimension::Points(10.0), height: Dimension::Points(10.0) },
15+
..Default::default()
16+
})
17+
.unwrap();
18+
19+
taffy
20+
.compute_layout(
21+
child,
22+
Size { height: AvailableSpace::Definite(100.0), width: AvailableSpace::Definite(100.0) },
23+
)
24+
.unwrap();
25+
26+
assert_eq!(taffy.layout(child).unwrap().size, Size { width: 100.0, height: 100.0 });
27+
}
28+
29+
#[test]
30+
fn max_overrides_size() {
31+
let mut taffy = Taffy::new();
32+
33+
let child = taffy
34+
.new_leaf(Style {
35+
size: Size { width: Dimension::Points(50.0), height: Dimension::Points(50.0) },
36+
max_size: Size { width: Dimension::Points(10.0), height: Dimension::Points(10.0) },
37+
..Default::default()
38+
})
39+
.unwrap();
40+
41+
taffy
42+
.compute_layout(
43+
child,
44+
Size { height: AvailableSpace::Definite(100.0), width: AvailableSpace::Definite(100.0) },
45+
)
46+
.unwrap();
47+
48+
assert_eq!(taffy.layout(child).unwrap().size, Size { width: 10.0, height: 10.0 });
49+
}
50+
51+
#[test]
52+
fn min_overrides_size() {
53+
let mut taffy = Taffy::new();
54+
55+
let child = taffy
56+
.new_leaf(Style {
57+
size: Size { width: Dimension::Points(50.0), height: Dimension::Points(50.0) },
58+
min_size: Size { width: Dimension::Points(100.0), height: Dimension::Points(100.0) },
59+
..Default::default()
60+
})
61+
.unwrap();
62+
63+
taffy
64+
.compute_layout(
65+
child,
66+
Size { height: AvailableSpace::Definite(100.0), width: AvailableSpace::Definite(100.0) },
67+
)
68+
.unwrap();
69+
70+
assert_eq!(taffy.layout(child).unwrap().size, Size { width: 100.0, height: 100.0 });
71+
}
72+
}

0 commit comments

Comments
 (0)