[vlc-commits] [Git][videolan/vlc][master] 19 commits: macosx: Use actual filetype icons in browse collection view items
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Mon Jan 9 21:03:09 UTC 2023
Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC
Commits:
aad3a0a2 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use actual filetype icons in browse collection view items
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
70fd9c8b by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use QuickLook to create thumbnails for collection view items in Browse
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
411afa9c by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add NSImage+VLCAdditions extension
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
9297c861 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add QuickLook preview image helper methods to NSImage extension
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
598b8691 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use NSImage extension QuickLook preview method to acquire file thumbnail in VLCMediaSourceCollectionViewItem
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
d5486fc9 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Rename dynamic library collection view item values in VLCLibraryUIUnits to be more accurate in their purpose
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
aa6f7ef9 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Fix blurriness in QuickLook previews used in VLCMediaSourceCollectionViewItem
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
b8a2bafd by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Fix blurry icons in browse collection view
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
a84bd4ce by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use NSImage extension QuickLook preview method to acquire file thumbnail for VLCInputItems in VLCLibraryTableCellView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
cb877531 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add thmbnailWithSize method to VLCInputItem
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
ec2a4380 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCInputItem's thumbnailWithSize method for placeholder image when representing VLCInputItems in VLCLibraryTableCellView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
ae6f92c2 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCInputItem's thumbnailWithSize method for placeholder image in VLCMediaSourceCollectionViewItem
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
4dea9612 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add thumbnailForInputItem method to VLCLibraryImageCache
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
a8076eda by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCLibraryImageCache to get VLCMediaSourceCollectionViewItem image
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
ee3ea76f by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCLibraryImageCache to get VLCLibraryTableCellView image for inputItem
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
7fce0792 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Make QLThumbnailImageCreate dictionary a literal
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
51074032 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Make sure qlThumbnailRef is released even if we cannot generate the QuickLook thumbnail
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
646f437a by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Generate thumbnail for VLCInputItem in concurrent thread in VLCLibraryTableCellView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
ef6f465b by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Generate thumbnail in concurrent thread in VLCMediaSourceCollectionViewItem
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
13 changed files:
- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- + modules/gui/macosx/extensions/NSImage+VLCAdditions.h
- + modules/gui/macosx/extensions/NSImage+VLCAdditions.m
- modules/gui/macosx/library/VLCInputItem.h
- modules/gui/macosx/library/VLCInputItem.m
- modules/gui/macosx/library/VLCLibraryCollectionViewDelegate.m
- modules/gui/macosx/library/VLCLibraryImageCache.h
- modules/gui/macosx/library/VLCLibraryImageCache.m
- modules/gui/macosx/library/VLCLibraryTableCellView.m
- modules/gui/macosx/library/VLCLibraryUIUnits.h
- modules/gui/macosx/library/VLCLibraryUIUnits.m
- modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m
Changes:
=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -77,6 +77,7 @@
1CCC89052078A3D500E5626F /* TextfieldPanel.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224151E4D2A9000833BE1 /* TextfieldPanel.xib */; };
1CCC89062078A3D500E5626F /* TimeSelectionPanel.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224161E4D2A9000833BE1 /* TimeSelectionPanel.xib */; };
1CFE8D591EA0D42A00E94451 /* VLCErrorWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */; };
+ 5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */; };
5317FE04294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5317FE03294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m */; };
5325C57D29302E6800B2B63A /* VLCLibraryAudioViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5325C57B29302E6800B2B63A /* VLCLibraryAudioViewController.m */; };
5362550D293FD639005D64FA /* VLCLibraryWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5362550C293FD639005D64FA /* VLCLibraryWindowController.m */; };
@@ -239,6 +240,8 @@
1CFE8D561EA0D3D300E94451 /* ErrorPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ErrorPanel.xib; sourceTree = "<group>"; };
1CFE8D571EA0D42A00E94451 /* VLCErrorWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCErrorWindowController.h; sourceTree = "<group>"; };
1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCErrorWindowController.m; sourceTree = "<group>"; };
+ 5307A6F32967859F001E0C6A /* NSImage+VLCAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSImage+VLCAdditions.h"; sourceTree = "<group>"; };
+ 5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSImage+VLCAdditions.m"; sourceTree = "<group>"; };
5317FE02294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewDelegate.h; sourceTree = "<group>"; };
5317FE03294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryCollectionViewDelegate.m; sourceTree = "<group>"; };
5317FE05294E8D1A001702F0 /* VLCLibraryCollectionViewDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewDataSource.h; sourceTree = "<group>"; };
@@ -1103,6 +1106,8 @@
7D404ABE2281892C00B28EF4 /* NSView+VLCAdditions.m */,
7DF0994D23E71E5B007CA6EE /* NSMenu+VLCAdditions.h */,
7DF0994E23E71E76007CA6EE /* NSMenu+VLCAdditions.m */,
+ 5307A6F32967859F001E0C6A /* NSImage+VLCAdditions.h */,
+ 5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */,
);
path = extensions;
sourceTree = "<group>";
@@ -1870,6 +1875,7 @@
7D67318622C8F4060000AD40 /* VLCMediaSourceCollectionViewItem.m in Sources */,
536283F0291146BC00640C15 /* VLCLibraryTableView.m in Sources */,
536283F1291146BC00640C15 /* VLCLibraryAlbumTracksDataSource.m in Sources */,
+ 5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */,
1CCC89042078A3D500E5626F /* StreamOutput.xib in Sources */,
536283F7291146BC00640C15 /* VLCLibraryNavigationState.m in Sources */,
1CCC89052078A3D500E5626F /* TextfieldPanel.xib in Sources */,
=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -23,6 +23,7 @@ libmacosx_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(guidir)' \
-Wl,-framework,QuartzCore \
-Wl,-framework,ScriptingBridge \
-Wl,-framework,WebKit \
+ -Wl,-framework,QuickLook \
-Wl,-weak_framework,MediaPlayer
if HAVE_SPARKLE
@@ -40,6 +41,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/extensions/NSColor+VLCAdditions.m \
gui/macosx/extensions/NSFont+VLCAdditions.h \
gui/macosx/extensions/NSFont+VLCAdditions.m \
+ gui/macosx/extensions/NSImage+VLCAdditions.h \
+ gui/macosx/extensions/NSImage+VLCAdditions.m \
gui/macosx/extensions/NSMenu+VLCAdditions.h \
gui/macosx/extensions/NSMenu+VLCAdditions.m \
gui/macosx/extensions/NSScreen+VLCAdditions.h \
=====================================
modules/gui/macosx/extensions/NSImage+VLCAdditions.h
=====================================
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * NSImage+VLCAdditions.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+ at interface NSImage (VLCAdditions)
+
++ (instancetype)quickLookPreviewForLocalPath:(NSString*)path withSize:(NSSize)size;
++ (instancetype)quickLookPreviewForLocalURL:(NSURL*)url withSize:(NSSize)size;
+
+ at end
+
+NS_ASSUME_NONNULL_END
=====================================
modules/gui/macosx/extensions/NSImage+VLCAdditions.m
=====================================
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * NSImage+VLCAdditions.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "NSImage+VLCAdditions.h"
+
+#import <QuickLook/QuickLook.h>
+
+ at implementation NSImage(VLCAdditions)
+
++ (instancetype)quickLookPreviewForLocalPath:(NSString *)path withSize:(NSSize)size
+{
+ NSURL *pathUrl = [NSURL fileURLWithPath:path];
+ return [self quickLookPreviewForLocalURL:pathUrl withSize:size];
+}
+
++ (instancetype)quickLookPreviewForLocalURL:(NSURL *)url withSize:(NSSize)size
+{
+ NSDictionary *dict = @{(NSString*)kQLThumbnailOptionIconModeKey : [NSNumber numberWithBool:NO]};
+ CFDictionaryRef dictRef = CFBridgingRetain(dict);
+ CFURLRef urlRef = CFBridgingRetain(url);
+ CGImageRef qlThumbnailRef = QLThumbnailImageCreate(kCFAllocatorDefault,
+ urlRef,
+ size,
+ dictRef);
+
+ CFRelease(dictRef);
+ CFRelease(urlRef);
+
+ if (qlThumbnailRef == NULL) {
+ return nil;
+ }
+
+ NSBitmapImageRep *bitmapImageRep = [[NSBitmapImageRep alloc] initWithCGImage:qlThumbnailRef];
+ if (bitmapImageRep == nil) {
+ CFRelease(qlThumbnailRef);
+ return nil;
+ }
+
+ NSImage *image = [[NSImage alloc] initWithSize:[bitmapImageRep size]];
+ [image addRepresentation:bitmapImageRep];
+ CFRelease(qlThumbnailRef);
+ return image;
+}
+
+ at end
=====================================
modules/gui/macosx/library/VLCInputItem.h
=====================================
@@ -79,6 +79,8 @@ extern NSString *VLCInputItemPreparsingSucceeded;
- (int)preparseInputItem;
- (int)writeMetadataToFile;
+- (NSImage*)thumbnailWithSize:(NSSize)size;
+
@end
@interface VLCInputNode : NSObject
=====================================
modules/gui/macosx/library/VLCInputItem.m
=====================================
@@ -23,6 +23,8 @@
#import "VLCInputItem.h"
#import "main/VLCMain.h"
+
+#import "extensions/NSImage+VLCAdditions.h"
#import "extensions/NSString+Helpers.h"
#import <vlc_url.h>
@@ -590,6 +592,34 @@ static const struct input_preparser_callbacks_t preparseCallbacks = {
return input_item_WriteMeta(VLC_OBJECT(getIntf()), _vlcInputItem);
}
+- (NSImage*)thumbnailWithSize:(NSSize)size
+{
+ NSImage *image;
+ if (!self.isStream && _vlcInputItem != NULL) {
+ char *psz_url = input_item_GetURI(_vlcInputItem);
+ if (psz_url) {
+ char *psz_path = vlc_uri2path(psz_url);
+ NSString *path = toNSStr(psz_path);
+
+ free(psz_url);
+ free(psz_path);
+
+ image = [NSImage quickLookPreviewForLocalPath:path
+ withSize:size];
+
+ if (!image) {
+ image = [[NSWorkspace sharedWorkspace] iconForFile:path];
+ image.size = size;
+ }
+ }
+ }
+
+ if (!image) {
+ image = [NSImage imageNamed: @"noart.png"];
+ }
+ return image;
+}
+
@end
=====================================
modules/gui/macosx/library/VLCLibraryCollectionViewDelegate.m
=====================================
@@ -93,13 +93,13 @@
withLayout:collectionViewLayout
withNumberOfItemsInRow:numItemsInRow];
- while (itemSize.width > [VLCLibraryUIUnits dynamicCollectionViewItemMaximumSize]) {
+ while (itemSize.width > [VLCLibraryUIUnits dynamicCollectionViewItemMaximumWidth]) {
++numItemsInRow;
itemSize = [self itemSizeForCollectionView:collectionView
withLayout:collectionViewLayout
withNumberOfItemsInRow:numItemsInRow];
}
- while (itemSize.width < [VLCLibraryUIUnits dynamicCollectionViewItemMinimumSize]) {
+ while (itemSize.width < [VLCLibraryUIUnits dynamicCollectionViewItemMinimumWidth]) {
--numItemsInRow;
itemSize = [self itemSizeForCollectionView:collectionView
withLayout:collectionViewLayout
=====================================
modules/gui/macosx/library/VLCLibraryImageCache.h
=====================================
@@ -24,11 +24,13 @@
NS_ASSUME_NONNULL_BEGIN
+ at class VLCInputItem;
@protocol VLCMediaLibraryItemProtocol;
@interface VLCLibraryImageCache : NSObject
+ (nullable NSImage *)thumbnailForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
++ (nullable NSImage *)thumbnailForInputItem:(VLCInputItem*)inputItem;
@end
=====================================
modules/gui/macosx/library/VLCLibraryImageCache.m
=====================================
@@ -21,12 +21,15 @@
*****************************************************************************/
#import "VLCLibraryImageCache.h"
+
+#import "library/VLCInputItem.h"
#import "library/VLCLibraryDataTypes.h"
+
#import "main/VLCMain.h"
NSUInteger kVLCMaximumLibraryImageCacheSize = 50;
uint32_t kVLCDesiredThumbnailWidth = 512;
-uint32_t kVLCDesiredThumbnailHeight = 320;
+uint32_t kVLCDesiredThumbnailHeight = 512;
float kVLCDefaultThumbnailPosition = .15;
@interface VLCLibraryImageCache()
@@ -105,4 +108,39 @@ float kVLCDefaultThumbnailPosition = .15;
kVLCDefaultThumbnailPosition);
}
++ (NSImage *)thumbnailForInputItem:(VLCInputItem *)inputItem
+{
+ return [VLCLibraryImageCache.sharedImageCache imageForInputItem:inputItem];
+}
+
+- (NSImage *)imageForInputItem:(VLCInputItem *)inputItem
+{
+ NSImage *cachedImage = [_imageCache objectForKey:inputItem.MRL];
+ if (cachedImage) {
+ return cachedImage;
+ }
+ return [self generateImageForInputItem:inputItem];
+}
+
+- (NSImage *)generateImageForInputItem:(VLCInputItem *)inputItem
+{
+ NSImage *image;
+ NSURL *artworkURL = inputItem.artworkURL;
+ NSSize imageSize = NSMakeSize(kVLCDesiredThumbnailWidth, kVLCDesiredThumbnailHeight);
+
+ if (artworkURL) {
+ image = [[NSImage alloc] initWithContentsOfURL:artworkURL];
+ }
+
+ if (image == nil) {
+ image = [inputItem thumbnailWithSize:imageSize];
+ }
+
+ if (image) {
+ [_imageCache setObject:image forKey:inputItem.MRL];
+ }
+
+ return image;
+}
+
@end
=====================================
modules/gui/macosx/library/VLCLibraryTableCellView.m
=====================================
@@ -25,15 +25,21 @@
#import "extensions/NSFont+VLCAdditions.h"
#import "extensions/NSString+Helpers.h"
#import "extensions/NSView+VLCAdditions.h"
-#import "views/VLCImageView.h"
-#import "views/VLCTrackingView.h"
-#import "main/VLCMain.h"
+
+#import "library/VLCInputItem.h"
#import "library/VLCLibraryController.h"
#import "library/VLCLibraryDataTypes.h"
-#import "library/VLCInputItem.h"
+#import "library/VLCLibraryImageCache.h"
+
#import "library/video-library/VLCLibraryVideoGroupDescriptor.h"
+
+#import "main/VLCMain.h"
+
#import "playlist/VLCPlaylistController.h"
+#import "views/VLCImageView.h"
+#import "views/VLCTrackingView.h"
+
@implementation VLCLibraryTableCellView
+ (instancetype)fromNibWithOwner:(id)owner
@@ -90,13 +96,12 @@
self.singlePrimaryTitleTextField.hidden = NO;
self.singlePrimaryTitleTextField.stringValue = _representedInputItem.name;
- NSURL *artworkURL = _representedInputItem.artworkURL;
- NSImage *placeholderImage = [self imageForInputItem];
- if (artworkURL) {
- [self.representedImageView setImageURL:artworkURL placeholderImage:placeholderImage];
- } else {
- self.representedImageView.image = placeholderImage;
- }
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
+ NSImage *image = [VLCLibraryImageCache thumbnailForInputItem:self->_representedInputItem];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ self.representedImageView.image = image;
+ });
+ });
self.trackingView.viewToHide = self.playInstantlyButton;
self.playInstantlyButton.action = @selector(playInputItemInstantly:);
@@ -123,19 +128,6 @@
self.representedImageView.image = [NSImage imageNamed: @"noart.png"];
}
-- (NSImage *)imageForInputItem
-{
- NSImage *image;
- if (_representedInputItem.inputType == ITEM_TYPE_DIRECTORY) {
- image = [NSImage imageNamed:NSImageNameFolder];
- }
-
- if (!image) {
- image = [NSImage imageNamed: @"noart.png"];
- }
- return image;
-}
-
- (void)playMediaItemInstantly:(id)sender
{
[[[VLCMain sharedInstance] libraryController] appendItemToPlaylist:_representedItem playImmediately:YES];
=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.h
=====================================
@@ -1,5 +1,5 @@
/*****************************************************************************
- * VLCLibraryAudioViewController.h: MacOS X interface module
+ * VLCLibraryUIUnits.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2022 VLC authors and VideoLAN
*
@@ -41,8 +41,8 @@ NS_ASSUME_NONNULL_BEGIN
+ (const CGFloat)mediumDetailSupplementaryViewCollectionViewHeight;
+ (const CGFloat)largeDetailSupplementaryViewCollectionViewHeight;
-+ (const CGFloat)dynamicCollectionViewItemMinimumSize;
-+ (const CGFloat)dynamicCollectionViewItemMaximumSize;
++ (const CGFloat)dynamicCollectionViewItemMinimumWidth;
++ (const CGFloat)dynamicCollectionViewItemMaximumWidth;
@end
=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.m
=====================================
@@ -1,5 +1,5 @@
/*****************************************************************************
- * VLCLibraryAudioViewController.m: MacOS X interface module
+ * VLCLibraryUIUnits.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2022 VLC authors and VideoLAN
*
@@ -69,12 +69,12 @@
return 500;
}
-+ (const CGFloat)dynamicCollectionViewItemMinimumSize
++ (const CGFloat)dynamicCollectionViewItemMinimumWidth
{
return 180;
}
-+ (const CGFloat)dynamicCollectionViewItemMaximumSize
++ (const CGFloat)dynamicCollectionViewItemMaximumWidth
{
return 280;
}
=====================================
modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m
=====================================
@@ -22,15 +22,16 @@
#import "VLCMediaSourceCollectionViewItem.h"
-#import "main/VLCMain.h"
-
-#import "extensions/NSString+Helpers.h"
-#import "extensions/NSFont+VLCAdditions.h"
#import "extensions/NSColor+VLCAdditions.h"
+#import "extensions/NSFont+VLCAdditions.h"
+#import "extensions/NSString+Helpers.h"
#import "extensions/NSView+VLCAdditions.h"
#import "library/VLCInputItem.h"
#import "library/VLCLibraryMenuController.h"
+#import "library/VLCLibraryImageCache.h"
+
+#import "main/VLCMain.h"
#import "playlist/VLCPlaylistController.h"
@@ -137,13 +138,12 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
}
_mediaTitleTextField.stringValue = _representedInputItem.name;
- NSURL *artworkURL = _representedInputItem.artworkURL;
- NSImage *placeholderImage = [self imageForInputItem];
- if (artworkURL) {
- [_mediaImageView setImageURL:artworkURL placeholderImage:placeholderImage];
- } else {
- _mediaImageView.image = placeholderImage;
- }
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
+ NSImage *image = [VLCLibraryImageCache thumbnailForInputItem:self->_representedInputItem];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ self->_mediaImageView.image = image;
+ });
+ });
switch (_representedInputItem.inputType) {
case ITEM_TYPE_DIRECTORY:
@@ -171,19 +171,6 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
}
}
-- (NSImage *)imageForInputItem
-{
- NSImage *image;
- if (_representedInputItem.inputType == ITEM_TYPE_DIRECTORY) {
- image = [NSImage imageNamed:NSImageNameFolder];
- }
-
- if (!image) {
- image = [NSImage imageNamed: @"noart.png"];
- }
- return image;
-}
-
#pragma mark - actions
- (IBAction)playInstantly:(id)sender
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/d641b2b25d773d4dab482a97fdfbf32a053ae356...ef6f465bea701e9f2693ddf321aadf6177e68d68
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/d641b2b25d773d4dab482a97fdfbf32a053ae356...ef6f465bea701e9f2693ddf321aadf6177e68d68
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list