PageHeader.kt 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) Milan Jurkulák 2024.
  3. * Contact:
  4. * e: mimoccc@gmail.com
  5. * e: mj@mjdev.org
  6. * w: https://mjdev.org
  7. */
  8. package eu.mjdev.desktop.components.controlcenter.base
  9. import androidx.compose.desktop.ui.tooling.preview.Preview
  10. import androidx.compose.foundation.background
  11. import androidx.compose.foundation.layout.*
  12. import androidx.compose.runtime.Composable
  13. import androidx.compose.ui.Modifier
  14. import androidx.compose.ui.graphics.ColorFilter
  15. import androidx.compose.ui.unit.Dp
  16. import androidx.compose.ui.unit.dp
  17. import androidx.compose.ui.unit.sp
  18. import eu.mjdev.desktop.components.appbar.AppBar
  19. import eu.mjdev.desktop.components.controlcenter.pages.MainSettingsPage
  20. import eu.mjdev.desktop.components.image.ImageAny
  21. import eu.mjdev.desktop.components.text.TextAny
  22. import eu.mjdev.desktop.extensions.Modifier.circleBorder
  23. import eu.mjdev.desktop.extensions.Modifier.clipCircle
  24. import eu.mjdev.desktop.provider.DesktopScope.Companion.withDesktopScope
  25. @Composable
  26. fun PageHeader(
  27. modifier: Modifier = Modifier,
  28. page: ControlCenterPage = MainSettingsPage(),
  29. contentPadding: PaddingValues = PaddingValues(8.dp),
  30. iconSize: Dp = 64.dp,
  31. actions: @Composable RowScope.() -> Unit = {},
  32. ) = withDesktopScope {
  33. if (page.showHeader) {
  34. AppBar(
  35. modifier = modifier.fillMaxWidth()
  36. .wrapContentHeight()
  37. .background(backgroundColor),
  38. contentPadding = contentPadding,
  39. icon = {
  40. Box(
  41. modifier = Modifier.size(iconSize + 4.dp)
  42. .circleBorder(2.dp, textColor)
  43. .padding(4.dp)
  44. ) {
  45. ImageAny(
  46. modifier = Modifier.size(iconSize).background(backgroundColor).clipCircle(),
  47. src = page.icon,
  48. colorFilter = ColorFilter.tint(textColor),
  49. contentDescription = ""
  50. )
  51. }
  52. },
  53. title = {
  54. TextAny(
  55. modifier = Modifier.fillMaxWidth().padding(start = 16.dp),
  56. text = page.name,
  57. color = textColor,
  58. fontSize = 20.sp
  59. )
  60. },
  61. actions = actions
  62. )
  63. }
  64. }
  65. @Preview
  66. @Composable
  67. fun PageHeaderPreview() = PageHeader()