Skip to content

Commit 2ffbf43

Browse files
authored
Add intrinsic Modifiers (#613)
- Add `IntrinsicSize` - Add `Modifier.width`, `Modifier.height`, `Modifier.requiredWidth`, `Modifier.requiredHeight` with `IntrinsicSize` as a parameter - Add unit tests for intrinsic Modifiers - Update `SizeModifier` for upstream (androidx/androidx@df20b2d)
1 parent 6da5f63 commit 2ffbf43

File tree

6 files changed

+841
-4
lines changed

6 files changed

+841
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
New:
77
- Create `mosaic-animation` library, that provides various possibilities for animating Mosaic. An analog of [androidx.compose.animation-core](https://developer.android.com/reference/kotlin/androidx/compose/animation/core/package-summary).
8+
- Add `IntrinsicSize` and related `Modifier.width/height/requiredWidth/requiredHeight`.
89

910
Changed:
1011
- Rendering now occurs as fast as possible, although still only when necessary. Previously the maximum FPS was capped to 20 which could cause minor visual delays when processing events.

mosaic-runtime/api/mosaic-runtime.api

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ public final class com/jakewharton/mosaic/layout/DrawStyle$Stroke : com/jakewhar
7373
public fun toString ()Ljava/lang/String;
7474
}
7575

76+
public final class com/jakewharton/mosaic/layout/IntrinsicKt {
77+
public static final fun height (Lcom/jakewharton/mosaic/modifier/Modifier;Lcom/jakewharton/mosaic/layout/IntrinsicSize;)Lcom/jakewharton/mosaic/modifier/Modifier;
78+
public static final fun requiredHeight (Lcom/jakewharton/mosaic/modifier/Modifier;Lcom/jakewharton/mosaic/layout/IntrinsicSize;)Lcom/jakewharton/mosaic/modifier/Modifier;
79+
public static final fun requiredWidth (Lcom/jakewharton/mosaic/modifier/Modifier;Lcom/jakewharton/mosaic/layout/IntrinsicSize;)Lcom/jakewharton/mosaic/modifier/Modifier;
80+
public static final fun width (Lcom/jakewharton/mosaic/modifier/Modifier;Lcom/jakewharton/mosaic/layout/IntrinsicSize;)Lcom/jakewharton/mosaic/modifier/Modifier;
81+
}
82+
7683
public abstract interface class com/jakewharton/mosaic/layout/IntrinsicMeasurable {
7784
public abstract fun getParentData ()Ljava/lang/Object;
7885
public abstract fun maxIntrinsicHeight (I)I
@@ -81,6 +88,14 @@ public abstract interface class com/jakewharton/mosaic/layout/IntrinsicMeasurabl
8188
public abstract fun minIntrinsicWidth (I)I
8289
}
8390

91+
public final class com/jakewharton/mosaic/layout/IntrinsicSize : java/lang/Enum {
92+
public static final field Max Lcom/jakewharton/mosaic/layout/IntrinsicSize;
93+
public static final field Min Lcom/jakewharton/mosaic/layout/IntrinsicSize;
94+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
95+
public static fun valueOf (Ljava/lang/String;)Lcom/jakewharton/mosaic/layout/IntrinsicSize;
96+
public static fun values ()[Lcom/jakewharton/mosaic/layout/IntrinsicSize;
97+
}
98+
8499
public final class com/jakewharton/mosaic/layout/KeyEvent {
85100
public static final field $stable I
86101
public fun <init> (Ljava/lang/String;ZZZ)V

mosaic-runtime/api/mosaic-runtime.klib.api

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ open annotation class com.jakewharton.mosaic.ui/MosaicComposable : kotlin/Annota
1414
constructor <init>() // com.jakewharton.mosaic.ui/MosaicComposable.<init>|<init>(){}[0]
1515
}
1616

17+
final enum class com.jakewharton.mosaic.layout/IntrinsicSize : kotlin/Enum<com.jakewharton.mosaic.layout/IntrinsicSize> { // com.jakewharton.mosaic.layout/IntrinsicSize|null[0]
18+
enum entry Max // com.jakewharton.mosaic.layout/IntrinsicSize.Max|null[0]
19+
enum entry Min // com.jakewharton.mosaic.layout/IntrinsicSize.Min|null[0]
20+
21+
final val entries // com.jakewharton.mosaic.layout/IntrinsicSize.entries|#static{}entries[0]
22+
final fun <get-entries>(): kotlin.enums/EnumEntries<com.jakewharton.mosaic.layout/IntrinsicSize> // com.jakewharton.mosaic.layout/IntrinsicSize.entries.<get-entries>|<get-entries>#static(){}[0]
23+
24+
final fun valueOf(kotlin/String): com.jakewharton.mosaic.layout/IntrinsicSize // com.jakewharton.mosaic.layout/IntrinsicSize.valueOf|valueOf#static(kotlin.String){}[0]
25+
final fun values(): kotlin/Array<com.jakewharton.mosaic.layout/IntrinsicSize> // com.jakewharton.mosaic.layout/IntrinsicSize.values|values#static(){}[0]
26+
}
27+
1728
abstract fun interface com.jakewharton.mosaic.layout/MeasurePolicy { // com.jakewharton.mosaic.layout/MeasurePolicy|null[0]
1829
abstract fun (com.jakewharton.mosaic.layout/MeasureScope).measure(kotlin.collections/List<com.jakewharton.mosaic.layout/Measurable>, com.jakewharton.mosaic.ui.unit/Constraints): com.jakewharton.mosaic.layout/MeasureResult // com.jakewharton.mosaic.layout/MeasurePolicy.measure|[email protected](kotlin.collections.List<com.jakewharton.mosaic.layout.Measurable>;com.jakewharton.mosaic.ui.unit.Constraints){}[0]
1930
open fun maxIntrinsicHeight(kotlin.collections/List<com.jakewharton.mosaic.layout/IntrinsicMeasurable>, kotlin/Int): kotlin/Int // com.jakewharton.mosaic.layout/MeasurePolicy.maxIntrinsicHeight|maxIntrinsicHeight(kotlin.collections.List<com.jakewharton.mosaic.layout.IntrinsicMeasurable>;kotlin.Int){}[0]
@@ -651,6 +662,7 @@ final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layo
651662
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/fillMaxHeight(kotlin/Float = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/fillMaxHeight|[email protected](kotlin.Float){}[0]
652663
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/fillMaxSize(kotlin/Float = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/fillMaxSize|[email protected](kotlin.Float){}[0]
653664
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/fillMaxWidth(kotlin/Float = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/fillMaxWidth|[email protected](kotlin.Float){}[0]
665+
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/height(com.jakewharton.mosaic.layout/IntrinsicSize): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/height|[email protected](com.jakewharton.mosaic.layout.IntrinsicSize){}[0]
654666
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/height(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/height|[email protected](kotlin.Int){}[0]
655667
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/heightIn(kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/heightIn|[email protected](kotlin.Int;kotlin.Int){}[0]
656668
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/layout(kotlin/Function3<com.jakewharton.mosaic.layout/MeasureScope, com.jakewharton.mosaic.layout/Measurable, com.jakewharton.mosaic.ui.unit/Constraints, com.jakewharton.mosaic.layout/MeasureResult>): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/layout|[email protected](kotlin.Function3<com.jakewharton.mosaic.layout.MeasureScope,com.jakewharton.mosaic.layout.Measurable,com.jakewharton.mosaic.ui.unit.Constraints,com.jakewharton.mosaic.layout.MeasureResult>){}[0]
@@ -661,18 +673,21 @@ final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layo
661673
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/padding(kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/padding|[email protected](kotlin.Int;kotlin.Int){}[0]
662674
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/padding(kotlin/Int = ..., kotlin/Int = ..., kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/padding|[email protected](kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int){}[0]
663675
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/padding(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/padding|[email protected](kotlin.Int){}[0]
676+
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredHeight(com.jakewharton.mosaic.layout/IntrinsicSize): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredHeight|[email protected](com.jakewharton.mosaic.layout.IntrinsicSize){}[0]
664677
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredHeight(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredHeight|[email protected](kotlin.Int){}[0]
665678
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredHeightIn(kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredHeightIn|[email protected](kotlin.Int;kotlin.Int){}[0]
666679
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredSize(com.jakewharton.mosaic.ui.unit/IntSize): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredSize|[email protected](com.jakewharton.mosaic.ui.unit.IntSize){}[0]
667680
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredSize(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredSize|[email protected](kotlin.Int){}[0]
668681
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredSize(kotlin/Int, kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredSize|[email protected](kotlin.Int;kotlin.Int){}[0]
669682
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredSizeIn(kotlin/Int = ..., kotlin/Int = ..., kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredSizeIn|[email protected](kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int){}[0]
683+
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredWidth(com.jakewharton.mosaic.layout/IntrinsicSize): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredWidth|[email protected](com.jakewharton.mosaic.layout.IntrinsicSize){}[0]
670684
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredWidth(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredWidth|[email protected](kotlin.Int){}[0]
671685
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/requiredWidthIn(kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/requiredWidthIn|[email protected](kotlin.Int;kotlin.Int){}[0]
672686
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/size(com.jakewharton.mosaic.ui.unit/IntSize): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/size|[email protected](com.jakewharton.mosaic.ui.unit.IntSize){}[0]
673687
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/size(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/size|[email protected](kotlin.Int){}[0]
674688
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/size(kotlin/Int, kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/size|[email protected](kotlin.Int;kotlin.Int){}[0]
675689
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/sizeIn(kotlin/Int = ..., kotlin/Int = ..., kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/sizeIn|[email protected](kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int){}[0]
690+
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/width(com.jakewharton.mosaic.layout/IntrinsicSize): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/width|[email protected](com.jakewharton.mosaic.layout.IntrinsicSize){}[0]
676691
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/width(kotlin/Int): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/width|[email protected](kotlin.Int){}[0]
677692
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/widthIn(kotlin/Int = ..., kotlin/Int = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/widthIn|[email protected](kotlin.Int;kotlin.Int){}[0]
678693
final fun (com.jakewharton.mosaic.modifier/Modifier).com.jakewharton.mosaic.layout/wrapContentHeight(com.jakewharton.mosaic.ui/Alignment.Vertical = ..., kotlin/Boolean = ...): com.jakewharton.mosaic.modifier/Modifier // com.jakewharton.mosaic.layout/wrapContentHeight|[email protected](com.jakewharton.mosaic.ui.Alignment.Vertical;kotlin.Boolean){}[0]
Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
package com.jakewharton.mosaic.layout
2+
3+
import androidx.compose.runtime.Stable
4+
import com.jakewharton.mosaic.modifier.Modifier
5+
import com.jakewharton.mosaic.ui.unit.Constraints
6+
import com.jakewharton.mosaic.ui.unit.IntOffset
7+
import com.jakewharton.mosaic.ui.unit.constrain
8+
9+
/**
10+
* Declare the preferred width of the content to be the same as the min or max intrinsic width of
11+
* the content. The incoming measurement [Constraints] may override this value, forcing the content
12+
* to be either smaller or larger.
13+
*
14+
* See [height] for options of sizing to intrinsic height. Also see [width] and [widthIn] for other
15+
* options to set the preferred width.
16+
*/
17+
@Stable
18+
public fun Modifier.width(intrinsicSize: IntrinsicSize): Modifier =
19+
this then IntrinsicWidthModifier(width = intrinsicSize, enforceIncoming = true)
20+
21+
/**
22+
* Declare the preferred height of the content to be the same as the min or max intrinsic height of
23+
* the content. The incoming measurement [Constraints] may override this value, forcing the content
24+
* to be either smaller or larger.
25+
*
26+
* See [width] for other options of sizing to intrinsic width. Also see [height] and [heightIn] for
27+
* other options to set the preferred height.
28+
*/
29+
@Stable
30+
public fun Modifier.height(intrinsicSize: IntrinsicSize): Modifier =
31+
this then IntrinsicHeightModifier(height = intrinsicSize, enforceIncoming = true)
32+
33+
/**
34+
* Declare the width of the content to be exactly the same as the min or max intrinsic width of the
35+
* content. The incoming measurement [Constraints] will not override this value. If the content
36+
* intrinsic width does not satisfy the incoming [Constraints], the parent layout will be reported a
37+
* size coerced in the [Constraints], and the position of the content will be automatically offset
38+
* to be centered on the space assigned to the child by the parent layout under the assumption that
39+
* [Constraints] were respected.
40+
*
41+
* See [height] for options of sizing to intrinsic height. See [width] and [widthIn] for options to
42+
* set the preferred width. See [requiredWidth] and [requiredWidthIn] for other options to set the
43+
* required width.
44+
*/
45+
@Stable
46+
public fun Modifier.requiredWidth(intrinsicSize: IntrinsicSize): Modifier =
47+
this then IntrinsicWidthModifier(width = intrinsicSize, enforceIncoming = false)
48+
49+
/**
50+
* Declare the height of the content to be exactly the same as the min or max intrinsic height of
51+
* the content. The incoming measurement [Constraints] will not override this value. If the content
52+
* intrinsic height does not satisfy the incoming [Constraints], the parent layout will be reported
53+
* a size coerced in the [Constraints], and the position of the content will be automatically offset
54+
* to be centered on the space assigned to the child by the parent layout under the assumption that
55+
* [Constraints] were respected.
56+
*
57+
* See [width] for options of sizing to intrinsic width. See [height] and [heightIn] for options to
58+
* set the preferred height. See [requiredHeight] and [requiredHeightIn] for other options to set
59+
* the required height.
60+
*/
61+
@Stable
62+
public fun Modifier.requiredHeight(intrinsicSize: IntrinsicSize): Modifier =
63+
this then IntrinsicHeightModifier(height = intrinsicSize, enforceIncoming = false)
64+
65+
/** Intrinsic size used in [width] or [height] which can refer to width or height. */
66+
public enum class IntrinsicSize {
67+
Min,
68+
Max,
69+
}
70+
71+
private class IntrinsicWidthModifier(
72+
private val width: IntrinsicSize,
73+
override val enforceIncoming: Boolean,
74+
) : IntrinsicSizeModifier() {
75+
override fun MeasureScope.calculateContentConstraints(
76+
measurable: Measurable,
77+
constraints: Constraints,
78+
): Constraints {
79+
var measuredWidth =
80+
if (width == IntrinsicSize.Min) {
81+
measurable.minIntrinsicWidth(constraints.maxHeight)
82+
} else {
83+
measurable.maxIntrinsicWidth(constraints.maxHeight)
84+
}
85+
if (measuredWidth < 0) {
86+
measuredWidth = 0
87+
}
88+
return Constraints.fixedWidth(measuredWidth)
89+
}
90+
91+
override fun minIntrinsicWidth(
92+
measurable: IntrinsicMeasurable,
93+
height: Int,
94+
) =
95+
if (width == IntrinsicSize.Min) {
96+
measurable.minIntrinsicWidth(height)
97+
} else {
98+
measurable.maxIntrinsicWidth(height)
99+
}
100+
101+
override fun maxIntrinsicWidth(
102+
measurable: IntrinsicMeasurable,
103+
height: Int,
104+
) =
105+
if (width == IntrinsicSize.Min) {
106+
measurable.minIntrinsicWidth(height)
107+
} else {
108+
measurable.maxIntrinsicWidth(height)
109+
}
110+
111+
override fun toString(): String {
112+
return "IntrinsicWidthModifier(width=$width, enforceIncoming=$enforceIncoming)"
113+
}
114+
}
115+
116+
private class IntrinsicHeightModifier(
117+
private val height: IntrinsicSize,
118+
override val enforceIncoming: Boolean,
119+
) : IntrinsicSizeModifier() {
120+
override fun MeasureScope.calculateContentConstraints(
121+
measurable: Measurable,
122+
constraints: Constraints,
123+
): Constraints {
124+
var measuredHeight =
125+
if (height == IntrinsicSize.Min) {
126+
measurable.minIntrinsicHeight(constraints.maxWidth)
127+
} else {
128+
measurable.maxIntrinsicHeight(constraints.maxWidth)
129+
}
130+
if (measuredHeight < 0) {
131+
measuredHeight = 0
132+
}
133+
return Constraints.fixedHeight(measuredHeight)
134+
}
135+
136+
override fun minIntrinsicHeight(
137+
measurable: IntrinsicMeasurable,
138+
width: Int,
139+
) =
140+
if (height == IntrinsicSize.Min) {
141+
measurable.minIntrinsicHeight(width)
142+
} else {
143+
measurable.maxIntrinsicHeight(width)
144+
}
145+
146+
override fun maxIntrinsicHeight(
147+
measurable: IntrinsicMeasurable,
148+
width: Int,
149+
) =
150+
if (height == IntrinsicSize.Min) {
151+
measurable.minIntrinsicHeight(width)
152+
} else {
153+
measurable.maxIntrinsicHeight(width)
154+
}
155+
156+
override fun toString(): String {
157+
return "IntrinsicHeightModifier(height=$height, enforceIncoming=$enforceIncoming)"
158+
}
159+
}
160+
161+
private abstract class IntrinsicSizeModifier : LayoutModifier {
162+
163+
abstract val enforceIncoming: Boolean
164+
165+
abstract fun MeasureScope.calculateContentConstraints(
166+
measurable: Measurable,
167+
constraints: Constraints,
168+
): Constraints
169+
170+
final override fun MeasureScope.measure(
171+
measurable: Measurable,
172+
constraints: Constraints,
173+
): MeasureResult {
174+
val contentConstraints = calculateContentConstraints(measurable, constraints)
175+
val placeable =
176+
measurable.measure(
177+
if (enforceIncoming) {
178+
constraints.constrain(contentConstraints)
179+
} else {
180+
contentConstraints
181+
},
182+
)
183+
return layout(placeable.width, placeable.height) { placeable.place(IntOffset.Zero) }
184+
}
185+
186+
override fun minIntrinsicWidth(
187+
measurable: IntrinsicMeasurable,
188+
height: Int,
189+
) = measurable.minIntrinsicWidth(height)
190+
191+
override fun minIntrinsicHeight(
192+
measurable: IntrinsicMeasurable,
193+
width: Int,
194+
) = measurable.minIntrinsicHeight(width)
195+
196+
override fun maxIntrinsicWidth(
197+
measurable: IntrinsicMeasurable,
198+
height: Int,
199+
) = measurable.maxIntrinsicWidth(height)
200+
201+
override fun maxIntrinsicHeight(
202+
measurable: IntrinsicMeasurable,
203+
width: Int,
204+
) = measurable.maxIntrinsicHeight(width)
205+
}

0 commit comments

Comments
 (0)