public override void DrawRectangle(Rectangle area, Brush brush, Thickness thickness, double radius, Rectangle bounds) { SetClipArea(bounds); if (area != Rectangle.Empty) { if (radius > 0) { FillRectangle(area, brush, radius, bounds); } else { var areaXNA = area.ToXNA(); FillRect(new RectangleXNA(areaXNA.X, areaXNA.Top, areaXNA.Width, thickness.Top), brush); FillRect(new RectangleXNA(areaXNA.X, areaXNA.Top + thickness.Top, thickness.Left, areaXNA.Height - thickness.Top - thickness.Bottom), brush); FillRect(new RectangleXNA(areaXNA.Right - thickness.Right, areaXNA.Top + thickness.Top, thickness.Right, areaXNA.Height - thickness.Top - thickness.Bottom), brush); FillRect(new RectangleXNA(areaXNA.X, areaXNA.Bottom - thickness.Bottom, areaXNA.Width, thickness.Bottom), brush); } } ResetClipArea(); }
private void FillRect(RectangleXNA rect, Brush brush) { var colorBrush = brush as ColorBrush; var color = ColorXNA.Black; if (colorBrush != null) color = colorBrush.Color.ToXNA(); manager.SpriteBatch.Draw(pixel, rect, null, color, 0, Vector2.Zero, SpriteEffects.None, 0); }
public override void FillRectangle(Rectangle area, Brush brush, double radius, Rectangle bounds) { SetClipArea(bounds); if (area != Rectangle.Empty) { if (radius > 0) { var corner = (int) Math.Round(radius); var corner2 = corner * 2; var areaXNA = area.ToXNA(); var gradientBrush = brush as GradientBrush; if (gradientBrush != null) { UseMaskStencil(area); } // Draw 5 rectangles (top, bottom, left, right, center) FillRect(new RectangleXNA(areaXNA.X + corner, areaXNA.Top, areaXNA.Width - corner2, corner), brush); FillRect(new RectangleXNA(areaXNA.X + corner, areaXNA.Bottom - corner, areaXNA.Width - corner2, corner), brush); FillRect(new RectangleXNA(areaXNA.X, areaXNA.Top + corner, corner, areaXNA.Height - corner2), brush); FillRect(new RectangleXNA(areaXNA.Right - corner, areaXNA.Y + corner, corner, areaXNA.Height - corner2), brush); FillRect(new RectangleXNA(areaXNA.X + corner, areaXNA.Y + corner, areaXNA.Width - corner2, areaXNA.Height - corner2), brush); // Draw edge corners. var circle = GetCircleTexture(radius); FillCorner(new RectangleXNA(areaXNA.X, areaXNA.Y, corner, corner), circle, Corner.TopLeft, brush); FillCorner(new RectangleXNA(areaXNA.Right - corner, areaXNA.Y, corner, corner), circle, Corner.TopRight, brush); FillCorner(new RectangleXNA(areaXNA.X, areaXNA.Bottom - corner, corner, corner), circle, Corner.BottomLeft, brush); FillCorner(new RectangleXNA(areaXNA.Right - corner, areaXNA.Bottom - corner, corner, corner), circle, Corner.BottomRight, brush); // If using a gradient brush, draw a gradient over the mask. if (gradientBrush != null) { UseRenderStencil(); DrawGradient(area, gradientBrush); EndStencil(); } } else { var colorBrush = brush as ColorBrush; var gradientBrush = brush as GradientBrush; if (colorBrush != null) { manager.SpriteBatch.Draw(pixel, area.ToXNA(), null, colorBrush.ToXNA(), 0, Vector2.Zero, SpriteEffects.None, 0); } if (gradientBrush != null) { DrawGradient(area, gradientBrush); } } } ResetClipArea(); }
private void FillCorner(RectangleXNA rect, Texture2D circle, Corner corner, Brush brush) { var colorBrush = brush as ColorBrush; var color = ColorXNA.Black; if (colorBrush != null) color = colorBrush.Color.ToXNA(); var source = new RectangleXNA(0, 0, circle.Width / 2, circle.Height / 2); switch (corner) { case Corner.TopRight: source.X = circle.Width / 2; break; case Corner.BottomLeft: source.Y = circle.Height / 2; break; case Corner.BottomRight: source.Y = circle.Height / 2; source.X = circle.Width / 2; break; } manager.SpriteBatch.Draw(circle, rect, source, color, 0, Vector2.Zero, SpriteEffects.None, 0); }
/// <summary> /// Draws a rounded filled rectangle within the specified area. /// </summary> public abstract void FillRectangle(Rectangle area, Brush brush, double cornerRadius, Rectangle bounds);
public override void DrawString(string text, Point point, Brush brush, int size, FontStyle style, Rectangle bounds, bool ignoreFormatting = false) { SetClipArea(bounds); var pos = new Vector2((int) Math.Round(point.X), (int) Math.Round(point.Y)); var closest = GetClosestFontSize(size); var colorBrush = brush as ColorBrush; var gradientBrush = brush as GradientBrush; var defaultColor = Color.Black; if (colorBrush != null) defaultColor = colorBrush.Color; if (gradientBrush != null) { UseMaskStencil(bounds); } if (!ignoreFormatting) // If formatting is enabled, parse it and render each part. { var parts = ParseFormattedText(text, defaultColor, style); foreach (var part in parts) { var font = GetFont(Path.Combine(part.Style.ToString(), closest.ToString())); var measure = MeasureTextNoTrim(part.Text, size, part.Style); var col = new ColorXNA(part.Color.R, part.Color.G, part.Color.B, defaultColor.A); manager.SpriteBatch.DrawString(font, part.Text, pos, col * (defaultColor.A / 255f), 0, Vector2.Zero, size / (float) closest, SpriteEffects.None, 0); pos = new Vector2(pos.X + (float) measure.Width, pos.Y); } } else // Draw plain string { var font = GetFont(Path.Combine(style.ToString(), closest.ToString())); var col = new ColorXNA(defaultColor.R, defaultColor.G, defaultColor.B, defaultColor.A); manager.SpriteBatch.DrawString(font, text, pos, col * (defaultColor.A / 255f), 0, Vector2.Zero, size / (float) closest, SpriteEffects.None, 0); } // If using a gradient brush, draw a gradient over the mask. if (gradientBrush != null) { UseRenderStencil(); DrawGradient(bounds, gradientBrush); EndStencil(); } ResetClipArea(); }
/// <summary> /// Draws a filled rectangle within the specified area. /// </summary> public void FillRectangle(Rectangle area, Brush brush, Rectangle bounds) => FillRectangle(area, brush, 0, bounds);
/// <summary> /// Draws a rounded rectangle within the specified area. /// </summary> public abstract void DrawRectangle(Rectangle area, Brush brush, Thickness border, double cornerRadius, Rectangle bounds);
/// <summary> /// Draws a rectangle within the specified area. /// </summary> public void DrawRectangle(Rectangle area, Brush brush, Thickness border, Rectangle bounds) => DrawRectangle(area, brush, border, 0, bounds);
/// <summary> /// Draws a string at the specified point. /// </summary> public abstract void DrawString(string text, Point point, Brush brush, int size, FontStyle style, Rectangle bounds,bool ignoreFormatting = false);
/// <summary> /// Draws a string at the specified point. /// </summary> public void DrawString(string text, Point point, Brush brush, int size, Rectangle bounds, bool ignoreFormatting = false) => DrawString(text, point, brush, size, FontStyle.Regular, bounds, ignoreFormatting);