public override Rectangle GetTickLayoutRectangle(WinampTrackBar.WinampTrackBarTickPosition 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 == WinampTrackBar.WinampTrackBarScaleType.Ticks)
            {
                switch (position)
                {
                case WinampTrackBar.WinampTrackBarTickPosition.LeftOrTop:
                    return(new Rectangle(lengthOffset + 2, offset, tickFieldLength, tickFieldSize));

                case WinampTrackBar.WinampTrackBarTickPosition.RightOrBottom:
                    return(new Rectangle(lengthOffset + 2, _trackBar.Height - offset - tickFieldSize - 1, tickFieldLength, tickFieldSize));
                }
            }

            return(Rectangle.Empty);
        }
Exemplo n.º 2
0
 public abstract void RenderTicks(Graphics g, WinampTrackBar.WinampTrackBarTickPosition position);
Exemplo n.º 3
0
 public abstract Rectangle GetTickLayoutRectangle(WinampTrackBar.WinampTrackBarTickPosition position);
        public override void RenderTicks(Graphics g, WinampTrackBar.WinampTrackBarTickPosition 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 == WinampTrackBar.WinampTrackBarTickAlignment.Center)
                        {
                            offsetY = (int)((g.ClipBounds.Height - tickHeight) / 2);
                        }
                        else if ((position == WinampTrackBar.WinampTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.Far) ||
                                 (position == WinampTrackBar.WinampTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.Near))
                        {
                            offsetY = 0;
                        }
                        else if ((position == WinampTrackBar.WinampTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.Near) ||
                                 (position == WinampTrackBar.WinampTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.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 == WinampTrackBar.WinampTrackBarTickAlignment.Center)
                        {
                            offsetY = (int)((g.ClipBounds.Height - tickHeight) / 2);
                        }
                        else if ((position == WinampTrackBar.WinampTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.Far) ||
                                 (position == WinampTrackBar.WinampTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.Near))
                        {
                            offsetY = 0;
                        }
                        else if ((position == WinampTrackBar.WinampTrackBarTickPosition.LeftOrTop && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.Near) ||
                                 (position == WinampTrackBar.WinampTrackBarTickPosition.RightOrBottom && _trackBar.TickAlignment == WinampTrackBar.WinampTrackBarTickAlignment.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);
                        }
                    }
                }
            }
        }