Skip to content

Commit

Permalink
Commonize insets Modifier's (#837)
Browse files Browse the repository at this point in the history
## Proposed Changes

```diff
+fun Modifier.safeDrawingPadding(): Modifier
+fun Modifier.safeGesturesPadding(): Modifier
+fun Modifier.safeContentPadding(): Modifier
+fun Modifier.systemBarsPadding(): Modifier
+fun Modifier.displayCutoutPadding(): Modifier
+fun Modifier.statusBarsPadding(): Modifier
+fun Modifier.imePadding(): Modifier
+fun Modifier.navigationBarsPadding(): Modifier
+fun Modifier.captionBarPadding(): Modifier
+fun Modifier.waterfallPadding(): Modifier
+fun Modifier.systemGesturesPadding(): Modifier
+fun Modifier.mandatorySystemGesturesPadding(): Modifier
```

## Testing

Test: TBD

## Issues Fixed

Fixes JetBrains/compose-multiplatform#3563
  • Loading branch information
MatkovIvan committed Sep 25, 2023
1 parent 7f72ab8 commit 46c0eaa
Show file tree
Hide file tree
Showing 5 changed files with 305 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,21 @@ public final class androidx/compose/foundation/layout/WindowInsetsPaddingKt {
public static final fun withConsumedWindowInsets (Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
}

public final class androidx/compose/foundation/layout/WindowInsetsPadding_skikoKt {
public static final fun captionBarPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun displayCutoutPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun imePadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun mandatorySystemGesturesPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun navigationBarsPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun safeContentPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun safeDrawingPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun safeGesturesPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun statusBarsPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun systemBarsPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun systemGesturesPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
public static final fun waterfallPadding (Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
}

public final class androidx/compose/foundation/layout/WindowInsetsSides {
public static final field Companion Landroidx/compose/foundation/layout/WindowInsetsSides$Companion;
public static final synthetic fun box-impl (I)Landroidx/compose/foundation/layout/WindowInsetsSides;
Expand Down
4 changes: 3 additions & 1 deletion compose/foundation/foundation-layout/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,9 @@ if(AndroidXComposePlugin.isMultiplatformEnabled(project)) {

jsWasmMain.dependsOn(jsNativeMain)

notMobileMain.dependsOn(commonMain)
skikoMain.dependsOn(commonMain)
uikitMain.dependsOn(skikoMain)
notMobileMain.dependsOn(skikoMain)
desktopMain.dependsOn(notMobileMain)
macosMain.dependsOn(notMobileMain)
jsWasmMain.dependsOn(notMobileMain)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import androidx.compose.ui.platform.debugInspectorInfo
*
* @sample androidx.compose.foundation.layout.samples.safeDrawingPaddingSample
*/
fun Modifier.safeDrawingPadding() =
actual fun Modifier.safeDrawingPadding() =
windowInsetsPadding(debugInspectorInfo { name = "safeDrawingPadding" }) { safeDrawing }

/**
Expand All @@ -55,7 +55,7 @@ fun Modifier.safeDrawingPadding() =
*
* @sample androidx.compose.foundation.layout.samples.safeGesturesPaddingSample
*/
fun Modifier.safeGesturesPadding() =
actual fun Modifier.safeGesturesPadding() =
windowInsetsPadding(debugInspectorInfo { name = "safeGesturesPadding" }) { safeGestures }

/**
Expand All @@ -73,7 +73,7 @@ fun Modifier.safeGesturesPadding() =
*
* @sample androidx.compose.foundation.layout.samples.safeContentPaddingSample
*/
fun Modifier.safeContentPadding() =
actual fun Modifier.safeContentPadding() =
windowInsetsPadding(debugInspectorInfo { name = "safeContentPadding" }) { safeContent }

/**
Expand All @@ -91,7 +91,7 @@ fun Modifier.safeContentPadding() =
*
* @sample androidx.compose.foundation.layout.samples.systemBarsPaddingSample
*/
fun Modifier.systemBarsPadding() =
actual fun Modifier.systemBarsPadding() =
windowInsetsPadding(debugInspectorInfo { name = "systemBarsPadding" }) { systemBars }

/**
Expand All @@ -109,7 +109,7 @@ fun Modifier.systemBarsPadding() =
*
* @sample androidx.compose.foundation.layout.samples.displayCutoutPaddingSample
*/
fun Modifier.displayCutoutPadding() =
actual fun Modifier.displayCutoutPadding() =
windowInsetsPadding(debugInspectorInfo { name = "displayCutoutPadding" }) { displayCutout }

/**
Expand All @@ -127,7 +127,7 @@ fun Modifier.displayCutoutPadding() =
*
* @sample androidx.compose.foundation.layout.samples.statusBarsAndNavigationBarsPaddingSample
*/
fun Modifier.statusBarsPadding() =
actual fun Modifier.statusBarsPadding() =
windowInsetsPadding(debugInspectorInfo { name = "statusBarsPadding" }) { statusBars }

/**
Expand All @@ -145,7 +145,7 @@ fun Modifier.statusBarsPadding() =
*
* @sample androidx.compose.foundation.layout.samples.imePaddingSample
*/
fun Modifier.imePadding() =
actual fun Modifier.imePadding() =
windowInsetsPadding(debugInspectorInfo { name = "imePadding" }) { ime }

/**
Expand All @@ -163,7 +163,7 @@ fun Modifier.imePadding() =
*
* @sample androidx.compose.foundation.layout.samples.statusBarsAndNavigationBarsPaddingSample
*/
fun Modifier.navigationBarsPadding() =
actual fun Modifier.navigationBarsPadding() =
windowInsetsPadding(debugInspectorInfo { name = "navigationBarsPadding" }) { navigationBars }

/**
Expand All @@ -181,7 +181,7 @@ fun Modifier.navigationBarsPadding() =
*
* @sample androidx.compose.foundation.layout.samples.captionBarPaddingSample
*/
fun Modifier.captionBarPadding() =
actual fun Modifier.captionBarPadding() =
windowInsetsPadding(debugInspectorInfo { name = "captionBarPadding" }) { captionBar }

/**
Expand All @@ -199,7 +199,7 @@ fun Modifier.captionBarPadding() =
*
* @sample androidx.compose.foundation.layout.samples.waterfallPaddingSample
*/
fun Modifier.waterfallPadding() =
actual fun Modifier.waterfallPadding() =
windowInsetsPadding(debugInspectorInfo { name = "waterfallPadding" }) { waterfall }

/**
Expand All @@ -217,7 +217,7 @@ fun Modifier.waterfallPadding() =
*
* @sample androidx.compose.foundation.layout.samples.systemGesturesPaddingSample
*/
fun Modifier.systemGesturesPadding() =
actual fun Modifier.systemGesturesPadding() =
windowInsetsPadding(debugInspectorInfo { name = "systemGesturesPadding" }) { systemGestures }

/**
Expand All @@ -236,7 +236,7 @@ fun Modifier.systemGesturesPadding() =
*
* @sample androidx.compose.foundation.layout.samples.mandatorySystemGesturesPaddingSample
*/
fun Modifier.mandatorySystemGesturesPadding() =
actual fun Modifier.mandatorySystemGesturesPadding() =
windowInsetsPadding(debugInspectorInfo { name = "mandatorySystemGesturesPadding" }) {
mandatorySystemGestures
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,186 @@ fun Modifier.withConsumedWindowInsets(
block: (consumedWindowInsets: WindowInsets) -> Unit
) = onConsumedWindowInsetsChanged(block)

/**
* Adds padding to accommodate the [safe drawing][WindowInsets.Companion.safeDrawing] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.safeDrawing] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [statusBarsPadding], the area that the parent
* pads for the status bars will not be padded again by this [safeDrawingPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.safeDrawingPaddingSample
*/
expect fun Modifier.safeDrawingPadding(): Modifier

/**
* Adds padding to accommodate the [safe gestures][WindowInsets.Companion.safeGestures] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.safeGestures] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [navigationBarsPadding],
* the area that the parent layout pads for the status bars will not be padded again by this
* [safeGesturesPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.safeGesturesPaddingSample
*/
expect fun Modifier.safeGesturesPadding(): Modifier

/**
* Adds padding to accommodate the [safe content][WindowInsets.Companion.safeContent] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.safeContent] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [navigationBarsPadding],
* the area that the parent layout pads for the status bars will not be padded again by this
* [safeContentPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.safeContentPaddingSample
*/
expect fun Modifier.safeContentPadding(): Modifier

/**
* Adds padding to accommodate the [system bars][WindowInsets.Companion.systemBars] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.systemBars] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [statusBarsPadding], the
* area that the parent layout pads for the status bars will not be padded again by this
* [systemBarsPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.systemBarsPaddingSample
*/
expect fun Modifier.systemBarsPadding(): Modifier

/**
* Adds padding to accommodate the [display cutout][WindowInsets.Companion.displayCutout].
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.displayCutout] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [statusBarsPadding], the
* area that the parent layout pads for the status bars will not be padded again by this
* [displayCutoutPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.displayCutoutPaddingSample
*/
expect fun Modifier.displayCutoutPadding(): Modifier

/**
* Adds padding to accommodate the [status bars][WindowInsets.Companion.statusBars] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.statusBars] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [displayCutoutPadding], the
* area that the parent layout pads for the status bars will not be padded again by this
* [statusBarsPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.statusBarsAndNavigationBarsPaddingSample
*/
expect fun Modifier.statusBarsPadding(): Modifier

/**
* Adds padding to accommodate the [ime][WindowInsets.Companion.ime] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.ime] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [navigationBarsPadding],
* the area that the parent layout pads for the status bars will not be padded again by this
* [imePadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.imePaddingSample
*/
expect fun Modifier.imePadding(): Modifier

/**
* Adds padding to accommodate the [navigation bars][WindowInsets.Companion.navigationBars] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.navigationBars] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [systemBarsPadding], the
* area that the parent layout pads for the status bars will not be padded again by this
* [navigationBarsPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.statusBarsAndNavigationBarsPaddingSample
*/
expect fun Modifier.navigationBarsPadding(): Modifier

/**
* Adds padding to accommodate the [caption bar][WindowInsets.Companion.captionBar] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.captionBar] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [displayCutoutPadding], the
* area that the parent layout pads for the status bars will not be padded again by this
* [captionBarPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.captionBarPaddingSample
*/
expect fun Modifier.captionBarPadding(): Modifier

/**
* Adds padding to accommodate the [waterfall][WindowInsets.Companion.waterfall] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.waterfall] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [systemGesturesPadding],
* the area that the parent layout pads for the status bars will not be padded again by this
* [waterfallPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.waterfallPaddingSample
*/
expect fun Modifier.waterfallPadding(): Modifier

/**
* Adds padding to accommodate the [system gestures][WindowInsets.Companion.systemGestures] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.systemGestures] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [waterfallPadding], the
* area that the parent layout pads for the status bars will not be padded again by this
* [systemGesturesPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.systemGesturesPaddingSample
*/
expect fun Modifier.systemGesturesPadding(): Modifier

/**
* Adds padding to accommodate the
* [mandatory system gestures][WindowInsets.Companion.mandatorySystemGestures] insets.
*
* Any insets consumed by other insets padding modifiers or [consumeWindowInsets] on a parent layout
* will be excluded from the padding. [WindowInsets.Companion.mandatorySystemGestures] will be
* [consumed][consumeWindowInsets] for child layouts as well.
*
* For example, if a parent layout uses [navigationBarsPadding],
* the area that the parent layout pads for the status bars will not be padded again by this
* [mandatorySystemGesturesPadding] modifier.
*
* @sample androidx.compose.foundation.layout.samples.mandatorySystemGesturesPaddingSample
*/
expect fun Modifier.mandatorySystemGesturesPadding(): Modifier

internal val ModifierLocalConsumedWindowInsets = modifierLocalOf {
WindowInsets(0, 0, 0, 0)
}
Expand Down

0 comments on commit 46c0eaa

Please sign in to comment.