| File: System\Windows\Forms\Scrolling\ScrollableControl.DockPaddingEdgesConverter.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; namespace System.Windows.Forms; public partial class ScrollableControl { /// <summary> /// Determines the border padding for docked controls. /// </summary> [TypeConverter(typeof(DockPaddingEdgesConverter))] public class DockPaddingEdges : ICloneable { private readonly ScrollableControl? _owner; private int _left; private int _right; private int _top; private int _bottom; /// <summary> /// Creates a new DockPaddingEdges. The specified owner will be notified when /// the values are changed. /// </summary> internal DockPaddingEdges(ScrollableControl owner) { _owner = owner; } internal DockPaddingEdges(int left, int right, int top, int bottom) { _left = left; _right = right; _top = top; _bottom = bottom; } /// <summary> /// Gets or sets the padding width for all edges of a docked control. /// </summary> [RefreshProperties(RefreshProperties.All)] [SRDescription(nameof(SR.PaddingAllDescr))] public int All { get { if (_owner is null) { if (_left == _right && _top == _bottom && _left == _top) { return _left; } else { return 0; } } else { // The Padding struct uses -1 to indicate that LRTB are in disagreement. // For backwards compatibility, we need to remap -1 to 0, but we need // to be careful because it could be that they explicitly set All to -1. if (_owner.Padding.All == -1 && (_owner.Padding.Left != -1 || _owner.Padding.Top != -1 || _owner.Padding.Right != -1 || _owner.Padding.Bottom != -1)) { return 0; } return _owner.Padding.All; } } set { if (_owner is null) { _left = value; _top = value; _right = value; _bottom = value; } else { _owner.Padding = new Padding(value); } } } /// <summary> /// Gets or sets the padding width for the bottom edge of a docked control. /// </summary> [RefreshProperties(RefreshProperties.All)] [SRDescription(nameof(SR.PaddingBottomDescr))] public int Bottom { get => _owner is null ? _bottom : _owner.Padding.Bottom; set { if (_owner is null) { _bottom = value; } else { Padding padding = _owner.Padding; padding.Bottom = value; _owner.Padding = padding; } } } /// <summary> /// Gets or sets the padding width for the left edge of a docked control. /// </summary> [RefreshProperties(RefreshProperties.All)] [SRDescription(nameof(SR.PaddingLeftDescr))] public int Left { get => _owner is null ? _left : _owner.Padding.Left; set { if (_owner is null) { _left = value; } else { Padding padding = _owner.Padding; padding.Left = value; _owner.Padding = padding; } } } /// <summary> /// Gets or sets the padding width for the right edge of a docked control. /// </summary> [RefreshProperties(RefreshProperties.All)] [SRDescription(nameof(SR.PaddingRightDescr))] public int Right { get => _owner is null ? _right : _owner.Padding.Right; set { if (_owner is null) { _right = value; } else { Padding padding = _owner.Padding; padding.Right = value; _owner.Padding = padding; } } } /// <summary> /// Gets or sets the padding width for the top edge of a docked control. /// </summary> [RefreshProperties(RefreshProperties.All)] [SRDescription(nameof(SR.PaddingTopDescr))] public int Top { get => _owner is null ? _top : _owner.Padding.Top; set { if (_owner is null) { _top = value; } else { Padding padding = _owner.Padding; padding.Top = value; _owner.Padding = padding; } } } public override bool Equals(object? other) { return other is DockPaddingEdges dpeOther && Left == dpeOther.Left && Top == dpeOther.Top && Right == dpeOther.Right && Bottom == dpeOther.Bottom; } public override int GetHashCode() => HashCode.Combine(Left, Top, Right, Bottom); private void ResetAll() => All = 0; private void ResetBottom() => Bottom = 0; private void ResetLeft() => Left = 0; private void ResetRight() => Right = 0; private void ResetTop() => Top = 0; internal void Scale(float dx, float dy) { _owner?.Padding.Scale(dx, dy); } public override string ToString() => $"{{Left={Left},Top={Top},Right={Right},Bottom={Bottom}}}"; object ICloneable.Clone() => new DockPaddingEdges(Left, Right, Top, Bottom); } }