From cf35982b3730efaeba855743e9a3263c26c7de5c Mon Sep 17 00:00:00 2001 From: Heller Date: Thu, 18 Jun 2026 23:53:41 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=87=D0=B8=D0=BB=20=D0=BF=D0=BE=D0=B4=D1=81=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D0=BA=D1=83=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA=20=D1=82?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../com/heller/calculator/CalculatorScreen.kt | 3 +- .../ui/components/CalculatorButton.kt | 69 ++++++++++++++----- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/heller/calculator/CalculatorScreen.kt b/app/src/main/java/com/heller/calculator/CalculatorScreen.kt index 7c34eb0..d159925 100644 --- a/app/src/main/java/com/heller/calculator/CalculatorScreen.kt +++ b/app/src/main/java/com/heller/calculator/CalculatorScreen.kt @@ -152,7 +152,8 @@ private fun ButtonGrid( label = label, type = type, onClick = { handleButtonClick(label, viewModel) }, - isSelected = labelToOperation(label) == pendingOperation, + isSelected = type == CalculatorButtonType.Operator && + labelToOperation(label) == pendingOperation, modifier = Modifier .weight(weight) .aspectRatio(if (label == "0") 2.15f else 1f), diff --git a/app/src/main/java/com/heller/calculator/ui/components/CalculatorButton.kt b/app/src/main/java/com/heller/calculator/ui/components/CalculatorButton.kt index b5560a7..0622b8f 100644 --- a/app/src/main/java/com/heller/calculator/ui/components/CalculatorButton.kt +++ b/app/src/main/java/com/heller/calculator/ui/components/CalculatorButton.kt @@ -1,16 +1,21 @@ package com.heller.calculator.ui.components import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -29,8 +34,11 @@ fun CalculatorButton( modifier: Modifier = Modifier, isSelected: Boolean = false, ) { + val showSelected = isSelected && type == CalculatorButtonType.Operator + val shape = RoundedCornerShape(24.dp) + val containerColor = when { - isSelected -> MaterialTheme.colorScheme.primary + showSelected -> MaterialTheme.colorScheme.primary type == CalculatorButtonType.Digit -> MaterialTheme.colorScheme.surfaceVariant type == CalculatorButtonType.Operator -> MaterialTheme.colorScheme.primaryContainer type == CalculatorButtonType.Equals -> MaterialTheme.colorScheme.primary @@ -38,30 +46,14 @@ fun CalculatorButton( } val contentColor = when { - isSelected -> MaterialTheme.colorScheme.onPrimary + showSelected -> MaterialTheme.colorScheme.onPrimary type == CalculatorButtonType.Digit -> MaterialTheme.colorScheme.onSurfaceVariant type == CalculatorButtonType.Operator -> MaterialTheme.colorScheme.onPrimaryContainer type == CalculatorButtonType.Equals -> MaterialTheme.colorScheme.onPrimary else -> MaterialTheme.colorScheme.onErrorContainer } - Button( - onClick = onClick, - modifier = modifier, - shape = RoundedCornerShape(24.dp), - colors = ButtonDefaults.buttonColors( - containerColor = containerColor, - contentColor = contentColor, - ), - border = if (isSelected) { - BorderStroke(2.dp, MaterialTheme.colorScheme.onPrimary) - } else { - null - }, - elevation = ButtonDefaults.buttonElevation( - defaultElevation = if (isSelected) 6.dp else 2.dp, - ), - ) { + val labelContent = @Composable { Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center, @@ -70,7 +62,46 @@ fun CalculatorButton( text = label, fontSize = 24.sp, style = MaterialTheme.typography.bodyLarge, + color = contentColor, ) } } + + if (type == CalculatorButtonType.Digit) { + Surface( + modifier = modifier + .clip(shape) + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null, + onClick = onClick, + ), + shape = shape, + color = containerColor, + shadowElevation = 2.dp, + ) { + labelContent() + } + return + } + + Button( + onClick = onClick, + modifier = modifier, + shape = shape, + colors = ButtonDefaults.buttonColors( + containerColor = containerColor, + contentColor = contentColor, + ), + border = if (showSelected) { + BorderStroke(2.dp, MaterialTheme.colorScheme.onPrimary) + } else { + null + }, + elevation = ButtonDefaults.buttonElevation( + defaultElevation = if (showSelected) 6.dp else 2.dp, + ), + ) { + labelContent() + } }