Theme.kt 5.0 KB

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