Palette.kt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package eu.mjdev.desktop.helpers.internal
  2. import androidx.compose.runtime.Composable
  3. import androidx.compose.runtime.mutableStateOf
  4. import androidx.compose.runtime.remember
  5. import androidx.compose.runtime.rememberCoroutineScope
  6. import androidx.compose.ui.graphics.Color
  7. import com.materialkolor.ktx.themeColor
  8. import eu.mjdev.desktop.extensions.Compose.SuperDarkGray
  9. import eu.mjdev.desktop.extensions.Image.loadPicture
  10. import kotlinx.coroutines.CoroutineScope
  11. import kotlinx.coroutines.launch
  12. @Suppress("unused", "MemberVisibilityCanBePrivate")
  13. class Palette(
  14. private val scope: CoroutineScope,
  15. private val baseColor: Color = Color.SuperDarkGray
  16. ) {
  17. val backgroundColorState = mutableStateOf(baseColor)
  18. var backgroundColor
  19. get() = backgroundColorState.value
  20. set(value) {
  21. backgroundColorState.value = value
  22. }
  23. fun update(src: Any?) = scope.launch {
  24. loadPicture(src)
  25. .getOrNull()
  26. ?.themeColor(fallback = baseColor)?.also { color ->
  27. backgroundColor = color
  28. }
  29. }
  30. companion object {
  31. @Composable
  32. fun rememberPalette(
  33. baseColor: Color = Color.SuperDarkGray,
  34. scope: CoroutineScope = rememberCoroutineScope()
  35. ) = remember { Palette(scope, baseColor) }
  36. }
  37. }