Merge "Prevent arbitrary layout scope content access" into androidx-main
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt
index 646887f..cccb234 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/EnterExitTransitionDemo.kt
@@ -38,7 +38,6 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
@@ -130,7 +129,13 @@
Text("Bottom\nStart")
}
}
- CenterMenu(selectedOptions, oppositeAlignment.value, alignment, visible)
+ CenterMenu(
+ Modifier.weight(1f),
+ selectedOptions,
+ oppositeAlignment.value,
+ alignment,
+ visible
+ )
Box(Modifier.fillMaxHeight().wrapContentWidth()) {
Button(
modifier = Modifier.align(TopStart),
@@ -191,12 +196,13 @@
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun CenterMenu(
+ modifier: Modifier = Modifier,
selectedOptions: List<Boolean>,
oppositeDirection: Boolean,
alignment: Alignment,
visible: Boolean
) {
- Box(with(RowScope) { Modifier.fillMaxHeight().weight(1f) }) {
+ Box(modifier.fillMaxHeight()) {
val animationAlignment = if (oppositeDirection) opposite(alignment) else alignment
val expand = when (animationAlignment) {
diff --git a/compose/animation/animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedVisibilitySamples.kt b/compose/animation/animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedVisibilitySamples.kt
index 8ab8fbd..e065cf5 100644
--- a/compose/animation/animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedVisibilitySamples.kt
+++ b/compose/animation/animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedVisibilitySamples.kt
@@ -163,11 +163,11 @@
@OptIn(ExperimentalAnimationApi::class)
@Sampled
@Composable
-fun AnimatedFloatingActionButton() {
+fun ColumnScope.AnimatedFloatingActionButton() {
var expanded by remember { mutableStateOf(true) }
FloatingActionButton(
onClick = { expanded = !expanded },
- modifier = with(ColumnScope) { Modifier.align(Alignment.CenterHorizontally) }
+ modifier = Modifier.align(Alignment.CenterHorizontally)
) {
Row(Modifier.padding(start = 12.dp, end = 12.dp)) {
Icon(
diff --git a/compose/foundation/foundation-layout/api/1.0.0-beta04.txt b/compose/foundation/foundation-layout/api/1.0.0-beta04.txt
index 2ad21c0..e119d9f 100644
--- a/compose/foundation/foundation-layout/api/1.0.0-beta04.txt
+++ b/compose/foundation/foundation-layout/api/1.0.0-beta04.txt
@@ -79,12 +79,8 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
- field public static final androidx.compose.foundation.layout.BoxScope.Companion Companion;
- }
-
- public static final class BoxScope.Companion implements androidx.compose.foundation.layout.BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
}
public final class BoxWithConstraintsKt {
@@ -109,14 +105,10 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface ColumnScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.ColumnScope.Companion Companion;
- }
-
- public static final class ColumnScope.Companion implements androidx.compose.foundation.layout.ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class IntrinsicKt {
@@ -176,15 +168,11 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface RowScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.RowScope.Companion Companion;
- }
-
- public static final class RowScope.Companion implements androidx.compose.foundation.layout.RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class SizeKt {
diff --git a/compose/foundation/foundation-layout/api/current.ignore b/compose/foundation/foundation-layout/api/current.ignore
new file mode 100644
index 0000000..3bc3a38
--- /dev/null
+++ b/compose/foundation/foundation-layout/api/current.ignore
@@ -0,0 +1,15 @@
+// Baseline format: 1.0
+RemovedClass: androidx.compose.foundation.layout.BoxScope.Companion:
+ Removed class androidx.compose.foundation.layout.BoxScope.Companion
+RemovedClass: androidx.compose.foundation.layout.ColumnScope.Companion:
+ Removed class androidx.compose.foundation.layout.ColumnScope.Companion
+RemovedClass: androidx.compose.foundation.layout.RowScope.Companion:
+ Removed class androidx.compose.foundation.layout.RowScope.Companion
+
+
+RemovedField: androidx.compose.foundation.layout.BoxScope#Companion:
+ Removed field androidx.compose.foundation.layout.BoxScope.Companion
+RemovedField: androidx.compose.foundation.layout.ColumnScope#Companion:
+ Removed field androidx.compose.foundation.layout.ColumnScope.Companion
+RemovedField: androidx.compose.foundation.layout.RowScope#Companion:
+ Removed field androidx.compose.foundation.layout.RowScope.Companion
diff --git a/compose/foundation/foundation-layout/api/current.txt b/compose/foundation/foundation-layout/api/current.txt
index 2ad21c0..e119d9f 100644
--- a/compose/foundation/foundation-layout/api/current.txt
+++ b/compose/foundation/foundation-layout/api/current.txt
@@ -79,12 +79,8 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
- field public static final androidx.compose.foundation.layout.BoxScope.Companion Companion;
- }
-
- public static final class BoxScope.Companion implements androidx.compose.foundation.layout.BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
}
public final class BoxWithConstraintsKt {
@@ -109,14 +105,10 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface ColumnScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.ColumnScope.Companion Companion;
- }
-
- public static final class ColumnScope.Companion implements androidx.compose.foundation.layout.ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class IntrinsicKt {
@@ -176,15 +168,11 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface RowScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.RowScope.Companion Companion;
- }
-
- public static final class RowScope.Companion implements androidx.compose.foundation.layout.RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class SizeKt {
diff --git a/compose/foundation/foundation-layout/api/public_plus_experimental_1.0.0-beta04.txt b/compose/foundation/foundation-layout/api/public_plus_experimental_1.0.0-beta04.txt
index 15c4829..ca89232 100644
--- a/compose/foundation/foundation-layout/api/public_plus_experimental_1.0.0-beta04.txt
+++ b/compose/foundation/foundation-layout/api/public_plus_experimental_1.0.0-beta04.txt
@@ -79,12 +79,8 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
- field public static final androidx.compose.foundation.layout.BoxScope.Companion Companion;
- }
-
- public static final class BoxScope.Companion implements androidx.compose.foundation.layout.BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
}
public final class BoxWithConstraintsKt {
@@ -109,14 +105,10 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface ColumnScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.ColumnScope.Companion Companion;
- }
-
- public static final class ColumnScope.Companion implements androidx.compose.foundation.layout.ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
@kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayoutApi {
@@ -179,15 +171,11 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface RowScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.RowScope.Companion Companion;
- }
-
- public static final class RowScope.Companion implements androidx.compose.foundation.layout.RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class SizeKt {
diff --git a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
index 15c4829..ca89232 100644
--- a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
@@ -79,12 +79,8 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
- field public static final androidx.compose.foundation.layout.BoxScope.Companion Companion;
- }
-
- public static final class BoxScope.Companion implements androidx.compose.foundation.layout.BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
}
public final class BoxWithConstraintsKt {
@@ -109,14 +105,10 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface ColumnScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.ColumnScope.Companion Companion;
- }
-
- public static final class ColumnScope.Companion implements androidx.compose.foundation.layout.ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
@kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayoutApi {
@@ -179,15 +171,11 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface RowScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.RowScope.Companion Companion;
- }
-
- public static final class RowScope.Companion implements androidx.compose.foundation.layout.RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class SizeKt {
diff --git a/compose/foundation/foundation-layout/api/restricted_1.0.0-beta04.txt b/compose/foundation/foundation-layout/api/restricted_1.0.0-beta04.txt
index 84b4411..4c0fda5 100644
--- a/compose/foundation/foundation-layout/api/restricted_1.0.0-beta04.txt
+++ b/compose/foundation/foundation-layout/api/restricted_1.0.0-beta04.txt
@@ -80,12 +80,8 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
- field public static final androidx.compose.foundation.layout.BoxScope.Companion Companion;
- }
-
- public static final class BoxScope.Companion implements androidx.compose.foundation.layout.BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
}
public final class BoxWithConstraintsKt {
@@ -112,14 +108,10 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface ColumnScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.ColumnScope.Companion Companion;
- }
-
- public static final class ColumnScope.Companion implements androidx.compose.foundation.layout.ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class IntrinsicKt {
@@ -181,15 +173,11 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface RowScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.RowScope.Companion Companion;
- }
-
- public static final class RowScope.Companion implements androidx.compose.foundation.layout.RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class SizeKt {
diff --git a/compose/foundation/foundation-layout/api/restricted_current.ignore b/compose/foundation/foundation-layout/api/restricted_current.ignore
new file mode 100644
index 0000000..3bc3a38
--- /dev/null
+++ b/compose/foundation/foundation-layout/api/restricted_current.ignore
@@ -0,0 +1,15 @@
+// Baseline format: 1.0
+RemovedClass: androidx.compose.foundation.layout.BoxScope.Companion:
+ Removed class androidx.compose.foundation.layout.BoxScope.Companion
+RemovedClass: androidx.compose.foundation.layout.ColumnScope.Companion:
+ Removed class androidx.compose.foundation.layout.ColumnScope.Companion
+RemovedClass: androidx.compose.foundation.layout.RowScope.Companion:
+ Removed class androidx.compose.foundation.layout.RowScope.Companion
+
+
+RemovedField: androidx.compose.foundation.layout.BoxScope#Companion:
+ Removed field androidx.compose.foundation.layout.BoxScope.Companion
+RemovedField: androidx.compose.foundation.layout.ColumnScope#Companion:
+ Removed field androidx.compose.foundation.layout.ColumnScope.Companion
+RemovedField: androidx.compose.foundation.layout.RowScope#Companion:
+ Removed field androidx.compose.foundation.layout.RowScope.Companion
diff --git a/compose/foundation/foundation-layout/api/restricted_current.txt b/compose/foundation/foundation-layout/api/restricted_current.txt
index 84b4411..4c0fda5 100644
--- a/compose/foundation/foundation-layout/api/restricted_current.txt
+++ b/compose/foundation/foundation-layout/api/restricted_current.txt
@@ -80,12 +80,8 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
- field public static final androidx.compose.foundation.layout.BoxScope.Companion Companion;
- }
-
- public static final class BoxScope.Companion implements androidx.compose.foundation.layout.BoxScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier matchParentSize(androidx.compose.ui.Modifier);
}
public final class BoxWithConstraintsKt {
@@ -112,14 +108,10 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface ColumnScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.ColumnScope.Companion Companion;
- }
-
- public static final class ColumnScope.Companion implements androidx.compose.foundation.layout.ColumnScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Horizontal alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.VerticalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class IntrinsicKt {
@@ -181,15 +173,11 @@
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface RowScope {
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
- method @androidx.compose.runtime.Stable public default androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
- field public static final androidx.compose.foundation.layout.RowScope.Companion Companion;
- }
-
- public static final class RowScope.Companion implements androidx.compose.foundation.layout.RowScope {
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier align(androidx.compose.ui.Modifier, androidx.compose.ui.Alignment.Vertical alignment);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, androidx.compose.ui.layout.HorizontalAlignmentLine alignmentLine);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignBy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.layout.Measured,java.lang.Integer> alignmentLineBlock);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier alignByBaseline(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, float weight, optional boolean fill);
}
public final class SizeKt {
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt
index c0a9995..0bf03ed 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt
@@ -595,7 +595,7 @@
@Test
fun testAlignInspectableValue() {
- val modifier = with(object : BoxScope {}) { Modifier.align(Alignment.BottomCenter) }
+ val modifier = with(BoxScopeInstance) { Modifier.align(Alignment.BottomCenter) }
as InspectableValue
assertThat(modifier.nameFallback).isEqualTo("align")
assertThat(modifier.valueOverride).isEqualTo(Alignment.BottomCenter)
@@ -604,7 +604,7 @@
@Test
fun testMatchParentSizeInspectableValue() {
- val modifier = with(object : BoxScope {}) { Modifier.matchParentSize() }
+ val modifier = with(BoxScopeInstance) { Modifier.matchParentSize() }
as InspectableValue
assertThat(modifier.nameFallback).isEqualTo("matchParentSize")
assertThat(modifier.valueOverride).isNull()
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
index 989ed4f..c8e9953 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
@@ -5414,7 +5414,7 @@
// region InspectableValue tests for Row and Column
@Test
fun testRow_AlignInspectableValue() {
- val modifier = with(object : RowScope {}) { Modifier.align(Alignment.Bottom) }
+ val modifier = with(RowScopeInstance) { Modifier.align(Alignment.Bottom) }
as InspectableValue
Truth.assertThat(modifier.nameFallback).isEqualTo("align")
Truth.assertThat(modifier.valueOverride).isEqualTo(Alignment.Bottom)
@@ -5423,7 +5423,7 @@
@Test
fun testRow_AlignByInspectableValue() {
- val modifier = with(object : RowScope {}) { Modifier.alignBy(FirstBaseline) }
+ val modifier = with(RowScopeInstance) { Modifier.alignBy(FirstBaseline) }
as InspectableValue
Truth.assertThat(modifier.nameFallback).isEqualTo("alignBy")
Truth.assertThat(modifier.valueOverride).isEqualTo(FirstBaseline)
@@ -5432,7 +5432,7 @@
@Test
fun testRow_WeightInspectableValue() {
- val modifier = with(object : RowScope {}) { Modifier.weight(2.0f, false) }
+ val modifier = with(RowScopeInstance) { Modifier.weight(2.0f, false) }
as InspectableValue
Truth.assertThat(modifier.nameFallback).isEqualTo("weight")
Truth.assertThat(modifier.valueOverride).isEqualTo(2.0f)
@@ -5443,7 +5443,7 @@
}
@Test
fun testColumn_AlignInspectableValue() {
- val modifier = with(object : ColumnScope {}) { Modifier.align(Alignment.Start) }
+ val modifier = with(ColumnScopeInstance) { Modifier.align(Alignment.Start) }
as InspectableValue
Truth.assertThat(modifier.nameFallback).isEqualTo("align")
Truth.assertThat(modifier.valueOverride).isEqualTo(Alignment.Start)
@@ -5452,7 +5452,7 @@
@Test
fun testColumn_AlignByInspectableValue() {
- val modifier = with(object : ColumnScope {}) { Modifier.alignBy(TestVerticalLine) }
+ val modifier = with(ColumnScopeInstance) { Modifier.alignBy(TestVerticalLine) }
as InspectableValue
Truth.assertThat(modifier.nameFallback).isEqualTo("alignBy")
Truth.assertThat(modifier.valueOverride).isEqualTo(TestVerticalLine)
@@ -5461,7 +5461,7 @@
@Test
fun testColumn_WeightInspectableValue() {
- val modifier = with(object : ColumnScope {}) { Modifier.weight(2.0f, false) }
+ val modifier = with(ColumnScopeInstance) { Modifier.weight(2.0f, false) }
as InspectableValue
Truth.assertThat(modifier.nameFallback).isEqualTo("weight")
Truth.assertThat(modifier.valueOverride).isEqualTo(2.0f)
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Box.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Box.kt
index 8bc4548..07cdbeb 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Box.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Box.kt
@@ -66,7 +66,7 @@
) {
val measurePolicy = rememberBoxMeasurePolicy(contentAlignment, propagateMinConstraints)
Layout(
- content = { BoxScope.content() },
+ content = { BoxScopeInstance.content() },
measurePolicy = measurePolicy,
modifier = modifier
)
@@ -212,16 +212,7 @@
* have priority over the [Box]'s `alignment` parameter.
*/
@Stable
- fun Modifier.align(alignment: Alignment) = this.then(
- BoxChildData(
- alignment = alignment,
- matchParentSize = false,
- inspectorInfo = debugInspectorInfo {
- name = "align"
- value = alignment
- }
- )
- )
+ fun Modifier.align(alignment: Alignment): Modifier
/**
* Size the element to match the size of the [Box] after all other content elements have
@@ -236,15 +227,30 @@
* available space.
*/
@Stable
- fun Modifier.matchParentSize() = this.then(
+ fun Modifier.matchParentSize(): Modifier
+}
+
+internal object BoxScopeInstance : BoxScope {
+ @Stable
+ override fun Modifier.align(alignment: Alignment) = this.then(
+ BoxChildData(
+ alignment = alignment,
+ matchParentSize = false,
+ inspectorInfo = debugInspectorInfo {
+ name = "align"
+ value = alignment
+ }
+ )
+ )
+
+ @Stable
+ override fun Modifier.matchParentSize() = this.then(
BoxChildData(
alignment = Alignment.Center,
matchParentSize = true,
inspectorInfo = debugInspectorInfo { name = "matchParentSize" }
)
)
-
- companion object : BoxScope
}
@get:Suppress("ModifierFactoryReturnType", "ModifierFactoryExtensionFunction")
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/BoxWithConstraints.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/BoxWithConstraints.kt
index 3f2bf57..4a30d5e 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/BoxWithConstraints.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/BoxWithConstraints.kt
@@ -103,7 +103,7 @@
private data class BoxWithConstraintsScopeImpl(
private val density: Density,
override val constraints: Constraints
-) : BoxWithConstraintsScope {
+) : BoxWithConstraintsScope, BoxScope by BoxScopeInstance {
override val minWidth: Dp
get() = with(density) { constraints.minWidth.toDp() }
override val maxWidth: Dp
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt
index aced672..6baf629f 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt
@@ -71,7 +71,7 @@
) {
val measurePolicy = columnMeasurePolicy(verticalArrangement, horizontalAlignment)
Layout(
- content = { ColumnScope.content() },
+ content = { ColumnScopeInstance.content() },
measurePolicy = measurePolicy,
modifier = modifier
)
@@ -116,51 +116,6 @@
@Immutable
interface ColumnScope {
/**
- * Align the element horizontally within the [Column]. This alignment will have priority over
- * the [Column]'s `horizontalAlignment` parameter.
- *
- * Example usage:
- * @sample androidx.compose.foundation.layout.samples.SimpleAlignInColumn
- */
- @Stable
- fun Modifier.align(alignment: Alignment.Horizontal) = this.then(
- HorizontalAlignModifier(
- horizontal = alignment,
- inspectorInfo = debugInspectorInfo {
- name = "align"
- value = alignment
- }
- )
- )
-
- /**
- * Position the element horizontally such that its [alignmentLine] aligns with sibling elements
- * also configured to [alignBy]. [alignBy] is a form of [align],
- * so both modifiers will not work together if specified for the same layout.
- * Within a [Column], all components with [alignBy] will align horizontally using
- * the specified [VerticalAlignmentLine]s or values provided using the other
- * [alignBy] overload, forming a sibling group.
- * At least one element of the sibling group will be placed as it had [Alignment.Start] align
- * in [Column], and the alignment of the other siblings will be then determined such that
- * the alignment lines coincide. Note that if only one element in a [Column] has the
- * [alignBy] modifier specified the element will be positioned
- * as if it had [Alignment.Start] align.
- *
- * Example usage:
- * @sample androidx.compose.foundation.layout.samples.SimpleRelativeToSiblingsInColumn
- */
- @Stable
- fun Modifier.alignBy(alignmentLine: VerticalAlignmentLine) = this.then(
- SiblingsAlignedModifier.WithAlignmentLine(
- alignmentLine = alignmentLine,
- inspectorInfo = debugInspectorInfo {
- name = "alignBy"
- value = alignmentLine
- }
- )
- )
-
- /**
* Size the element's height proportional to its [weight] relative to other weighted sibling
* elements in the [Column]. The parent will divide the vertical space remaining after measuring
* unweighted child elements and distribute it according to this weight.
@@ -179,21 +134,36 @@
/*@FloatRange(from = 0.0, fromInclusive = false)*/
weight: Float,
fill: Boolean = true
- ): Modifier {
- require(weight > 0.0) { "invalid weight $weight; must be greater than zero" }
- return this.then(
- LayoutWeightImpl(
- weight = weight,
- fill = fill,
- inspectorInfo = debugInspectorInfo {
- name = "weight"
- value = weight
- properties["weight"] = weight
- properties["fill"] = fill
- }
- )
- )
- }
+ ): Modifier
+
+ /**
+ * Align the element horizontally within the [Column]. This alignment will have priority over
+ * the [Column]'s `horizontalAlignment` parameter.
+ *
+ * Example usage:
+ * @sample androidx.compose.foundation.layout.samples.SimpleAlignInColumn
+ */
+ @Stable
+ fun Modifier.align(alignment: Alignment.Horizontal): Modifier
+
+ /**
+ * Position the element horizontally such that its [alignmentLine] aligns with sibling elements
+ * also configured to [alignBy]. [alignBy] is a form of [align],
+ * so both modifiers will not work together if specified for the same layout.
+ * Within a [Column], all components with [alignBy] will align horizontally using
+ * the specified [VerticalAlignmentLine]s or values provided using the other
+ * [alignBy] overload, forming a sibling group.
+ * At least one element of the sibling group will be placed as it had [Alignment.Start] align
+ * in [Column], and the alignment of the other siblings will be then determined such that
+ * the alignment lines coincide. Note that if only one element in a [Column] has the
+ * [alignBy] modifier specified the element will be positioned
+ * as if it had [Alignment.Start] align.
+ *
+ * Example usage:
+ * @sample androidx.compose.foundation.layout.samples.SimpleRelativeToSiblingsInColumn
+ */
+ @Stable
+ fun Modifier.alignBy(alignmentLine: VerticalAlignmentLine): Modifier
/**
* Position the element horizontally such that the alignment line for the content as
@@ -213,7 +183,51 @@
* @sample androidx.compose.foundation.layout.samples.SimpleRelativeToSiblings
*/
@Stable
- fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int) = this.then(
+ fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int): Modifier
+}
+
+internal object ColumnScopeInstance : ColumnScope {
+ @Stable
+ override fun Modifier.weight(weight: Float, fill: Boolean): Modifier {
+ require(weight > 0.0) { "invalid weight $weight; must be greater than zero" }
+ return this.then(
+ LayoutWeightImpl(
+ weight = weight,
+ fill = fill,
+ inspectorInfo = debugInspectorInfo {
+ name = "weight"
+ value = weight
+ properties["weight"] = weight
+ properties["fill"] = fill
+ }
+ )
+ )
+ }
+
+ @Stable
+ override fun Modifier.align(alignment: Alignment.Horizontal) = this.then(
+ HorizontalAlignModifier(
+ horizontal = alignment,
+ inspectorInfo = debugInspectorInfo {
+ name = "align"
+ value = alignment
+ }
+ )
+ )
+
+ @Stable
+ override fun Modifier.alignBy(alignmentLine: VerticalAlignmentLine) = this.then(
+ SiblingsAlignedModifier.WithAlignmentLine(
+ alignmentLine = alignmentLine,
+ inspectorInfo = debugInspectorInfo {
+ name = "alignBy"
+ value = alignmentLine
+ }
+ )
+ )
+
+ @Stable
+ override fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int) = this.then(
SiblingsAlignedModifier.WithAlignmentLineBlock(
block = alignmentLineBlock,
inspectorInfo = debugInspectorInfo {
@@ -222,6 +236,4 @@
}
)
)
-
- companion object : ColumnScope
}
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt
index 0a840aa..320ac43 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt
@@ -72,7 +72,7 @@
) {
val measurePolicy = rowMeasurePolicy(horizontalArrangement, verticalAlignment)
Layout(
- content = { RowScope.content() },
+ content = { RowScopeInstance.content() },
measurePolicy = measurePolicy,
modifier = modifier
)
@@ -122,6 +122,25 @@
@Immutable
interface RowScope {
/**
+ * Size the element's width proportional to its [weight] relative to other weighted sibling
+ * elements in the [Row]. The parent will divide the horizontal space remaining after measuring
+ * unweighted child elements and distribute it according to this weight.
+ * When [fill] is true, the element will be forced to occupy the whole width allocated to it.
+ * Otherwise, the element is allowed to be smaller - this will result in [Row] being smaller,
+ * as the unused allocated width will not be redistributed to other siblings.
+ *
+ * @param weight The proportional width to give to this element, as related to the total of
+ * all weighted siblings. Must be positive.
+ * @param fill When `true`, the element will occupy the whole width allocated.
+ */
+ @Stable
+ fun Modifier.weight(
+ /*@FloatRange(from = 0.0, fromInclusive = false)*/
+ weight: Float,
+ fill: Boolean = true
+ ): Modifier
+
+ /**
* Align the element vertically within the [Row]. This alignment will have priority over the
* [Row]'s `verticalAlignment` parameter.
*
@@ -129,15 +148,7 @@
* @sample androidx.compose.foundation.layout.samples.SimpleAlignInRow
*/
@Stable
- fun Modifier.align(alignment: Alignment.Vertical) = this.then(
- VerticalAlignModifier(
- vertical = alignment,
- inspectorInfo = debugInspectorInfo {
- name = "align"
- value = alignment
- }
- )
- )
+ fun Modifier.align(alignment: Alignment.Vertical): Modifier
/**
* Position the element vertically such that its [alignmentLine] aligns with sibling elements
@@ -160,15 +171,7 @@
* @sample androidx.compose.foundation.layout.samples.SimpleAlignByInRow
*/
@Stable
- fun Modifier.alignBy(alignmentLine: HorizontalAlignmentLine) = this.then(
- SiblingsAlignedModifier.WithAlignmentLine(
- alignmentLine = alignmentLine,
- inspectorInfo = debugInspectorInfo {
- name = "alignBy"
- value = alignmentLine
- }
- )
- )
+ fun Modifier.alignBy(alignmentLine: HorizontalAlignmentLine): Modifier
/**
* Position the element vertically such that its first baseline aligns with sibling elements
@@ -183,40 +186,7 @@
* @sample androidx.compose.foundation.layout.samples.SimpleAlignByInRow
*/
@Stable
- fun Modifier.alignByBaseline() = alignBy(FirstBaseline)
-
- /**
- * Size the element's width proportional to its [weight] relative to other weighted sibling
- * elements in the [Row]. The parent will divide the horizontal space remaining after measuring
- * unweighted child elements and distribute it according to this weight.
- * When [fill] is true, the element will be forced to occupy the whole width allocated to it.
- * Otherwise, the element is allowed to be smaller - this will result in [Row] being smaller,
- * as the unused allocated width will not be redistributed to other siblings.
- *
- * @param weight The proportional width to give to this element, as related to the total of
- * all weighted siblings. Must be positive.
- * @param fill When `true`, the element will occupy the whole width allocated.
- */
- @Stable
- fun Modifier.weight(
- /*@FloatRange(from = 0.0, fromInclusive = false)*/
- weight: Float,
- fill: Boolean = true
- ): Modifier {
- require(weight > 0.0) { "invalid weight $weight; must be greater than zero" }
- return this.then(
- LayoutWeightImpl(
- weight = weight,
- fill = fill,
- inspectorInfo = debugInspectorInfo {
- name = "weight"
- value = weight
- properties["weight"] = weight
- properties["fill"] = fill
- }
- )
- )
- }
+ fun Modifier.alignByBaseline(): Modifier
/**
* Position the element vertically such that the alignment line for the content as
@@ -236,7 +206,53 @@
* @sample androidx.compose.foundation.layout.samples.SimpleAlignByInRow
*/
@Stable
- fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int) = this.then(
+ fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int): Modifier
+}
+
+internal object RowScopeInstance : RowScope {
+ @Stable
+ override fun Modifier.weight(weight: Float, fill: Boolean): Modifier {
+ require(weight > 0.0) { "invalid weight $weight; must be greater than zero" }
+ return this.then(
+ LayoutWeightImpl(
+ weight = weight,
+ fill = fill,
+ inspectorInfo = debugInspectorInfo {
+ name = "weight"
+ value = weight
+ properties["weight"] = weight
+ properties["fill"] = fill
+ }
+ )
+ )
+ }
+
+ @Stable
+ override fun Modifier.align(alignment: Alignment.Vertical) = this.then(
+ VerticalAlignModifier(
+ vertical = alignment,
+ inspectorInfo = debugInspectorInfo {
+ name = "align"
+ value = alignment
+ }
+ )
+ )
+
+ @Stable
+ override fun Modifier.alignBy(alignmentLine: HorizontalAlignmentLine) = this.then(
+ SiblingsAlignedModifier.WithAlignmentLine(
+ alignmentLine = alignmentLine,
+ inspectorInfo = debugInspectorInfo {
+ name = "alignBy"
+ value = alignmentLine
+ }
+ )
+ )
+
+ @Stable
+ override fun Modifier.alignByBaseline() = alignBy(FirstBaseline)
+
+ override fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int) = this.then(
SiblingsAlignedModifier.WithAlignmentLineBlock(
block = alignmentLineBlock,
inspectorInfo = debugInspectorInfo {
@@ -245,6 +261,4 @@
}
)
)
-
- companion object : RowScope
}