/// <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); } }