[Feature] Custom Scrollbar (#183), version 1.0.17.62

This commit is contained in:
Markus Hofknecht 2021-06-05 11:52:33 +02:00
parent c5f4add68b
commit 0fa8b4cf84
3 changed files with 37 additions and 16 deletions

View file

@ -39,5 +39,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.17.61")] [assembly: AssemblyVersion("1.0.17.62")]
[assembly: AssemblyFileVersion("1.0.17.61")] [assembly: AssemblyFileVersion("1.0.17.62")]

View file

@ -143,7 +143,7 @@ namespace SystemTrayMenu.UserInterface
int trackHeight = GetTrackHeight(); int trackHeight = GetTrackHeight();
int sliderHeight = GetSliderHeight(trackHeight); int sliderHeight = GetSliderHeight(trackHeight);
int pixelRange = trackHeight - sliderHeight; int pixelRange = trackHeight - sliderHeight;
int realRange = Maximum - Minimum - (int)LargeChange; int realRange = GetRealRange();
float percentage = 0.0f; float percentage = 0.0f;
if (realRange != 0) if (realRange != 0)
{ {
@ -300,26 +300,30 @@ namespace SystemTrayMenu.UserInterface
e.Graphics.FillRectangle(brushScrollbarBorder, new Rectangle(0, 0, Width, Height)); e.Graphics.FillRectangle(brushScrollbarBorder, new Rectangle(0, 0, Width, Height));
// Draw arrowUp // Draw arrowUp
SolidBrush solidBrushArrowUpBackground;
SolidBrush solidBrushArrowUp; SolidBrush solidBrushArrowUp;
Pen penArrowUp; Pen penArrowUp;
if (timerMouseStillClicked.Enabled && if (timerMouseStillClicked.Enabled &&
!mouseStillClickedMoveLarge && mouseStillClickedMoveUp) !mouseStillClickedMoveLarge && mouseStillClickedMoveUp)
{ {
solidBrushArrowUp = new SolidBrush(colorArrowClickedBackground); solidBrushArrowUpBackground = new SolidBrush(colorArrowClickedBackground);
solidBrushArrowUp = new SolidBrush(colorArrowClicked);
penArrowUp = new Pen(colorArrowClicked, 2.5F); penArrowUp = new Pen(colorArrowClicked, 2.5F);
} }
else if (arrowUpHovered) else if (arrowUpHovered)
{ {
solidBrushArrowUp = new SolidBrush(colorArrowHoverBackground); solidBrushArrowUpBackground = new SolidBrush(colorArrowHoverBackground);
solidBrushArrowUp = new SolidBrush(colorArrowHover);
penArrowUp = new Pen(colorArrowHover, 2.5F); penArrowUp = new Pen(colorArrowHover, 2.5F);
} }
else else
{ {
solidBrushArrowUp = new SolidBrush(colorBackground); solidBrushArrowUpBackground = new SolidBrush(colorBackground);
solidBrushArrowUp = new SolidBrush(colorArrows);
penArrowUp = new Pen(colorArrows, 2.5F); penArrowUp = new Pen(colorArrows, 2.5F);
} }
e.Graphics.FillRectangle(solidBrushArrowUp, GetUpArrowRectangleWithoutBorder()); e.Graphics.FillRectangle(solidBrushArrowUpBackground, GetUpArrowRectangleWithoutBorder());
int widthDevidedBy2 = Width / 2; int widthDevidedBy2 = Width / 2;
int widthDevidedBy6 = Width / 6; int widthDevidedBy6 = Width / 6;
@ -335,6 +339,8 @@ namespace SystemTrayMenu.UserInterface
pointArrowUp3, pointArrowUp3,
pointArrowUp4, pointArrowUp4,
}; };
e.Graphics.FillPolygon(solidBrushArrowUp, curvePoints);
e.Graphics.DrawPolygon(penArrowUp, curvePoints); e.Graphics.DrawPolygon(penArrowUp, curvePoints);
// draw slider // draw slider
@ -363,27 +369,31 @@ namespace SystemTrayMenu.UserInterface
e.Graphics.FillRectangle(solidBrushSlider, rectangleSlider); e.Graphics.FillRectangle(solidBrushSlider, rectangleSlider);
// Draw arrowDown // Draw arrowDown
SolidBrush solidBrushArrowDownBackground;
SolidBrush solidBrushArrowDown; SolidBrush solidBrushArrowDown;
Pen penArrowDown; Pen penArrowDown;
if (timerMouseStillClicked.Enabled && if (timerMouseStillClicked.Enabled &&
!mouseStillClickedMoveLarge && !mouseStillClickedMoveUp) !mouseStillClickedMoveLarge && !mouseStillClickedMoveUp)
{ {
solidBrushArrowDown = new SolidBrush(colorArrowClickedBackground); solidBrushArrowDownBackground = new SolidBrush(colorArrowClickedBackground);
solidBrushArrowDown = new SolidBrush(colorArrowClicked);
penArrowDown = new Pen(colorArrowClicked, 2.5F); penArrowDown = new Pen(colorArrowClicked, 2.5F);
} }
else else
if (arrowDownHovered) if (arrowDownHovered)
{ {
solidBrushArrowDown = new SolidBrush(colorArrowHoverBackground); solidBrushArrowDownBackground = new SolidBrush(colorArrowHoverBackground);
solidBrushArrowDown = new SolidBrush(colorArrowHover);
penArrowDown = new Pen(colorArrowHover, 2.5F); penArrowDown = new Pen(colorArrowHover, 2.5F);
} }
else else
{ {
solidBrushArrowDown = new SolidBrush(colorBackground); solidBrushArrowDownBackground = new SolidBrush(colorBackground);
solidBrushArrowDown = new SolidBrush(colorArrows);
penArrowDown = new Pen(colorArrows, 2.5F); penArrowDown = new Pen(colorArrows, 2.5F);
} }
e.Graphics.FillRectangle(solidBrushArrowDown, GetDownArrowRectangleWithoutBorder(trackHeight)); e.Graphics.FillRectangle(solidBrushArrowDownBackground, GetDownArrowRectangleWithoutBorder(trackHeight));
PointF pointArrowDown1 = new PointF(widthDevidedBy2 - widthDevidedBy6, Height - widthDevidedBy2PluswidthDevidedBy8); PointF pointArrowDown1 = new PointF(widthDevidedBy2 - widthDevidedBy6, Height - widthDevidedBy2PluswidthDevidedBy8);
PointF pointArrowDown2 = new PointF(widthDevidedBy2 + widthDevidedBy6, Height - widthDevidedBy2PluswidthDevidedBy8); PointF pointArrowDown2 = new PointF(widthDevidedBy2 + widthDevidedBy6, Height - widthDevidedBy2PluswidthDevidedBy8);
@ -397,6 +407,7 @@ namespace SystemTrayMenu.UserInterface
pointArrowDown4, pointArrowDown4,
}; };
e.Graphics.FillPolygon(solidBrushArrowDown, curvePointsArrowDown);
e.Graphics.DrawPolygon(penArrowDown, curvePointsArrowDown); e.Graphics.DrawPolygon(penArrowDown, curvePointsArrowDown);
} }
@ -514,13 +525,13 @@ namespace SystemTrayMenu.UserInterface
{ {
int trackHeight = GetTrackHeight(); int trackHeight = GetTrackHeight();
int sliderHeight = GetSliderHeight(trackHeight); int sliderHeight = GetSliderHeight(trackHeight);
int realRange = Maximum - Minimum - (int)LargeChange; int realRange = GetRealRange();
int pixelRange = trackHeight - sliderHeight; int pixelRange = trackHeight - sliderHeight;
if (realRange > 0) if (realRange > 0)
{ {
if (pixelRange > 0) if (pixelRange > 0)
{ {
float changeForOneItem = (change * pixelRange) / (Maximum - LargeChange); float changeForOneItem = GetChangeForOneItem(change, pixelRange);
if ((sliderTop + changeForOneItem) > pixelRange) if ((sliderTop + changeForOneItem) > pixelRange)
{ {
@ -549,13 +560,13 @@ namespace SystemTrayMenu.UserInterface
{ {
int trackHeight = GetTrackHeight(); int trackHeight = GetTrackHeight();
int sliderHeight = GetSliderHeight(trackHeight); int sliderHeight = GetSliderHeight(trackHeight);
int realRange = Maximum - Minimum - (int)LargeChange; int realRange = GetRealRange();
int pixelRange = trackHeight - sliderHeight; int pixelRange = trackHeight - sliderHeight;
if (realRange > 0) if (realRange > 0)
{ {
if (pixelRange > 0) if (pixelRange > 0)
{ {
float changeForOneItem = (change * pixelRange) / (Maximum - LargeChange); float changeForOneItem = GetChangeForOneItem(change, pixelRange);
if ((sliderTop - changeForOneItem) < 0) if ((sliderTop - changeForOneItem) < 0)
{ {
@ -728,6 +739,16 @@ namespace SystemTrayMenu.UserInterface
return new Rectangle(new Point(0, Width), new Size(Width + 1, trackHeight)); return new Rectangle(new Point(0, Width), new Size(Width + 1, trackHeight));
} }
private int GetRealRange()
{
return Maximum - Minimum - (int)LargeChange;
}
private float GetChangeForOneItem(float change, int pixelRange)
{
return (change * pixelRange) / (Maximum - LargeChange);
}
private int GetTrackHeight() private int GetTrackHeight()
{ {
return Height - (Width + Width); return Height - (Width + Width);

View file

@ -522,7 +522,7 @@ namespace SystemTrayMenu.UserInterface
customScrollbar.Height = dgvHeightMax; customScrollbar.Height = dgvHeightMax;
customScrollbar.Minimum = 0; customScrollbar.Minimum = 0;
customScrollbar.Maximum = dgvHeightNew; customScrollbar.Maximum = dgvHeightNew;
customScrollbar.LargeChange = (customScrollbar.Maximum / (float)customScrollbar.Height) + dgvHeightMax; customScrollbar.LargeChange = dgvHeightMax;
customScrollbar.SmallChange = dgv.RowTemplate.Height; customScrollbar.SmallChange = dgv.RowTemplate.Height;
} }