コード例 #1
0
        /// <summary>
        /// See base docs.
        /// </summary>
        /// <param name="drawing"></param>
        /// <param name="font"></param>
        /// <param name="text"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        protected override void MeasureText(VrsDrawing.IDrawing drawing, VrsDrawing.IFont font, string text, out float width, out float height)
        {
            width  = 0F;
            height = 0F;

            if (drawing is Drawing context && font is FontWrapper fontWrapper)
            {
                var size = context.NativeDrawingContext.MeasureString(
                    text,
                    fontWrapper.NativeFont,
                    new PointF(0, 0),
                    StringFormat.GenericTypographic
                    );

                width  = size.Width;
                height = size.Height;
            }
        }
コード例 #2
0
        /// <summary>
        /// See base docs.
        /// </summary>
        /// <param name="fontFamily"></param>
        /// <param name="pointSize"></param>
        /// <param name="fontStyle"></param>
        /// <param name="isCached"></param>
        /// <returns></returns>
        protected override VrsDrawing.IFont CreateFontWrapper(VrsDrawing.IFontFamily fontFamily, float pointSize, VrsDrawing.FontStyle fontStyle, bool isCached)
        {
            VrsDrawing.IFont result = null;

            if (fontFamily is FontFamilyWrapper fontFamilyWrapper)
            {
                result = new FontWrapper(
                    new Font(
                        fontFamilyWrapper.NativeFontFamily,
                        pointSize,
                        Convert.ToSystemDrawingFontStyle(fontStyle),
                        GraphicsUnit.Point
                        ),
                    isCached
                    );
            }

            return(result);
        }
コード例 #3
0
        /// <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);
                        }
                    }
                });
            }
        }
コード例 #4
0
 /// <summary>
 /// Measures a string given a font and a drawing context.
 /// </summary>
 /// <param name="drawing"></param>
 /// <param name="font"></param>
 /// <param name="text"></param>
 /// <param name="width"></param>
 /// <param name="height"></param>
 protected abstract void MeasureText(VrsDrawing.IDrawing drawing, VrsDrawing.IFont font, string text, out float width, out float height);
コード例 #5
0
 /// <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);