+ 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);
+ }