Projects
Extra
vlc-beta
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 98
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/asf/asf.c -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/asf/asf.c
Changed
@@ -40,6 +40,7 @@ #include <vlc_vout.h> #include <limits.h> +#include <stdckdint.h> #include "asfpacket.h" #include "libasf.h" @@ -1256,8 +1257,9 @@ p_sys->p_fp->i_min_data_packet_size; /* calculate the time duration in micro-s */ - p_sys->i_length = VLC_TICK_FROM_MSFTIME(p_sys->p_fp->i_play_duration) * - (vlc_tick_t)i_count / + if ( ckd_mul(&p_sys->i_length, VLC_TICK_FROM_MSFTIME(p_sys->p_fp->i_play_duration), i_count) ) + p_sys->i_length = 0; + p_sys->i_length = p_sys->i_length / (vlc_tick_t)p_sys->p_fp->i_data_packets_count; if( p_sys->i_length <= p_sys->p_fp->i_preroll ) p_sys->i_length = 0;
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/mkv/demux.cpp -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/mkv/demux.cpp
Changed
@@ -75,6 +75,7 @@ if (std::string(doc_type) != "matroska" && std::string(doc_type) != "webm" ) { msg_Err( p_demux, "Not a Matroska file : DocType = %s ", std::string(doc_type).c_str()); + delete p_l0; return false; } @@ -82,6 +83,7 @@ if (uint64_t(doc_read_version) > 5) { msg_Err( p_demux, "matroska file needs version %" PRId64 " but only versions 1 to 4 supported", uint64_t(doc_read_version)); + delete p_l0; return false; }
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/mp4/libmp4.c -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/mp4/libmp4.c
Changed
@@ -37,6 +37,7 @@ #include <math.h> #include <assert.h> #include <limits.h> +#include <stdckdint.h> /* Some assumptions: * The input method HAS to be seekable @@ -53,14 +54,17 @@ #ifdef MP4_VERBOSE static char * MP4_Time2Str( stime_t i_duration, uint32_t i_scale ) { - uint64_t i_time = (i_scale > 0) ? i_duration / i_scale : 0; + uint64_t i_time = (i_scale) ? i_duration / i_scale : 0; unsigned h = ( i_time /( 60*60 ) ) % 60; unsigned m = ( i_time / 60 ) % 60; unsigned s = i_time % 60; - unsigned ms = (i_scale) ? (1000*i_duration / i_scale) % 1000 : 0; + uint64_t ms; + if ( i_scale == 0 || ckd_mul( &ms, 1000, i_duration ) ) + ms = 0; + ms = (ms / i_scale) % 1000; char *out; - if( asprintf( &out, "%u:%.2u:%.2u:%.3u", h, m, s, ms ) < 0 ) + if( asprintf( &out, "%u:%.2u:%.2u:%.3" PRIu64, h, m, s, ms ) < 0 ) return NULL; return out; }
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/mp4/mp4.c -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/mp4/mp4.c
Changed
@@ -1229,9 +1229,9 @@ else { p_sys->i_timescale = BOXDATA(p_mvhd)->i_timescale; - if( p_sys->i_timescale == 0 ) + if( p_sys->i_timescale == 0 || p_sys->i_timescale > 0x10000000 ) { - msg_Err( p_this, "bad timescale" ); + msg_Err( p_this, "bad timescale %" PRIu32, p_sys->i_timescale ); goto error; } } @@ -3910,9 +3910,18 @@ unsigned int i; msg_Warn( p_demux, "elst box found" ); + bool use_editlist = var_InheritBool( p_demux, CFG_PREFIX"editlist" ); for( i = 0; i < elst->i_entry_count; i++ ) { const MP4_Box_data_elst_entry_t *edit = &elst->entriesi; + if ( edit->i_segment_duration > INT64_MAX / CLOCK_FREQ || + ( edit->i_media_time >= 0 && edit->i_media_time > INT64_MAX / CLOCK_FREQ ) ) + { + use_editlist = false; + msg_Dbg( p_demux, " - %d bogus duration=%" PRId64 " media time=%" PRId64 ")", + i, edit->i_segment_duration, edit->i_media_time ); + } + else msg_Dbg( p_demux, " - %d duration=%"PRId64"ms media time=%"PRId64 "ms) rate=%d.%d", i, MP4_rescale( edit->i_segment_duration, p_sys->i_timescale, 1000 ), @@ -3923,7 +3932,7 @@ edit->i_media_rate_fraction ); } - if( var_InheritBool( p_demux, CFG_PREFIX"editlist" ) ) + if( use_editlist ) p_track->p_elst = p_elst; else msg_Dbg( p_demux, "ignore editlist" );
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/mpeg/timestamps.h -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/mpeg/timestamps.h
Changed
@@ -19,7 +19,7 @@ #ifndef VLC_MPEG_TIMESTAMPS_H #define VLC_MPEG_TIMESTAMPS_H -#define FROM_SCALE_NZ(x) ((vlc_tick_t)((x) * 100 / 9)) +#define FROM_SCALE_NZ(x) (((vlc_tick_t)(x) * 100 / 9)) #define TO_SCALE_NZ(x) ((x) * 9 / 100) #define FROM_SCALE(x) (VLC_TICK_0 + FROM_SCALE_NZ(x))
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/subtitle.c -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/subtitle.c
Changed
@@ -39,6 +39,7 @@ #include <ctype.h> #include <math.h> #include <assert.h> +#include <stdckdint.h> #include <vlc_demux.h> #include <vlc_charset.h> @@ -1129,6 +1130,7 @@ const char *s, size_t length) { int h1, m1, s1, d1 = 0; + int64_t sec, ms, total; int count; if (sscanf(s, "%d:%d:%d,%d%n", &h1, &m1, &s1, &d1, &count) == 4 @@ -1147,8 +1149,14 @@ return VLC_EGENERIC; success: + if (ckd_mul(&sec, h1, 3600) || + ckd_mul(&ms, m1, 60) || + ckd_add(&total, sec, ms) || + ckd_add(&total, total, s1)) + return VLC_EINVAL; + (*timing_value) = VLC_TICK_0 - + vlc_tick_from_sec(h1 * 3600 + m1 * 60 + s1) + + vlc_tick_from_sec(total) + VLC_TICK_FROM_MS(d1); return VLC_SUCCESS; @@ -1194,16 +1202,28 @@ int h1, m1, s1, d1, h2, m2, s2, d2; if( sscanf( s, "%d:%d:%d.%d,%d:%d:%d.%d", - &h1, &m1, &s1, &d1, &h2, &m2, &s2, &d2) == 8 ) - { - p_subtitle->i_start = vlc_tick_from_sec( h1 * 3600 + m1 * 60 + s1) + - VLC_TICK_FROM_MS( d1 ) + VLC_TICK_0; + &h1, &m1, &s1, &d1, &h2, &m2, &s2, &d2) != 8 ) + return VLC_EGENERIC; - p_subtitle->i_stop = vlc_tick_from_sec( h2 * 3600 + m2 * 60 + s2 ) + - VLC_TICK_FROM_MS( d2 ) + VLC_TICK_0; - return VLC_SUCCESS; - } - return VLC_EGENERIC; + int64_t sec, ms, total; + if (ckd_mul(&sec, h1, 3600) || + ckd_mul(&ms, m1, 60) || + ckd_add(&total, sec, ms) || + ckd_add(&total, total, s1)) + return VLC_EINVAL; + + p_subtitle->i_start = vlc_tick_from_sec( total ) + + VLC_TICK_FROM_MS( d1 ) + VLC_TICK_0; + + if (ckd_mul(&sec, h2, 3600) || + ckd_mul(&ms, m2, 60) || + ckd_add(&total, sec, ms) || + ckd_add(&total, total, s2)) + return VLC_EINVAL; + + p_subtitle->i_stop = vlc_tick_from_sec( total ) + + VLC_TICK_FROM_MS( d2 ) + VLC_TICK_0; + return VLC_SUCCESS; } /* ParseSubViewer
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/demux/wav.c -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/demux/wav.c
Changed
@@ -347,9 +347,9 @@ unsigned int i_extended; i_size += 2; - if( i_size < sizeof( WAVEFORMATEX ) ) + if( i_size < sizeof( WAVEFORMATEX ) || i_size > (sizeof( WAVEFORMATEX ) + UINT16_MAX ) ) { - msg_Err( p_demux, "invalid 'fmt ' chunk" ); + msg_Err( p_demux, "invalid 'fmt ' chunk of size %" PRIu32, i_size ); goto error; }
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/UI/VLCMainVideoView.xib -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/UI/VLCMainVideoView.xib
Changed
@@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23504" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="24112" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <dependencies> <deployment version="101000" identifier="macosx"/> - <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23504"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="24112"/> <capability name="Image references" minToolsVersion="12.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> @@ -44,12 +44,10 @@ <outlet property="floatOnTopButton" destination="8jZ-hd-YVq" id="x53-4o-LsM"/> <outlet property="forwardButton" destination="sF5-Z0-bef" id="H6w-Le-NAK"/> <outlet property="fullscreenButton" destination="dYZ-ri-Kra" id="Cw2-BS-QG9"/> - <outlet property="fullscreenButtonWidthConstraint" destination="quS-fD-Od7" id="6hT-nR-yQI"/> <outlet property="jumpBackwardButton" destination="AXA-01-AU8" id="gfa-Yt-ezI"/> <outlet property="jumpForwardButton" destination="aAq-uE-mLW" id="M7n-mW-tNe"/> <outlet property="muteVolumeButton" destination="afi-4d-rQk" id="y6R-6o-2OM"/> <outlet property="pipButton" destination="yEi-SZ-SIS" id="vFi-Ln-9lT"/> - <outlet property="pipButtonWidthConstraint" destination="dxa-Jx-T4p" id="a5S-ec-2xD"/> <outlet property="playButton" destination="PCC-8a-sVF" id="ddT-ZM-Jhz"/> <outlet property="playbackRateButton" destination="GHq-pt-nIe" id="k0k-fd-Vz5"/> <outlet property="playingItemDisplayField" destination="lEW-MN-FFU" id="hKa-df-8UB"/> @@ -62,14 +60,14 @@ </connections> </customObject> <customView appearanceType="darkAqua" id="WRu-Ic-lQK"> - <rect key="frame" x="0.0" y="0.0" width="720" height="480"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="480"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <subviews> <customView translatesAutoresizingMaskIntoConstraints="NO" id="MTR-ds-I8o" userLabel="Vout Containing View"> - <rect key="frame" x="0.0" y="0.0" width="720" height="480"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="480"/> <subviews> <customView translatesAutoresizingMaskIntoConstraints="NO" id="mAS-4a-RS8" customClass="VLCVoutView"> - <rect key="frame" x="0.0" y="0.0" width="720" height="480"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="480"/> </customView> </subviews> <constraints> @@ -80,25 +78,25 @@ </constraints> </customView> <box appearanceType="darkAqua" boxType="custom" borderType="none" title="Box" titlePosition="noTitle" transparent="YES" translatesAutoresizingMaskIntoConstraints="NO" id="D4V-Zd-qvB"> - <rect key="frame" x="0.0" y="0.0" width="720" height="480"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="480"/> <view key="contentView" wantsLayer="YES" id="1tI-8K-e3c"> - <rect key="frame" x="0.0" y="0.0" width="720" height="480"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="480"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <visualEffectView blendingMode="withinWindow" material="titlebar" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="jnw-gL-nrF"> - <rect key="frame" x="0.0" y="480" width="720" height="0.0"/> + <rect key="frame" x="0.0" y="480" width="749" height="0.0"/> <constraints> <constraint firstAttribute="height" id="wY4-If-nIp"/> </constraints> </visualEffectView> <customView translatesAutoresizingMaskIntoConstraints="NO" id="FGS-tq-54S" customClass="VLCMainVideoViewOverlayView"> - <rect key="frame" x="0.0" y="0.0" width="720" height="480"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="480"/> </customView> <customView translatesAutoresizingMaskIntoConstraints="NO" id="1GA-GG-Sdx"> - <rect key="frame" x="0.0" y="0.0" width="720" height="132"/> + <rect key="frame" x="0.0" y="0.0" width="749" height="132"/> <subviews> <textField wantsLayer="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f4v-2z-dQ1" customClass="VLCTimeField"> - <rect key="frame" x="623" y="20" width="79" height="14"/> + <rect key="frame" x="652" y="20" width="79" height="14"/> <constraints> <constraint firstAttribute="width" constant="75" id="8Zz-X6-yY1"/> </constraints> @@ -109,17 +107,17 @@ </textFieldCell> </textField> <stackView distribution="fill" orientation="vertical" alignment="leading" spacing="4" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="San-L7-ZvB"> - <rect key="frame" x="20" y="59" width="234" height="53"/> + <rect key="frame" x="20" y="59" width="167" height="53"/> <subviews> <textField wantsLayer="YES" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="lEW-MN-FFU"> - <rect key="frame" x="-2" y="25" width="238" height="28"/> + <rect key="frame" x="-2" y="25" width="171" height="28"/> <textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="left" placeholderString="Nothing Playing" usesSingleLineMode="YES" id="8l0-zS-fOa"> <font key="font" metaFont="systemBold" size="24"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> - <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5ii-yU-6Zp"> + <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5ii-yU-6Zp"> <rect key="frame" x="-2" y="0.0" width="145" height="21"/> <textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" placeholderString="No details to show" usesSingleLineMode="YES" id="k9I-DK-CEe"> <font key="font" textStyle="title2" name=".SFNS-Regular"/> @@ -142,7 +140,7 @@ </customSpacing> </stackView> <slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qNZ-Fh-W8i" customClass="VLCPlaybackProgressSlider"> - <rect key="frame" x="18" y="37" width="684" height="19"/> + <rect key="frame" x="20" y="39" width="709" height="15"/> <constraints> <constraint firstAttribute="height" constant="15" id="xm6-li-LpC"/> </constraints> @@ -151,127 +149,102 @@ <action selector="timeSliderAction:" target="3" id="W32-wA-rN9"/> </connections> </slider> - <stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="10" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sJu-ZK-5QH"> - <rect key="frame" x="274" y="59" width="426" height="32"/> + <stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="10" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="1000" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sJu-ZK-5QH"> + <rect key="frame" x="207" y="59" width="522" height="28"/> <subviews> - <stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Y8F-hr-iaW"> - <rect key="frame" x="0.0" y="0.0" width="299" height="32"/> + <stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="1000" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Y8F-hr-iaW"> + <rect key="frame" x="0.0" y="0.0" width="399" height="28"/> <subviews> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GHq-pt-nIe" customClass="VLCImageButton"> - <rect key="frame" x="0.0" y="1" width="40" height="29"/> - <buttonCell key="cell" type="recessed" title="1.0x" bezelStyle="recessed" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="pUr-pW-j5a"> + <button wantsLayer="YES" horizontalHuggingPriority="500" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GHq-pt-nIe" customClass="VLCImageButton"> + <rect key="frame" x="0.0" y="0.0" width="49" height="28"/> + <buttonCell key="cell" type="recessed" title="1.0x" bezelStyle="recessed" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="pUr-pW-j5a"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> - <font key="font" metaFont="smallSystem"/> + <font key="font" metaFont="systemBold" size="12"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" constant="40" id="Nvo-dk-KyW"/> - </constraints> <connections> <action selector="openPlaybackRate:" target="3" id="tLQ-DO-783"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="95O-Oc-zrQ" customClass="VLCImageButton"> - <rect key="frame" x="45" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="photo.tv" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="dnH-S4-sBc"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="95O-Oc-zrQ" customClass="VLCImageButton"> + <rect key="frame" x="54" y="0.0" width="47" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="photo.tv" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="dnH-S4-sBc"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" secondItem="95O-Oc-zrQ" secondAttribute="height" multiplier="1:1" id="jod-n4-Mmj"/> - <constraint firstAttribute="width" secondItem="95O-Oc-zrQ" secondAttribute="height" multiplier="1:1" id="mpK-z1-1hE"/> - <constraint firstAttribute="width" constant="32" id="u03-Cv-8L6"/> - </constraints> <connections> <action selector="openVideoMenu:" target="3" id="pOh-qk-4IK"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cja-ZG-8LF" customClass="VLCImageButton"> - <rect key="frame" x="82" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="waveform.circle" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="5em-Cm-yoF"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="cja-ZG-8LF" customClass="VLCImageButton"> + <rect key="frame" x="106" y="0.0" width="43" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="waveform" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5em-Cm-yoF"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" secondItem="cja-ZG-8LF" secondAttribute="height" multiplier="1:1" id="Hc7-cx-AiL"/> - <constraint firstAttribute="width" constant="32" id="NiS-Cd-FWu"/> - </constraints> <connections> <action selector="openAudioMenu:" target="3" id="hHT-Oc-wgF"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YTl-LZ-WDe" customClass="VLCImageButton"> - <rect key="frame" x="119" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="text.bubble" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="1qF-LY-LkO"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="YTl-LZ-WDe" customClass="VLCImageButton"> + <rect key="frame" x="154" y="0.0" width="45" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="text.bubble" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1qF-LY-LkO"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" secondItem="YTl-LZ-WDe" secondAttribute="height" multiplier="1:1" id="2QI-lH-hlk"/> - <constraint firstAttribute="width" constant="32" id="lX6-ad-1gX"/> - <constraint firstAttribute="width" secondItem="YTl-LZ-WDe" secondAttribute="height" multiplier="1:1" id="vzf-FG-VLf"/> - </constraints> <connections> <action selector="openSubtitlesMenu:" target="3" id="X6e-aG-mVF"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4tZ-52-1q9" customClass="VLCImageButton"> - <rect key="frame" x="156" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="bookmark.circle" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="bGc-fn-jgQ"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="4tZ-52-1q9" customClass="VLCImageButton"> + <rect key="frame" x="204" y="0.0" width="42" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="bookmark.fill" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="bGc-fn-jgQ"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" secondItem="4tZ-52-1q9" secondAttribute="height" multiplier="1:1" id="UdU-aK-B0s"/> - <constraint firstAttribute="width" constant="32" id="oY2-hp-RHB"/> - <constraint firstAttribute="width" secondItem="4tZ-52-1q9" secondAttribute="height" multiplier="1:1" id="pSW-vN-Ly5"/> - </constraints> <connections> <action selector="openBookmarks:" target="3" id="o6m-9M-L4U"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8jZ-hd-YVq" customClass="VLCImageButton"> - <rect key="frame" x="193" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="play.rectangle.on.rectangle.fill" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="fyV-F5-ogO"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="8jZ-hd-YVq" customClass="VLCImageButton"> + <rect key="frame" x="251" y="0.0" width="47" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="play.rectangle.on.rectangle" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="fyV-F5-ogO"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" constant="32" id="QNF-zS-6Sz"/> - <constraint firstAttribute="width" secondItem="8jZ-hd-YVq" secondAttribute="height" multiplier="1:1" id="iNf-6g-2uS"/> - </constraints> <connections> <action selector="toggleFloatOnTop:" target="3" id="BvH-qi-jx1"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dYZ-ri-Kra" customClass="VLCImageButton"> - <rect key="frame" x="230" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="arrow.up.left.and.arrow.down.right" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="Z8g-js-0W6"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="dYZ-ri-Kra" customClass="VLCImageButton"> + <rect key="frame" x="303" y="0.0" width="44" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="arrow.up.left.and.arrow.down.right" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Z8g-js-0W6"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" secondItem="dYZ-ri-Kra" secondAttribute="height" multiplier="1:1" id="cHQ-Fu-L8k"/> - <constraint firstAttribute="width" constant="32" id="quS-fD-Od7"/> - </constraints> <connections> <action selector="fullscreen:" target="3" id="0Kk-UV-WtF"/> </connections> </button> - <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yEi-SZ-SIS" customClass="VLCImageButton"> - <rect key="frame" x="267" y="-1" width="32" height="33"/> - <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="pip.enter" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="Q7p-GS-7p0"> + <button wantsLayer="YES" horizontalHuggingPriority="1000" verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="yEi-SZ-SIS" customClass="VLCImageButton"> + <rect key="frame" x="352" y="0.0" width="47" height="28"/> + <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="pip.enter" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Q7p-GS-7p0"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> - <constraints> - <constraint firstAttribute="width" secondItem="yEi-SZ-SIS" secondAttribute="height" multiplier="1:1" id="00T-hb-4vg"/> - <constraint firstAttribute="width" constant="32" id="dxa-Jx-T4p"/> - </constraints> <connections> <action selector="onPipButtonClick:" target="3" id="2Yi-Jo-2No"/> </connections> </button> </subviews> + <constraints> + <constraint firstItem="yEi-SZ-SIS" firstAttribute="height" secondItem="dYZ-ri-Kra" secondAttribute="height" id="64q-0T-ZPt"/> + <constraint firstItem="cja-ZG-8LF" firstAttribute="height" secondItem="95O-Oc-zrQ" secondAttribute="height" id="OBm-W4-hRF"/> + <constraint firstItem="95O-Oc-zrQ" firstAttribute="height" secondItem="GHq-pt-nIe" secondAttribute="height" id="Pyc-a9-WZc"/> + <constraint firstItem="8jZ-hd-YVq" firstAttribute="height" secondItem="4tZ-52-1q9" secondAttribute="height" id="YuZ-7m-v6h"/> + <constraint firstItem="4tZ-52-1q9" firstAttribute="height" secondItem="YTl-LZ-WDe" secondAttribute="height" id="iiX-nL-dTj"/> + <constraint firstItem="dYZ-ri-Kra" firstAttribute="height" secondItem="8jZ-hd-YVq" secondAttribute="height" id="qHA-c2-Xxs"/> + <constraint firstItem="YTl-LZ-WDe" firstAttribute="height" secondItem="cja-ZG-8LF" secondAttribute="height" id="zcJ-Oe-WPZ"/> + </constraints> <visibilityPriorities> <integer value="1000"/> <integer value="1000"/> @@ -294,24 +267,23 @@ </customSpacing> </stackView> <stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zyp-45-IgR"> - <rect key="frame" x="309" y="0.0" width="117" height="32"/> + <rect key="frame" x="409" y="0.0" width="113" height="28"/> <subviews> <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="afi-4d-rQk" customClass="VLCImageButton"> - <rect key="frame" x="0.0" y="-1" width="32" height="33"/> + <rect key="frame" x="0.0" y="0.0" width="28" height="28"/> <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="volume.3.fill" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="POe-ne-XtP"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> <constraints> - <constraint firstAttribute="width" secondItem="afi-4d-rQk" secondAttribute="height" multiplier="1:1" id="2lo-OW-sv9"/> - <constraint firstAttribute="width" constant="32" id="PWI-LB-n9j"/> + <constraint firstAttribute="width" secondItem="afi-4d-rQk" secondAttribute="height" multiplier="1:1" id="1JT-8w-PUo"/> </constraints> <connections> <action selector="volumeAction:" target="3" id="GOu-6c-pg9"/> </connections> </button> <slider verticalHuggingPriority="750" horizontalCompressionResistancePriority="800" translatesAutoresizingMaskIntoConstraints="NO" id="fKc-2d-Uu6" customClass="VLCVolumeSlider"> - <rect key="frame" x="35" y="8" width="84" height="17"/> + <rect key="frame" x="33" y="8" width="80" height="12"/> <constraints> <constraint firstAttribute="width" constant="80" id="cWg-Fr-x0Z"/> </constraints> @@ -373,10 +345,10 @@ </shadow> </customView> <stackView wantsLayer="YES" distribution="fill" orientation="horizontal" alignment="centerY" spacing="20" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CvV-yX-Nbh"> - <rect key="frame" x="208" y="208" width="304" height="64"/> + <rect key="frame" x="207" y="208" width="336" height="64"/> <subviews> <button translatesAutoresizingMaskIntoConstraints="NO" id="AXA-01-AU8" customClass="VLCImageButton"> - <rect key="frame" x="0.0" y="13" width="32" height="40"/> + <rect key="frame" x="0.0" y="5" width="48" height="56"/> <shadow key="shadow" blurRadius="20"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> @@ -386,16 +358,15 @@ </buttonCell> <color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267140000001" colorSpace="custom" customColorSpace="sRGB"/> <constraints> - <constraint firstAttribute="width" constant="32" id="Xh5-1i-dxH"/> + <constraint firstAttribute="width" constant="48" id="Xh5-1i-dxH"/> <constraint firstAttribute="width" secondItem="AXA-01-AU8" secondAttribute="height" multiplier="1:1" id="lgn-JT-8Qk"/> - <constraint firstAttribute="width" secondItem="AXA-01-AU8" secondAttribute="height" multiplier="1:1" id="tkp-uc-bfs"/> </constraints> <connections> <action selector="jumpBackward:" target="3" id="Kkq-12-jbm"/> </connections> </button> <button translatesAutoresizingMaskIntoConstraints="NO" id="V9d-hX-iyg" customClass="VLCImageButton"> - <rect key="frame" x="52" y="6.5" width="48.5" height="51"/> + <rect key="frame" x="68" y="6.5" width="48.5" height="51"/> <shadow key="shadow" blurRadius="20"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> @@ -413,11 +384,11 @@ </connections> </button> <button translatesAutoresizingMaskIntoConstraints="NO" id="PCC-8a-sVF" customClass="VLCImageButton"> - <rect key="frame" x="120" y="-1.5" width="64.5" height="68"/> + <rect key="frame" x="136" y="-1.5" width="64.5" height="68"/> <shadow key="shadow" blurRadius="30"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> - <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="play.fill" catalog="system" imagePosition="overlaps" alignment="center" alternateImage="VLCPauseTemplate" imageScaling="proportionallyUpOrDown" inset="2" id="Jk0-sw-EOp"> + <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="play.fill" catalog="system" imagePosition="only" alignment="center" alternateImage="VLCPauseTemplate" imageScaling="proportionallyUpOrDown" inset="2" id="Jk0-sw-EOp"> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="system"/> </buttonCell> @@ -434,7 +405,7 @@ </connections> </button> <button translatesAutoresizingMaskIntoConstraints="NO" id="sF5-Z0-bef" customClass="VLCImageButton"> - <rect key="frame" x="204" y="6.5" width="48.5" height="51"/> + <rect key="frame" x="220" y="6.5" width="48.5" height="51"/> <shadow key="shadow" blurRadius="20"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> @@ -452,7 +423,7 @@ </connections> </button> <button translatesAutoresizingMaskIntoConstraints="NO" id="aAq-uE-mLW" customClass="VLCImageButton"> - <rect key="frame" x="272" y="13" width="32" height="40"/> + <rect key="frame" x="288" y="5" width="48" height="56"/> <shadow key="shadow" blurRadius="20"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> @@ -462,9 +433,8 @@ </buttonCell> <color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267140000001" colorSpace="custom" customColorSpace="sRGB"/> <constraints> - <constraint firstAttribute="width" constant="32" id="OBA-WG-jaz"/> + <constraint firstAttribute="width" constant="48" id="OBA-WG-jaz"/> <constraint firstAttribute="width" secondItem="aAq-uE-mLW" secondAttribute="height" multiplier="1:1" id="eMl-LK-UdE"/> - <constraint firstAttribute="width" secondItem="aAq-uE-mLW" secondAttribute="height" multiplier="1:1" id="g5c-kh-jsZ"/> </constraints> <connections> <action selector="jumpForward:" target="3" id="5yg-na-tAR"/> @@ -487,7 +457,7 @@ </customSpacing> </stackView> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UoQ-34-Pox"> - <rect key="frame" x="20" y="431" width="22" height="29"/> + <rect key="frame" x="20" y="432" width="40" height="28"/> <shadow key="shadow" blurRadius="2"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> @@ -502,7 +472,7 @@ </connections> </button> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Drq-if-dw4"> - <rect key="frame" x="669" y="431" width="31" height="29"/> + <rect key="frame" x="681" y="432" width="48" height="28"/> <shadow key="shadow" blurRadius="2"> <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </shadow> @@ -539,7 +509,7 @@ <color key="fillColor" red="0.0" green="0.0" blue="0.0" alpha="0.35060533940397354" colorSpace="custom" customColorSpace="sRGB"/> </box> <stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CjJ-z0-ITu"> - <rect key="frame" x="324" y="292" width="72" height="32"/> + <rect key="frame" x="339" y="292" width="72" height="32"/> <subviews> <progressIndicator maxValue="100" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="xOQ-YR-iAc"> <rect key="frame" x="0.0" y="0.0" width="32" height="32"/> @@ -588,15 +558,15 @@ <image name="arrow.trianglehead.counterclockwise" catalog="system" width="15" height="17"/> <image name="arrow.up.left.and.arrow.down.right" catalog="system" width="16" height="15"/> <image name="backward.fill" catalog="system" width="20" height="12"/> - <image name="bookmark.circle" catalog="system" width="15" height="15"/> + <image name="bookmark.fill" catalog="system" width="14" height="16"/> <image name="forward.fill" catalog="system" width="20" height="12"/> <image name="photo.tv" catalog="system" width="19" height="15"/> <image name="pin.fill" catalog="system" width="19" height="22"/> <image name="pip.enter" catalog="system" width="20" height="16"/> <image name="play.fill" catalog="system" width="12" height="13"/> - <image name="play.rectangle.on.rectangle.fill" catalog="system" width="19" height="16"/> + <image name="play.rectangle.on.rectangle" catalog="system" width="19" height="15"/> <image name="text.bubble" catalog="system" width="17" height="16"/> <image name="volume.3.fill" catalog="system" width="22" height="15"/> - <image name="waveform.circle" catalog="system" width="15" height="15"/> + <image name="waveform" catalog="system" width="15" height="16"/> </resources> </document>
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m
Changed
@@ -125,6 +125,21 @@ _videoImageViewAspectRatioConstraint.priority = NSLayoutPriorityRequired; _videoImageViewAspectRatioConstraint.active = NO; + if (@available(macOS 26.0, *)) { +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 + self.playInstantlyButton.bordered = YES; + self.playInstantlyButton.bezelStyle = NSBezelStyleGlass; + self.playInstantlyButton.borderShape = NSControlBorderShapeCircle; + self.playInstantlyButton.image = NSImage imageWithSystemSymbolName:@"play.fill" accessibilityDescription:nil; + self.playInstantlyButton.imageScaling = NSImageScaleProportionallyUpOrDown; + self.playInstantlyButton.controlSize = NSControlSizeExtraLarge; + NSLayoutConstraint activateConstraints:@ + self.playInstantlyButton.widthAnchor constraintEqualToConstant:VLCLibraryUIUnits.mediumPlaybackControlButtonSize, + self.playInstantlyButton.heightAnchor constraintEqualToConstant:VLCLibraryUIUnits.mediumPlaybackControlButtonSize, + ; +#endif + } + (VLCTrackingView *)self.view setViewToHide:self.playInstantlyButton; self.secondaryInfoTextField.textColor = NSColor.VLClibrarySubtitleColor; self.annotationTextField.font = NSFont.VLCLibraryItemAnnotationFont;
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/library/VLCLibraryTableCellView.m -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/library/VLCLibraryTableCellView.m
Changed
@@ -32,6 +32,7 @@ #import "library/VLCLibraryImageCache.h" #import "library/VLCLibraryModel.h" #import "library/VLCLibraryRepresentedItem.h" +#import "library/VLCLibraryUIUnits.h" #import "library/video-library/VLCLibraryVideoGroupDescriptor.h" @@ -56,6 +57,17 @@ - (void)awakeFromNib { self prepareForReuse; + + if (@available(macOS 26.0, *)) { +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 + self.playInstantlyButton.bordered = YES; + self.playInstantlyButton.bezelStyle = NSBezelStyleGlass; + self.playInstantlyButton.borderShape = NSControlBorderShapeCircle; + self.playInstantlyButton.image = NSImage imageWithSystemSymbolName:@"play.fill" accessibilityDescription:nil; + self.playInstantlyButton.imageScaling = NSImageScaleProportionallyUpOrDown; + self.playInstantlyButton.controlSize = NSControlSizeExtraLarge; +#endif + } } - (void)prepareForReuse
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.m -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.m
Changed
@@ -144,6 +144,21 @@ self.genreNameTextButton.action = @selector(secondaryDetailAction:); self.trackingView.viewToHide = self.playInstantlyButton; + if (@available(macOS 26.0, *)) { +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 + self.playInstantlyButton.bordered = YES; + self.playInstantlyButton.bezelStyle = NSBezelStyleGlass; + self.playInstantlyButton.borderShape = NSControlBorderShapeCircle; + self.playInstantlyButton.image = NSImage imageWithSystemSymbolName:@"play.fill" accessibilityDescription:nil; + self.playInstantlyButton.imageScaling = NSImageScaleProportionallyUpOrDown; + self.playInstantlyButton.controlSize = NSControlSizeExtraLarge; + NSLayoutConstraint activateConstraints:@ + self.playInstantlyButton.widthAnchor constraintEqualToConstant:VLCLibraryUIUnits.mediumPlaybackControlButtonSize, + self.playInstantlyButton.heightAnchor constraintEqualToConstant:VLCLibraryUIUnits.mediumPlaybackControlButtonSize, + ; +#endif + } + if (@available(macOS 10.14, *)) { self.artistNameTextButton.contentTintColor = NSColor.VLCAccentColor; self.genreNameTextButton.contentTintColor = NSColor.secondaryLabelColor;
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m
Changed
@@ -30,6 +30,7 @@ #import "library/VLCInputItem.h" #import "library/VLCLibraryMenuController.h" #import "library/VLCLibraryImageCache.h" +#import "library/VLCLibraryUIUnits.h" #import "library/media-source/VLCMediaSourceDataSource.h" @@ -68,6 +69,21 @@ self.annotationTextField.backgroundColor = NSColor.VLClibraryAnnotationBackgroundColor; self.highlightBox.borderColor = NSColor.VLCAccentColor; + if (@available(macOS 26.0, *)) { +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 + self.playInstantlyButton.bordered = YES; + self.playInstantlyButton.bezelStyle = NSBezelStyleGlass; + self.playInstantlyButton.borderShape = NSControlBorderShapeCircle; + self.playInstantlyButton.image = NSImage imageWithSystemSymbolName:@"play.fill" accessibilityDescription:nil; + self.playInstantlyButton.imageScaling = NSImageScaleProportionallyUpOrDown; + self.playInstantlyButton.controlSize = NSControlSizeExtraLarge; + NSLayoutConstraint activateConstraints:@ + self.playInstantlyButton.widthAnchor constraintEqualToConstant:VLCLibraryUIUnits.mediumPlaybackControlButtonSize, + self.playInstantlyButton.heightAnchor constraintEqualToConstant:VLCLibraryUIUnits.mediumPlaybackControlButtonSize, + ; +#endif + } + if (@available(macOS 10.14, *)) { NSApplication.sharedApplication addObserver:self forKeyPath:@"effectiveAppearance"
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.h -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.h
Changed
@@ -89,4 +89,7 @@ - (void)updateMuteVolumeButton:(NSNotification *)aNotification; - (void)updateCurrentItemDisplayControls:(NSNotification *)aNotification; +- (void)playerStateUpdated:(NSNotification *)notification; +- (void)updateCurrentItemDisplayControls:(NSNotification *)notification; + @end
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m
Changed
@@ -144,18 +144,23 @@ self.fullscreenButton.accessibilityLabel = self.fullscreenButton.toolTip; if (@available(macOS 11.0, *)) { - _playImage = NSImage imageWithSystemSymbolName:@"play.circle.fill" - accessibilityDescription:_NS("Play"); - _pressedPlayImage = NSImage imageWithSystemSymbolName:@"play.circle.fill" - accessibilityDescription:_NS("Play"); - _pauseImage = NSImage imageWithSystemSymbolName:@"pause.circle.fill" - accessibilityDescription:_NS("Pause"); - _pressedPauseImage = NSImage imageWithSystemSymbolName:@"pause.circle.fill" - accessibilityDescription:_NS("Pause"); - _backwardImage = NSImage imageWithSystemSymbolName:@"backward.fill" - accessibilityDescription:_NS("Previous"); - _forwardImage = NSImage imageWithSystemSymbolName:@"forward.fill" - accessibilityDescription:_NS("Next"); + if (@available(macOS 26.0, *)) { + _playImage = NSImage imageWithSystemSymbolName:@"play.fill" accessibilityDescription:_NS("Play"); + _pressedPlayImage = NSImage imageWithSystemSymbolName:@"play.fill" accessibilityDescription:_NS("Play"); + _pauseImage = NSImage imageWithSystemSymbolName:@"pause.fill" accessibilityDescription:_NS("Pause"); + _pressedPauseImage = NSImage imageWithSystemSymbolName:@"pause.fill" accessibilityDescription:_NS("Pause"); + } else { + _playImage = NSImage imageWithSystemSymbolName:@"play.circle.fill" + accessibilityDescription:_NS("Play"); + _pressedPlayImage = NSImage imageWithSystemSymbolName:@"play.circle.fill" + accessibilityDescription:_NS("Play"); + _pauseImage = NSImage imageWithSystemSymbolName:@"pause.circle.fill" + accessibilityDescription:_NS("Pause"); + _pressedPauseImage = NSImage imageWithSystemSymbolName:@"pause.circle.fill" + accessibilityDescription:_NS("Pause"); + } + _backwardImage = NSImage imageWithSystemSymbolName:@"backward.fill" accessibilityDescription:_NS("Previous"); + _forwardImage = NSImage imageWithSystemSymbolName:@"forward.fill" accessibilityDescription:_NS("Next"); _fullscreenImage = NSImage imageWithSystemSymbolName:@"arrow.up.backward.and.arrow.down.forward" accessibilityDescription:_NS("Fullscreen"); _mutedVolumeImage = NSImage imageWithSystemSymbolName:@"speaker.slash.fill" @@ -246,8 +251,6 @@ self.forwardButton setAction:@selector(fwd:); self.backwardButton setAction:@selector(bwd:); - self playerStateUpdated:nil; - self.artworkImageView.cropsImagesToRoundedCorners = YES; self.artworkImageView.image = NSImage imageNamed:@"noart"; self.artworkImageView.contentGravity = VLCImageViewContentGravityResize; @@ -414,6 +417,7 @@ self updateMuteVolumeButtonImage; self updatePlaybackControls:nil; self updateCurrentItemDisplayControls:nil; + self playerStateUpdated:nil; } - (void)updateTimeSlider:(NSNotification *)aNotification;
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m
Changed
@@ -44,6 +44,9 @@ VLCPlayQueueController *_playQueueController; VLCPlayerController *_playerController; } + +@property (readonly) NSImageSymbolConfiguration *mainButtonsSymbolConfig API_AVAILABLE(macos(26.0)); + @end @implementation VLCMainVideoViewControlsBar @@ -52,14 +55,14 @@ { super awakeFromNib; - _bookmarksButton.toolTip = _NS("Bookmarks"); - _bookmarksButton.accessibilityLabel = _bookmarksButton.toolTip; + self.bookmarksButton.toolTip = _NS("Bookmarks"); + self.bookmarksButton.accessibilityLabel = self.bookmarksButton.toolTip; - _subtitlesButton.toolTip = _NS("Subtitle settings"); - _subtitlesButton.accessibilityLabel = _subtitlesButton.toolTip; + self.subtitlesButton.toolTip = _NS("Subtitle settings"); + self.subtitlesButton.accessibilityLabel = self.subtitlesButton.toolTip; - _audioButton.toolTip = _NS("Audio settings"); - _audioButton.accessibilityLabel = _audioButton.toolTip; + self.audioButton.toolTip = _NS("Audio settings"); + self.audioButton.accessibilityLabel = self.audioButton.toolTip; self.videoButton.toolTip = _NS("Video settings"); self.videoButton.accessibilityLabel = self.videoButton.toolTip; @@ -67,6 +70,36 @@ self.playbackRateButton.toolTip = _NS("Playback rate"); self.playbackRateButton.accessibilityLabel = self.playbackRateButton.toolTip; + if (@available(macOS 26.0, *)) { +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000 + _mainButtonsSymbolConfig = NSImageSymbolConfiguration configurationWithPaletteColors:@NSColor.whiteColor; + NSArray<NSButton *> * const buttons = @ + self.playButton, + self.backwardButton, + self.forwardButton, + self.jumpBackwardButton, + self.jumpForwardButton, + self.bookmarksButton, + self.subtitlesButton, + self.audioButton, + self.videoButton, + self.fullscreenButton, + self.floatOnTopButton, + self.playbackRateButton, + self.pipButton, + self.muteVolumeButton, + ; + for (NSButton * const button in buttons) { + button.bordered = YES; + button.borderShape = NSControlBorderShapeCapsule; + button.bezelStyle = NSBezelStyleGlass; + button.layer = CALayer layer; + button.image = button.image imageWithSymbolConfiguration:_mainButtonsSymbolConfig; + button.alternateImage = button.alternateImage imageWithSymbolConfiguration:_mainButtonsSymbolConfig; + } +#endif + } + _playQueueController = VLCMain.sharedInstance.playQueueController; _playerController = _playQueueController.playerController; @@ -145,6 +178,13 @@ self.playbackRateButton.title = NSString stringWithFormat:@"%.1fx", _playerController.playbackRate; self.playbackRateButton.enabled = _playerController.rateChangable; + + if (@available(macOS 26.0, *)) { + NSMutableAttributedString * const colorTitle = NSMutableAttributedString alloc initWithAttributedString:self.playbackRateButton.attributedTitle; + const NSRange titleRange = NSMakeRange(0, colorTitle.length); + colorTitle addAttribute:NSForegroundColorAttributeName value:NSColor.whiteColor range:titleRange; + self.playbackRateButton.attributedTitle = colorTitle; + } } - (IBAction)openPlaybackRate:(id)sender @@ -230,4 +270,42 @@ self.subtitlesButton.hidden = currentItemIsAudio; } +- (void)playerStateUpdated:(NSNotification *)notification +{ + super playerStateUpdated:notification; + if (@available(macOS 26.0, *)) { + if (self.mainButtonsSymbolConfig == nil) + return; + self.playButton.image = self.playButton.image imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.playButton.alternateImage = self.playButton.alternateImage imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + } +} + +- (void)updateCurrentItemDisplayControls:(NSNotification *)notification +{ + super updateCurrentItemDisplayControls:notification; + if (@available(macOS 26.0, *)) { + if (self.mainButtonsSymbolConfig == nil) + return; + self.forwardButton.image = self.forwardButton.image imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.forwardButton.alternateImage = self.forwardButton.alternateImage imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.backwardButton.image = self.backwardButton.image imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.backwardButton.alternateImage = self.backwardButton.alternateImage imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.jumpForwardButton.image = self.jumpForwardButton.image imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.jumpForwardButton.alternateImage = self.jumpForwardButton.alternateImage imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.jumpBackwardButton.image = self.jumpBackwardButton.image imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + self.jumpBackwardButton.alternateImage = self.jumpBackwardButton.alternateImage imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + } +} + +- (void)updateMuteVolumeButtonImage +{ + super updateMuteVolumeButtonImage; + if (@available(macOS 26.0, *)) { + if (self.mainButtonsSymbolConfig == nil) + return; + self.muteVolumeButton.image = self.muteVolumeButton.image imageWithSymbolConfiguration:self.mainButtonsSymbolConfig; + } +} + @end
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/qt/medialibrary/qml/ArtistTopBanner.qml -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/qt/medialibrary/qml/ArtistTopBanner.qml
Changed
@@ -205,6 +205,8 @@ //we probably want to keep this button like the other action buttons colorContext.palette: VLCStyle.palette + showText: actionButtons.width > VLCStyle.colWidth(2) + onClicked: MediaLib.addAndPlay( artist.id ) } @@ -213,6 +215,8 @@ iconTxt: VLCIcons.enqueue text: qsTr("Enqueue all") onClicked: MediaLib.addToPlaylist( artist.id ) + + showText: actionButtons.width > VLCStyle.colWidth(2) } } }
View file
_service:obs_scm:vlc-beta-20250813.d99784206.obscpio/modules/gui/qt/widgets/qml/ButtonExt.qml -> _service:obs_scm:vlc-beta-20250815.560134941.obscpio/modules/gui/qt/widgets/qml/ButtonExt.qml
Changed
@@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (C) 2019 VLC authors and VideoLAN + * Copyright (C) 2025 VLC authors and VideoLAN * * 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 @@ -31,7 +31,10 @@ // Properties - property bool selected: false + property bool showText: (text.length > 0) + + property bool selected: false // WARNING: This property is deprecated. Use `checked` instead. + checked: selected property bool busy: false @@ -46,7 +49,7 @@ property bool extBackgroundAnimation: false // Aliases - property alias iconRotation: icon.rotation + property real iconRotation // Settings @@ -71,6 +74,14 @@ Accessible.onPressAction: control.clicked() + // Tooltip + + T.ToolTip.visible: (T.ToolTip.text && (!showText || label.implicitWidth > label.width) && (hovered || visualFocus)) + + T.ToolTip.delay: VLCStyle.delayToolTipAppear + + T.ToolTip.text: text + // Childs @@ -78,100 +89,103 @@ id: theme colorSet: ColorContext.ButtonStandard - focused: control.activeFocus + focused: control.visualFocus hovered: control.hovered enabled: control.enabled pressed: control.down } background: Widgets.AnimatedBackground { - id: background - - height: control.height - width: control.width - enabled: theme.initialized && !control.extBackgroundAnimation color: theme.bg.primary - border.color: control.visualFocus ? control.colorFocus : theme.border - } + border.color: control.visualFocus ? control.colorFocus + : (theme.border.a > 0.0 ? theme.border : color) - contentItem: Item { - implicitWidth: tabRow.implicitWidth - implicitHeight: tabRow.implicitHeight + Rectangle { + anchors { + bottom: parent.bottom + bottomMargin: VLCStyle.margin_xxxsmall + horizontalCenter: parent.horizontalCenter + } - RowLayout { - id: tabRow + implicitWidth: (parent.width - VLCStyle.margin_xsmall) + implicitHeight: VLCStyle.heightBar_xxxsmall - anchors.fill: parent + width: control.contentItem?.implicitWidth ?? implicitWidth - spacing: control.spacing + visible: (width > 0 && control.checked) + } + } - Item { - Layout.fillHeight: true + contentItem: RowLayout { + spacing: 0 - implicitWidth: VLCStyle.fontHeight_normal - implicitHeight: VLCStyle.fontHeight_normal + Item { + Layout.fillWidth: true + } - visible: (control.iconTxt !== "") || control.busy + Widgets.IconLabel { + id: iconLabel - Widgets.IconLabel { - id: icon + visible: text.length > 0 - anchors.fill: parent + rotation: control.iconRotation - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter + text: control.iconTxt - visible: (!control.busy) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter - text: control.iconTxt + color: Qt.alpha(control.color, control.busy ? 0.0 : 1.0) - color: control.color + font.pixelSize: control.iconSize - font.pixelSize: control.iconSize - } + Layout.fillWidth: !label.visible + Layout.fillHeight: true - // FIXME: use Control.Templates - BusyIndicator { - anchors.fill: parent + // FIXME: use `BusyIndicatorExt` when it is ready (!7180) + BusyIndicator { + anchors.fill: parent - padding: 0 + padding: 0 - running: control.busy + running: control.busy - palette.text: theme.fg.primary - } + palette.text: control.color + palette.dark: control.color } + } - Widgets.ListLabel { - Layout.fillWidth: true - Layout.fillHeight: true + T.Label { + id: label - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter + visible: control.showText - text: control.text + text: control.text - //button text is already exposed - Accessible.ignored: true + verticalAlignment: Text.AlignVCenter - color: theme.fg.primary - } - } + color: control.color - Rectangle { - anchors.left: tabRow.left - anchors.right: tabRow.right - anchors.bottom: tabRow.bottom + elide: Text.ElideRight - height: 2 + font.pixelSize: VLCStyle.fontSize_normal + font.weight: Font.DemiBold - visible: control.selected + textFormat: Text.PlainText - color: "transparent" + //button text is already exposed + Accessible.ignored: true + + Layout.fillWidth: true + Layout.fillHeight: true + Layout.maximumWidth: implicitWidth + 1 + Layout.leftMargin: iconLabel.visible ? VLCStyle.margin_xsmall : 0 + } - border.color: theme.accent + Item { + Layout.fillWidth: true } } }
View file
_service:obs_scm:vlc-beta.obsinfo
Changed
@@ -1,4 +1,4 @@ name: vlc-beta -version: 20250813.d99784206 -mtime: 1755063886 -commit: d997842067977caa4c54d5c7c9c3f0e72061f330 +version: 20250815.560134941 +mtime: 1755267861 +commit: 560134941dfcd56b060d96f082eab5d6e5f4c25d
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.