2 * Copyright(c) 2022 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.ComponentModel;
20 using Tizen.NUI.BaseComponents;
21 using Tizen.NUI.Binding;
26 /// This class creates a border UI.
28 [EditorBrowsable(EditorBrowsableState.Never)]
29 public class DefaultBorder : BindableObject, IDisposable, IBorderInterface
31 #region Constant Fields
32 private static readonly string ResourcePath = FrameworkInformation.ResourcePath;
33 private static readonly string MinimalizeIcon = ResourcePath + "minimalize.png";
34 private static readonly string MaximalizeIcon = ResourcePath + "maximalize.png";
35 private static readonly string CloseIcon = ResourcePath + "close.png";
36 private static readonly string LeftCornerIcon = ResourcePath + "leftCorner.png";
37 private static readonly string RightCornerIcon = ResourcePath + "rightCorner.png";
39 private static readonly string DarkMinimalizeIcon = ResourcePath + "dark_minimalize.png";
40 private static readonly string DarkPreviousIcon = ResourcePath + "dark_smallwindow.png";
41 private static readonly string DarkCloseIcon = ResourcePath + "dark_close.png";
42 private static readonly string DarkLeftCornerIcon = ResourcePath + "dark_leftCorner.png";
43 private static readonly string DarkRightCornerIcon = ResourcePath + "dark_rightCorner.png";
46 private const float DefaultHeight = 50;
47 private const uint DefaultLineThickness = 5;
48 private const uint DefaultTouchThickness = 0;
49 private static readonly Color DefaultBackgroundColor = new Color(0.7f, 0.7f, 0.7f, 0.6f);
50 private static readonly Color DefaultClickedBackgroundColor = new Color(0.7f, 0.7f, 0.7f, 0.7f);
51 private static readonly Size2D DefaultMinSize = new Size2D(100, 0);
52 #endregion //Constant Fields
56 private bool disposed = false;
57 private Color backgroundColor;
58 private View borderView;
60 private ImageView minimalizeIcon;
61 private ImageView maximalizeIcon;
62 private ImageView closeIcon;
63 private ImageView leftCornerIcon;
64 private ImageView rightCornerIcon;
66 private Window.BorderDirection direction = Window.BorderDirection.None;
67 private float preScale = 0;
69 private View windowView = null;
70 private Timer overlayTimer;
72 private uint borderLineThickness;
73 private Size2D minSize;
74 private Size2D maxSize;
75 private Window.BorderResizePolicyType resizePolicy;
80 private PanGestureDetector borderPanGestureDetector;
88 [EditorBrowsable(EditorBrowsableState.Never)]
89 public static readonly BindableProperty BorderLineThicknessProperty = BindableProperty.Create(nameof(BorderLineThickness), typeof(uint), typeof(DefaultBorder), default(uint), propertyChanged: (bindable, oldValue, newValue) =>
91 var instance = (DefaultBorder)bindable;
94 instance.borderLineThickness = (uint)newValue;
95 instance.UpdateProperty();
98 defaultValueCreator: (bindable) =>
100 var instance = (DefaultBorder)bindable;
101 return instance.borderLineThickness;
104 [EditorBrowsable(EditorBrowsableState.Never)]
105 public static readonly BindableProperty MinSizeProperty = BindableProperty.Create(nameof(MinSize), typeof(Size2D), typeof(DefaultBorder), default(Size2D), propertyChanged: (bindable, oldValue, newValue) =>
107 var instance = (DefaultBorder)bindable;
108 if (newValue != null)
110 instance.minSize = (Size2D)newValue;
111 instance.UpdateProperty();
114 defaultValueCreator: (bindable) =>
116 var instance = (DefaultBorder)bindable;
117 return instance.minSize;
120 [EditorBrowsable(EditorBrowsableState.Never)]
121 public static readonly BindableProperty MaxSizeProperty = BindableProperty.Create(nameof(MaxSize), typeof(Size2D), typeof(DefaultBorder), default(Size2D), propertyChanged: (bindable, oldValue, newValue) =>
123 var instance = (DefaultBorder)bindable;
124 if (newValue != null)
126 instance.maxSize = (Size2D)newValue;
127 instance.UpdateProperty();
130 defaultValueCreator: (bindable) =>
132 var instance = (DefaultBorder)bindable;
133 return instance.maxSize;
136 [EditorBrowsable(EditorBrowsableState.Never)]
137 public static readonly BindableProperty ResizePolicyProperty = BindableProperty.Create(nameof(ResizePolicy), typeof(Window.BorderResizePolicyType), typeof(DefaultBorder), default(Window.BorderResizePolicyType), propertyChanged: (bindable, oldValue, newValue) =>
139 var instance = (DefaultBorder)bindable;
140 if (newValue != null)
142 instance.resizePolicy = (Window.BorderResizePolicyType)newValue;
143 instance.UpdateProperty();
146 defaultValueCreator: (bindable) =>
148 var instance = (DefaultBorder)bindable;
149 return instance.resizePolicy;
154 /// The thickness of the border.
156 [EditorBrowsable(EditorBrowsableState.Never)]
157 public uint BorderLineThickness
161 return (uint)GetValue(BorderLineThicknessProperty);
165 SetValue(BorderLineThicknessProperty, value);
170 /// The thickness of the border's touch area.
172 [EditorBrowsable(EditorBrowsableState.Never)]
173 public uint TouchThickness {get; set;}
176 /// The height of the border.
177 /// This value is the initial value used when creating borders.
179 [EditorBrowsable(EditorBrowsableState.Never)]
180 public float BorderHeight {get; set;}
183 /// The minimum size by which the window will small.
185 [EditorBrowsable(EditorBrowsableState.Never)]
186 public Size2D MinSize
190 return (Size2D)GetValue(MinSizeProperty);
194 SetValue(MinSizeProperty, value);
199 /// The maximum size by which the window will big.
201 [EditorBrowsable(EditorBrowsableState.Never)]
202 public Size2D MaxSize
206 return (Size2D)GetValue(MaxSizeProperty);
210 SetValue(MaxSizeProperty, value);
215 /// The window with borders added.
217 [EditorBrowsable(EditorBrowsableState.Never)]
218 public Window BorderWindow {get; set;}
221 /// Whether overlay mode.
222 /// If overlay mode is true, the border area is hidden when the window is maximized.
223 /// And if you touched at screen, the border area is shown on the screen.
224 /// Default value is false;
226 [EditorBrowsable(EditorBrowsableState.Never)]
227 public bool OverlayMode {get; set;}
230 /// Set the window resizing policy.
231 /// Default value is BorderResizePolicyType.Free;
233 [EditorBrowsable(EditorBrowsableState.Never)]
234 public Window.BorderResizePolicyType ResizePolicy
238 return (Window.BorderResizePolicyType)GetValue(ResizePolicyProperty);
242 SetValue(ResizePolicyProperty, value);
247 /// Update properties
249 [EditorBrowsable(EditorBrowsableState.Never)]
250 public void UpdateProperty()
252 BorderWindow?.UpdateProperty();
256 /// Creates a default border
258 [EditorBrowsable(EditorBrowsableState.Never)]
259 public DefaultBorder() : base()
261 BorderLineThickness = DefaultLineThickness;
262 TouchThickness = DefaultTouchThickness;
263 BorderHeight = DefaultHeight;
264 MinSize = DefaultMinSize;
266 ResizePolicy = Window.BorderResizePolicyType.Free;
270 /// Create top border UI. User can override this method to draw top border UI.
272 /// <param name="topView">The top view on which the border.</param>
273 [EditorBrowsable(EditorBrowsableState.Never)]
274 public virtual bool CreateTopBorderView(View topView)
280 /// Create bottom border UI. User can override this method to draw bottom border UI.
282 /// <param name="bottomView">The bottom view on which the border.</param>
283 [EditorBrowsable(EditorBrowsableState.Never)]
284 public virtual bool CreateBottomBorderView(View bottomView)
286 if (bottomView == null)
290 bottomView.Layout = new RelativeLayout();
292 minimalizeIcon = new ImageView()
295 ResourceUrl = MinimalizeIcon,
296 AccessibilityHighlightable = true,
299 maximalizeIcon = new ImageView()
302 ResourceUrl = MaximalizeIcon,
303 AccessibilityHighlightable = true,
306 closeIcon = new ImageView()
309 ResourceUrl = CloseIcon,
310 AccessibilityHighlightable = true,
313 leftCornerIcon = new ImageView()
316 ResourceUrl = LeftCornerIcon,
317 AccessibilityHighlightable = true,
320 rightCornerIcon = new ImageView()
323 ResourceUrl = RightCornerIcon,
324 AccessibilityHighlightable = true,
327 RelativeLayout.SetRightTarget(minimalizeIcon, maximalizeIcon);
328 RelativeLayout.SetRightRelativeOffset(minimalizeIcon, 0.0f);
329 RelativeLayout.SetHorizontalAlignment(minimalizeIcon, RelativeLayout.Alignment.End);
330 RelativeLayout.SetRightTarget(maximalizeIcon, closeIcon);
331 RelativeLayout.SetRightRelativeOffset(maximalizeIcon, 0.0f);
332 RelativeLayout.SetHorizontalAlignment(maximalizeIcon, RelativeLayout.Alignment.End);
333 RelativeLayout.SetRightTarget(closeIcon, rightCornerIcon);
334 RelativeLayout.SetRightRelativeOffset(closeIcon, 0.0f);
335 RelativeLayout.SetHorizontalAlignment(closeIcon, RelativeLayout.Alignment.End);
336 RelativeLayout.SetRightRelativeOffset(rightCornerIcon, 1.0f);
337 RelativeLayout.SetHorizontalAlignment(rightCornerIcon, RelativeLayout.Alignment.End);
338 bottomView.Add(leftCornerIcon);
339 bottomView.Add(minimalizeIcon);
340 bottomView.Add(maximalizeIcon);
341 bottomView.Add(closeIcon);
342 bottomView.Add(rightCornerIcon);
345 minimalizeIcon.TouchEvent += OnMinimizeIconTouched;
346 maximalizeIcon.TouchEvent += OnMaximizeIconTouched;
347 closeIcon.TouchEvent += OnCloseIconTouched;
348 leftCornerIcon.TouchEvent += OnLeftBottomCornerIconTouched;
349 rightCornerIcon.TouchEvent += OnRightBottomCornerIconTouched;
351 minimalizeIcon.AccessibilityActivated += (s, e) =>
353 MinimizeBorderWindow();
355 maximalizeIcon.AccessibilityActivated += (s, e) =>
357 MaximizeBorderWindow();
359 closeIcon.AccessibilityActivated += (s, e) =>
364 minimalizeIcon.AccessibilityNameRequested += (s, e) =>
368 maximalizeIcon.AccessibilityNameRequested += (s, e) =>
372 closeIcon.AccessibilityNameRequested += (s, e) =>
376 leftCornerIcon.AccessibilityNameRequested += (s, e) =>
380 rightCornerIcon.AccessibilityNameRequested += (s, e) =>
385 minimalizeIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
386 maximalizeIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
387 closeIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
388 leftCornerIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
389 rightCornerIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
396 /// Create border UI. User can override this method to draw border UI.
397 /// A top border and a bottom border are added to this view.
399 /// <param name="borderView">The root view on which the border.</param>
400 [EditorBrowsable(EditorBrowsableState.Never)]
401 public virtual void CreateBorderView(View borderView)
403 if (borderView == null)
408 if (string.IsNullOrEmpty(borderView.BackgroundImage))
410 borderView.BackgroundColor = DefaultBackgroundColor;
412 borderView.BorderlineColor = new Color(0.5f, 0.5f, 0.5f, 0.3f);
413 borderView.BorderlineWidth = 1.0f;
414 borderView.BorderlineOffset = -1f;
415 borderView.CornerRadius = new Vector4(0.03f, 0.03f, 0.03f, 0.03f);
416 borderView.CornerRadiusPolicy = VisualTransformPolicyType.Relative;
418 // Register touch event for effect when border is touched.
419 borderView.LeaveRequired = true;
420 borderView.TouchEvent += OnBorderViewTouched;
421 this.borderView = borderView;
424 private bool OnBorderViewTouched(object sender, View.TouchEventArgs e)
426 if (string.IsNullOrEmpty(borderView.BackgroundImage))
428 if (e.Touch.GetState(0) == PointStateType.Started)
430 backgroundColor = new Color(borderView.BackgroundColor);
431 borderView.BackgroundColor = DefaultClickedBackgroundColor;
433 else if (e.Touch.GetState(0) == PointStateType.Finished ||
434 e.Touch.GetState(0) == PointStateType.Leave ||
435 e.Touch.GetState(0) == PointStateType.Interrupted)
437 borderView.BackgroundColor = backgroundColor;
443 /// Determines the behavior of pinch gesture.
444 private void OnPinchGestureDetected(object source, PinchGestureDetector.DetectedEventArgs e)
450 if (e.PinchGesture.State == Gesture.StateType.Started)
452 preScale = e.PinchGesture.Scale;
454 else if (e.PinchGesture.State == Gesture.StateType.Finished || e.PinchGesture.State == Gesture.StateType.Cancelled)
456 if (preScale > e.PinchGesture.Scale)
458 if (BorderWindow.IsMaximized())
460 BorderWindow.Maximize(false);
464 BorderWindow.Minimize(true);
470 BorderWindow.Maximize(true);
475 /// Determines the behavior of borders.
476 private void OnPanGestureDetected(object source, PanGestureDetector.DetectedEventArgs e)
482 PanGesture panGesture = e.PanGesture;
484 if (panGesture.State == Gesture.StateType.Started && panGesture.Position != null)
486 direction = BorderWindow.GetDirection(panGesture.Position.X, panGesture.Position.Y);
488 if (direction == Window.BorderDirection.Move)
490 if (BorderWindow.IsMaximized() == true)
492 BorderWindow.Maximize(false);
497 BorderWindow.RequestMoveToServer();
500 else if (direction != Window.BorderDirection.None && ResizePolicy != Window.BorderResizePolicyType.Fixed)
503 BorderWindow.RequestResizeToServer((Window.ResizeDirection)direction);
506 else if (panGesture.State == Gesture.StateType.Finished || panGesture.State == Gesture.StateType.Cancelled)
508 direction = Window.BorderDirection.None;
513 /// This is an event callback when the left top corner icon is touched.
515 [EditorBrowsable(EditorBrowsableState.Never)]
516 public virtual bool OnLeftTopCornerIconTouched(object sender, View.TouchEventArgs e)
518 SetDispatchParentGestureEvents(sender as View, false);
519 if (e != null && e.Touch.GetState(0) == PointStateType.Down)
521 if (ResizePolicy != Window.BorderResizePolicyType.Fixed)
524 BorderWindow.RequestResizeToServer(Window.ResizeDirection.TopLeft);
531 ///This is an event callback when the right bottom corner icon is touched.
533 [EditorBrowsable(EditorBrowsableState.Never)]
534 public virtual bool OnRightTopCornerIconTouched(object sender, View.TouchEventArgs e)
536 SetDispatchParentGestureEvents(sender as View, false);
537 if (e != null && e.Touch.GetState(0) == PointStateType.Down)
539 if (ResizePolicy != Window.BorderResizePolicyType.Fixed)
542 BorderWindow.RequestResizeToServer(Window.ResizeDirection.TopRight);
550 /// This is an event callback when the left bottom corner icon is touched.
552 [EditorBrowsable(EditorBrowsableState.Never)]
553 public virtual bool OnLeftBottomCornerIconTouched(object sender, View.TouchEventArgs e)
555 SetDispatchParentGestureEvents(sender as View, false);
556 if (e != null && e.Touch.GetState(0) == PointStateType.Down)
558 if (ResizePolicy != Window.BorderResizePolicyType.Fixed)
561 BorderWindow.RequestResizeToServer(Window.ResizeDirection.BottomLeft);
568 ///This is an event callback when the right bottom corner icon is touched.
570 [EditorBrowsable(EditorBrowsableState.Never)]
571 public virtual bool OnRightBottomCornerIconTouched(object sender, View.TouchEventArgs e)
573 SetDispatchParentGestureEvents(sender as View, false);
574 if (e != null && e.Touch.GetState(0) == PointStateType.Down)
576 if (ResizePolicy != Window.BorderResizePolicyType.Fixed)
579 BorderWindow.RequestResizeToServer(Window.ResizeDirection.BottomRight);
587 /// Minimize border window.
589 [EditorBrowsable(EditorBrowsableState.Never)]
590 protected void MinimizeBorderWindow()
592 BorderWindow.Minimize(true);
597 /// This is an event callback when the minimize icon is touched.
599 [EditorBrowsable(EditorBrowsableState.Never)]
600 public virtual bool OnMinimizeIconTouched(object sender, View.TouchEventArgs e)
602 SetDispatchParentGestureEvents(sender as View, false);
603 if (e != null && e.Touch.GetState(0) == PointStateType.Up)
605 MinimizeBorderWindow();
611 /// Maximize border window.
613 [EditorBrowsable(EditorBrowsableState.Never)]
614 protected void MaximizeBorderWindow()
616 if (BorderWindow.IsMaximized())
618 BorderWindow.Maximize(false);
622 BorderWindow.Maximize(true);
627 /// This is an event callback when the maximum icon is touched.
629 [EditorBrowsable(EditorBrowsableState.Never)]
630 public virtual bool OnMaximizeIconTouched(object sender, View.TouchEventArgs e)
632 SetDispatchParentGestureEvents(sender as View, false);
633 if (e != null && e.Touch.GetState(0) == PointStateType.Up)
635 MaximizeBorderWindow();
641 /// Close border window.
643 [EditorBrowsable(EditorBrowsableState.Never)]
644 protected void CloseBorderWindow()
646 BorderWindow.BorderDestroy();
650 /// This is an event callback when the close icon is touched.
652 [EditorBrowsable(EditorBrowsableState.Never)]
653 public virtual bool OnCloseIconTouched(object sender, View.TouchEventArgs e)
655 SetDispatchParentGestureEvents(sender as View, false);
656 if (e != null && e.Touch.GetState(0) == PointStateType.Up)
663 private void SetDispatchParentGestureEvents(View view, bool dispatch)
667 // If this is set, my parents will not receive gesture events.
668 // This is to prevent the move action by PanGesture when the icon is touched.
669 view.DispatchParentGestureEvents = dispatch;
674 private void UpdateIcons()
676 if (BorderWindow != null && borderView != null)
678 if (BorderWindow.IsMaximized() == true)
680 if (maximalizeIcon != null)
682 maximalizeIcon.ResourceUrl = DarkPreviousIcon;
684 if (minimalizeIcon != null)
686 minimalizeIcon.ResourceUrl = DarkMinimalizeIcon;
688 if (closeIcon != null)
690 closeIcon.ResourceUrl = DarkCloseIcon;
692 if (leftCornerIcon != null)
694 leftCornerIcon.ResourceUrl = DarkLeftCornerIcon;
696 if (rightCornerIcon != null)
698 rightCornerIcon.ResourceUrl = DarkRightCornerIcon;
700 borderView.CornerRadius = new Vector4(0, 0, 0, 0);
701 borderView.CornerRadiusPolicy = VisualTransformPolicyType.Relative;
705 if (maximalizeIcon != null)
707 maximalizeIcon.ResourceUrl = MaximalizeIcon;
709 if (minimalizeIcon != null)
711 minimalizeIcon.ResourceUrl = MinimalizeIcon;
713 if (closeIcon != null)
715 closeIcon.ResourceUrl = CloseIcon;
717 if (leftCornerIcon != null)
719 leftCornerIcon.ResourceUrl = LeftCornerIcon;
721 if (rightCornerIcon != null)
723 rightCornerIcon.ResourceUrl = RightCornerIcon;
725 borderView.CornerRadius = new Vector4(0.03f, 0.03f, 0.03f, 0.03f);
726 borderView.CornerRadiusPolicy = VisualTransformPolicyType.Relative;
732 /// Called after the border UI is created.
734 /// <param name="borderView">The border view on which the border.</param>
735 [EditorBrowsable(EditorBrowsableState.Never)]
736 public virtual void OnCreated(View borderView)
738 if (borderView == null)
742 this.borderView = borderView;
744 BorderWindow.BackgroundColor = Color.Transparent;
746 // Register to resize and move through pan gestures.
747 borderPanGestureDetector = new PanGestureDetector();
748 borderPanGestureDetector.Attach(borderView);
749 borderPanGestureDetector.Detected += OnPanGestureDetected;
755 /// Called when requesting a resize
757 [EditorBrowsable(EditorBrowsableState.Never)]
758 public virtual void OnRequestResize() {}
761 /// Called when the window is resized.
763 /// <param name="width">The width of the resized window</param>
764 /// <param name="height">The height of the resized window</param>
765 [EditorBrowsable(EditorBrowsableState.Never)]
766 public virtual void OnResized(int width, int height)
768 if (overlayTimer != null)
771 overlayTimer.Dispose();
778 /// Called when requesting a move
780 [EditorBrowsable(EditorBrowsableState.Never)]
781 public virtual void OnRequestMove() {}
784 /// Called when the window is moved.
786 /// <param name="x">The x of the moved window</param>
787 /// <param name="y">The y of the moved window</param>
788 [EditorBrowsable(EditorBrowsableState.Never)]
789 public virtual void OnMoved(int x, int y) {}
792 /// Called when window has been moved the display server.
794 /// <param name="x">The x of the has been moved window</param>
795 /// <param name="y">The y of the has been moved window</param>
796 [EditorBrowsable(EditorBrowsableState.Never)]
797 public virtual void OnMoveCompleted(int x, int y) {}
800 /// Called when window has been resized the display server.
802 /// <param name="width">The width of the resized window</param>
803 /// <param name="height">The height of the resized window</param>
804 [EditorBrowsable(EditorBrowsableState.Never)]
805 public virtual void OnResizeCompleted(int width, int height) {}
808 /// Called when the window is maximized.
810 /// <param name="isMaximized">If window is maximized or unmaximized.</param>
811 [EditorBrowsable(EditorBrowsableState.Never)]
812 public virtual void OnMaximize(bool isMaximized)
814 Tizen.Log.Info("NUI", $"OnMaximize {isMaximized}\n");
815 if (BorderWindow.IsMaximized() == true)
817 BorderWindow.SetTransparency(false);
821 BorderWindow.SetTransparency(true);
827 /// Called when the window is minimized.
829 /// <param name="isMinimized">If window is mnimized or unminimized.</param>
830 [EditorBrowsable(EditorBrowsableState.Never)]
831 public virtual void OnMinimize(bool isMinimized)
837 /// Called when there is a change in overlay mode.
839 /// <param name="enabled">If true, borderView has entered overlayMode.</param>
840 [EditorBrowsable(EditorBrowsableState.Never)]
841 public virtual void OnOverlayMode(bool enabled)
843 if (borderView != null && OverlayMode == true)
845 Tizen.Log.Info("NUI", $"OnOverlayMode {enabled}\n");
848 backgroundColor = new Color(borderView.BackgroundColor);
849 if (string.IsNullOrEmpty(borderView.BackgroundImage))
851 borderView.BackgroundColor = Color.Transparent;
857 if (string.IsNullOrEmpty(borderView.BackgroundImage))
859 borderView.BackgroundColor = backgroundColor;
867 /// Show the border when OverlayMode is true and the window is now Maximize.
869 /// <param name="time">Time(ms) for borders to disappear again</param>
870 /// <returns>True if border became show, false otherwise</returns>
871 [EditorBrowsable(EditorBrowsableState.Never)]
872 public virtual bool OverlayBorderShow(uint time = 3000)
874 if (BorderWindow != null && BorderWindow.IsMaximized())
876 if (overlayTimer == null)
878 overlayTimer = new Timer(time);
879 overlayTimer.Tick += (s, e) =>
882 overlayTimer?.Stop();
883 overlayTimer?.Dispose();
887 overlayTimer.Start();
892 overlayTimer.Start();
900 /// Hide the border when OverlayMode is true and the window is now Maximize.
902 /// <returns>True if border became hide, false otherwise</returns>
903 [EditorBrowsable(EditorBrowsableState.Never)]
904 public virtual bool OverlayBorderHide()
906 if (BorderWindow != null && BorderWindow.IsMaximized())
909 overlayTimer?.Stop();
910 overlayTimer?.Dispose();
917 [EditorBrowsable(EditorBrowsableState.Never)]
918 public void Dispose()
921 global::System.GC.SuppressFinalize(this);
924 protected virtual void Dispose(bool disposing)
933 borderView?.Dispose();
934 windowView?.Dispose();
935 borderPanGestureDetector?.Dispose();
936 backgroundColor?.Dispose();
937 minimalizeIcon?.Dispose();
938 maximalizeIcon?.Dispose();
939 closeIcon?.Dispose();
940 leftCornerIcon?.Dispose();
941 rightCornerIcon?.Dispose();
942 overlayTimer?.Dispose();