Skip to content

Commit 495bbb7

Browse files
authored
Merge pull request #993 from TopsyCretts/feat/slide-animation-direction
Added StackAnimator.inverted extension function
2 parents ca649ae + 81c4674 commit 495bbb7

File tree

5 files changed

+26
-0
lines changed

5 files changed

+26
-0
lines changed

extensions-compose-experimental/api/android/extensions-compose-experimental.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public abstract interface class com/arkivanov/decompose/extensions/compose/exper
9999
}
100100

101101
public final class com/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimatorKt {
102+
public static final fun inverted (Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;
102103
public static final fun plus (Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;
103104
public static final fun stackAnimator (Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function4;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;
104105
public static synthetic fun stackAnimator$default (Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function4;ILjava/lang/Object;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;

extensions-compose-experimental/api/extensions-compose-experimental.klib.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ final val com.arkivanov.decompose.extensions.compose.experimental.stack.animatio
6565
final val com.arkivanov.decompose.extensions.compose.experimental.stack.animation/com_arkivanov_decompose_extensions_compose_experimental_stack_animation_PredictiveBackParams$stableprop // com.arkivanov.decompose.extensions.compose.experimental.stack.animation/com_arkivanov_decompose_extensions_compose_experimental_stack_animation_PredictiveBackParams$stableprop|#static{}com_arkivanov_decompose_extensions_compose_experimental_stack_animation_PredictiveBackParams$stableprop[0]
6666
final val com.arkivanov.decompose.extensions.compose.experimental/com_arkivanov_decompose_extensions_compose_experimental_BroadcastBackHandler$stableprop // com.arkivanov.decompose.extensions.compose.experimental/com_arkivanov_decompose_extensions_compose_experimental_BroadcastBackHandler$stableprop|#static{}com_arkivanov_decompose_extensions_compose_experimental_BroadcastBackHandler$stableprop[0]
6767

68+
final fun (com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimator).com.arkivanov.decompose.extensions.compose.experimental.stack.animation/inverted(): com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimator // com.arkivanov.decompose.extensions.compose.experimental.stack.animation/inverted|inverted@com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimator(){}[0]
6869
final fun (com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimator).com.arkivanov.decompose.extensions.compose.experimental.stack.animation/plus(com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimator): com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimator // com.arkivanov.decompose.extensions.compose.experimental.stack.animation/plus|plus@com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimator(com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimator){}[0]
6970
final fun <#A: kotlin/Any, #B: kotlin/Any, #C: kotlin/Any, #D: kotlin/Any, #E: kotlin/Any, #F: kotlin/Any> com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanels(com.arkivanov.decompose.router.panels/ChildPanels<#A, #B, #C, #D, #E, #F>, kotlin/Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, com.arkivanov.decompose/Child.Created<#A, #B>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, kotlin/Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, com.arkivanov.decompose/Child.Created<#C, #D>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, kotlin/Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, com.arkivanov.decompose/Child.Created<#E, #F>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.ui/Modifier?, kotlin/Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, kotlin/Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanelsLayout?, com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanelsAnimators<#A, #B, #C, #D, #E, #F>?, kotlin/Function1<com.arkivanov.decompose.router.panels/ChildPanels<#A, #B, #C, #D, #E, #F>, com.arkivanov.decompose.extensions.compose.experimental.stack.animation/PredictiveBackParams?>?, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanels|ChildPanels(com.arkivanov.decompose.router.panels.ChildPanels<0:0,0:1,0:2,0:3,0:4,0:5>;kotlin.Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,com.arkivanov.decompose.Child.Created<0:0,0:1>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;kotlin.Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,com.arkivanov.decompose.Child.Created<0:2,0:3>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;kotlin.Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,com.arkivanov.decompose.Child.Created<0:4,0:5>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.ui.Modifier?;kotlin.Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;kotlin.Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;com.arkivanov.decompose.extensions.compose.experimental.panels.ChildPanelsLayout?;com.arkivanov.decompose.extensions.compose.experimental.panels.ChildPanelsAnimators<0:0,0:1,0:2,0:3,0:4,0:5>?;kotlin.Function1<com.arkivanov.decompose.router.panels.ChildPanels<0:0,0:1,0:2,0:3,0:4,0:5>,com.arkivanov.decompose.extensions.compose.experimental.stack.animation.PredictiveBackParams?>?;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){0§<kotlin.Any>;1§<kotlin.Any>;2§<kotlin.Any>;3§<kotlin.Any>;4§<kotlin.Any>;5§<kotlin.Any>}[0]
7071
final fun <#A: kotlin/Any, #B: kotlin/Any, #C: kotlin/Any, #D: kotlin/Any, #E: kotlin/Any, #F: kotlin/Any> com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanels(com.arkivanov.decompose.value/Value<com.arkivanov.decompose.router.panels/ChildPanels<#A, #B, #C, #D, #E, #F>>, kotlin/Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, com.arkivanov.decompose/Child.Created<#A, #B>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, kotlin/Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, com.arkivanov.decompose/Child.Created<#C, #D>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, kotlin/Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, com.arkivanov.decompose/Child.Created<#E, #F>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.ui/Modifier?, kotlin/Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, kotlin/Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation/StackAnimationScope, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanelsLayout?, com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanelsAnimators<#A, #B, #C, #D, #E, #F>?, kotlin/Function1<com.arkivanov.decompose.router.panels/ChildPanels<#A, #B, #C, #D, #E, #F>, com.arkivanov.decompose.extensions.compose.experimental.stack.animation/PredictiveBackParams?>?, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.arkivanov.decompose.extensions.compose.experimental.panels/ChildPanels|ChildPanels(com.arkivanov.decompose.value.Value<com.arkivanov.decompose.router.panels.ChildPanels<0:0,0:1,0:2,0:3,0:4,0:5>>;kotlin.Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,com.arkivanov.decompose.Child.Created<0:0,0:1>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;kotlin.Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,com.arkivanov.decompose.Child.Created<0:2,0:3>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;kotlin.Function4<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,com.arkivanov.decompose.Child.Created<0:4,0:5>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.ui.Modifier?;kotlin.Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;kotlin.Function3<com.arkivanov.decompose.extensions.compose.experimental.stack.animation.StackAnimationScope,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;com.arkivanov.decompose.extensions.compose.experimental.panels.ChildPanelsLayout?;com.arkivanov.decompose.extensions.compose.experimental.panels.ChildPanelsAnimators<0:0,0:1,0:2,0:3,0:4,0:5>?;kotlin.Function1<com.arkivanov.decompose.router.panels.ChildPanels<0:0,0:1,0:2,0:3,0:4,0:5>,com.arkivanov.decompose.extensions.compose.experimental.stack.animation.PredictiveBackParams?>?;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){0§<kotlin.Any>;1§<kotlin.Any>;2§<kotlin.Any>;3§<kotlin.Any>;4§<kotlin.Any>;5§<kotlin.Any>}[0]

extensions-compose-experimental/api/jvm/extensions-compose-experimental.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public abstract interface class com/arkivanov/decompose/extensions/compose/exper
9999
}
100100

101101
public final class com/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimatorKt {
102+
public static final fun inverted (Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;
102103
public static final fun plus (Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;
103104
public static final fun stackAnimator (Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function4;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;
104105
public static synthetic fun stackAnimator$default (Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function4;ILjava/lang/Object;)Lcom/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator;

extensions-compose-experimental/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/experimental/stack/animation/Slide.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import com.arkivanov.decompose.ExperimentalDecomposeApi
99

1010
/**
1111
* A simple sliding animation. Children enter from one side and exit to another side.
12+
*
13+
* You can also invert sliding direction applying [StackAnimator.inverted]
1214
*/
1315
@ExperimentalDecomposeApi
1416
fun slide(

extensions-compose-experimental/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/experimental/stack/animation/StackAnimator.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,27 @@ fun stackAnimator(
4343
frame = frame
4444
)
4545

46+
/**
47+
* Inverts child widgets animation direction as follows:
48+
* - [Direction.ENTER_FRONT] -> [Direction.ENTER_BACK]
49+
* - [Direction.EXIT_FRONT] -> [Direction.EXIT_BACK]
50+
* - [Direction.ENTER_BACK] -> [Direction.ENTER_FRONT]
51+
* - [Direction.EXIT_BACK] -> [Direction.EXIT_FRONT]
52+
* @return the inverted [StackAnimator]
53+
*/
54+
@ExperimentalDecomposeApi
55+
fun StackAnimator.inverted(): StackAnimator =
56+
StackAnimator { direction ->
57+
animate(
58+
direction = when (direction) {
59+
Direction.ENTER_FRONT -> Direction.ENTER_BACK
60+
Direction.EXIT_FRONT -> Direction.EXIT_BACK
61+
Direction.ENTER_BACK -> Direction.ENTER_FRONT
62+
Direction.EXIT_BACK -> Direction.EXIT_FRONT
63+
},
64+
)
65+
}
66+
4667
/**
4768
* Combines (merges) the receiver [StackAnimator] with the [other] [StackAnimator].
4869
*/

0 commit comments

Comments
 (0)