diff --git a/src/Files.App/Services/ImagingService.cs b/src/Files.App/Services/ImagingService.cs index 4f5a45de7941..60595e082739 100644 --- a/src/Files.App/Services/ImagingService.cs +++ b/src/Files.App/Services/ImagingService.cs @@ -15,7 +15,7 @@ internal sealed class ImagingService : IImageService if (storable is not ILocatableStorable locatableStorable) return null; - var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(locatableStorable.Path, 24u, ThumbnailMode.ListView); + var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(locatableStorable.Path, 24u, ThumbnailMode.ListView, ThumbnailOptions.ResizeThumbnail); if (iconData is null) return null; @@ -30,7 +30,7 @@ internal sealed class ImagingService : IImageService public async Task GetImageModelFromPathAsync(string filePath, uint thumbnailSize = 64) { - if (await FileThumbnailHelper.LoadIconFromPathAsync(filePath, thumbnailSize, ThumbnailMode.ListView) is byte[] imageBuffer) + if (await FileThumbnailHelper.LoadIconFromPathAsync(filePath, thumbnailSize, ThumbnailMode.ListView, ThumbnailOptions.ResizeThumbnail) is byte[] imageBuffer) return await GetImageModelFromDataAsync(imageBuffer); return null; diff --git a/src/Files.App/UserControls/Widgets/DrivesWidget.xaml.cs b/src/Files.App/UserControls/Widgets/DrivesWidget.xaml.cs index 7b7c585b14d8..60a18fd95fa4 100644 --- a/src/Files.App/UserControls/Widgets/DrivesWidget.xaml.cs +++ b/src/Files.App/UserControls/Widgets/DrivesWidget.xaml.cs @@ -41,7 +41,7 @@ public async Task LoadCardThumbnailAsync() { // Try load thumbnail using ListView mode if (thumbnailData is null || thumbnailData.Length == 0) - thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.Path, Convert.ToUInt32(Constants.Widgets.WidgetIconSize), Windows.Storage.FileProperties.ThumbnailMode.SingleItem); + thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.Path, Convert.ToUInt32(Constants.Widgets.WidgetIconSize), Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail); // Thumbnail is still null, use DriveItem icon (loaded using SingleItem mode) if (thumbnailData is null || thumbnailData.Length == 0) diff --git a/src/Files.App/UserControls/Widgets/QuickAccessWidget.xaml.cs b/src/Files.App/UserControls/Widgets/QuickAccessWidget.xaml.cs index 8b52167891b2..13fdd9c52eb9 100644 --- a/src/Files.App/UserControls/Widgets/QuickAccessWidget.xaml.cs +++ b/src/Files.App/UserControls/Widgets/QuickAccessWidget.xaml.cs @@ -79,7 +79,7 @@ public async Task LoadCardThumbnailAsync() { if (thumbnailData is null || thumbnailData.Length == 0) { - thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Path, Convert.ToUInt32(Constants.Widgets.WidgetIconSize), Windows.Storage.FileProperties.ThumbnailMode.SingleItem); + thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Path, Convert.ToUInt32(Constants.Widgets.WidgetIconSize), Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail); } if (thumbnailData is not null && thumbnailData.Length > 0) { diff --git a/src/Files.App/Utils/RecentItem/RecentItem.cs b/src/Files.App/Utils/RecentItem/RecentItem.cs index 6d1445ae85c3..0133ce1909ed 100644 --- a/src/Files.App/Utils/RecentItem/RecentItem.cs +++ b/src/Files.App/Utils/RecentItem/RecentItem.cs @@ -76,7 +76,7 @@ public RecentItem(ShellFileItem fileItem) : base() public async Task LoadRecentItemIcon() { - var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(RecentPath, 96u, ThumbnailMode.SingleItem); + var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(RecentPath, 96u, ThumbnailMode.SingleItem, ThumbnailOptions.ResizeThumbnail); if (iconData is null) { EmptyImgVis = true; diff --git a/src/Files.App/Utils/Shell/ContextMenu.cs b/src/Files.App/Utils/Shell/ContextMenu.cs index cbb0112fa6ac..a24cd8e2e204 100644 --- a/src/Files.App/Utils/Shell/ContextMenu.cs +++ b/src/Files.App/Utils/Shell/ContextMenu.cs @@ -236,6 +236,10 @@ private void EnumMenuItems(HMENU hMenu, List menuItemsResu if (bitmap is not null) { + // Make the icon background transparent + Color backgroundColor = bitmap.GetPixel(0, 0); + bitmap.MakeTransparent(backgroundColor); + byte[] bitmapData = (byte[])new ImageConverter().ConvertTo(bitmap, typeof(byte[])); menuItem.Icon = bitmapData; } diff --git a/src/Files.App/Utils/Storage/Helpers/FileThumbnailHelper.cs b/src/Files.App/Utils/Storage/Helpers/FileThumbnailHelper.cs index 77ecda3ff4d3..4abbe1c54d13 100644 --- a/src/Files.App/Utils/Storage/Helpers/FileThumbnailHelper.cs +++ b/src/Files.App/Utils/Storage/Helpers/FileThumbnailHelper.cs @@ -45,14 +45,14 @@ public static async Task LoadIconFromStorageItemAsync(IStorageItem item, return null; } - public static async Task LoadIconFromPathAsync(string filePath, uint thumbnailSize, ThumbnailMode thumbnailMode, bool isFolder = false) + public static async Task LoadIconFromPathAsync(string filePath, uint thumbnailSize, ThumbnailMode thumbnailMode, ThumbnailOptions thumbnailOptions, bool isFolder = false) { if (!FileExtensionHelpers.IsShortcutOrUrlFile(filePath)) { var item = await StorageHelpers.ToStorageItem(filePath); if (item is not null) { - var iconData = await LoadIconFromStorageItemAsync(item, thumbnailSize, thumbnailMode, ThumbnailOptions.ResizeThumbnail); + var iconData = await LoadIconFromStorageItemAsync(item, thumbnailSize, thumbnailMode, thumbnailOptions); if (iconData is not null) { return iconData; diff --git a/src/Files.App/Utils/Storage/Search/FolderSearch.cs b/src/Files.App/Utils/Storage/Search/FolderSearch.cs index d2f341d47d1b..9cc28d27cbe7 100644 --- a/src/Files.App/Utils/Storage/Search/FolderSearch.cs +++ b/src/Files.App/Utils/Storage/Search/FolderSearch.cs @@ -386,7 +386,7 @@ private ListedItem GetListedItemAsync(string itemPath, WIN32_FIND_DATA findData) } if (listedItem is not null && MaxItemCount > 0) // Only load icon for searchbox suggestions { - _ = FileThumbnailHelper.LoadIconFromPathAsync(listedItem.ItemPath, ThumbnailSize, ThumbnailMode.ListView, isFolder) + _ = FileThumbnailHelper.LoadIconFromPathAsync(listedItem.ItemPath, ThumbnailSize, ThumbnailMode.ListView, ThumbnailOptions.ResizeThumbnail, isFolder) .ContinueWith((t) => { if (t.IsCompletedSuccessfully && t.Result is not null) diff --git a/src/Files.App/ViewModels/MainPageViewModel.cs b/src/Files.App/ViewModels/MainPageViewModel.cs index 665f69ee69f3..f8f369f0d011 100644 --- a/src/Files.App/ViewModels/MainPageViewModel.cs +++ b/src/Files.App/ViewModels/MainPageViewModel.cs @@ -258,7 +258,7 @@ public async Task UpdateTabInfo(TabItem tabItem, object navigationArg) if (iconSource.ImageSource is null) { - var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(currentPath, 24u, Windows.Storage.FileProperties.ThumbnailMode.ListView, true); + var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(currentPath, 24u, Windows.Storage.FileProperties.ThumbnailMode.ListView, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail, true); if (iconData is not null) iconSource.ImageSource = await iconData.ToBitmapAsync(); } diff --git a/src/Files.App/ViewModels/Properties/Items/FileProperties.cs b/src/Files.App/ViewModels/Properties/Items/FileProperties.cs index 980c1651e2b8..8a2128798163 100644 --- a/src/Files.App/ViewModels/Properties/Items/FileProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/FileProperties.cs @@ -99,7 +99,7 @@ public override async Task GetSpecialProperties() ViewModel.ItemSizeOnDisk = NativeFileOperationsHelper.GetFileSizeOnDisk(Item.ItemPath)?.ToLongSizeString() ?? string.Empty; - var fileIconData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.ItemPath, 80, Windows.Storage.FileProperties.ThumbnailMode.DocumentsView, false); + var fileIconData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.ItemPath, 80, Windows.Storage.FileProperties.ThumbnailMode.DocumentsView, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail, false); if (fileIconData is not null) { ViewModel.IconData = fileIconData; diff --git a/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs b/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs index 87d427887c96..a81d97041c78 100644 --- a/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs @@ -74,7 +74,7 @@ public async override Task GetSpecialProperties() ViewModel.IsHidden = NativeFileOperationsHelper.HasFileAttribute( Item.ItemPath, System.IO.FileAttributes.Hidden); - var fileIconData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.ItemPath, 80, Windows.Storage.FileProperties.ThumbnailMode.SingleItem, true); + var fileIconData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.ItemPath, 80, Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale, true); if (fileIconData is not null) { ViewModel.IconData = fileIconData;