コード例 #1
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 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();
 }
コード例 #2
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
        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);
        }
コード例 #3
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
        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();
        }
コード例 #4
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
        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);
        }
コード例 #5
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 /// <summary>
 /// Draws a rounded filled rectangle within the specified area.
 /// </summary>
 public abstract void FillRectangle(Rectangle area, Brush brush, double cornerRadius, Rectangle bounds);
コード例 #6
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
        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();
        }
コード例 #7
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 /// <summary>
 /// Draws a filled rectangle within the specified area.
 /// </summary>
 public void FillRectangle(Rectangle area, Brush brush, Rectangle bounds) => FillRectangle(area, brush, 0, bounds);
コード例 #8
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 /// <summary>
 /// Draws a rounded rectangle within the specified area.
 /// </summary>
 public abstract void DrawRectangle(Rectangle area, Brush brush, Thickness border, double cornerRadius, Rectangle bounds);
コード例 #9
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 /// <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);
コード例 #10
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 /// <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);
コード例 #11
0
ファイル: Renderer.cs プロジェクト: Pyratron/PyraUI
 /// <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);