Browse Source

Added comments

Tig 1 year ago
parent
commit
2497419a28
1 changed files with 113 additions and 104 deletions
  1. 113 104
      Terminal.Gui/View/Adornment/Margin.cs

+ 113 - 104
Terminal.Gui/View/Adornment/Margin.cs

@@ -1,7 +1,5 @@
 #nullable enable
 #nullable enable
 
 
-using System.Drawing;
-
 namespace Terminal.Gui;
 namespace Terminal.Gui;
 
 
 /// <summary>The Margin for a <see cref="View"/>.</summary>
 /// <summary>The Margin for a <see cref="View"/>.</summary>
@@ -28,58 +26,68 @@ public class Margin : Adornment
         CanFocus = false;
         CanFocus = false;
     }
     }
 
 
-    private void Margin_LayoutStarted (object? sender, LayoutEventArgs e)
+    private bool _pressed;
+
+    private ShadowView? _bottomShadow;
+    private ShadowView? _rightShadow;
+
+    /// <inheritdoc/>
+    public override void BeginInit ()
     {
     {
-        // Adjust the shadow such that it is drawn aligned with the Border
-        if (ShadowStyle != Gui.ShadowStyle.None && _rightShadow is { } && _bottomShadow is { })
+        base.BeginInit ();
+
+        if (Parent is null)
         {
         {
-            _rightShadow.Y = Parent.Border.Thickness.Top > 0 ? Parent.Border.Thickness.Top - (Parent.Border.Thickness.Top > 2 && Parent.Border.ShowTitle ? 1 : 0) : 1;
-            _bottomShadow.X = Parent.Border.Thickness.Left > 0 ? Parent.Border.Thickness.Left : 1;
+            return;
         }
         }
+
+        ShadowStyle = base.ShadowStyle;
+
+        Add (
+             _rightShadow = new()
+             {
+                 X = Pos.AnchorEnd (1),
+                 Y = 0,
+                 Width = 1,
+                 Height = Dim.Fill (),
+                 ShadowStyle = ShadowStyle,
+                 Orientation = Orientation.Vertical
+             },
+             _bottomShadow = new()
+             {
+                 X = 0,
+                 Y = Pos.AnchorEnd (1),
+                 Width = Dim.Fill (),
+                 Height = 1,
+                 ShadowStyle = ShadowStyle,
+                 Orientation = Orientation.Horizontal
+             }
+            );
     }
     }
 
 
-    private bool _pressed;
-    private void Margin_Highlight (object? sender, CancelEventArgs<HighlightStyle> e)
+    /// <summary>
+    ///     The color scheme for the Margin. If set to <see langword="null"/>, gets the <see cref="Adornment.Parent"/>'s
+    ///     <see cref="View.SuperView"/> scheme. color scheme.
+    /// </summary>
+    public override ColorScheme ColorScheme
     {
     {
-        if (ShadowStyle != Gui.ShadowStyle.None)
+        get
         {
         {
-            if (_pressed && e.NewValue == HighlightStyle.None)
+            if (base.ColorScheme is { })
             {
             {
-                Thickness = new (Thickness.Left - 1, Thickness.Top, Thickness.Right + 1, Thickness.Bottom);
-
-                if (_rightShadow is { })
-                {
-                    _rightShadow.Visible = true;
-                }
-
-                if (_bottomShadow is { })
-                {
-                    _bottomShadow.Visible = true;
-                }
-
-                _pressed = false;
-                return;
+                return base.ColorScheme;
             }
             }
 
 
-            if (!_pressed && (e.NewValue.HasFlag (HighlightStyle.Pressed) /*|| e.HighlightStyle.HasFlag (HighlightStyle.PressedOutside)*/))
-            {
-                Thickness = new (Thickness.Left + 1, Thickness.Top, Thickness.Right - 1, Thickness.Bottom);
-                _pressed = true;
-                if (_rightShadow is { })
-                {
-                    _rightShadow.Visible = false;
-                }
-
-                if (_bottomShadow is { })
-                {
-                    _bottomShadow.Visible = false;
-                }
-            }
+            return (Parent?.SuperView?.ColorScheme ?? Colors.ColorSchemes ["TopLevel"])!;
+        }
+        set
+        {
+            base.ColorScheme = value;
+            Parent?.SetNeedsDisplay ();
         }
         }
-
     }
     }
 
 
-    /// <inheritdoc />
+    /// <inheritdoc/>
     public override void OnDrawContent (Rectangle viewport)
     public override void OnDrawContent (Rectangle viewport)
     {
     {
         Rectangle screen = ViewportToScreen (viewport);
         Rectangle screen = ViewportToScreen (viewport);
@@ -87,12 +95,12 @@ public class Margin : Adornment
 
 
         Driver?.SetAttribute (normalAttr);
         Driver?.SetAttribute (normalAttr);
 
 
-
         // This just draws/clears the thickness, not the insides.
         // This just draws/clears the thickness, not the insides.
         if (ShadowStyle != ShadowStyle.None)
         if (ShadowStyle != ShadowStyle.None)
         {
         {
             screen = Rectangle.Inflate (screen, -1, -1);
             screen = Rectangle.Inflate (screen, -1, -1);
         }
         }
+
         Thickness.Draw (screen, ToString ());
         Thickness.Draw (screen, ToString ());
 
 
         if (Subviews.Count > 0)
         if (Subviews.Count > 0)
@@ -105,12 +113,14 @@ public class Margin : Adornment
                                                                         view => view.Visible
                                                                         view => view.Visible
                                                                                 && (view.NeedsDisplay || view.SubViewNeedsDisplay || view.LayoutNeeded)
                                                                                 && (view.NeedsDisplay || view.SubViewNeedsDisplay || view.LayoutNeeded)
                                                                        );
                                                                        );
