[Multimedia] Modified a constructor of the Display class not to check the raw video...
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia / Common / Display.cs
index d300c57..3424027 100644 (file)
@@ -21,65 +21,129 @@ namespace Tizen.Multimedia
     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; }
@@ -88,6 +152,8 @@ namespace Tizen.Multimedia
 
         private object _owner;
 
+        internal bool HasMediaView { get; } = false;
+
         internal object Owner => _owner;
 
         internal void SetOwner(object newOwner)
@@ -100,9 +166,9 @@ namespace Tizen.Multimedia
             _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);
         }
     }
 }