Fallback icon set now has general MIME icons support

Specifically, it supports all the XDG x-generic icons.
This commit is contained in:
2024-08-19 03:18:37 -04:00
parent 894f34e3ef
commit 4fa29f2719
3 changed files with 58 additions and 10 deletions

View File

@@ -6,6 +6,7 @@ import _ "embed"
import _ "image/png"
import "git.tebibyte.media/tomo/tomo"
import "git.tebibyte.media/tomo/tomo/data"
import "git.tebibyte.media/tomo/nasin/internal/util"
import "git.tebibyte.media/tomo/tomo/canvas"
import "git.tebibyte.media/tomo/backend/style"
@@ -14,6 +15,26 @@ var atlasSmallBytes []byte
//go:embed assets/icons-large.png
var atlasLargeBytes []byte
const (
iconApplicationXGeneric = tomo.Icon("application/x-generic")
iconApplicationXExecutable = tomo.Icon("application/x-executable")
iconAudioXGeneric = tomo.Icon("audio/x-generic")
iconFontXGeneric = tomo.Icon("font/x-generic")
iconImageXGeneric = tomo.Icon("image/x-generic")
iconModelXGeneric = tomo.Icon("model/x-generic")
iconPackageXGeneric = tomo.Icon("package/x-generic")
iconTextXGeneric = tomo.Icon("text/x-generic")
iconTextHtml = tomo.Icon("text/html")
iconTextXGenericTemplate = tomo.Icon("text/x-generic-template")
iconTextXScript = tomo.Icon("text/x-script")
iconVideoXGeneric = tomo.Icon("video/x-generic")
iconXOfficeAddressBook = tomo.Icon("x-office-address-book")
iconXOfficeCalendar = tomo.Icon("x-office-calendar")
iconXOfficeDocument = tomo.Icon("x-office-document")
iconXOfficePresentation = tomo.Icon("x-office-presentation")
iconXOfficeSpreadsheet = tomo.Icon("x-office-spreadsheet")
)
func generateSource (data []byte, width int) map[tomo.Icon] canvas.Texture {
atlasImage, _, err := image.Decode(bytes.NewReader(data))
if err != nil { panic(err) }
@@ -37,7 +58,23 @@ func generateSource (data []byte, width int) map[tomo.Icon] canvas.Texture {
}
col(tomo.IconUnknown)
col(tomo.Icon("File"))
col(iconApplicationXGeneric)
col(iconApplicationXExecutable)
col(iconAudioXGeneric)
col(iconFontXGeneric)
col(iconImageXGeneric)
col(iconModelXGeneric)
col(iconPackageXGeneric)
col(iconTextXGeneric)
col(iconTextHtml)
col(iconTextXGenericTemplate)
col(iconTextXScript)
col(iconVideoXGeneric)
col(iconXOfficeAddressBook)
col(iconXOfficeCalendar)
col(iconXOfficeDocument)
col(iconXOfficePresentation)
col(iconXOfficeSpreadsheet)
row()
// actions
@@ -450,9 +487,16 @@ func (this *iconSet) Icon (icon tomo.Icon, size tomo.IconSize) canvas.Texture {
func (this *iconSet) MimeIcon (mime data.Mime, size tomo.IconSize) canvas.Texture {
this.ensure()
source := this.selectSource(size)
if icon, ok := source[tomo.Icon(mime.String())]; ok {
return icon
}
if mime == data.M("inode", "directory") {
return source[tomo.IconPlaceDirectory]
} else if icon, ok := source[tomo.Icon(util.GeneralizeXDGIconMimeType(mime).String())]; ok {
return icon
} else {
return source[tomo.Icon("File")]
return source[tomo.Icon(iconApplicationXGeneric)]
}
}