| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package eu.mjdev.desktop.components.image
- import androidx.compose.runtime.Composable
- import androidx.compose.ui.Alignment
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.graphics.ColorFilter
- import androidx.compose.ui.graphics.DefaultAlpha
- import androidx.compose.ui.graphics.FilterQuality
- import androidx.compose.ui.graphics.drawscope.DrawScope.Companion.DefaultFilterQuality
- import androidx.compose.ui.graphics.vector.ImageVector
- import androidx.compose.ui.layout.ContentScale
- import coil3.compose.AsyncImage
- import eu.mjdev.desktop.components.video.VideoPlayerView
- import eu.mjdev.desktop.extensions.Compose.asyncImageLoader
- import eu.mjdev.desktop.provider.DesktopProvider
- import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
- import androidx.compose.foundation.Image as ComposeImage
- @Suppress("FunctionName")
- @Composable
- fun ImageAny(
- src: Any?,
- api: DesktopProvider = LocalDesktop.current,
- contentDescription: String? = "",
- modifier: Modifier = Modifier,
- alignment: Alignment = Alignment.Center,
- contentScale: ContentScale = ContentScale.Fit,
- alpha: Float = DefaultAlpha,
- colorFilter: ColorFilter? = null,
- filterQuality: FilterQuality = DefaultFilterQuality,
- onLoading: () -> Unit = {},
- onFail: (error: Throwable) -> Unit = {}
- ) {
- val isVideo = src.toString().trim().let {
- it.endsWith(".gif") || it.endsWith(".mp4") || it.endsWith(".mpg")
- }
- when {
- isVideo -> VideoPlayerView(
- modifier = modifier,
- src = src,
- alignment = alignment,
- alpha = alpha,
- contentDescription = contentDescription,
- colorFilter = colorFilter,
- contentScale = contentScale
- )
- src is ImageVector -> ComposeImage(
- modifier = modifier,
- imageVector = src,
- alignment = alignment,
- alpha = alpha,
- contentDescription = contentDescription,
- colorFilter = colorFilter,
- contentScale = contentScale
- )
- else -> AsyncImage(
- modifier = modifier,
- model = src,
- contentDescription = contentDescription,
- contentScale = contentScale,
- filterQuality = filterQuality,
- imageLoader = api.imageLoader ?: asyncImageLoader(),
- onError = {
- onFail(it.result.throwable)
- },
- onLoading = {
- onLoading()
- },
- )
- }
- }
|