Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits: 095b81bd by Claudio Cambra at 2026-06-09T15:09:00+02:00 macosx: Provide labels for more resolution classes Signed-off-by: Claudio Cambra <[email protected]> - - - - - 2496f742 by Claudio Cambra at 2026-06-09T15:09:00+02:00 macosx: Make resolution annotations less visible Signed-off-by: Claudio Cambra <[email protected]> - - - - - 61bba822 by Claudio Cambra at 2026-06-09T15:09:00+02:00 macosx: Unify resolution label logic Signed-off-by: Claudio Cambra <[email protected]> - - - - - 322dcc83 by Claudio Cambra at 2026-06-09T15:09:00+02:00 macosx: Make sure resolutionLabel applies correctly for portrait and landscape videos Signed-off-by: Claudio Cambra <[email protected]> - - - - - 5636c376 by Claudio Cambra at 2026-06-09T15:09:00+02:00 macosx: Adjust resolution label positioning Signed-off-by: Claudio Cambra <[email protected]> - - - - - 7 changed files: - modules/gui/macosx/UI/VLCLibraryCollectionViewItem.xib - modules/gui/macosx/extensions/NSColor+VLCAdditions.m - modules/gui/macosx/extensions/NSFont+VLCAdditions.m - modules/gui/macosx/library/VLCLibraryCarouselViewItemView.m - modules/gui/macosx/library/VLCLibraryCollectionViewItem.m - modules/gui/macosx/library/VLCLibraryDataTypes.h - modules/gui/macosx/library/VLCLibraryDataTypes.m Changes: ===================================== modules/gui/macosx/UI/VLCLibraryCollectionViewItem.xib ===================================== @@ -25,8 +25,8 @@ </customObject> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/> - <customView misplaced="YES" id="Hz6-mo-xeY" customClass="VLCTrackingView"> - <rect key="frame" x="0.0" y="0.0" width="212" height="243"/> + <customView id="Hz6-mo-xeY" customClass="VLCTrackingView"> + <rect key="frame" x="0.0" y="0.0" width="207" height="243"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <subviews> <customView translatesAutoresizingMaskIntoConstraints="NO" id="2aB-sB-hfY" customClass="VLCImageView"> @@ -48,14 +48,6 @@ <action selector="playInstantly:" target="-2" id="E2B-oj-rx3"/> </connections> </button> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tm2-NW-WsZ" customClass="VLCRoundedCornerTextField"> - <rect key="frame" x="8" y="184" width="37" height="16"/> - <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="tyb-Ur-7J9"> - <font key="font" metaFont="system"/> - <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> </subviews> <constraints> <constraint firstAttribute="bottom" secondItem="dFt-oZ-h9P" secondAttribute="bottom" id="4q3-3S-7PA"/> @@ -66,15 +58,15 @@ <constraint firstAttribute="trailing" secondItem="dFt-oZ-h9P" secondAttribute="trailing" id="kBI-UU-vnc"/> </constraints> </customView> - <box boxType="custom" borderType="line" borderWidth="5" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="Vwd-1n-Sbd"> + <box boxType="custom" borderType="line" borderWidth="3" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="Vwd-1n-Sbd"> <rect key="frame" x="0.0" y="36" width="207" height="207"/> <view key="contentView" id="HJG-tt-Xh8"> - <rect key="frame" x="5" y="5" width="197" height="197"/> + <rect key="frame" x="3" y="3" width="201" height="201"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> </view> <color key="borderColor" red="1" green="0.38123786450000002" blue="0.039215686270000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </box> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OBS-Eh-1mT"> + <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OBS-Eh-1mT"> <rect key="frame" x="-2" y="16" width="37" height="16"/> <textFieldCell key="cell" lineBreakMode="truncatingTail" title="Label" usesSingleLineMode="YES" id="7Hy-o3-LvX"> <font key="font" metaFont="system"/> @@ -82,7 +74,7 @@ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="u2r-zy-XEW"> + <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="u2r-zy-XEW"> <rect key="frame" x="174" y="0.0" width="35" height="16"/> <textFieldCell key="cell" lineBreakMode="clipping" title="NEW" id="NeT-5U-eZn"> <font key="font" metaFont="systemBold"/> @@ -91,7 +83,7 @@ </textFieldCell> </textField> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ubz-8I-W2F"> - <rect key="frame" x="177" y="213" width="20" height="20"/> + <rect key="frame" x="182" y="218" width="20" height="20"/> <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ellipsis" imagePosition="only" alignment="center" inset="2" id="6ko-MM-ds0"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="system"/> @@ -104,7 +96,15 @@ <action selector="addToPlayQueue:" target="-2" id="2C9-Rn-VAb"/> </connections> </button> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VAn-gF-QiZ"> + <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tm2-NW-WsZ" customClass="VLCRoundedCornerTextField"> + <rect key="frame" x="6" y="220" width="37" height="16"/> + <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="tyb-Ur-7J9"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VAn-gF-QiZ"> <rect key="frame" x="-2" y="0.0" width="175" height="16"/> <textFieldCell key="cell" lineBreakMode="truncatingTail" title="Label" id="LSS-jh-llZ"> <font key="font" metaFont="system"/> @@ -116,7 +116,7 @@ <constraints> <constraint firstItem="2aB-sB-hfY" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="3Ah-0T-rA9"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="OBS-Eh-1mT" secondAttribute="trailing" id="457-oy-EbD"/> - <constraint firstItem="Ubz-8I-W2F" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="10" id="8Qf-Un-Gdl"/> + <constraint firstItem="Ubz-8I-W2F" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="5" id="8Qf-Un-Gdl"/> <constraint firstItem="VAn-gF-QiZ" firstAttribute="top" secondItem="OBS-Eh-1mT" secondAttribute="bottom" id="ALi-0z-Mza"/> <constraint firstAttribute="trailing" secondItem="u2r-zy-XEW" secondAttribute="trailing" id="Dd7-va-0UJ"/> <constraint firstItem="u2r-zy-XEW" firstAttribute="centerY" secondItem="VAn-gF-QiZ" secondAttribute="centerY" id="H5N-j9-THf"/> @@ -125,12 +125,12 @@ <constraint firstItem="VAn-gF-QiZ" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="QUW-dn-Fbc"/> <constraint firstItem="Vwd-1n-Sbd" firstAttribute="top" secondItem="2aB-sB-hfY" secondAttribute="top" id="Qpt-yS-z2k"/> <constraint firstItem="Vwd-1n-Sbd" firstAttribute="leading" secondItem="2aB-sB-hfY" secondAttribute="leading" id="Yqz-VL-Ul7"/> - <constraint firstAttribute="trailing" secondItem="Ubz-8I-W2F" secondAttribute="trailing" constant="10" id="ZVz-SL-rxZ"/> + <constraint firstAttribute="trailing" secondItem="Ubz-8I-W2F" secondAttribute="trailing" constant="5" id="ZVz-SL-rxZ"/> <constraint firstAttribute="trailing" secondItem="VAn-gF-QiZ" secondAttribute="trailing" priority="750" id="Zci-25-m59"/> - <constraint firstItem="tm2-NW-WsZ" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="10" id="cvk-A5-enS"/> - <constraint firstItem="tm2-NW-WsZ" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="10" id="fH0-Om-7gV"/> <constraint firstItem="Vwd-1n-Sbd" firstAttribute="trailing" secondItem="2aB-sB-hfY" secondAttribute="trailing" id="fag-50-6qS"/> + <constraint firstItem="tm2-NW-WsZ" firstAttribute="centerY" secondItem="Ubz-8I-W2F" secondAttribute="centerY" id="gQI-nK-lpw"/> <constraint firstAttribute="trailing" secondItem="2aB-sB-hfY" secondAttribute="trailing" id="oZw-Ab-83p"/> + <constraint firstItem="tm2-NW-WsZ" firstAttribute="leading" secondItem="HJG-tt-Xh8" secondAttribute="leading" constant="5" id="rnK-Cu-EMG"/> <constraint firstItem="Vwd-1n-Sbd" firstAttribute="bottom" secondItem="2aB-sB-hfY" secondAttribute="bottom" id="sIE-go-0nP"/> <constraint firstItem="2aB-sB-hfY" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="t9g-tX-AQX"/> <constraint firstItem="OBS-Eh-1mT" firstAttribute="top" secondItem="2aB-sB-hfY" secondAttribute="bottom" constant="4" id="vJy-Kf-4Jh"/> ===================================== modules/gui/macosx/extensions/NSColor+VLCAdditions.m ===================================== @@ -65,7 +65,7 @@ + (NSColor *)VLClibraryAnnotationBackgroundColor { - return [NSColor colorWithRed:0. green:0. blue:0. alpha:.4]; + return [NSColor colorWithRed:0. green:0. blue:0. alpha:.2]; } + (NSColor *)VLClibrarySeparatorLightColor ===================================== modules/gui/macosx/extensions/NSFont+VLCAdditions.m ===================================== @@ -41,7 +41,10 @@ + (NSFont *)VLCLibraryItemAnnotationFont { - return [NSFont systemFontOfSize:NSFont.systemFontSize weight:NSFontWeightBold]; + if (@available(macOS 11.0, *)) { + return [NSFont preferredFontForTextStyle:NSFontTextStyleCaption1 options:@{}]; + } + return [NSFont systemFontOfSize:10 weight:NSFontWeightRegular]; } @end ===================================== modules/gui/macosx/library/VLCLibraryCarouselViewItemView.m ===================================== @@ -124,7 +124,11 @@ if (mediaItem.mediaType == VLC_ML_MEDIA_TYPE_VIDEO) { VLCMediaLibraryTrack * const videoTrack = mediaItem.firstVideoTrack; - [self showVideoSizeIfNeededForWidth:videoTrack.videoWidth andHeight:videoTrack.videoHeight]; + NSString * const resolutionLabel = videoTrack.resolutionLabel; + if (resolutionLabel) { + self.annotationTextField.stringValue = resolutionLabel; + self.annotationTextField.hidden = NO; + } } const CGFloat position = mediaItem.progress; @@ -135,17 +139,6 @@ } } -- (void)showVideoSizeIfNeededForWidth:(CGFloat)width andHeight:(CGFloat)height -{ - if (width >= VLCMediaLibrary4KWidth || height >= VLCMediaLibrary4KHeight) { - _annotationTextField.stringValue = _NS("4K"); - _annotationTextField.hidden = NO; - } else if (width >= VLCMediaLibrary720pWidth || height >= VLCMediaLibrary720pHeight) { - _annotationTextField.stringValue = _NS("HD"); - _annotationTextField.hidden = NO; - } -} - - (void)setRepresentedItem:(VLCLibraryRepresentedItem *)representedItem { if (representedItem == _representedItem) { ===================================== modules/gui/macosx/library/VLCLibraryCollectionViewItem.m ===================================== @@ -241,8 +241,11 @@ const CGFloat VLCLibraryCollectionViewItemMaximumDisplayedProgress = 0.95; if (mediaItem.mediaType == VLC_ML_MEDIA_TYPE_VIDEO || mediaItem.mediaType == VLC_ML_MEDIA_TYPE_UNKNOWN) { VLCMediaLibraryTrack * const videoTrack = mediaItem.firstVideoTrack; - [self showVideoSizeIfNeededForWidth:videoTrack.videoWidth - andHeight:videoTrack.videoHeight]; + NSString * const resolutionLabel = videoTrack.resolutionLabel; + if (resolutionLabel) { + self.annotationTextField.stringValue = resolutionLabel; + self.annotationTextField.hidden = NO; + } if (!_videoImageViewAspectRatioConstraint.active) { self.imageViewAspectRatioConstraint.active = NO; _videoImageViewAspectRatioConstraint.active = YES; @@ -273,17 +276,6 @@ const CGFloat VLCLibraryCollectionViewItemMaximumDisplayedProgress = 0.95; } } -- (void)showVideoSizeIfNeededForWidth:(CGFloat)width andHeight:(CGFloat)height -{ - if (width >= VLCMediaLibrary4KWidth || height >= VLCMediaLibrary4KHeight) { - _annotationTextField.stringValue = _NS("4K"); - _annotationTextField.hidden = NO; - } else if (width >= VLCMediaLibrary720pWidth || height >= VLCMediaLibrary720pHeight) { - _annotationTextField.stringValue = _NS("HD"); - _annotationTextField.hidden = NO; - } -} - - (void)setUnplayedIndicatorHidden:(BOOL)indicatorHidden { if (_unplayedIndicatorTextField.hidden == indicatorHidden) { ===================================== modules/gui/macosx/library/VLCLibraryDataTypes.h ===================================== @@ -34,10 +34,6 @@ extern NSString * const VLCMediaLibraryMediaItemUTI; @class VLCMediaLibraryGenre; @class VLCInputItem; -extern const CGFloat VLCMediaLibrary4KWidth; -extern const CGFloat VLCMediaLibrary4KHeight; -extern const CGFloat VLCMediaLibrary720pWidth; -extern const CGFloat VLCMediaLibrary720pHeight; extern const long long int VLCMediaLibraryMediaItemDurationDenominator; vlc_medialibrary_t * _Nullable getMediaLibrary(void); @@ -84,6 +80,7 @@ typedef NS_ENUM(NSUInteger, VLCMediaLibraryParentGroupType) { @property (readonly) NSString *readableCodecName; @property (readonly) NSString *language; @property (readonly) NSString *trackDescription; +@property (readonly, nullable) NSString *resolutionLabel; @property (readonly) vlc_ml_track_type_t trackType; @property (readonly) NSString *readableTrackType; @property (readonly) uint32_t bitrate; ===================================== modules/gui/macosx/library/VLCLibraryDataTypes.m ===================================== @@ -34,10 +34,14 @@ NSString * const VLCMediaLibraryMediaItemPasteboardType = @"VLCMediaLibraryMediaItemPasteboardType"; NSString * const VLCMediaLibraryMediaItemUTI = @"org.videolan.vlc.VLCMediaLibraryMediaItem"; +const CGFloat VLCMediaLibrary8KWidth = 7680.; +const CGFloat VLCMediaLibrary8KHeight = 4320.; const CGFloat VLCMediaLibrary4KWidth = 3840.; const CGFloat VLCMediaLibrary4KHeight = 2160.; -const CGFloat VLCMediaLibrary720pWidth = 1280.; -const CGFloat VLCMediaLibrary720pHeight = 720.; +const CGFloat VLCMediaLibrary1080pWidth = 1920.; +const CGFloat VLCMediaLibrary1080pHeight = 1080.; +const CGFloat VLCMediaLibrary540pWidth = 960.; +const CGFloat VLCMediaLibrary540pHeight = 540.; const long long int VLCMediaLibraryMediaItemDurationDenominator = 1000; NSString *VLCMediaLibraryMediaItemLibraryID = @"VLCMediaLibraryMediaItemLibraryID"; @@ -241,6 +245,19 @@ static NSString *genreArrayDisplayString(NSArray<VLCMediaLibraryGenre *> * const _sourceAspectRatioDenominator = p_track->v.i_sarDen; _frameRate = p_track->v.i_fpsNum; _frameRateDenominator = p_track->v.i_fpsDen; + + const unsigned int realHeight = MIN(_videoWidth, _videoHeight); + const unsigned int realWidth = MAX(_videoWidth, _videoHeight); + + if (realHeight >= VLCMediaLibrary8KHeight || realWidth >= VLCMediaLibrary8KHeight * (16.0 / 9.0)) { + _resolutionLabel = _NS("8K"); + } else if (realHeight >= VLCMediaLibrary4KHeight || realWidth >= VLCMediaLibrary4KHeight * (16.0 / 9.0)) { + _resolutionLabel = _NS("4K"); + } else if (realHeight >= VLCMediaLibrary1080pHeight || realWidth >= VLCMediaLibrary1080pHeight * (16.0 / 9.0)) { + _resolutionLabel = _NS("HD"); + } else if (realHeight >= VLCMediaLibrary540pHeight || realWidth >= VLCMediaLibrary540pHeight * (16.0 / 9.0)) { + _resolutionLabel = _NS("SD"); + } } return self; } View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/cb361557b790d891fbf6b1fd3eb030f5bfc018da...5636c376366aece1c117ddb03210a174dfdd5e9a -- View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/cb361557b790d891fbf6b1fd3eb030f5bfc018da...5636c376366aece1c117ddb03210a174dfdd5e9a You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
_______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
