Skip to content

Commit c19f829

Browse files
authored
Feature: Switched away from GetThumbnailAsync API (#14423)
1 parent 246ddac commit c19f829

20 files changed

+78
-173
lines changed

src/Files.App/Constants.cs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -124,29 +124,26 @@ public static class GridViewBrowser
124124
{
125125
public const int GridViewIncrement = 20;
126126

127-
// Max achievable ctrl + scroll, not a default layout size
128-
public const int GridViewSizeMax = 300;
129-
130127
public const int GridViewSizeLarge = 220;
131128

132129
public const int GridViewSizeMedium = 160;
133130

134131
public const int GridViewSizeSmall = 100;
135132

136-
public const int TilesView = 260;
133+
public const int TilesView = 100;
137134
}
135+
}
138136

139-
public static class DetailsLayoutBrowser
140-
{
141-
public const int DetailsViewSize = 32;
142-
}
137+
// Default icon sizes that are available for files and folders
138+
public static class DefaultIconSizes
139+
{
140+
public const int Small = 16;
143141

144-
public static class ColumnViewBrowser
145-
{
146-
public const int ColumnViewSize = 32;
142+
public const int Large = 32;
147143

148-
public const int ColumnViewSizeSmall = 24;
149-
}
144+
public const int ExtraLarge = 48;
145+
146+
public const int Jumbo = 256;
150147
}
151148

152149
public static class Widgets
@@ -155,8 +152,6 @@ public static class Drives
155152
{
156153
public const float LowStorageSpacePercentageThreshold = 90.0f;
157154
}
158-
159-
public const int WidgetIconSize = 256;
160155
}
161156

162157
public static class LocalSettings

