/// <summary>
        /// Renders the control using specified skin.
        /// </summary>
        /// <param name="skin">Skin to use.</param>
        protected override void Render(Skin.Base skin)
        {
            base.Render(skin);

            if (ShouldDrawBackground)
                skin.DrawTextBox(this);

            if (!HasFocus) return;

            // Draw selection.. if selected..
            if (m_CursorPos != m_CursorEnd)
            {
                skin.Renderer.DrawColor = Color.FromArgb(200, 50, 170, 255);
                skin.Renderer.DrawFilledRect(m_SelectionBounds);
            }

            // Draw caret
            float time = Platform.Neutral.GetTimeInSeconds() - m_LastInputTime;

            if ((time % 1.0f) <= 0.5f)
            {
                skin.Renderer.DrawColor = Color.Black;
                skin.Renderer.DrawFilledRect(m_CaretBounds);
            }
        }
		/// <summary>
		/// Renders the control using specified skin.
		/// </summary>
		/// <param name="skin">Skin to use.</param>
		protected override void Render(Skin.Base skin) {
			base.Render(skin);

			if (ShouldDrawBackground)
				skin.DrawTextBox(this);

			if (!HasFocus) return;

			int VerticalOffset = 2 - m_ScrollControl.VerticalScroll;
			int VerticalSize = Font.Size + 6;

			// Draw selection.. if selected..
			if (m_CursorPos != m_CursorEnd) {
				if (StartPoint.Y == EndPoint.Y) {
					Point pA = GetCharacterPosition(StartPoint);
					Point pB = GetCharacterPosition(EndPoint);

					Rectangle SelectionBounds = new Rectangle();
					SelectionBounds.X = Math.Min(pA.X, pB.X);
					SelectionBounds.Y = pA.Y - VerticalOffset;
					SelectionBounds.Width = Math.Max(pA.X, pB.X) - SelectionBounds.X;
					SelectionBounds.Height = VerticalSize;

					skin.Renderer.DrawColor = Color.FromArgb(200, 50, 170, 255);
					skin.Renderer.DrawFilledRect(SelectionBounds);
				} else {
					/* Start */
					Point pA = GetCharacterPosition(StartPoint);
					Point pB = GetCharacterPosition(new Point(m_TextLines[StartPoint.Y].Length, StartPoint.Y));

					Rectangle SelectionBounds = new Rectangle();
					SelectionBounds.X = Math.Min(pA.X, pB.X);
					SelectionBounds.Y = pA.Y - VerticalOffset;
					SelectionBounds.Width = Math.Max(pA.X, pB.X) - SelectionBounds.X;
					SelectionBounds.Height = VerticalSize;

					skin.Renderer.DrawColor = Color.FromArgb(200, 50, 170, 255);
					skin.Renderer.DrawFilledRect(SelectionBounds);

					/* Middle */
					for (int i = 1; i < EndPoint.Y - StartPoint.Y; i++) {
						pA = GetCharacterPosition(new Point(0, StartPoint.Y + i));
						pB = GetCharacterPosition(new Point(m_TextLines[StartPoint.Y + i].Length, StartPoint.Y + i));

						SelectionBounds = new Rectangle();
						SelectionBounds.X = Math.Min(pA.X, pB.X);
						SelectionBounds.Y = pA.Y - VerticalOffset;
						SelectionBounds.Width = Math.Max(pA.X, pB.X) - SelectionBounds.X;
						SelectionBounds.Height = VerticalSize;

						skin.Renderer.DrawColor = Color.FromArgb(200, 50, 170, 255);
						skin.Renderer.DrawFilledRect(SelectionBounds);
					}

					/* End */
					pA = GetCharacterPosition(new Point(0, EndPoint.Y));
					pB = GetCharacterPosition(EndPoint);

					SelectionBounds = new Rectangle();
					SelectionBounds.X = Math.Min(pA.X, pB.X);
					SelectionBounds.Y = pA.Y - VerticalOffset;
					SelectionBounds.Width = Math.Max(pA.X, pB.X) - SelectionBounds.X;
					SelectionBounds.Height = VerticalSize;

					skin.Renderer.DrawColor = Color.FromArgb(200, 50, 170, 255);
					skin.Renderer.DrawFilledRect(SelectionBounds);
				}
			}

			// Draw caret
			float time = Platform.Neutral.GetTimeInSeconds() - m_LastInputTime;

			if ((time % 1.0f) <= 0.5f) {
				skin.Renderer.DrawColor = Color.Black;
				skin.Renderer.DrawFilledRect(m_CaretBounds);
			}
		}