From 9e3683c5e3d05d7310e4b53fa6c3de9e65fd32ed Mon Sep 17 00:00:00 2001 From: Rafael Rosa Date: Wed, 16 Aug 2023 01:23:11 -0300 Subject: [PATCH 1/3] chore: make compact works on fullscreen (cherry picked from commit e4bae183474cd981d3292755a464a1632026f37a) # Conflicts: # src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs --- .../MediaPlayerElement/MediaPlayerElement.cs | 6 +- .../MediaTransportControls.cs | 94 +++++++++++++++---- 2 files changed, 78 insertions(+), 22 deletions(-) diff --git a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaPlayerElement.cs b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaPlayerElement.cs index 8471cc245a6b..a2e57c2f7bca 100644 --- a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaPlayerElement.cs +++ b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaPlayerElement.cs @@ -146,11 +146,11 @@ private static void OnIsFullWindowChanged(DependencyObject sender, DependencyPro { sender.Maybe(mpe => { - mpe.ToogleFullScreen((bool)args.NewValue); + mpe.ToggleFullScreen((bool)args.NewValue); }); } - private void ToogleFullScreen(bool showFullscreen) + private void ToggleFullScreen(bool showFullscreen) { try { @@ -191,6 +191,8 @@ private void ToogleFullScreen(bool showFullscreen) _mediaPlayerPresenter?.ExitFullScreen(); #endif } + TransportControls.SetMeasureCommandBar(); + } finally { diff --git a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs index a67911d922bb..b75522765b9b 100644 --- a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs +++ b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs @@ -24,6 +24,11 @@ #else using PointerDeviceType = Windows.Devices.Input.PointerDeviceType; using Uno.UI.Xaml.Core; +<<<<<<< HEAD +======= +using Uno.UI.Controls.Legacy; +using Windows.UI.ViewManagement; +>>>>>>> e4bae18347 (chore: make compact works on fullscreen) #endif #if __IOS__ @@ -43,6 +48,7 @@ public partial class MediaTransportControls : Control private MediaPlayerElement? _mpe; private readonly SerialDisposable _subscriptions = new(); private bool _isMeasureCommandBarRunning; + private bool _isMeasureCommandBarRequested; #pragma warning disable CS0649 private bool m_transportControlsEnabled = true; // not-implemented @@ -527,29 +533,30 @@ private void OnCommandBarLoaded(object? sender, RoutedEventArgs e) if (m_tpCommandBar is not null) { m_tpCommandBar.Loaded -= OnCommandBarLoaded; + this.LayoutUpdated += MediaTransportControls_LayoutUpdated; m_tpCommandBar.SizeChanged += Container_SizeChanged; m_tpCommandBar.DynamicOverflowItemsChanging += M_tpCommandBar_DynamicOverflowItemsChanging; - } if (_timelineContainer is not null) { _timelineContainer.SizeChanged += Container_SizeChanged; } - HideMoreButtonIfNecessary(); HideCastButtonIfNecessary(); } + private void MediaTransportControls_LayoutUpdated(object? sender, object e) + { + SetMeasureCommandBar(); + } private void M_tpCommandBar_DynamicOverflowItemsChanging(CommandBar sender, DynamicOverflowItemsChangingEventArgs args) { SetMeasureCommandBar(); } - private void Container_SizeChanged(object sender, SizeChangedEventArgs args) { SetMeasureCommandBar(); } - private void HideMoreButtonIfNecessary() { if (m_tpCommandBar is { SecondaryCommands.Count: 0 }) @@ -1447,17 +1454,20 @@ private void OnSizeChanged(object sender, SizeChangedEventArgs e) // todo: maybe Cleanup: #endif } - private void SetMeasureCommandBar() + public void SetMeasureCommandBar() { _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, MeasureCommandBar); - _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Low, MeasureCommandBar); - Thread.Yield(); } /// /// Measure CommandBar to fit the buttons in given width. /// private void MeasureCommandBar() { + if (_isMeasureCommandBarRunning) + { + _isMeasureCommandBarRequested = true; + return; + } if (!_isMeasureCommandBarRunning && m_tpCommandBar is { }) { try @@ -1467,22 +1477,41 @@ private void MeasureCommandBar() AddMarginsBetweenGroups(); var desiredSize = m_tpCommandBar.DesiredSize; - var availableSize = this.ActualWidth; - if (IsCompact && m_tpTHLeftSidePlayPauseButton as FrameworkElement is { } ppElementy && ppElementy.Visibility == Visibility.Visible) + var availableSize = this.ActualWidth - this.Margin.Left - this.Margin.Right; + if (m_tpRightAppBarSeparator as FrameworkElement is { } rightAppBarSeparator && rightAppBarSeparator.Margin.Right > 0) { - availableSize -= ppElementy.ActualWidth; - if (_timelineContainer as FrameworkElement is { } tlElement) + availableSize -= rightAppBarSeparator.Margin.Right; + } + if (IsCompact) + { + if (m_tpTHLeftSidePlayPauseButton as FrameworkElement is { } ppElementy && ppElementy.Visibility == Visibility.Visible) { - if (tlElement.Visibility == Visibility.Visible && tlElement.DesiredSize.Width <= ppElementy.ActualWidth) - { - tlElement.Visibility = Visibility.Collapsed; - } - if (tlElement.Visibility == Visibility.Collapsed && (availableSize - desiredSize.Width) >= ppElementy.ActualWidth) + availableSize -= ppElementy.ActualWidth; + if (_timelineContainer as FrameworkElement is { } tlElement) { - tlElement.Visibility = Visibility.Visible; + if (tlElement.Visibility == Visibility.Visible && + ( + tlElement.DesiredSize.Width <= ppElementy.ActualWidth || + (availableSize - desiredSize.Width - tlElement.DesiredSize.Width) < 0 + )) + { + tlElement.Visibility = Visibility.Collapsed; + } + if (tlElement.Visibility == Visibility.Collapsed && (availableSize - desiredSize.Width) >= ppElementy.ActualWidth) + { + tlElement.Visibility = Visibility.Visible; + } } } } + else + { + if (_timelineContainer as FrameworkElement is { } tlElement) + { + _timelineContainer.Visibility = Visibility.Visible; + } + } + //this.UpdateLayout(); DropoutOrder(availableSize, desiredSize); AddMarginsBetweenGroups(); @@ -1501,6 +1530,10 @@ private void MeasureCommandBar() _isMeasureCommandBarRunning = false; } } + if (_isMeasureCommandBarRequested) + { + _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, MeasureCommandBar); + } } private void AddMarginsBetweenGroups() { @@ -1581,12 +1614,12 @@ private void AddMarginsBetweenGroups() leftGap = rightGap = (totalWidth - (leftWidth + middleWidth + rightWidth)) / 2; } - if (m_tpLeftAppBarSeparator is { }) + if (m_tpLeftAppBarSeparator is { } && leftGap > 0) { var extraMargin = new Thickness(leftGap / 2, 0, leftGap / 2, 0); m_tpLeftAppBarSeparator.Margin(extraMargin); } - if (m_tpRightAppBarSeparator is { }) + if (m_tpRightAppBarSeparator is { } && rightGap > 0) { var extraMargin = new Thickness(rightGap / 2, 0, rightGap / 2, 0); m_tpRightAppBarSeparator.Margin(extraMargin); @@ -1616,6 +1649,7 @@ private void ResetMargins() private void DropoutOrder(double availableSize, Size desiredSize) { + var reprocess = false; if (m_tpCommandBar is null) { return; @@ -1631,6 +1665,7 @@ private void DropoutOrder(double availableSize, Size desiredSize) widthButton = bt.Width; } var infiniteBounds = new Size(double.PositiveInfinity, double.PositiveInfinity); +<<<<<<< HEAD var difference = availableSize - desiredSize.Width; //To avoid resize intermittent if (difference < widthButton && difference > 0) @@ -1642,7 +1677,26 @@ private void DropoutOrder(double availableSize, Size desiredSize) if (limit == 0) { return; +======= + + var limit = (int)Math.Floor(availableSize / widthButton); + if (IsCompact && _mpe?.IsFullWindow == false) + { + var difference = availableSize - desiredSize.Width; + //To avoid resize intermittent + if (difference < widthButton && difference > 0) + { + return; + } + limit = availableSize > desiredSize.Width ? buttonsCount : (int)Math.Floor(availableSize / widthButton); + //Just process when have size + if (limit == 0) + { + reprocess = true; + } +>>>>>>> e4bae18347 (chore: make compact works on fullscreen) } + var listOrder = new List>(); for (int i = 0; i < buttonsCount; i++) { @@ -1684,7 +1738,7 @@ private void DropoutOrder(double availableSize, Size desiredSize) } } //if the difference is negative, we need to reprocess - if (difference < 0) + if (reprocess) { _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, MeasureCommandBar); } From ca5559a1376c42d155634b24fcb25ab1db132def Mon Sep 17 00:00:00 2001 From: Rafael Rosa Date: Wed, 16 Aug 2023 11:13:39 -0300 Subject: [PATCH 2/3] chore: remove unnecessary comment (cherry picked from commit 22444cb8e15ae31baea9714da6a1a07a28118fa0) --- .../Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs index b75522765b9b..36206c90e5a4 100644 --- a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs +++ b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs @@ -1511,7 +1511,6 @@ private void MeasureCommandBar() _timelineContainer.Visibility = Visibility.Visible; } } - //this.UpdateLayout(); DropoutOrder(availableSize, desiredSize); AddMarginsBetweenGroups(); From 8368aa6f826d64695c307b449613cb576027eb18 Mon Sep 17 00:00:00 2001 From: Rafael Rosa Date: Wed, 16 Aug 2023 22:00:59 -0300 Subject: [PATCH 3/3] chore: merge validation --- .../MediaTransportControls.cs | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs index 36206c90e5a4..f65191ba4f31 100644 --- a/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs +++ b/src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaTransportControls.cs @@ -24,12 +24,8 @@ #else using PointerDeviceType = Windows.Devices.Input.PointerDeviceType; using Uno.UI.Xaml.Core; -<<<<<<< HEAD -======= using Uno.UI.Controls.Legacy; using Windows.UI.ViewManagement; ->>>>>>> e4bae18347 (chore: make compact works on fullscreen) - #endif #if __IOS__ using UIKit; @@ -1664,20 +1660,6 @@ private void DropoutOrder(double availableSize, Size desiredSize) widthButton = bt.Width; } var infiniteBounds = new Size(double.PositiveInfinity, double.PositiveInfinity); -<<<<<<< HEAD - var difference = availableSize - desiredSize.Width; - //To avoid resize intermittent - if (difference < widthButton && difference > 0) - { - return; - } - var limit = availableSize > desiredSize.Width ? buttonsCount : (int)Math.Floor(availableSize / widthButton); - //Just process when have size - if (limit == 0) - { - return; -======= - var limit = (int)Math.Floor(availableSize / widthButton); if (IsCompact && _mpe?.IsFullWindow == false) { @@ -1693,7 +1675,6 @@ private void DropoutOrder(double availableSize, Size desiredSize) { reprocess = true; } ->>>>>>> e4bae18347 (chore: make compact works on fullscreen) } var listOrder = new List>();