public override Rectangle GetTickLayoutRectangle(SliderTrackBar.SliderTrackBarTickPosition position) { int tickFieldSize = GetTickFieldSize(); int offset = GetOffset(); int tickFieldLength = _trackBar.Width - 4; int lengthOffset = 0; if (_trackBar.IsSliderVisible) { tickFieldLength -= _trackBar.SliderButtonSize.Width; lengthOffset = _trackBar.SliderButtonSize.Width / 2; } if (_trackBar.ScaleType == SliderTrackBar.SliderTrackBarScaleType.Ticks) { switch (position) { case SliderTrackBar.SliderTrackBarTickPosition.LeftOrTop: return(new Rectangle(lengthOffset + 2, offset, tickFieldLength, tickFieldSize)); case SliderTrackBar.SliderTrackBarTickPosition.RightOrBottom: return(new Rectangle(lengthOffset + 2, _trackBar.Height - offset - tickFieldSize - 1, tickFieldLength, tickFieldSize)); } } return(Rectangle.Empty); }
public abstract void RenderTicks(Graphics g, SliderTrackBar.SliderTrackBarTickPosition position);
public abstract Rectangle GetTickLayoutRectangle(SliderTrackBar.SliderTrackBarTickPosition position);
public override void RenderTicks(Graphics g, SliderTrackBar.SliderTrackBarTickPosition position) { int pixelValueZero = ValueToPixelValue(0); int pixelPos = pixelValueZero; if (_trackBar.TickWidth > 0) { pixelPos = pixelPos - (_trackBar.TickWidth / 2); } Rectangle zeroRectangle; if (_trackBar.TickEmphasizeMinMaxAndZero) { zeroRectangle = new Rectangle(pixelPos, (int)g.ClipBounds.Y, _trackBar.TickWidth, _trackBar.TickEmphasizedHeight); using (Brush zeroBrush = new SolidBrush(_trackBar.TickEmphasizedColor)) { g.FillRectangle(zeroBrush, zeroRectangle); } } else { zeroRectangle = new Rectangle(pixelPos, (int)g.ClipBounds.Y, _trackBar.TickWidth, _trackBar.TickHeight); using (Brush zeroBrush = new SolidBrush(_trackBar.TickColor)) { g.FillRectangle(zeroBrush, zeroRectangle); } } Rectangle tickRectangle; bool tickIsEmphasized; int tickHeight; int offsetY; if (_trackBar.Minimum == 0 || (_trackBar.Minimum < 0 && _trackBar.Maximum > 0)) { //Paint ticks from 0 up to maximum int pixelPosCurrent = pixelPos; int pixelPosNext = pixelPosCurrent + _trackBar.TickWidth + _trackBar.TickSpacing; int nextTickMaxWidth = pixelPosNext + _trackBar.TickWidth; bool nextTickFits = nextTickMaxWidth <= (int)(g.ClipBounds.X + g.ClipBounds.Width) - 1; while (nextTickFits) { pixelPosCurrent = pixelPosNext; pixelPosNext = pixelPosCurrent + _trackBar.TickWidth + _trackBar.TickSpacing; nextTickMaxWidth = pixelPosNext + _trackBar.TickWidth; nextTickFits = nextTickMaxWidth <= (int)(g.ClipBounds.X + g.ClipBounds.Width) - 1; tickIsEmphasized = _trackBar.TickEmphasizeMinMaxAndZero && !nextTickFits; tickHeight = tickIsEmphasized ? _trackBar.TickEmphasizedHeight : _trackBar.TickHeight; offsetY = 0; if (!tickIsEmphasized) { if (_trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Center) { offsetY = (int)((g.ClipBounds.Height - tickHeight) / 2); } else if ((position == SliderTrackBar.SliderTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Far) || (position == SliderTrackBar.SliderTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Near)) { offsetY = 0; } else if ((position == SliderTrackBar.SliderTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Near) || (position == SliderTrackBar.SliderTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Far)) { offsetY = (int)g.ClipBounds.Height - tickHeight; } } tickRectangle = new Rectangle(pixelPosCurrent, (int)g.ClipBounds.Y + offsetY, _trackBar.TickWidth, tickHeight); if (tickIsEmphasized) { using (Brush tickBrush = new SolidBrush(_trackBar.TickEmphasizedColor)) { g.FillRectangle(tickBrush, tickRectangle); } } else { using (Brush tickBrush = new SolidBrush(_trackBar.TickColor)) { g.FillRectangle(tickBrush, tickRectangle); } } } } if (_trackBar.Maximum == 0 || (_trackBar.Minimum < 0 && _trackBar.Maximum > 0)) { //Paint ticks from 0 down to minimum int pixelPosCurrent = pixelPos; int pixelPosNext = pixelPosCurrent - _trackBar.TickWidth - _trackBar.TickSpacing; int nextTickMaxWidth = pixelPosNext - _trackBar.TickWidth; bool nextTickFits = nextTickMaxWidth >= (int)g.ClipBounds.X; while (nextTickFits) { pixelPosCurrent = pixelPosNext; pixelPosNext = pixelPosCurrent - _trackBar.TickWidth - _trackBar.TickSpacing; nextTickMaxWidth = pixelPosNext - _trackBar.TickWidth; nextTickFits = nextTickMaxWidth >= (int)g.ClipBounds.X; tickIsEmphasized = _trackBar.TickEmphasizeMinMaxAndZero && !nextTickFits; tickHeight = tickIsEmphasized ? _trackBar.TickEmphasizedHeight : _trackBar.TickHeight; offsetY = 0; if (!tickIsEmphasized) { if (_trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Center) { offsetY = (int)((g.ClipBounds.Height - tickHeight) / 2); } else if ((position == SliderTrackBar.SliderTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Far) || (position == SliderTrackBar.SliderTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Near)) { offsetY = 0; } else if ((position == SliderTrackBar.SliderTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Near) || (position == SliderTrackBar.SliderTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == SliderTrackBar.SliderTrackBarTickAlignment.Far)) { offsetY = (int)g.ClipBounds.Height - tickHeight; } } tickRectangle = new Rectangle(pixelPosCurrent, (int)g.ClipBounds.Y + offsetY, _trackBar.TickWidth, tickHeight); if (tickIsEmphasized) { using (Brush tickBrush = new SolidBrush(_trackBar.TickEmphasizedColor)) { g.FillRectangle(tickBrush, tickRectangle); } } else { using (Brush tickBrush = new SolidBrush(_trackBar.TickColor)) { g.FillRectangle(tickBrush, tickRectangle); } } } } }