dotnet/winforms
Ver no GitHubScrollableControl.ScaleDockPadding seems to be broken?
Open
#2.841 aberto em 10 de fev. de 2020
design-discussionhelp wanted
Métricas do repositório
- Stars
- (4.100 stars)
- Métricas de merge de PR
- (Mesclagem média 14d 22h) (56 fundiu PRs em 30d)
Description
Problem:
Looking at the implementation of `ScrollableControl.Scale{Core}:
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
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
[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);
}