public override void Render(ISurface surface) { var contextSurface = (ContextSurface)surface; if (string.IsNullOrEmpty(this.Text)) { return; } var matrix = contextSurface.Matrix; if (matrix.M11 < 0.2d || matrix.M22 < 0.2d) { return; } var ctx = contextSurface.Context; var style = this.Style; var shape = this.OuterShape; var font = Style.Font; if (AlignText && shape is IVectorShape) { var vector = ((IVectorShape)shape).Data; var f = ctx.DpiFactor(); var width = Vector.Length(vector); var height = Math.Ceiling(font.Size); var text = new TextLayout(ctx); text.Trimming = TextTrimming.WordElipsis; text.Text = this.Text; text.Font = font; var size = text.GetSize(); width = Math.Min(size.Width, width); height = Math.Max(size.Height, height); text.Width = width; text.Height = height; var c = new Point( (vector.Start.X + (vector.End.X - vector.Start.X) / 2d), (vector.Start.Y + (vector.End.Y - vector.Start.Y) / 2d)); ctx.Save(); ctx.Translate(c.X, c.Y); ctx.Rotate(Vector.Angle(vector)); ctx.SetColor(style.TextColor); ctx.SetLineWidth(1); ctx.DrawTextLayout(text, -width / 2d, -height / 2d); ctx.Restore(); } else { var rect = shape.BoundsRect.Padding(Style.Padding); ContextPainterExtensions.DrawText(ctx, rect, this.Text, font, style.TextColor); } }
protected virtual void SetRoundedRect(Context ctx, Rectangle rectangle, double radius) { // if corner radius is less than or equal to zero, // return the original Rectangle if (radius <= 0.0d) { ctx.Rectangle(rectangle); return; } // if the corner radius is greater than or equal to // half the width, or height (whichever is shorter) // then return a capsule instead of a lozenge if (radius >= (Math.Min(rectangle.Width, rectangle.Height)) / 2.0) { DrawCapsule(ctx, rectangle); return; } ContextPainterExtensions.DrawRoundedRect(ctx, rectangle, radius); ctx.ClosePath(); }