PowerBlock.kt 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package eu.mjdev.desktop.components.custom
  2. import androidx.compose.desktop.ui.tooling.preview.Preview
  3. import androidx.compose.foundation.Image
  4. import androidx.compose.foundation.background
  5. import androidx.compose.foundation.layout.*
  6. import androidx.compose.foundation.shape.CircleShape
  7. import androidx.compose.material.Button
  8. import androidx.compose.material.ButtonDefaults
  9. import androidx.compose.material.icons.Icons
  10. import androidx.compose.material.icons.filled.SettingsPower
  11. import androidx.compose.runtime.Composable
  12. import androidx.compose.ui.Alignment
  13. import androidx.compose.ui.Modifier
  14. import androidx.compose.ui.graphics.Color
  15. import androidx.compose.ui.graphics.ColorFilter
  16. import androidx.compose.ui.unit.Dp
  17. import androidx.compose.ui.unit.dp
  18. import eu.mjdev.desktop.extensions.Compose.noElevation
  19. import eu.mjdev.desktop.extensions.Compose.transparent
  20. import eu.mjdev.desktop.extensions.Modifier.circleBorder
  21. import eu.mjdev.desktop.extensions.Modifier.circleShadow
  22. import eu.mjdev.desktop.extensions.Modifier.clipCircle
  23. import eu.mjdev.desktop.extensions.Modifier.rectShadow
  24. @Preview
  25. @Composable
  26. fun PowerBlock(
  27. backgroundColor: Color,
  28. shadowColor: Color = Color.Black.copy(alpha = 0.3f),
  29. textColor: Color = Color.Black,
  30. iconTintColor: Color = Color.White,
  31. bottomBoxHeight: Dp = 128.dp,
  32. iconHeight: Dp = 64.dp,
  33. onPowerButtonClick: () -> Unit = {}
  34. ) = Column(
  35. modifier = Modifier.fillMaxWidth()
  36. ) {
  37. Box(
  38. modifier = Modifier
  39. .fillMaxWidth()
  40. .height(bottomBoxHeight),
  41. contentAlignment = Alignment.BottomCenter
  42. ) {
  43. Box(
  44. modifier = Modifier
  45. .fillMaxWidth()
  46. .height(iconHeight)
  47. .rectShadow(color = shadowColor)
  48. .background(backgroundColor)
  49. )
  50. Button(
  51. modifier = Modifier
  52. .padding(bottom = 36.dp)
  53. .size(64.dp)
  54. .clipCircle()
  55. .circleBorder(4.dp, backgroundColor)
  56. .circleShadow(color = shadowColor),
  57. contentPadding = PaddingValues(1.dp),
  58. onClick = onPowerButtonClick,
  59. colors = ButtonDefaults.transparent(),
  60. elevation = ButtonDefaults.noElevation()
  61. ) {
  62. Image(
  63. modifier = Modifier
  64. .size(64.dp)
  65. .background(iconTintColor, CircleShape)
  66. .clipCircle()
  67. .padding(8.dp),
  68. imageVector = Icons.Filled.SettingsPower,
  69. contentDescription = "",
  70. colorFilter = ColorFilter.tint(backgroundColor)
  71. )
  72. }
  73. }
  74. }