From f587531a01464259fca3bd128d36d9c04caebe18 Mon Sep 17 00:00:00 2001 From: Alex Lockwood Date: Sun, 20 Oct 2024 10:37:43 -0400 Subject: [PATCH] cleanup layouts --- .../ui/AnimateGridTilePlacement.kt | 5 +--- .../twentyfortyeight/ui/GameLayout.kt | 27 +++++++++++------- .../twentyfortyeight/ui/GameUi.kt | 3 ++ .../alexjlockwood/twentyfortyeight/Main.kt | 6 ++-- .../UserInterfaceState.xcuserstate | Bin 38501 -> 39702 bytes 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/AnimateGridTilePlacement.kt b/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/AnimateGridTilePlacement.kt index 59dd9bf..9b6b826 100644 --- a/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/AnimateGridTilePlacement.kt +++ b/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/AnimateGridTilePlacement.kt @@ -68,10 +68,7 @@ private class AnimateGridTilePlacementNode( override fun MeasureScope.measure(measurable: Measurable, constraints: Constraints): MeasureResult { val placeable = measurable.measure(constraints) return layout(placeable.width, placeable.height) { - placeable.placeWithLayer( - x = 0, - y = 0, - ) { + placeable.placeWithLayer(x = 0, y = 0) { scaleX = animatedScale.value scaleY = animatedScale.value translationX = animatedOffset.value.x diff --git a/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameLayout.kt b/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameLayout.kt index 995e81c..b76f8a9 100644 --- a/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameLayout.kt +++ b/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameLayout.kt @@ -30,25 +30,26 @@ fun GameLayout( bestScoreText: @Composable (() -> Unit), bestScoreLabel: @Composable (() -> Unit), modifier: Modifier = Modifier, - padding: Dp = 16.dp, ) { val gameGrid = remember(gameGrid) { movableContentOf(gameGrid) } val currentScoreText = remember(currentScoreText) { movableContentOf(currentScoreText) } val currentScoreLabel = remember(currentScoreLabel) { movableContentOf(currentScoreLabel) } val bestScoreText = remember(bestScoreText) { movableContentOf(bestScoreText) } val bestScoreLabel = remember(bestScoreLabel) { movableContentOf(bestScoreLabel) } + BoxWithConstraints(modifier = modifier) { val isPortrait = maxWidth < maxHeight - val gridSize = min(maxWidth, maxHeight).coerceAtMost(600.dp) - padding * 2 + val gridSize = min(maxWidth, maxHeight).coerceAtMost(GameGridMaxWidth) - GameGridPadding * 2 if (isPortrait) { Column( modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.spacedBy(padding), + verticalArrangement = Arrangement.spacedBy(16.dp), ) { Box( modifier = Modifier - .padding(start = padding, top = padding, end = padding) + .padding(vertical = 16.dp) + .padding(start = 16.dp) .fillMaxWidth(), contentAlignment = Alignment.Center, ) { @@ -57,7 +58,7 @@ fun GameLayout( Row( modifier = Modifier - .padding(start = padding, end = padding) + .padding(horizontal = 16.dp) .width(gridSize) .align(Alignment.CenterHorizontally), horizontalArrangement = Arrangement.SpaceBetween, @@ -66,6 +67,7 @@ fun GameLayout( currentScoreText() currentScoreLabel() } + Column(horizontalAlignment = Alignment.End) { bestScoreText() bestScoreLabel() @@ -74,23 +76,25 @@ fun GameLayout( } } else { Row( - modifier = Modifier.fillMaxSize(), + modifier = Modifier + .fillMaxSize(), horizontalArrangement = Arrangement.Center, ) { Box( modifier = Modifier - .padding(start = padding, top = padding, bottom = padding) - .fillMaxHeight(), + .fillMaxHeight() + .padding(vertical = 16.dp) + .padding(start = 16.dp), contentAlignment = Alignment.Center, ) { gameGrid(gridSize) } - Spacer(Modifier.width(padding)) + Spacer(Modifier.width(16.dp)) Column( modifier = Modifier - .padding(top = padding, bottom = padding) + .padding(vertical = 16.dp) .height(gridSize) .align(Alignment.CenterVertically), verticalArrangement = Arrangement.Bottom, @@ -105,3 +109,6 @@ fun GameLayout( } } } + +private val GameGridMaxWidth = 600.dp +private val GameGridPadding = 16.dp diff --git a/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameUi.kt b/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameUi.kt index e9bd2bd..53ba912 100644 --- a/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameUi.kt +++ b/composeApp/src/commonMain/kotlin/com/alexjlockwood/twentyfortyeight/ui/GameUi.kt @@ -174,4 +174,7 @@ private val KeyEvent.direction: Direction? else -> null } +/** + * Returns true if the platform should support moves via touch gestures. + */ internal expect fun shouldDetectSwipes(): Boolean diff --git a/composeApp/src/desktopMain/kotlin/com/alexjlockwood/twentyfortyeight/Main.kt b/composeApp/src/desktopMain/kotlin/com/alexjlockwood/twentyfortyeight/Main.kt index 219d308..8731637 100644 --- a/composeApp/src/desktopMain/kotlin/com/alexjlockwood/twentyfortyeight/Main.kt +++ b/composeApp/src/desktopMain/kotlin/com/alexjlockwood/twentyfortyeight/Main.kt @@ -10,7 +10,7 @@ import net.harawata.appdirs.AppDirsFactory import okio.FileSystem import okio.Path.Companion.toPath -private const val PACKAGE_NAME = "com.alexjlockwood.twentyfortyeightcompose" +private const val PACKAGE_NAME = "com.alexjlockwood.twentyfortyeight" private const val VERSION = "1.0.0" private const val AUTHOR = "alexjlockwood" @@ -23,8 +23,6 @@ fun main() = application { onCloseRequest = ::exitApplication, title = "2048", ) { - App( - repository = GameRepository(store), - ) + App(repository = GameRepository(store)) } } diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/alockwood.xcuserdatad/UserInterfaceState.xcuserstate b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/alockwood.xcuserdatad/UserInterfaceState.xcuserstate index 884b94c2596983510f6a84da6b6e9fc4f0d95ca2..c2867d88bebd65a7307ad55f3e04458b0dc6f6d2 100644 GIT binary patch delta 19080 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%0D|CbI&;xoxFX#<@@L$8>2z98%CePjCSK@JThxkz3 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 delta 18497 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