ScrollableControl.ScaleDockPadding seems to be broken?
- Dominant language
- C#
- Stars
- 4.9k
- Forks
- 1.1k
- Avg merge
- 1d 13m
- Merged PRs (30d)
- 85
Description
Problem:
Looking at the implementation of `ScrollableControl.Scale{Core}:
```cs
internal void ScaleDockPadding(float dx, float dy)
{
dockPadding?.Scale(dx, dy);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void ScaleCore(float dx, float dy)
{
ScaleDockPadding(dx, dy);
base.ScaleCore(dx, dy);
}
```
Where DockPadding.Scale is implemented as
```cs
internal void Scale(float dx, float dy) => _owner.Padding.Scale(dx, dy);
```
I would expect the scrollable control's padding to scale by `dx` and `dy`. However, the following tests demonstrate that no scaling is happening.
I think something may be weird in that calling `Padding.Scale` does not seem to affect the underlying `Padding` instance stored in `Control`
```cs
[WinFormsFact]
public void ScrollableControl_Scale_InvokeWithoutPaddingWithDockPadding_Success()
{
using var control = new ScrollableControl();
Assert.Equal(0, control.DockPadding.Left);
Assert.Equal(0, control.DockPadding.Top);
Assert.Equal(0, control.DockPadding.Right);
Assert.Equal(0, control.DockPadding.Bottom);
control.Scale(10, 20);
Assert.Equal(0, control.DockPadding.Left);
Assert.Equal(0, control.DockPadding.Top);
Assert.Equal(0, control.DockPadding.Right);
Assert.Equal(0, control.DockPadding.Bottom);
Assert.Equal(Padding.Empty, control.Padding);
}
[WinFormsFact]
public void ScrollableControl_Scale_InvokeWithoutPaddingWithoutDockPadding_Success()
{
using var control = new ScrollableControl();
control.Scale(10, 20);
Assert.Equal(0, control.DockPadding.Left);
Assert.Equal(0, control.DockPadding.Top);
Assert.Equal(0, control.DockPadding.Right);
Assert.Equal(0, control.DockPadding.Bottom);
Assert.Equal(Padding.Empty, control.Padding);
}
[WinFormsFact]
public void ScrollableControl_Scale_InvokeWithPaddingWithDockPadding_Success()
{
using var control = new ScrollableControl
{
Padding = new Padding(1, 2, 3, 4)
};
control.Scale(10, 20);
Assert.Equal(1, control.DockPadding.Left);
Assert.Equal(2, control.DockPadding.Top);
Assert.Equal(3, control.DockPadding.Right);
Assert.Equal(4, control.DockPadding.Bottom);
Assert.Equal(new Padding(1, 2, 3, 4), control.Padding);
}
[WinFormsFact]
public void ScrollableControl_Scale_InvokeWithPaddingWithoutDockPadding_Success()
{
using var control = new ScrollableControl
{
Padding = new Padding(1, 2, 3, 4)
};
Assert.Equal(1, control.DockPadding.Left);
Assert.Equal(2, control.DockPadding.Top);
Assert.Equal(3, control.DockPadding.Right);
Assert.Equal(4, control.DockPadding.Bottom);
control.Scale(10, 20);
Assert.Equal(1, control.DockPadding.Left);
Assert.Equal(2, control.DockPadding.Top);
Assert.Equal(3, control.DockPadding.Right);
Assert.Equal(4, control.DockPadding.Bottom);
Assert.Equal(new Padding(1, 2, 3, 4), control.Padding);
}
```
Contributor guide
Assessment
This issue has not been assessed yet.