src/Files.App/Data/Items/DriveItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ public async Task LoadThumbnailAsync(bool isSidebar = false)
324324
else
325325
{
326326
if (!string.IsNullOrEmpty(DeviceID) && !string.Equals(DeviceID, "network-folder"))
327-
IconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(DeviceID, 16);
327+
IconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(DeviceID, Constants.DefaultIconSizes.Large, false, true);
328328

329329
if (Root is not null)
330330
{

src/Files.App/Data/Models/ItemViewModel.cs

Lines changed: 31 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public GitProperties EnabledGitProperties
8383
(!gitItem.StatusPropertiesInitialized && value is GitProperties.All or GitProperties.Status
8484
|| !gitItem.CommitPropertiesInitialized && value is GitProperties.All or GitProperties.Commit))
8585
{
86-
await LoadGitPropertiesAsync(gitItem);
86+
await LoadGitPropertiesAsync(gitItem);
8787
}
8888
});
8989
}
@@ -944,136 +944,54 @@ private async Task<BitmapImage> GetShieldIcon()
944944
private async Task LoadItemThumbnailAsync(ListedItem item, uint thumbnailSize = 96, IStorageItem? matchingStorageItem = null)
945945
{
946946
var wasIconLoaded = false;
947+
948+
947949
if (item.IsLibrary || item.PrimaryItemAttribute == StorageItemTypes.File || item.IsArchive)
948950
{
949-
if (UserSettingsService.FoldersSettingsService.ShowThumbnails &&
950-
!item.IsShortcut && !item.IsHiddenItem && !FtpHelpers.IsFtpPath(item.ItemPath))
951+
var getIconOnly = UserSettingsService.FoldersSettingsService.ShowThumbnails == false;
952+
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, false, getIconOnly);
953+
if (iconInfo.IconData is not null)
951954
{
952-
var matchingStorageFile = matchingStorageItem?.AsBaseStorageFile() ?? await GetFileFromPathAsync(item.ItemPath);
953-
954-
if (matchingStorageFile is not null)
955+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
955956
{
956-
// SingleItem returns image thumbnails in the correct aspect ratio for the grid layouts
957-
// ListView is used for the details and columns layout
958-
var thumbnailMode = thumbnailSize < 96 ? ThumbnailMode.ListView : ThumbnailMode.SingleItem;
959-
960-
using StorageItemThumbnail Thumbnail = await FilesystemTasks.Wrap(() => matchingStorageFile.GetThumbnailAsync(thumbnailMode, thumbnailSize, ThumbnailOptions.ResizeThumbnail).AsTask());
961-
962-
if (!(Thumbnail is null || Thumbnail.Size == 0 || Thumbnail.OriginalHeight == 0 || Thumbnail.OriginalWidth == 0))
957+
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
958+
if (!string.IsNullOrEmpty(item.FileExtension) &&
959+
!item.IsShortcut && !item.IsExecutable &&
960+
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
963961
{
964-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
965-
{
966-
var img = new BitmapImage();
967-
img.DecodePixelType = DecodePixelType.Logical;
968-
img.DecodePixelWidth = (int)thumbnailSize;
969-
await img.SetSourceAsync(Thumbnail);
970-
item.FileImage = img;
971-
if (!string.IsNullOrEmpty(item.FileExtension) &&
972-
!item.IsShortcut && !item.IsExecutable &&
973-
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
974-
{
975-
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
976-
}
977-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal);
978-
wasIconLoaded = true;
962+
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
979963
}
980-
981-
var overlayInfo = await FileThumbnailHelper.LoadOverlayAsync(item.ItemPath, thumbnailSize);
982-
if (overlayInfo is not null)
983-
{
984-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
985-
{
986-
item.IconOverlay = await overlayInfo.ToBitmapAsync();
987-
item.ShieldIcon = await GetShieldIcon();
988-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
989-
}
990-
}
964+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
991965
}
992966

993-
if (!wasIconLoaded)
967+
if (iconInfo.OverlayData is not null)
994968
{
995-
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, false);
996-
if (iconInfo.IconData is not null)
969+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
997970
{
998-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
999-
{
1000-
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
1001-
if (!string.IsNullOrEmpty(item.FileExtension) &&
1002-
!item.IsShortcut && !item.IsExecutable &&
1003-
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
1004-
{
1005-
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
1006-
}
1007-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1008-
}
1009-
1010-
if (iconInfo.OverlayData is not null)
1011-
{
1012-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1013-
{
1014-
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
1015-
item.ShieldIcon = await GetShieldIcon();
1016-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1017-
}
971+
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
972+
item.ShieldIcon = await GetShieldIcon();
973+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1018974
}
1019975
}
1020976
else
1021977
{
1022-
if (!item.IsShortcut && !item.IsHiddenItem && !FtpHelpers.IsFtpPath(item.ItemPath))
978+
var getIconOnly = UserSettingsService.FoldersSettingsService.ShowThumbnails == false || thumbnailSize < 80;
979+
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, true, getIconOnly);
980+
if (iconInfo.IconData is not null)
1023981
{
1024-
var matchingStorageFolder = matchingStorageItem?.AsBaseStorageFolder() ?? await GetFolderFromPathAsync(item.ItemPath);
1025-
if (matchingStorageFolder is not null)
982+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1026983
{
1027-
// SingleItem returns image thumbnails in the correct aspect ratio for the grid layouts
1028-
// ListView is used for the details and columns layout
1029-
var thumbnailMode = thumbnailSize < 96 ? ThumbnailMode.ListView : ThumbnailMode.SingleItem;
1030-
1031-
// We use ReturnOnlyIfCached because otherwise folders thumbnails have a black background, this has the downside the folder previews don't work
1032-
using StorageItemThumbnail Thumbnail = await FilesystemTasks.Wrap(() => matchingStorageFolder.GetThumbnailAsync(thumbnailMode, thumbnailSize, ThumbnailOptions.ReturnOnlyIfCached).AsTask());
1033-
if (!(Thumbnail is null || Thumbnail.Size == 0 || Thumbnail.OriginalHeight == 0 || Thumbnail.OriginalWidth == 0))
1034-
{
1035-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1036-
{
1037-
var img = new BitmapImage();
1038-
img.DecodePixelType = DecodePixelType.Logical;
1039-
img.DecodePixelWidth = (int)thumbnailSize;
1040-
await img.SetSourceAsync(Thumbnail);
1041-
item.FileImage = img;
1042-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal);
1043-
wasIconLoaded = true;
1044-
}
1045-
1046-
var overlayInfo = await FileThumbnailHelper.LoadOverlayAsync(item.ItemPath, thumbnailSize);
1047-
if (overlayInfo is not null)
1048-
{
1049-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1050-
{
1051-
item.IconOverlay = await overlayInfo.ToBitmapAsync();
1052-
item.ShieldIcon = await GetShieldIcon();
1053-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1054-
}
1055-
}
984+
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
985+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1056986
}
1057987

1058-
if (!wasIconLoaded)
988+
if (iconInfo.OverlayData is not null)
1059989
{
1060-
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, true);
1061-
if (iconInfo.IconData is not null)
990+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1062991
{
1063-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1064-
{
1065-
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
1066-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1067-
}
1068-
1069-
if (iconInfo.OverlayData is not null)
1070-
{
1071-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1072-
{
1073-
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
1074-
item.ShieldIcon = await GetShieldIcon();
1075-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1076-
}
992+
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
993+
item.ShieldIcon = await GetShieldIcon();
994+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1077995
}
1078996
}
1079997
}
@@ -1263,7 +1181,7 @@ public async Task LoadGitPropertiesAsync(GitItem gitItem)
12631181
{
12641182
var getStatus = EnabledGitProperties is GitProperties.All or GitProperties.Status && !gitItem.StatusPropertiesInitialized;
12651183
var getCommit = EnabledGitProperties is GitProperties.All or GitProperties.Commit && !gitItem.CommitPropertiesInitialized;
1266-
1184+
12671185
if (!getStatus && !getCommit)
12681186
return;
12691187

@@ -1331,7 +1249,7 @@ await SafetyExtensions.IgnoreExceptions(() =>
13311249
ImageSource? groupImage = null;
13321250
if (item.PrimaryItemAttribute != StorageItemTypes.Folder || item.IsArchive)
13331251
{
1334-
var headerIconInfo = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(item.ItemPath, 64u, false);
1252+
var headerIconInfo = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(item.ItemPath, Constants.DefaultIconSizes.ExtraLarge, false, true);
13351253

13361254
if (headerIconInfo is not null && !item.IsShortcut)
13371255
groupImage = await dispatcherQueue.EnqueueOrInvokeAsync(() => headerIconInfo.ToBitmapAsync(), Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);

src/Files.App/Data/Models/SidebarPinnedModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public async Task<LocationItem> CreateLocationItemFromPathAsync(string path)
111111

112112
if (locationItem.IconData is null)
113113
{
114-
locationItem.IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(path, 48u);
114+
locationItem.IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(path, 48u, false, true);
115115

116116
if (locationItem.IconData is not null)
117117
locationItem.Icon = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => locationItem.IconData.ToBitmapAsync());

src/Files.App/Helpers/Layout/LayoutPreferencesManager.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public int GridViewSize
9797
else // Size up from tiles to grid
9898
{
9999
// Set grid size to allow immediate UI update
100-
var newValue = (LayoutMode == FolderLayoutModes.TilesView) ? Constants.Browser.GridViewBrowser.GridViewSizeSmall : (value <= Constants.Browser.GridViewBrowser.GridViewSizeMax) ? value : Constants.Browser.GridViewBrowser.GridViewSizeMax;
100+
var newValue = (LayoutMode == FolderLayoutModes.TilesView) ? Constants.Browser.GridViewBrowser.GridViewSizeSmall : (value <= Constants.Browser.GridViewBrowser.GridViewSizeLarge) ? value : Constants.Browser.GridViewBrowser.GridViewSizeLarge;
101101
SetProperty(ref LayoutPreferencesItem.GridViewSize, newValue, nameof(GridViewSize));
102102

103103
// Only update layout mode if it isn't already in grid view
@@ -113,7 +113,7 @@ public int GridViewSize
113113
}
114114

115115
// Don't request a grid resize if it is already at the max size
116-
if (value < Constants.Browser.GridViewBrowser.GridViewSizeMax)
116+
if (value < Constants.Browser.GridViewBrowser.GridViewSizeLarge)
117117
GridViewSizeChangeRequested?.Invoke(this, EventArgs.Empty);
118118
}
119119
}
@@ -308,18 +308,18 @@ public uint GetIconSize()
308308
return LayoutMode switch
309309
{
310310
FolderLayoutModes.DetailsView
311-
=> Constants.Browser.DetailsLayoutBrowser.DetailsViewSize,
311+
=> Constants.DefaultIconSizes.Large,
312312
FolderLayoutModes.ColumnView
313-
=> Constants.Browser.ColumnViewBrowser.ColumnViewSize,
313+
=> Constants.DefaultIconSizes.Large,
314314
FolderLayoutModes.TilesView
315-
=> Constants.Browser.GridViewBrowser.GridViewSizeSmall,
315+
=> Constants.Browser.GridViewBrowser.TilesView,
316316
_ when GridViewSize <= Constants.Browser.GridViewBrowser.GridViewSizeSmall
317317
=> Constants.Browser.GridViewBrowser.GridViewSizeSmall,
318318
_ when GridViewSize <= Constants.Browser.GridViewBrowser.GridViewSizeMedium
319319
=> Constants.Browser.GridViewBrowser.GridViewSizeMedium,
320320
_ when GridViewSize <= Constants.Browser.GridViewBrowser.GridViewSizeLarge
321321
=> Constants.Browser.GridViewBrowser.GridViewSizeLarge,
322-
_ => Constants.Browser.GridViewBrowser.GridViewSizeMax,
322+
_ => Constants.Browser.GridViewBrowser.GridViewSizeLarge,
323323
};
324324
}
325325

src/Files.App/UserControls/Widgets/DrivesWidget.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public async Task LoadCardThumbnailAsync()
4141
{
4242
// Try load thumbnail using ListView mode
4343
if (thumbnailData is null || thumbnailData.Length == 0)
44-
thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.Path, Convert.ToUInt32(Constants.Widgets.WidgetIconSize), Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail);
44+
thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.Path, Convert.ToUInt32(Constants.DefaultIconSizes.Jumbo), Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail);
4545

4646
// Thumbnail is still null, use DriveItem icon (loaded using SingleItem mode)
4747
if (thumbnailData is null || thumbnailData.Length == 0)
@@ -52,7 +52,7 @@ public async Task LoadCardThumbnailAsync()
5252

5353
// Thumbnail data is valid, set the item icon
5454
if (thumbnailData is not null && thumbnailData.Length > 0)
55-
Thumbnail = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => thumbnailData.ToBitmapAsync(Constants.Widgets.WidgetIconSize));
55+
Thumbnail = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => thumbnailData.ToBitmapAsync(Constants.DefaultIconSizes.Jumbo));
5656
}
5757

5858
public int CompareTo(DriveCardItem? other) => Item.Path.CompareTo(other?.Item?.Path);

src/Files.App/UserControls/Widgets/QuickAccessWidget.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,11 @@ public async Task LoadCardThumbnailAsync()
8080
{
8181
if (thumbnailData is null || thumbnailData.Length == 0)
8282
{
83-
thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Path, Convert.ToUInt32(Constants.Widgets.WidgetIconSize), Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail);
83+
thumbnailData = await FileThumbnailHelper.LoadIconFromPathAsync(Path, Convert.ToUInt32(Constants.DefaultIconSizes.Jumbo), Windows.Storage.FileProperties.ThumbnailMode.SingleItem, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail);
8484
}
8585
if (thumbnailData is not null && thumbnailData.Length > 0)
8686
{
87-
Thumbnail = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => thumbnailData.ToBitmapAsync(Constants.Widgets.WidgetIconSize));
87+
Thumbnail = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => thumbnailData.ToBitmapAsync(Constants.DefaultIconSizes.Jumbo));
8888
}
8989
}
9090
}

