| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package eu.mjdev.desktop.components.custom
- import androidx.compose.desktop.ui.tooling.preview.Preview
- import androidx.compose.foundation.Image
- import androidx.compose.foundation.background
- import androidx.compose.foundation.layout.*
- import androidx.compose.foundation.shape.CircleShape
- import androidx.compose.material.Button
- import androidx.compose.material.ButtonDefaults
- import androidx.compose.material.icons.Icons
- import androidx.compose.material.icons.filled.SettingsPower
- import androidx.compose.runtime.Composable
- import androidx.compose.ui.Alignment
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.graphics.Color
- import androidx.compose.ui.graphics.ColorFilter
- import androidx.compose.ui.unit.Dp
- import androidx.compose.ui.unit.dp
- import eu.mjdev.desktop.extensions.ColorUtils.alpha
- import eu.mjdev.desktop.extensions.Compose.noElevation
- import eu.mjdev.desktop.extensions.Compose.transparent
- import eu.mjdev.desktop.extensions.Modifier.circleBorder
- import eu.mjdev.desktop.extensions.Modifier.circleShadow
- import eu.mjdev.desktop.extensions.Modifier.clipCircle
- import eu.mjdev.desktop.extensions.Modifier.rectShadow
- import eu.mjdev.desktop.helpers.shape.BarShape
- import eu.mjdev.desktop.provider.DesktopScope.Companion.withDesktopScope
- @Composable
- fun PowerBlock(
- backgroundColor: Color = Color.Transparent,
- shadowColor: Color = Color.Black.copy(alpha = 0.3f),
- bottomBoxHeight: Dp = 128.dp,
- iconHeight: Dp = 64.dp,
- onPowerButtonClick: () -> Unit = {}
- ) = withDesktopScope {
- Column(
- modifier = Modifier.fillMaxWidth()
- ) {
- BoxWithConstraints(
- modifier = Modifier
- .fillMaxWidth()
- .height(bottomBoxHeight),
- contentAlignment = Alignment.BottomCenter
- ) {
- val shape = BarShape(
- offset = (minWidth / 2).value,
- circleRadius = 24.dp,
- cornerRadius = 4.dp,
- circleGap = 8.dp,
- )
- Box(
- modifier = Modifier
- .fillMaxWidth()
- .height(iconHeight)
- .rectShadow(color = shadowColor)
- .background(backgroundColor, shape)
- )
- Button(
- modifier = Modifier
- .padding(bottom = 36.dp)
- .size(64.dp)
- .clipCircle()
- .circleBorder(2.dp, textColor.alpha(0.5f))
- .circleShadow(4.dp, Color.Black),
- contentPadding = PaddingValues(1.dp),
- onClick = onPowerButtonClick,
- colors = ButtonDefaults.transparent(),
- elevation = ButtonDefaults.noElevation()
- ) {
- Image(
- modifier = Modifier
- .size(64.dp)
- .background(backgroundColor, CircleShape)
- .clipCircle()
- .padding(8.dp),
- imageVector = Icons.Filled.SettingsPower,
- contentDescription = "",
- colorFilter = ColorFilter.tint(textColor)
- )
- }
- }
- }
- }
- @Preview
- @Composable
- fun PowerBlockPreview() = PowerBlock()
|