AppsMenuApp.kt 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package eu.mjdev.desktop.components.appsmenu
  2. import androidx.compose.desktop.ui.tooling.preview.Preview
  3. import androidx.compose.foundation.clickable
  4. import androidx.compose.foundation.layout.PaddingValues
  5. import androidx.compose.foundation.layout.Row
  6. import androidx.compose.foundation.layout.fillMaxWidth
  7. import androidx.compose.foundation.layout.padding
  8. import androidx.compose.runtime.Composable
  9. import androidx.compose.ui.Alignment
  10. import androidx.compose.ui.Modifier
  11. import androidx.compose.ui.graphics.Color
  12. import androidx.compose.ui.text.font.FontWeight
  13. import androidx.compose.ui.unit.DpSize
  14. import androidx.compose.ui.unit.dp
  15. import eu.mjdev.desktop.components.fonticon.MaterialIcon
  16. import eu.mjdev.desktop.components.text.TextAny
  17. import eu.mjdev.desktop.provider.DesktopProvider
  18. import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
  19. import eu.mjdev.desktop.provider.data.App
  20. @Preview
  21. @Composable
  22. fun AppsMenuApp(
  23. modifier: Modifier = Modifier,
  24. app: App? = null,
  25. icon: String? = null,
  26. iconSize: DpSize = DpSize(32.dp, 32.dp),
  27. iconTint: Color = Color.Black,
  28. textColor: Color = Color.White,
  29. backgroundColor: Color = Color.White,
  30. api: DesktopProvider = LocalDesktop.current,
  31. onClick: (app: App?) -> Unit = { app?.start() }
  32. ) = Row(
  33. modifier = modifier.clickable { onClick(app) },
  34. verticalAlignment = Alignment.CenterVertically,
  35. ) {
  36. val materialIcon = api.appsProvider.iconForApp(app?.name ?: icon) ?: "?".toInt()
  37. MaterialIcon(
  38. iconId = materialIcon,
  39. iconSize = iconSize,
  40. iconColor = iconTint,
  41. iconBackgroundColor = backgroundColor,
  42. outerPadding = PaddingValues(2.dp),
  43. innerPadding = PaddingValues(0.dp)
  44. )
  45. TextAny(
  46. modifier = Modifier.padding(start = 4.dp).fillMaxWidth(),
  47. text = app?.name ?: "",
  48. color = textColor,
  49. fontWeight = FontWeight.Bold
  50. )
  51. }