internal enum DisplayType
{
/// <summary>
- /// Overlay surface display
+ /// Overlay surface display.
/// </summary>
Overlay,
/// <summary>
- /// Evas image object surface display
+ /// Evas image object surface display.
/// </summary>
Surface,
/// <summary>
- /// This disposes off buffers
+ /// This disposes off buffers.
/// </summary>
None,
}
- internal interface IDisplayable<ErrorType>
+ internal interface IDisplayable<TError>
{
- ErrorType ApplyEvasDisplay(DisplayType type, EvasObject evasObject);
+ TError ApplyEvasDisplay(DisplayType type, EvasObject evasObject);
+ TError ApplyEcoreWindow(IntPtr windowHandle);
+ }
+
+ internal interface IDisplaySetter
+ {
+ TError SetDisplay<TError>(IDisplayable<TError> target);
+ }
+
+ internal class EvasDisplaySetter : IDisplaySetter
+ {
+ private readonly DisplayType _type;
+ private readonly EvasObject _target;
+
+ internal EvasDisplaySetter(DisplayType type, EvasObject target)
+ {
+ if (target == IntPtr.Zero)
+ {
+ throw new ArgumentException("The evas object is not realized.");
+ }
+
+ _type = type;
+ _target = target;
+ }
+
+ public TError SetDisplay<TError>(IDisplayable<TError> target)
+ {
+ return target.ApplyEvasDisplay(_type, _target);
+ }
+ }
+
+ internal class EcoreDisplaySetter : IDisplaySetter
+ {
+ private readonly IntPtr _windowHandle;
+
+ internal EcoreDisplaySetter(IntPtr windowHandle)
+ {
+ _windowHandle = windowHandle;
+ }
+
+ public TError SetDisplay<TError>(IDisplayable<TError> target)
+ {
+ return target.ApplyEcoreWindow(_windowHandle);
+ }
}
/// <summary>
/// Provides a means to wrap various display types.
/// </summary>
- /// <seealso cref="Player"/>
- /// <seealso cref="Camera"/>
- /// <seealso cref="ScreenMirroring"/>
+ /// <seealso cref="T:Tizen.Multimedia.Player"/>
+ /// <seealso cref="T:Tizen.Multimedia.Camera"/>
+ /// <seealso cref="T:Tizen.Multimedia.Remoting.ScreenMirroring"/>
+ /// <since_tizen> 3 </since_tizen>
public class Display
{
- private Display(DisplayType type, EvasObject target)
+ private readonly IDisplaySetter _setter;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="Display"/> class with a <see cref="MediaView"/> class.
+ /// </summary>
+ /// <param name="mediaView">A <see cref="MediaView"/> to display.</param>
+ /// <since_tizen> 3 </since_tizen>
+ public Display(MediaView mediaView)
{
- if (target == null)
+ if (mediaView == null)
{
- throw new ArgumentNullException(nameof(target));
+ throw new ArgumentNullException(nameof(mediaView));
}
- if (target == IntPtr.Zero)
- {
- throw new ArgumentException("The evas object is not realized.");
- }
+ _setter = new EvasDisplaySetter(DisplayType.Surface, mediaView);
- Type = type;
- EvasObject = target;
+ HasMediaView = true;
}
/// <summary>
- /// Initializes a new instance of the <see cref="Display"/> class with a <see cref="MediaView"/> class.
+ /// Initializes a new instance of the <see cref="Display"/> class with a <see cref="Window"/> class.
/// </summary>
- /// <feature>http://tizen.org/feature/multimedia.raw_video</feature>
- /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
- public Display(MediaView mediaView) : this(DisplayType.Surface, mediaView)
+ /// <param name="window">A <see cref="Window"/> to display.</param>
+ /// <since_tizen> 3 </since_tizen>
+ public Display(Window window)
{
- ValidationUtil.ValidateFeatureSupported(Features.RawVideo);
+ if (window == null)
+ {
+ throw new ArgumentNullException(nameof(window));
+ }
+
+ _setter = new EvasDisplaySetter(DisplayType.Overlay, window);
}
/// <summary>
- /// Initializes a new instance of the <see cref="Display"/> class with a <see cref="Window"/> class.
+ /// Initializes a new instance of the <see cref="Display"/> class with a <see cref="NUI.Window"/> class.
/// </summary>
- public Display(Window window) : this(DisplayType.Overlay, window)
+ /// <param name="window">A <see cref="NUI.Window"/> to display.</param>
+ /// <remarks>
+ /// The <see cref="NUI.Window.BackgroundColor"/> must be <see cref="NUI.Color.Transparent"/>
+ /// for the <see cref="Display"/> to be rendered correctly.
+ /// </remarks>
+ /// <since_tizen> 3 </since_tizen>
+ public Display(NUI.Window window)
{
+ if (window == null)
+ {
+ throw new ArgumentNullException(nameof(window));
+ }
+
+ _setter = new EcoreDisplaySetter(window.GetNativeWindowHandler());
}
private EvasObject EvasObject { get; }
private object _owner;
+ internal bool HasMediaView { get; } = false;
+
internal object Owner => _owner;
internal void SetOwner(object newOwner)
_owner = newOwner;
}
- internal ErrorType ApplyTo<ErrorType>(IDisplayable<ErrorType> target)
+ internal TError ApplyTo<TError>(IDisplayable<TError> target)
{
- return target.ApplyEvasDisplay(Type, EvasObject);
+ return _setter.SetDisplay(target);
}
}
}