add PainterIconSource

This commit is contained in:
AmirHossein Abdolmotallebi 2025-01-20 05:14:55 +03:30
parent 9eb141ae8a
commit c3ed0dd541
2 changed files with 37 additions and 6 deletions

View File

@ -1,15 +1,22 @@
package com.abdownloadmanager.desktop.utils
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.painter.BitmapPainter
import androidx.compose.ui.graphics.toComposeImageBitmap
import com.abdownloadmanager.shared.utils.FileIconProvider
import com.abdownloadmanager.shared.utils.ui.IMyIcons
import ir.amirab.util.compose.IconSource
import java.awt.image.BufferedImage
import java.io.File
import javax.swing.filechooser.FileSystemView
object FileIconProvider {
class OSFileIconProvider(
private val icons: IMyIcons
) : FileIconProvider {
private val registeredIcons = mutableMapOf<String, ImageBitmap>()
private val lock = Any()
fun getIconOfFileExtension(
private fun getIconOfFileExtension(
extension: String,
): ImageBitmap? {
val imageBitmap = registeredIcons[extension]
@ -48,4 +55,19 @@ object FileIconProvider {
private fun bufferedImageToImageBitmap(bufferedImage: BufferedImage): ImageBitmap {
return bufferedImage.toComposeImageBitmap()
}
override fun getIcon(fileName: String): IconSource {
val extension = fileName.substringAfterLast('.', "")
val imageBitmap = getIconOfFileExtension(extension)
?: return icons.file
return IconSource.PainterIconSource(
BitmapPainter(imageBitmap),
false
)
}
@Composable
override fun rememberIcon(fileName: String): IconSource {
return getIcon(fileName)
}
}

View File

@ -41,6 +41,15 @@ sealed interface IconSource {
override fun rememberPainter(): Painter = rememberVectorPainter(value)
}
@Immutable
data class PainterIconSource(
override val value: Painter,
override val requiredTint: Boolean,
) : IconSource {
@Composable
override fun rememberPainter(): Painter = value
}
companion object
}