summaryrefslogtreecommitdiff
path: root/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-10-23 21:59:37 -0700
committerElizabeth Hunt <me@liz.coffee>2025-10-24 20:00:58 -0700
commit64f825465de9fa30c4dfe2707067efdb96110db8 (patch)
tree5241385e316e2f4ceede5018603103d71be75202 /composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt
downloadabstraction-engine-kt-64f825465de9fa30c4dfe2707067efdb96110db8.tar.gz
abstraction-engine-kt-64f825465de9fa30c4dfe2707067efdb96110db8.zip
Init
Diffstat (limited to 'composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt')
-rw-r--r--composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt105
1 files changed, 105 insertions, 0 deletions
diff --git a/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt b/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt
new file mode 100644
index 0000000..52f5866
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/ui/DPad.kt
@@ -0,0 +1,105 @@
+package coffee.liz.abstractionengine.ui
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+enum class Direction {
+ UP, DOWN, LEFT, RIGHT
+}
+
+@Composable
+fun DPad(
+ onDirectionPressed: (Direction) -> Unit,
+ modifier: Modifier = Modifier
+) {
+ Box(
+ modifier = modifier
+ .size(140.dp)
+ .background(
+ color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.6f),
+ shape = CircleShape
+ )
+ .border(1.dp, MaterialTheme.colorScheme.outline, CircleShape)
+ ) {
+ // Up button
+ DirectionButton(
+ text = "▲",
+ onClick = { onDirectionPressed(Direction.UP) },
+ modifier = Modifier
+ .align(Alignment.TopCenter)
+ .offset(y = 20.dp)
+ )
+
+ // Down button
+ DirectionButton(
+ text = "▼",
+ onClick = { onDirectionPressed(Direction.DOWN) },
+ modifier = Modifier
+ .align(Alignment.BottomCenter)
+ .offset(y = (-20).dp)
+ )
+
+ // Left button
+ DirectionButton(
+ text = "◀",
+ onClick = { onDirectionPressed(Direction.LEFT) },
+ modifier = Modifier
+ .align(Alignment.CenterStart)
+ .offset(x = 20.dp)
+ )
+
+ // Right button
+ DirectionButton(
+ text = "▶",
+ onClick = { onDirectionPressed(Direction.RIGHT) },
+ modifier = Modifier
+ .align(Alignment.CenterEnd)
+ .offset(x = (-20).dp)
+ )
+
+ // Center circle
+ Box(
+ modifier = Modifier
+ .align(Alignment.Center)
+ .size(38.dp)
+ .background(
+ color = MaterialTheme.colorScheme.surface.copy(alpha = 0.5f),
+ shape = CircleShape
+ )
+ .border(1.dp, MaterialTheme.colorScheme.outline, CircleShape)
+ )
+ }
+}
+
+@Composable
+private fun DirectionButton(
+ text: String,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ Button(
+ onClick = onClick,
+ modifier = modifier.size(38.dp),
+ shape = RoundedCornerShape(4.dp),
+ colors = ButtonDefaults.buttonColors(
+ containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.6f),
+ contentColor = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.3f)
+ ),
+ contentPadding = PaddingValues(0.dp)
+ ) {
+ Text(
+ text = text,
+ fontSize = 14.sp,
+ style = MaterialTheme.typography.headlineMedium
+ )
+ }
+}