src/Files.App/Utils/Cloud/CloudDrivesManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static async Task UpdateDrivesAsync()
6363
ShowProperties = true,
6464
};
6565

66-
var iconData = provider.IconData ?? await FileThumbnailHelper.LoadIconWithoutOverlayAsync(provider.SyncFolder, 24);
66+
var iconData = provider.IconData ?? await FileThumbnailHelper.LoadIconWithoutOverlayAsync(provider.SyncFolder, Constants.DefaultIconSizes.Large, false, true);
6767
if (iconData is not null)
6868
{
6969
cloudProviderItem.IconData = iconData;

src/Files.App/Utils/Library/LibraryLocationItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public async Task<bool> CheckDefaultSaveFolderAccess()
4646

4747
public async Task LoadLibraryIconAsync()
4848
{
49-
IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Path, 24u);
49+
IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Path, Constants.DefaultIconSizes.Large, false, true);
5050

5151
if (IconData is not null)
5252
Icon = await IconData.ToBitmapAsync();

src/Files.App/Utils/RecentItem/RecentItem.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,8 @@ public RecentItem(ShellFileItem fileItem) : base()
7676

7777
public async Task LoadRecentItemIconAsync()
7878
{
79-
var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(RecentPath, 96u, ThumbnailMode.SingleItem, ThumbnailOptions.ResizeThumbnail);
80-
if (iconData is null)
81-
{
82-
EmptyImgVis = true;
83-
}
84-
else
79+
var iconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(RecentPath, Constants.DefaultIconSizes.Large, false, false);
80+
if (iconData is not null)
8581
{
8682
EmptyImgVis = false;
8783
FileImg = await iconData.ToBitmapAsync();

src/Files.App/Utils/Shell/Win32API.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ private class IconAndOverlayCacheEntry
228228

229229
private static readonly object _lock = new object();
230230

231-
public static (byte[]? icon, byte[]? overlay) GetFileIconAndOverlay(string path, int thumbnailSize, bool isFolder, bool getOverlay = true, bool onlyGetOverlay = false)
231+
public static (byte[]? icon, byte[]? overlay) GetFileIconAndOverlay(string path, int thumbnailSize, bool isFolder, bool getIconOnly, bool getOverlay = true, bool onlyGetOverlay = false)
232232
{
233233
byte[]? iconData = null, overlayData = null;
234234
var entry = _iconAndOverlayCache.GetOrAdd(path, _ => new());
@@ -256,7 +256,9 @@ public static (byte[]? icon, byte[]? overlay) GetFileIconAndOverlay(string path,
256256
if (shellItem is not null && shellItem.IShellItem is Shell32.IShellItemImageFactory fctry)
257257
{
258258
var flags = Shell32.SIIGBF.SIIGBF_BIGGERSIZEOK;
259-
if (thumbnailSize < 80) flags |= Shell32.SIIGBF.SIIGBF_ICONONLY;
259+
260+
if (getIconOnly)
261+
flags |= Shell32.SIIGBF.SIIGBF_ICONONLY;
260262

261263
var hres = fctry.GetImage(new SIZE(thumbnailSize, thumbnailSize), flags, out var hbitmap);
262264
if (hres == HRESULT.S_OK)

0 commit comments

Comments
 (0)