ItemInfo.kt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package eu.mjdev.desktop.components.gallery
  2. import androidx.compose.animation.AnimatedVisibility
  3. import androidx.compose.animation.slideInVertically
  4. import androidx.compose.animation.slideOutVertically
  5. import androidx.compose.desktop.ui.tooling.preview.Preview
  6. import androidx.compose.foundation.background
  7. import androidx.compose.foundation.layout.*
  8. import androidx.compose.runtime.Composable
  9. import androidx.compose.runtime.derivedStateOf
  10. import androidx.compose.runtime.getValue
  11. import androidx.compose.runtime.remember
  12. import androidx.compose.ui.Alignment
  13. import androidx.compose.ui.Modifier
  14. import androidx.compose.ui.graphics.Color
  15. import androidx.compose.ui.unit.dp
  16. import androidx.compose.ui.unit.sp
  17. import eu.mjdev.desktop.components.text.AutoHideEmptyText
  18. import eu.mjdev.desktop.data.ItemWithDate
  19. import eu.mjdev.desktop.data.ItemWithTitle
  20. import eu.mjdev.desktop.extensions.ColorUtils.createVerticalColorBrush
  21. import eu.mjdev.desktop.extensions.ColorUtils.invert
  22. import eu.mjdev.desktop.extensions.Compose.preview
  23. import eu.mjdev.desktop.helpers.compose.Gravity
  24. // todo
  25. @Composable
  26. fun ItemInfo(
  27. modifier: Modifier = Modifier,
  28. src: Any? = null,
  29. visible: Boolean = true,
  30. backgroundColor: Color = Color.Transparent,
  31. // metadataRetriever: MetadataRetriever = rememberMetaDataRetriever(),
  32. titleFromItem: () -> Any? = {
  33. (src as? ItemWithTitle)?.title
  34. },
  35. dateFromItem: () -> Any? = {
  36. (src as? ItemWithDate)?.date?.toString() ?: "-"
  37. },
  38. detailsFromItem: () -> Any? = {
  39. // metadataRetriever.getInfo(src)
  40. },
  41. ) {
  42. val bck = createVerticalColorBrush(backgroundColor, Gravity.TOP)
  43. val textColor by remember(backgroundColor) {
  44. derivedStateOf {
  45. backgroundColor.invert().copy(alpha = 1.0f)
  46. }
  47. }
  48. AnimatedVisibility(
  49. modifier = modifier,
  50. visible = visible,
  51. enter = slideInVertically(),
  52. exit = slideOutVertically(),
  53. ) {
  54. Box(
  55. modifier = modifier.background(bck),
  56. contentAlignment = Alignment.TopStart
  57. ) {
  58. Column(
  59. modifier = Modifier.padding(16.dp, 0.dp, 0.dp, 16.dp)
  60. ) {
  61. Spacer(modifier = Modifier.height(16.dp))
  62. AutoHideEmptyText(
  63. text = titleFromItem(),
  64. color = textColor,
  65. fontSize = 24.sp
  66. )
  67. AutoHideEmptyText(
  68. text = dateFromItem(),
  69. color = textColor,
  70. fontSize = 16.sp
  71. )
  72. AutoHideEmptyText(
  73. text = detailsFromItem(),
  74. color = textColor,
  75. fontSize = 12.sp,
  76. lineHeight = 12.sp
  77. )
  78. Spacer(modifier = Modifier.height(16.dp))
  79. }
  80. }
  81. }
  82. }
  83. @Preview
  84. @Composable
  85. fun ItemInfoPreview() = preview {
  86. ItemInfo()
  87. }