QrCodeView.kt 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package eu.mjdev.desktop.components.qrcode
  2. import androidx.compose.foundation.Image
  3. import androidx.compose.foundation.layout.Box
  4. import androidx.compose.foundation.layout.PaddingValues
  5. import androidx.compose.foundation.layout.fillMaxSize
  6. import androidx.compose.foundation.layout.padding
  7. import androidx.compose.runtime.Composable
  8. import androidx.compose.ui.Modifier
  9. import androidx.compose.ui.graphics.Color
  10. import androidx.compose.ui.graphics.painter.Painter
  11. import androidx.compose.ui.unit.dp
  12. import io.github.alexzhirkevich.qrose.options.*
  13. import io.github.alexzhirkevich.qrose.rememberQrCodePainter
  14. // todo : params
  15. @Suppress("unused")
  16. @Composable
  17. fun QrCodeView(
  18. modifier: Modifier = Modifier,
  19. data: String = "https://mjdev.org",
  20. logoPainter: Painter? = null,
  21. contentPadding: PaddingValues = PaddingValues(8.dp, 48.dp),
  22. contentDescription: String = data,
  23. framesColor: Color = Color.Black,
  24. pointColor: Color = Color.Black
  25. ) {
  26. val qrcodePainter = rememberQrCodePainter(data) {
  27. if (logoPainter != null) {
  28. logo {
  29. painter = logoPainter
  30. padding = QrLogoPadding.Natural(.1f)
  31. shape = QrLogoShape.circle()
  32. size = 0.2f
  33. }
  34. }
  35. shapes {
  36. ball = QrBallShape.circle()
  37. darkPixel = QrPixelShape.roundCorners()
  38. frame = QrFrameShape.roundCorners(.25f)
  39. }
  40. colors {
  41. dark = QrBrush.solid(pointColor)
  42. frame = QrBrush.solid(framesColor)
  43. }
  44. }
  45. Box(
  46. modifier = modifier.padding(contentPadding)
  47. ) {
  48. Image(
  49. modifier = Modifier.fillMaxSize(),
  50. painter = qrcodePainter,
  51. contentDescription = contentDescription
  52. )
  53. }
  54. }