提交 5b4436f9 编写于 作者: N Nick Randolph 提交者: Jerome Laban

feat: Resizing video for transport controls

上级 6b18dac8
......@@ -32,7 +32,7 @@ public partial class GTKMediaPlayer : Border
private VideoView? _videoView;
private double _ratio;
Windows.UI.Xaml.Media.Stretch _stretch = Windows.UI.Xaml.Media.Stretch.Uniform;
private int _transportControlAdjust = 94;
private Rect _transportControlsBounds;
//public int VideoHeight;
//public int VideoWidth;
public double Duration { get; set; }
......@@ -173,8 +173,8 @@ public partial class GTKMediaPlayer : Border
}
UpdateTransportControlHeight();
var playerHeight = (double)this.ActualHeight - _transportControlAdjust;
//UpdateTransportControlHeight();
var playerHeight = (double)this.ActualHeight - _transportControlsBounds.Height;
var playerWidth = (double)this.ActualWidth;
var playerRatio = playerHeight / playerWidth;
......@@ -263,25 +263,25 @@ public partial class GTKMediaPlayer : Border
}
});
}
protected void UpdateTransportControlHeight()
{
UIElement? container = VisualTreeHelper.GetParent(_videoContainer) as UIElement;
ContentPresenter? ContentPresenter = VisualTreeHelper.GetParent(container) as ContentPresenter;
ContentControl? ContentControl = VisualTreeHelper.GetParent(ContentPresenter) as ContentControl;
MediaPlayerPresenter? MediaPlayerPresenter = VisualTreeHelper.GetParent(ContentControl) as MediaPlayerPresenter;
UIElement? MediaPlayerPresenter2 = VisualTreeHelper.GetParent(MediaPlayerPresenter) as UIElement;
if (MediaPlayerPresenter2 != null)
{
foreach (var child in MediaPlayerPresenter2.GetChildren())
{
if (child is ContentPresenter)
{
_transportControlAdjust = (int)child.DesiredSize.Height;
}
}
}
}
//protected void UpdateTransportControlHeight()
//{
// UIElement? container = VisualTreeHelper.GetParent(_videoContainer) as UIElement;
// ContentPresenter? ContentPresenter = VisualTreeHelper.GetParent(container) as ContentPresenter;
// ContentControl? ContentControl = VisualTreeHelper.GetParent(ContentPresenter) as ContentControl;
// MediaPlayerPresenter? MediaPlayerPresenter = VisualTreeHelper.GetParent(ContentControl) as MediaPlayerPresenter;
// UIElement? MediaPlayerPresenter2 = VisualTreeHelper.GetParent(MediaPlayerPresenter) as UIElement;
// if (MediaPlayerPresenter2 != null)
// {
// foreach (var child in MediaPlayerPresenter2.GetChildren())
// {
// if (child is ContentPresenter)
// {
// _transportControlAdjust = (int)child.DesiredSize.Height;
// }
// }
// }
//}
protected override Size ArrangeOverride(Size finalSize)
{
......@@ -345,4 +345,13 @@ public partial class GTKMediaPlayer : Border
}
}
internal void SetTransportControlsBounds(Rect bounds)
{
if (!_transportControlsBounds.Equals(bounds))
{
_transportControlsBounds = bounds;
UpdateVideoStretch();
}
}
}
......@@ -23,6 +23,7 @@ using Windows.UI.Xaml.Controls.Maps;
using System.Numerics;
using Uno.Logging;
using Windows.UI.Xaml;
using Atk;
[assembly: ApiExtension(typeof(IMediaPlayerExtension), typeof(Uno.UI.Media.MediaPlayerExtension))]
......@@ -38,7 +39,6 @@ public partial class MediaPlayerExtension : IMediaPlayerExtension
private GTKMediaPlayer? _player;
private bool _updatingPosition;
private bool _isPlayRequested;
private bool _isPlayerPrepared;
......@@ -372,6 +372,11 @@ public partial class MediaPlayerExtension : IMediaPlayerExtension
public double AudioBalance { get; set; }
public void SetTransportControlsBounds(Rect bounds)
{
_player?.SetTransportControlsBounds(bounds);
}
public void SetUriSource(Uri uri)
{
//if (this.Log().IsEnabled(LogLevel.Debug))
......
......@@ -7,6 +7,7 @@ using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Uno.UI.Xaml.Controls.MediaPlayer.Internal;
using System.Drawing;
#if __IOS__
using UIKit;
......@@ -241,6 +242,10 @@ namespace Windows.UI.Xaml.Controls
_compactOverlayButton.Tapped -= UpdateMediaTransportControlMode;
_compactOverlayButton.Tapped += UpdateMediaTransportControlMode;
_controlPanelGrid = this.GetTemplateChild(ControlPanelGridName) as Grid;
_controlPanelGrid.SizeChanged -= ControlPanelGridSizeChanged;
_controlPanelGrid.SizeChanged += ControlPanelGridSizeChanged;
_repeatVideoButton = this.GetTemplateChild(RepeatVideoButtonName) as Button;
_repeatVideoButton?.SetBinding(Button.VisibilityProperty, new Binding { Path = "IsRepeatButtonVisible", Source = this, Mode = BindingMode.OneWay, FallbackValue = Visibility.Collapsed, Converter = trueToVisible });
_repeatVideoButton?.SetBinding(Button.IsEnabledProperty, new Binding { Path = "IsRepeatEnabled", Source = this, Mode = BindingMode.OneWay, FallbackValue = true });
......@@ -305,6 +310,11 @@ namespace Windows.UI.Xaml.Controls
}
}
private void ControlPanelGridSizeChanged(object sender, SizeChangedEventArgs args)
{
OnControlsBoundsChanged();
}
private void FullWindowButtonTapped(object sender, RoutedEventArgs e)
{
_mpe.IsFullWindow = !_mpe.IsFullWindow;
......@@ -361,6 +371,7 @@ namespace Windows.UI.Xaml.Controls
{
VisualStateManager.GoToState(this, "ControlPanelFadeIn", false);
});
OnControlsBoundsChanged();
}
public void Hide()
......@@ -374,6 +385,23 @@ namespace Windows.UI.Xaml.Controls
VisualStateManager.GoToState(this, "ControlPanelFadeOut", false);
}
});
OnControlsBoundsChanged();
}
private void OnControlsBoundsChanged()
{
var root = (XamlRoot.Content as UIElement);
if (root is null)
{
return;
}
var transportBounds =
this.TransformToVisual(root)
.TransformBounds(
new Foundation.Rect(
0, 0,
_controlPanelGrid.ActualWidth, _isInteractive ? _controlPanelGrid.ActualHeight : 0));
this._mediaPlayer?.SetTransportControlBounds(transportBounds);
}
private void OnPaneGridTapped(object sender, TappedRoutedEventArgs e)
......@@ -409,11 +437,15 @@ namespace Windows.UI.Xaml.Controls
private void UpdateMediaTransportControlMode()
{
VisualStateManager.GoToState(this, IsCompact ? "CompactMode" : "NormalMode", true);
OnControlsBoundsChanged();
}
private static void OnIsCompactChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
{
VisualStateManager.GoToState((MediaTransportControls)dependencyObject, (bool)args.NewValue ? "CompactMode" : "NormalMode", false);
if (dependencyObject is MediaTransportControls mtc)
{
mtc.UpdateMediaTransportControlMode();
}
}
private static void OnShowAndHideAutomaticallyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
......
......@@ -89,6 +89,11 @@ namespace Uno.Media.Playback
/// </summary>
TimeSpan Position { get; set; }
/// <summary>
/// Sets the transport controls bounds so that video can be displayed around controls
/// </summary>
void SetTransportControlsBounds(Rect bounds);
/// <summary>
/// Sets the source from a Uri
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Security.AccessControl;
using Windows.Foundation;
......@@ -93,5 +94,12 @@ namespace Windows.Media.Playback
}
partial void OnOptionChanged(string name, object value);
internal void SetTransportControlBounds(Rect bounds)
{
OnTransportControlBoundsChanged(bounds);
}
partial void OnTransportControlBoundsChanged(Rect bounds);
}
}
......@@ -9,6 +9,7 @@ using Uno.Foundation.Logging;
using Windows.Foundation;
using Uno.Media.Playback;
using Windows.ApplicationModel.Email;
using System.Drawing;
namespace Windows.Media.Playback
{
......@@ -39,6 +40,9 @@ namespace Windows.Media.Playback
partial void OnOptionChanged(string name, object value)
=> _extension?.OnOptionChanged(name, value);
partial void OnTransportControlBoundsChanged(Rect bounds)
=> _extension?.SetTransportControlsBounds(bounds);
public void Dispose()
=> _extension?.Dispose();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册