+
                 foreach (View view in subviewsNeedingDraw)
                 foreach (View view in subviewsNeedingDraw)
                 {
                 {
                     if (view.LayoutNeeded)
                     if (view.LayoutNeeded)
                     {
                     {
                         view.LayoutSubviews ();
                         view.LayoutSubviews ();
                     }
                     }
+
                     view.Draw ();
                     view.Draw ();
                 }
                 }
             }
             }
@@ -118,39 +128,7 @@ public class Margin : Adornment
     }
     }
 
 
     /// <summary>
     /// <summary>
-    ///     The color scheme for the Margin. If set to <see langword="null"/>, gets the <see cref="Adornment.Parent"/>'s
-    ///     <see cref="View.SuperView"/> scheme. color scheme.
-    /// </summary>
-    public override ColorScheme ColorScheme
-    {
-        get
-        {
-            if (base.ColorScheme is { })
-            {
-                return base.ColorScheme;
-            }
-
-            return (Parent?.SuperView?.ColorScheme ?? Colors.ColorSchemes ["TopLevel"])!;
-        }
-        set
-        {
-            base.ColorScheme = value;
-            Parent?.SetNeedsDisplay ();
-        }
-    }
-
-    /// <inheritdoc />
-    public override ShadowStyle ShadowStyle
-    {
-        get => base.ShadowStyle;
-        set
-        {
-            base.ShadowStyle = SetShadow (value);
-        }
-    }
-
-    /// <summary>
-    ///    Sets whether the Margin includes a shadow effect. The shadow is drawn on the right and bottom sides of the
+    ///     Sets whether the Margin includes a shadow effect. The shadow is drawn on the right and bottom sides of the
     ///     Margin.
     ///     Margin.
     /// </summary>
     /// </summary>
     public ShadowStyle SetShadow (ShadowStyle style)
     public ShadowStyle SetShadow (ShadowStyle style)
@@ -181,42 +159,73 @@ public class Margin : Adornment
         {
         {
             _bottomShadow.ShadowStyle = style;
             _bottomShadow.ShadowStyle = style;
         }
         }
+
         return style;
         return style;
     }
     }
 
 
-    private ShadowView? _bottomShadow;
-    private ShadowView? _rightShadow;
-
     /// <inheritdoc/>
     /// <inheritdoc/>
-    public override void BeginInit ()
+    public override ShadowStyle ShadowStyle
     {
     {
-        base.BeginInit ();
+        get => base.ShadowStyle;
+        set => base.ShadowStyle = SetShadow (value);
+    }
 
 
-        if (Parent is null)
+    private void Margin_Highlight (object? sender, CancelEventArgs<HighlightStyle> e)
+    {
+        if (ShadowStyle != ShadowStyle.None)
         {
         {
-            return;
+            if (_pressed && e.NewValue == HighlightStyle.None)
+            {
+                // If the view is pressed and the highlight is being removed, move the shadow back.
+                // Note, for visual effects reasons, we only move horizontally.
+                // TODO: Add a setting or flag that lets the shadow move vertically as well.
+                Thickness = new (Thickness.Left - 1, Thickness.Top, Thickness.Right + 1, Thickness.Bottom);
+
+                if (_rightShadow is { })
+                {
+                    _rightShadow.Visible = true;
+                }
+
+                if (_bottomShadow is { })
+                {
+                    _bottomShadow.Visible = true;
+                }
+
+                _pressed = false;
+
+                return;
+            }
+
+            if (!_pressed && e.NewValue.HasFlag (HighlightStyle.Pressed))
+            {
+                // If the view is not pressed and we want highlight move the shadow
+                // Note, for visual effects reasons, we only move horizontally.
+                // TODO: Add a setting or flag that lets the shadow move vertically as well.
+                Thickness = new (Thickness.Left + 1, Thickness.Top, Thickness.Right - 1, Thickness.Bottom);
+                _pressed = true;
+
+                if (_rightShadow is { })
+                {
+                    _rightShadow.Visible = false;
+                }
+
+                if (_bottomShadow is { })
+                {
+                    _bottomShadow.Visible = false;
+                }
+            }
         }
         }
+    }
 
 
-        ShadowStyle = base.ShadowStyle;
-        Add (
-             _rightShadow = new ShadowView
-             {
-                 X = Pos.AnchorEnd (1),
-                 Y = 0,
-                 Width = 1,
-                 Height = Dim.Fill (),
-                 ShadowStyle = ShadowStyle,
-                 Orientation = Orientation.Vertical
-             },
-             _bottomShadow = new ShadowView
-             {
-                 X = 0,
-                 Y = Pos.AnchorEnd (1),
-                 Width = Dim.Fill (),
-                 Height = 1,
-                 ShadowStyle = ShadowStyle,
-                 Orientation = Orientation.Horizontal
-             }
-            );
+    private void Margin_LayoutStarted (object? sender, LayoutEventArgs e)
+    {
+        // Adjust the shadow such that it is drawn aligned with the Border
+        if (ShadowStyle != ShadowStyle.None && _rightShadow is { } && _bottomShadow is { })
+        {
+            _rightShadow.Y = Parent.Border.Thickness.Top > 0
+                                 ? Parent.Border.Thickness.Top - (Parent.Border.Thickness.Top > 2 && Parent.Border.ShowTitle ? 1 : 0)
+                                 : 1;
+            _bottomShadow.X = Parent.Border.Thickness.Left > 0 ? Parent.Border.Thickness.Left : 1;
+        }
     }
     }
-}
+}