/// <summary> /// See base docs. /// </summary> /// <param name="pen"></param> /// <param name="fromX"></param> /// <param name="fromY"></param> /// <param name="toX"></param> /// <param name="toY"></param> public override void DrawLine(VrsDrawing.IPen pen, int fromX, int fromY, int toX, int toY) { if (pen is PenWrapper penWrapper) { GdiPlusLock.EnforceSingleThread(() => { NativeDrawingContext.DrawLine( penWrapper.NativePen, fromX, fromY, toX, toY ); }); } }
/// <summary> /// See interface docs. /// </summary> /// <param name="red"></param> /// <param name="green"></param> /// <param name="blue"></param> /// <param name="alpha"></param> /// <param name="strokeWidth"></param> /// <param name="isCached"></param> /// <returns></returns> protected override VrsDrawing.IPen CreatePenWrapper(int red, int green, int blue, int alpha, float strokeWidth, bool isCached) { VrsDrawing.IPen result = null; GdiPlusLock.EnforceSingleThread(() => { result = new PenWrapper( new Pen( Color.FromArgb(alpha, red, green, blue), strokeWidth ), isCached ); }); return(result); }
/// <summary> /// See base docs. /// </summary> /// <param name="text"></param> /// <param name="font"></param> /// <param name="fillBrush"></param> /// <param name="outlinePen"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="alignment"></param> /// <param name="preferSpeedOverQuality"></param> public override void DrawText(string text, VrsDrawing.IFont font, VrsDrawing.IBrush fillBrush, VrsDrawing.IPen outlinePen, float x, float y, VrsDrawing.HorizontalAlignment alignment, bool preferSpeedOverQuality = true) { if (font is FontWrapper fontWrapper) { GdiPlusLock.EnforceSingleThread(() => { var location = new PointF(x, y); // Mono ignores these flags... var stringFormat = new StringFormat() { Alignment = Convert.ToSystemDrawingStringAlignment(alignment), LineAlignment = Convert.ToSystemDrawingStringAlignment(alignment), FormatFlags = StringFormatFlags.NoWrap, }; using (var graphicsPath = new GraphicsPath()) { graphicsPath.AddString( text, fontWrapper.NativeFont.FontFamily, (int)fontWrapper.NativeFont.Style, fontWrapper.NativeFont.Size, location, stringFormat ); NativeDrawingContext.SmoothingMode = SmoothingMode.AntiAlias; NativeDrawingContext.InterpolationMode = InterpolationMode.HighQualityBicubic; if (outlinePen is PenWrapper outlinePenWrapper) { NativeDrawingContext.DrawPath(outlinePenWrapper.NativePen, graphicsPath); } if (fillBrush is BrushWrapper fillBrushWrapper) { NativeDrawingContext.FillPath(fillBrushWrapper.NativeBrush, graphicsPath); } } }); } }
/// <summary> /// Creates a new object. /// </summary> public CommonPenFactory() { Black = CreatePenWrapper(0, 0, 0, 255, 1.0F, isCached: true); LightGray = CreatePenWrapper(211, 211, 211, 255, 1.0F, isCached: true); }
/// <summary> /// See interface docs. /// </summary> /// <param name="text"></param> /// <param name="font"></param> /// <param name="fillBrush"></param> /// <param name="outlinePen"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="alignment"></param> /// <param name="preferSpeedOverQuality"></param> public abstract void DrawText(string text, VrsDrawing.IFont font, VrsDrawing.IBrush fillBrush, VrsDrawing.IPen outlinePen, float x, float y, VrsDrawing.HorizontalAlignment alignment, bool preferSpeedOverQuality = true);
/// <summary> /// See interface docs. /// </summary> /// <param name="pen"></param> /// <param name="fromX"></param> /// <param name="fromY"></param> /// <param name="toX"></param> /// <param name="toY"></param> public abstract void DrawLine(VrsDrawing.IPen pen, int fromX, int fromY, int toX, int toY);