/*
		 * OnPaint
		 */

		/// <summary>
		/// Raises the <see cref="E:System.Windows.Forms.Control.Paint"></see> event.
		/// </summary>
		/// <param name="e">A <see cref="T:System.Windows.Forms.PaintEventArgs"></see> that contains the event data.</param>
		protected override void OnPaint(PaintEventArgs e)
		{
			Graphics g = e.Graphics;

			if (this.Orientation == NuGenOrientationStyle.Vertical)
			{
				NuGenControlPaint.Make90CCWGraphics(g, this.ClientRectangle);
			}

			NuGenTrackBarPaintParams paintParams = new NuGenTrackBarPaintParams(g, this.ValueTracker);

			paintParams.Bounds = this.AgnosticTrackBounds;
			paintParams.TickStyle = this.TickStyle;
			paintParams.State = this.StateTracker.GetControlState();

			this.Renderer.DrawTrack(paintParams);

			if (_focused && this.ShowFocusCues)
			{
				ControlPaint.DrawFocusRectangle(e.Graphics, this.ClientRectangle);
			}
		}
		/// <summary>
		/// </summary>
		/// <param name="paintParams"></param>
		/// <exception cref="ArgumentNullException">
		/// <para><paramref name="paintParams"/> is <see langword="null"/>.</para>
		/// </exception>
		public void DrawTrack(NuGenTrackBarPaintParams paintParams)
		{
			if (paintParams == null)
			{
				throw new ArgumentNullException("paintParams");
			}

			Graphics g = paintParams.Graphics;
			Rectangle bounds = paintParams.Bounds;
			NuGenControlState state = paintParams.State;
			TickStyle tickStyle = paintParams.TickStyle;
			INuGenValueTracker valueTracker = paintParams.ValueTracker;

			/* Track */

			Rectangle valueRect = new Rectangle(
				bounds.Left,
				bounds.Top,
				(int)(NuGenSmoothTrackBarRenderer.GetStep(bounds, valueTracker) * (valueTracker.Value - valueTracker.Minimum)),
				bounds.Height
			);

			if (
				valueRect.Width > 0
				&& valueRect.Height > 0
				)
			{
				this.DrawBackground(
					g,
					valueRect,
					state == NuGenControlState.Normal || state == NuGenControlState.Focused ? NuGenControlState.Hot : state
				);
			}

			this.DrawBorder(g, bounds, state);

			/* TickLines */

			if ((tickStyle & TickStyle.BottomRight) > 0)
			{
				this.DrawTickLines(
					g,
					NuGenSmoothTrackBarRenderer.GetTickLinesBounds(bounds, TickStyle.BottomRight),
					state,
					TickStyle.BottomRight,
					valueTracker
				);
			}

			if ((tickStyle & TickStyle.TopLeft) > 0)
			{
				this.DrawTickLines(
					g,
					NuGenSmoothTrackBarRenderer.GetTickLinesBounds(bounds, TickStyle.TopLeft),
					state,
					TickStyle.TopLeft,
					valueTracker
				);
			}
		}