mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[GUI] Update image handling to use SvgImage for media logos
This commit is contained in:
@@ -30,6 +30,7 @@
|
|||||||
<PackageReference Include="Sentry"/>
|
<PackageReference Include="Sentry"/>
|
||||||
<PackageReference Include="Avalonia"/>
|
<PackageReference Include="Avalonia"/>
|
||||||
<PackageReference Include="Avalonia.Desktop"/>
|
<PackageReference Include="Avalonia.Desktop"/>
|
||||||
|
<PackageReference Include="Svg.Controls.Avalonia"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Aaru.Core\Aaru.Core.csproj"/>
|
<ProjectReference Include="..\Aaru.Core\Aaru.Core.csproj"/>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using Aaru.CommonTypes.Interfaces;
|
using Aaru.CommonTypes.Interfaces;
|
||||||
using Aaru.Gui.ViewModels.Panels;
|
using Aaru.Gui.ViewModels.Panels;
|
||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media;
|
||||||
|
|
||||||
namespace Aaru.Gui.Models;
|
namespace Aaru.Gui.Models;
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ public sealed class ImageModel : RootModel
|
|||||||
|
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
public string FileName { get; set; }
|
public string FileName { get; set; }
|
||||||
public Bitmap Icon { get; set; }
|
public IImage Icon { get; set; }
|
||||||
public ObservableCollection<RootModel> PartitionSchemesOrFileSystems { get; }
|
public ObservableCollection<RootModel> PartitionSchemesOrFileSystems { get; }
|
||||||
public IMediaImage Image { get; set; }
|
public IMediaImage Image { get; set; }
|
||||||
public ImageInfoViewModel ViewModel { get; set; }
|
public ImageInfoViewModel ViewModel { get; set; }
|
||||||
|
|||||||
@@ -51,8 +51,10 @@ using Aaru.Gui.Views.Windows;
|
|||||||
using Aaru.Helpers;
|
using Aaru.Helpers;
|
||||||
using Aaru.Localization;
|
using Aaru.Localization;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Media;
|
||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media.Imaging;
|
||||||
using Avalonia.Platform;
|
using Avalonia.Platform;
|
||||||
|
using Avalonia.Svg;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using Humanizer;
|
using Humanizer;
|
||||||
using Humanizer.Bytes;
|
using Humanizer.Bytes;
|
||||||
@@ -104,10 +106,13 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
|||||||
var genericFolderIcon =
|
var genericFolderIcon =
|
||||||
new Bitmap(AssetLoader.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/inode-directory.png")));
|
new Bitmap(AssetLoader.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/inode-directory.png")));
|
||||||
|
|
||||||
var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{imageFormat.Info.MediaType}.png");
|
var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{imageFormat.Info.MediaType}.svg");
|
||||||
|
|
||||||
MediaLogo = AssetLoader.Exists(mediaResource)
|
MediaLogo = AssetLoader.Exists(mediaResource)
|
||||||
? new Bitmap(AssetLoader.Open(mediaResource))
|
? new SvgImage
|
||||||
|
{
|
||||||
|
Source = SvgSource.Load(AssetLoader.Open(mediaResource))
|
||||||
|
}
|
||||||
: imageFormat.Info.MetadataMediaType == MetadataMediaType.BlockMedia
|
: imageFormat.Info.MetadataMediaType == MetadataMediaType.BlockMedia
|
||||||
? genericHddIcon
|
? genericHddIcon
|
||||||
: imageFormat.Info.MetadataMediaType == MetadataMediaType.OpticalDisc
|
: imageFormat.Info.MetadataMediaType == MetadataMediaType.OpticalDisc
|
||||||
@@ -237,9 +242,8 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(imageFormat.Info.ReadableMediaTags is { Count: > 0 })
|
if(imageFormat.Info.ReadableMediaTags is { Count: > 0 })
|
||||||
{
|
foreach(MediaTagType tag in imageFormat.Info.ReadableMediaTags.Order())
|
||||||
foreach(MediaTagType tag in imageFormat.Info.ReadableMediaTags.Order()) MediaTagsList.Add(tag.Humanize());
|
MediaTagsList.Add(tag.Humanize());
|
||||||
}
|
|
||||||
|
|
||||||
if(imageFormat.Info.ReadableSectorTags is { Count: > 0 })
|
if(imageFormat.Info.ReadableSectorTags is { Count: > 0 })
|
||||||
{
|
{
|
||||||
@@ -758,8 +762,9 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(opticalMediaImage.Sessions is { Count: > 0 })
|
if(opticalMediaImage.Sessions is { Count: > 0 })
|
||||||
foreach(Session session in opticalMediaImage.Sessions)
|
{
|
||||||
Sessions.Add(session);
|
foreach(Session session in opticalMediaImage.Sessions) Sessions.Add(session);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
@@ -769,8 +774,9 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(opticalMediaImage.Tracks is { Count: > 0 })
|
if(opticalMediaImage.Tracks is { Count: > 0 })
|
||||||
foreach(Track track in opticalMediaImage.Tracks)
|
{
|
||||||
Tracks.Add(track);
|
foreach(Track track in opticalMediaImage.Tracks) Tracks.Add(track);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
@@ -809,7 +815,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
|||||||
public XboxInfo XboxInfo { get; }
|
public XboxInfo XboxInfo { get; }
|
||||||
public PcmciaInfo PcmciaInfo { get; }
|
public PcmciaInfo PcmciaInfo { get; }
|
||||||
public SdMmcInfo SdMmcInfo { get; }
|
public SdMmcInfo SdMmcInfo { get; }
|
||||||
public Bitmap MediaLogo { get; }
|
public IImage MediaLogo { get; }
|
||||||
public string ImagePathText { get; }
|
public string ImagePathText { get; }
|
||||||
public string FilterText { get; }
|
public string FilterText { get; }
|
||||||
public string ImageIdentifiedText { get; }
|
public string ImageIdentifiedText { get; }
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ using Avalonia.Controls.ApplicationLifetimes;
|
|||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media.Imaging;
|
||||||
using Avalonia.Platform;
|
using Avalonia.Platform;
|
||||||
using Avalonia.Platform.Storage;
|
using Avalonia.Platform.Storage;
|
||||||
|
using Avalonia.Svg;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
@@ -147,14 +148,14 @@ public partial class MainWindowViewModel : ViewModelBase
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case PartitionModel partitionModel:
|
case PartitionModel partitionModel:
|
||||||
ContentPanel = new Aaru.Gui.Views.Panels.Partition
|
ContentPanel = new Views.Panels.Partition
|
||||||
{
|
{
|
||||||
DataContext = partitionModel.ViewModel
|
DataContext = partitionModel.ViewModel
|
||||||
};
|
};
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case FileSystemModel fileSystemModel:
|
case FileSystemModel fileSystemModel:
|
||||||
ContentPanel = new Aaru.Gui.Views.Panels.FileSystem
|
ContentPanel = new Views.Panels.FileSystem
|
||||||
{
|
{
|
||||||
DataContext = fileSystemModel.ViewModel
|
DataContext = fileSystemModel.ViewModel
|
||||||
};
|
};
|
||||||
@@ -239,13 +240,16 @@ public partial class MainWindowViewModel : ViewModelBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create image model with appropriate icon based on media type
|
// Create image model with appropriate icon based on media type
|
||||||
var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{imageFormat.Info.MediaType}.png");
|
var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{imageFormat.Info.MediaType}.svg");
|
||||||
|
|
||||||
var imageModel = new ImageModel
|
var imageModel = new ImageModel
|
||||||
{
|
{
|
||||||
Path = result[0].Path.LocalPath,
|
Path = result[0].Path.LocalPath,
|
||||||
Icon = AssetLoader.Exists(mediaResource)
|
Icon = AssetLoader.Exists(mediaResource)
|
||||||
? new Bitmap(AssetLoader.Open(mediaResource))
|
? new SvgImage
|
||||||
|
{
|
||||||
|
Source = SvgSource.Load(AssetLoader.Open(mediaResource))
|
||||||
|
}
|
||||||
: imageFormat.Info.MetadataMediaType == MetadataMediaType.BlockMedia
|
: imageFormat.Info.MetadataMediaType == MetadataMediaType.BlockMedia
|
||||||
? _genericHddIcon
|
? _genericHddIcon
|
||||||
: imageFormat.Info.MetadataMediaType == MetadataMediaType.OpticalDisc
|
: imageFormat.Info.MetadataMediaType == MetadataMediaType.OpticalDisc
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
<PackageVersion Include="Spectre.Console" Version="0.52.0"/>
|
<PackageVersion Include="Spectre.Console" Version="0.52.0"/>
|
||||||
<PackageVersion Include="Spectre.Console.Cli" Version="0.52.0"/>
|
<PackageVersion Include="Spectre.Console.Cli" Version="0.52.0"/>
|
||||||
<PackageVersion Include="Spectre.Console.Json" Version="0.52.0"/>
|
<PackageVersion Include="Spectre.Console.Json" Version="0.52.0"/>
|
||||||
|
<PackageVersion Include="Svg.Controls.Avalonia" Version="11.3.6.2"/>
|
||||||
<PackageVersion Include="System.Collections" Version="4.3.0"/>
|
<PackageVersion Include="System.Collections" Version="4.3.0"/>
|
||||||
<PackageVersion Include="System.ComponentModel.Annotations" Version="6.0.0-preview.4.21253.7"/>
|
<PackageVersion Include="System.ComponentModel.Annotations" Version="6.0.0-preview.4.21253.7"/>
|
||||||
<PackageVersion Include="System.Diagnostics.Debug" Version="4.3.0"/>
|
<PackageVersion Include="System.Diagnostics.Debug" Version="4.3.0"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user