Skip to content

Commit 2506929

Browse files
authored
Merge pull request #12719 from LeafShi1/BackPort_PR12646_and_12092_to_release9.0
[release/9.0] Get rid of an unexpected white line above the status strip due to a changed renderer
2 parents daf7087 + 3cd024d commit 2506929

File tree

6 files changed

+37
-13
lines changed

6 files changed

+37
-13
lines changed

src/System.Windows.Forms/src/System/Windows/Forms/Controls/ToolStrips/StatusStrip.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@ public StatusStrip()
2929
SuspendLayout();
3030
CanOverflow = false;
3131
LayoutStyle = ToolStripLayoutStyle.Table;
32-
33-
// Default changed for SystemColorMode from System to ManagerRenderMode.
34-
// Also to be consistent to the MenuStrip.
35-
RenderMode = ToolStripRenderMode.ManagerRenderMode;
32+
RenderMode = ToolStripRenderMode.System;
3633
GripStyle = ToolStripGripStyle.Hidden;
3734

3835
SetStyle(ControlStyles.ResizeRedraw, true);
@@ -363,6 +360,17 @@ protected override void OnLayout(LayoutEventArgs levent)
363360
EnsureRightToLeftGrip();
364361
}
365362

363+
internal override void ResetRenderMode()
364+
{
365+
RenderMode = ToolStripRenderMode.System;
366+
}
367+
368+
internal override bool ShouldSerializeRenderMode()
369+
{
370+
// We should NEVER serialize custom.
371+
return (RenderMode is not ToolStripRenderMode.System and not ToolStripRenderMode.Custom);
372+
}
373+
366374
internal override bool SupportsUiaProviders => true;
367375

368376
protected override void SetDisplayedItems()

src/System.Windows.Forms/src/System/Windows/Forms/Controls/ToolStrips/ToolStripHighContrastRenderer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,9 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr
146146
else if (item.Selected)
147147
{
148148
g.FillRectangle(SystemBrushes.Highlight, bounds);
149+
g.DrawRectangle(SystemPens.HighlightText, dropDownRect);
150+
149151
DrawHightContrastDashedBorder(g, e.Item);
150-
g.DrawRectangle(SystemPens.ButtonHighlight, dropDownRect);
151152
}
152153

153154
Color arrowColor = item.Selected && !item.Pressed ? SystemColors.HighlightText : SystemColors.ControlText;

src/System.Windows.Forms/src/System/Windows/Forms/Controls/ToolStrips/ToolStripSystemRenderer.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,17 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr
575575
{
576576
DrawArrow(new ToolStripArrowRenderEventArgs(g, splitButton, splitButton.DropDownButtonBounds, arrowColor, ArrowDirection.Down));
577577
}
578+
579+
ToolBarState state = GetToolBarState(e.Item);
580+
if (e.Item is ToolStripSplitButton item && !SystemInformation.HighContrast &&
581+
(state == ToolBarState.Hot || state == ToolBarState.Pressed || state == ToolBarState.Checked))
582+
{
583+
var clientBounds = item.ClientBounds;
584+
bounds.Height -= 1;
585+
ControlPaint.DrawBorderSimple(g, clientBounds, SystemColors.Highlight);
586+
using var brush = SystemColors.Highlight.GetCachedSolidBrushScope();
587+
g.FillRectangle(brush, item.SplitterBounds);
588+
}
578589
}
579590
else
580591
{

src/System.Windows.Forms/src/System/Windows/Forms/Controls/ToolStrips/ToolstripProfessionalRenderer.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,10 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr
296296

297297
if (buttonPressedOrSelected && !item.Pressed)
298298
{
299-
using var brush = ColorTable.ButtonSelectedBorder.GetCachedSolidBrushScope();
299+
#pragma warning disable WFO5001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
300+
using var brush = Application.IsDarkModeEnabled ?
301+
Color.Silver.GetCachedSolidBrushScope() : ColorTable.ButtonSelectedBorder.GetCachedSolidBrushScope();
302+
#pragma warning restore WFO5001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
300303
g.FillRectangle(brush, item.SplitterBounds);
301304
}
302305

src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/StatusStripTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -556,18 +556,18 @@ public void StatusStrip_RenderMode_ResetValue_Success()
556556

557557
control.RenderMode = ToolStripRenderMode.System;
558558
Assert.Equal(ToolStripRenderMode.System, control.RenderMode);
559-
Assert.True(property.CanResetValue(control));
559+
Assert.False(property.CanResetValue(control));
560560

561561
control.Renderer = new SubToolStripRenderer();
562562
Assert.Equal(ToolStripRenderMode.Custom, control.RenderMode);
563563
Assert.False(property.CanResetValue(control));
564564

565565
control.RenderMode = ToolStripRenderMode.ManagerRenderMode;
566566
Assert.Equal(ToolStripRenderMode.ManagerRenderMode, control.RenderMode);
567-
Assert.False(property.CanResetValue(control));
567+
Assert.True(property.CanResetValue(control));
568568

569569
property.ResetValue(control);
570-
Assert.Equal(ToolStripRenderMode.ManagerRenderMode, control.RenderMode);
570+
Assert.Equal(ToolStripRenderMode.System, control.RenderMode);
571571
Assert.False(property.CanResetValue(control));
572572
}
573573

@@ -584,18 +584,18 @@ public void StatusStrip_RenderMode_ShouldSerializeValue_Success()
584584

585585
control.RenderMode = ToolStripRenderMode.System;
586586
Assert.Equal(ToolStripRenderMode.System, control.RenderMode);
587-
Assert.True(property.ShouldSerializeValue(control));
587+
Assert.False(property.ShouldSerializeValue(control));
588588

589589
control.Renderer = new SubToolStripRenderer();
590590
Assert.Equal(ToolStripRenderMode.Custom, control.RenderMode);
591591
Assert.False(property.ShouldSerializeValue(control));
592592

593593
control.RenderMode = ToolStripRenderMode.ManagerRenderMode;
594594
Assert.Equal(ToolStripRenderMode.ManagerRenderMode, control.RenderMode);
595-
Assert.False(property.ShouldSerializeValue(control));
595+
Assert.True(property.ShouldSerializeValue(control));
596596

597597
property.ResetValue(control);
598-
Assert.Equal(ToolStripRenderMode.ManagerRenderMode, control.RenderMode);
598+
Assert.Equal(ToolStripRenderMode.System, control.RenderMode);
599599
Assert.False(property.ShouldSerializeValue(control));
600600
}
601601

src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/ToolStripButtonTests.Rendering.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,9 @@ public void ToolStripButton_SplitButton_Selected_RendersBackgroundCorrectly_High
162162
bounds: null,
163163
points: null,
164164
State.Brush(SystemColors.Highlight, BRUSH_STYLE.BS_SOLID)),
165+
Validate.SkipType(ENHANCED_METAFILE_RECORD_TYPE.EMR_POLYGON16),
165166
Validate.Repeat(Validate.SkipType(ENHANCED_METAFILE_RECORD_TYPE.EMR_POLYPOLYGON16), 2),
166-
Validate.Repeat(Validate.SkipType(ENHANCED_METAFILE_RECORD_TYPE.EMR_POLYGON16), 2));
167+
Validate.SkipType(ENHANCED_METAFILE_RECORD_TYPE.EMR_POLYGON16));
167168
}
168169

169170
private class ToolStripSystemHighContrastRenderer : ToolStripSystemRenderer

0 commit comments

Comments
 (0)