Theme.kt 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package eu.mjdev.desktop.data
  2. import androidx.compose.runtime.mutableStateOf
  3. import androidx.compose.ui.graphics.Color
  4. import androidx.compose.ui.unit.Dp
  5. import androidx.compose.ui.unit.DpSize
  6. import androidx.compose.ui.unit.dp
  7. import eu.mjdev.desktop.extensions.Compose.SuperDarkGray
  8. import eu.mjdev.desktop.fonts.MaterialIconFont
  9. import eu.mjdev.desktop.fonts.MaterialSymbolsSharp
  10. // todo all components customizable
  11. @Suppress("unused", "MemberVisibilityCanBePrivate")
  12. class Theme(
  13. backgroundColor: Color,
  14. backgroundRotationDelay: Long,
  15. panelLocation: PanelLocation,
  16. panelDividerWidth: Dp,
  17. panelContentPadding: Dp,
  18. panelHideDelay: Long,
  19. controlCenterLocation: ControlCenterLocation,
  20. controlPanelHideDelay: Long,
  21. controlCenterExpandedWidthPercent: Int,
  22. controlCenterDividerColor: Color = backgroundColor,
  23. controlCenterDividerWidth: Dp,
  24. controlCenterIconColor: Color,
  25. controlCenterIconSize: DpSize,
  26. controlCenterBackgroundAlpha: Float,
  27. iconSet: MaterialIconFont,
  28. appMenuMinWidth: Dp,
  29. appMenuMinHeight: Dp,
  30. appMenuOuterPadding: Dp,
  31. ) {
  32. val backgroundColorState = mutableStateOf(backgroundColor)
  33. val backgroundRotationDelayState = mutableStateOf(backgroundRotationDelay)
  34. val panelLocationState = mutableStateOf(panelLocation)
  35. val panelHideDelayState = mutableStateOf(panelHideDelay)
  36. val panelDividerWidthState = mutableStateOf(panelDividerWidth)
  37. val panelContentPaddingState = mutableStateOf(panelContentPadding)
  38. val controlCenterLocationState = mutableStateOf(controlCenterLocation)
  39. val controlPanelHideDelayState = mutableStateOf(controlPanelHideDelay)
  40. var controlCenterExpandedWidthState = mutableStateOf(controlCenterExpandedWidthPercent)
  41. val controlCenterDividerColorState = mutableStateOf(controlCenterDividerColor)
  42. val controlCenterDividerWidthState = mutableStateOf(controlCenterDividerWidth)
  43. val controlCenterIconColorState = mutableStateOf(controlCenterIconColor)
  44. val controlCenterIconSizeState = mutableStateOf(controlCenterIconSize)
  45. val iconSetState = mutableStateOf(iconSet)
  46. val appMenuMinWidthState = mutableStateOf(appMenuMinWidth)
  47. val appMenuMinHeightState = mutableStateOf(appMenuMinHeight)
  48. val appMenuOuterPaddingState = mutableStateOf(appMenuOuterPadding)
  49. var backgroundColor
  50. get() = backgroundColorState.value
  51. set(value) {
  52. backgroundColorState.value = value
  53. }
  54. val panelLocation get() = panelLocationState.value
  55. val panelDividerWidth get() = panelDividerWidthState.value
  56. val panelContentPadding get() = panelContentPaddingState.value
  57. val panelHideDelay get() = panelHideDelayState.value
  58. val controlCenterBackgroundAlphaState = mutableStateOf(controlCenterBackgroundAlpha)
  59. val controlCenterLocation get() = controlCenterLocationState.value
  60. val controlPanelHideDelay get() = controlPanelHideDelayState.value
  61. var controlCenterExpandedWidth
  62. get() = controlCenterExpandedWidthState.value
  63. set(value) {
  64. controlCenterExpandedWidthState.value = value
  65. }
  66. val controlCenterDividerColor get() = controlCenterDividerColorState.value
  67. val controlCenterDividerWidth get() = controlCenterDividerWidthState.value
  68. val controlCenterIconColor get() = controlCenterIconColorState.value
  69. val controlCenterIconSize get() = controlCenterIconSizeState.value
  70. val controlCenterBackgroundAlpha get() = controlCenterBackgroundAlphaState.value
  71. val iconSet get() = iconSetState.value
  72. val backgroundRotationDelay get() = backgroundRotationDelayState.value
  73. val appMenuMinWidth get() = appMenuMinWidthState.value
  74. val appMenuMinHeight get() = appMenuMinHeightState.value
  75. val appMenuOuterPadding get() = appMenuOuterPaddingState.value
  76. companion object {
  77. val themeCache = mutableMapOf<String, Theme>()
  78. private val DEFAULT = Theme(
  79. iconSet = MaterialSymbolsSharp,
  80. backgroundColor = Color.SuperDarkGray,
  81. backgroundRotationDelay = 60000,
  82. panelLocation = PanelLocation.Bottom,
  83. panelDividerWidth = 16.dp,
  84. panelContentPadding = 4.dp,
  85. panelHideDelay = 2000L,
  86. controlCenterLocation = ControlCenterLocation.Right,
  87. controlPanelHideDelay = 2000L,
  88. controlCenterExpandedWidthPercent = 25,
  89. controlCenterDividerColor = Color.SuperDarkGray,
  90. controlCenterDividerWidth = 4.dp,
  91. controlCenterIconColor = Color.White,
  92. controlCenterIconSize = DpSize(32.dp, 32.dp),
  93. controlCenterBackgroundAlpha = 0.6f,
  94. appMenuMinWidth = 480.dp,
  95. appMenuMinHeight = 640.dp,
  96. appMenuOuterPadding = 2.dp
  97. )
  98. // todo load from user settings
  99. fun load(
  100. user: User
  101. ): Theme = themeCache[user.userName] ?: DEFAULT.apply {
  102. themeCache[user.userName] = this
  103. }
  104. }
  105. }