protected override Text CreateAdvancedText(string text, Graphics graphics)
        {
            var font     = CreateFont(graphics);
            var dpi      = graphics.DpiX;
            var location = GetDrawingBaselineLocation(dpi);

            var plainText = new PlainText(text, font)
            {
                Alignment = VOAligmnentToAdvanced(Alignment),
                Underline = Underline,
                Tracking  = Tracking,
                Leading   = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading,
                Paragraph = { OverlapLines = true },
                Vertical  = IsVertical
            };

            if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale))
            {
                location.Scale(1 / HorizontalScale, 1 / VerticalScale);
                plainText.Transform.Scale(HorizontalScale, VerticalScale);
            }

            plainText.Position = location.ToPointF();

            return(plainText);
        }
 protected internal override void DrawContent(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement)
 {
     if (Text != null && !string.IsNullOrEmpty(Text.Trim()) && !TextColor.IsTransparent)
     {
         DrawText(graphics, destImageParams, colorManagement);
     }
 }
Beispiel #3
0
 private static void DrawVObjects(IEnumerable <VObject> vObjects, Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement)
 {
     foreach (var vObject in vObjects)
     {
         vObject.Draw(graphics, destImageParams, colorManagement);
     }
 }
        private void ExtendRectangle(BoundedText text, Graphics graphics, int recursionLevel = 0)
        {
            const int maxRecursionLevel = 20;

            if (!text.GetBlackBox().IsEmpty || recursionLevel >= maxRecursionLevel)
            {
                return;
            }

            // Calculate increment for the rectangle dimensions. It must be a positive even integer.
            var increment = (int)(System.Math.Min(graphics.Width, graphics.Height) * 0.1f);

            if (increment % 2 == 1)
            {
                increment += 1;
            }
            increment = System.Math.Max(increment, Common.ConvertPointsToPixels(graphics.DpiX, 2));

            // Create an extended rectangle and move its top-left corner in accordance with the alignment
            var rect = new RectangleF(text.Rectangle.X, text.Rectangle.Y, text.Rectangle.Width + increment, text.Rectangle.Height + increment);

            if (text.Alignment == AdvancedTextAlignment.Center)
            {
                rect.X -= increment / 2f;
            }
            else if (text.Alignment == AdvancedTextAlignment.Right)
            {
                rect.X -= increment;
            }

            text.Rectangle = rect;
            ExtendRectangle(text, graphics, ++recursionLevel);
        }
        protected Font CreateFont(Graphics graphics)
        {
            lock (Configuration.Instance.FontRegistry)
                graphics.FontRegistry = new CustomFontRegistry(Configuration.Instance.FontRegistry);

            var gmFont = graphics.CreateFont(Font.PostScriptName, Font.Size);

            gmFont.FauxBold   = Font.FauxBold;
            gmFont.FauxItalic = Font.FauxItalic;

            return(gmFont);
        }
        internal void DrawText(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement)
        {
            var text = CreateText(graphics);

            var color = ColorManagement.ConvertColor(colorManagement, TextColor, destImageParams);

            color      = color.ScaleAlpha(Opacity);
            text.Brush = new SolidBrush(color);

            RotateText(text, graphics.DpiX);

            graphics.DrawText(text);
        }
        protected override Text CreateAdvancedText(string text, Graphics graphics)
        {
            var font = CreateFont(graphics);

            var plainText = new PlainText(text, font)
            {
                Alignment = VOAligmnentToAdvanced(Alignment),
                Underline = Underline,
                Tracking  = Tracking,
                Leading   = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading,
                Paragraph = { OverlapLines = true },
                Vertical  = IsVertical
            };

            var rectangle = MeasureText(graphics.DpiX);
            var blackbox  = plainText.GetBlackBox();

            var horizontalScale = !Utils.EqualsOfFloatNumbers(blackbox.Width, 0) ? (rectangle.Width - RenderingMargin * 2) / blackbox.Width : 1f;
            var verticalScale   = !Utils.EqualsOfFloatNumbers(blackbox.Height, 0) ? (rectangle.Height - RenderingMargin * 2) / blackbox.Height : 1f;

            float alignmentShift = 0;

            if (Alignment != TextAlignment.Left)
            {
                alignmentShift  = !IsVertical ? rectangle.Width - blackbox.Width : rectangle.Height - blackbox.Height;
                alignmentShift -= RenderingMargin * 2;
                if (Alignment == TextAlignment.Center)
                {
                    alignmentShift /= 2;
                }
            }

            if (!IsVertical)
            {
                plainText.Transform.Translate(rectangle.X - blackbox.X + alignmentShift, rectangle.Y - blackbox.Y * verticalScale);
            }
            else
            {
                plainText.Transform.Translate(rectangle.X - blackbox.X * horizontalScale, rectangle.Y - blackbox.Y + alignmentShift);
            }

            if (!Utils.EqualsOfFloatNumbers(1, horizontalScale) || !Utils.EqualsOfFloatNumbers(1, verticalScale))
            {
                plainText.Transform.Scale(horizontalScale, verticalScale);
            }

            return(plainText);
        }
        private Text CreateText(Graphics graphics)
        {
            try
            {
                return(CreateAdvancedText(Utils.EqualsOfFloatNumbers(Opacity, 1) ?
                                          Text.TrimEnd() :
                                          Common.ProcessSpanStyles(Text.TrimEnd(), stylesDict => ApplyOpacityToRichText(stylesDict, Opacity)), graphics));
            }
            catch (GMException ex)
            {
                if (!(ex is UnknownTagException) && !(ex is InvalidStyleValueException) && !(ex is UnknownStyleNameException))
                {
                    throw;
                }

                Configuration.Logger.Warning(string.Format("Invalid rich text value in text vObject (Name - {0}, Id - {1})", Name, UniqueId), ex);

                return(CreateAdvancedText(HttpUtility.HtmlEncode(Text), graphics));
            }
        }
        protected override Text CreateAdvancedText(string text, Graphics graphics)
        {
            if (TextPath == null || TextPath.IsEmpty)
            {
                throw new InvalidOperationException("Path for CurvedText cannot be empty");
            }

            if (PathStart > PathEnd || Utils.EqualsOfFloatNumbers(PathStart, PathEnd))
            {
                throw new InvalidOperationException("Start point of path must be less than end point");
            }

            var dpi = graphics.DpiX;

            FitTextToPath(dpi);

            var font = CreateFont(graphics);
            var path = GetDrawingTextPath(dpi);

            var pathText = new PathText(text, font)
            {
                // CurveText doesn't support underline
                Alignment  = VOAligmnentToAdvanced(Alignment),
                Stretch    = Stretch,
                Tracking   = Tracking,
                Leading    = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading,
                AutoExtend = true
            };

            if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale))
            {
                path.Scale(1 / HorizontalScale, 1 / VerticalScale);
                pathText.Transform.Scale(HorizontalScale, VerticalScale);
            }

            pathText.Path  = path.ToAdvancedPath();
            pathText.Start = PathStart;
            pathText.End   = PathEnd;

            return(pathText);
        }
Beispiel #10
0
        protected internal void FillShape(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement)
        {
            var bounds = Bounds;

            if (bounds.Width <= 0 || bounds.Height <= 0)
            {
                return;
            }

            if (FillColor.IsTransparent)
            {
                return;
            }

            using (var path = GetDrawingPath(graphics.DpiX))
            {
                var fillColor = ColorManagement.ConvertColor(colorManagement, FillColor, destImageParams);
                fillColor = fillColor.ScaleAlpha(Opacity);
                graphics.FillPath(new SolidBrush(fillColor), path);
            }
        }
Beispiel #11
0
        protected internal void StrokeShape(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement)
        {
            var bounds = Bounds;

            if (bounds.Width <= 0 || bounds.Height <= 0)
            {
                return;
            }

            var dpi         = graphics.DpiX;
            var borderWidth = GetBorderWidth(dpi * graphics.Transform.Elements[0]);

            if (Utils.EqualsOfFloatNumbers(0, borderWidth))
            {
                return;
            }

            using (var path = GetDrawingPath(dpi))
            {
                var borderColor = ColorManagement.ConvertColor(colorManagement, BorderColor, destImageParams);
                borderColor = borderColor.ScaleAlpha(Opacity);
                graphics.DrawPath(new Pen(borderColor, borderWidth), path);
            }
        }
        protected override Text CreateAdvancedText(string text, Graphics graphics)
        {
            var font = CreateFont(graphics);

            var dpi  = graphics.DpiX;
            var rect = GetDrawingRectangle(dpi);

            rect.Width  -= RenderingMargin * 2;
            rect.Height -= RenderingMargin * 2;

            var boundedText = new BoundedText(text, font, rect.ToRectangleF())
            {
                Alignment = VOAligmnentToAdvanced(Alignment),
                Underline = Underline,
                Tracking  = Tracking,
                Leading   = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading,
                Paragraph =
                {
                    FirstLineIndent = ParagraphSettings.FirstLineIndent,
                    SpaceAfter      = ParagraphSettings.SpaceAfter,
                    SpaceBefore     = ParagraphSettings.SpaceBefore,
                    OverlapLines    = true
                },
                Vertical = IsVertical
            };

            if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale))
            {
                var rectangle = new RotatedRectangleF(boundedText.Rectangle);
                rectangle.Scale(1 / HorizontalScale, 1 / VerticalScale);

                boundedText.Rectangle = rectangle.ToRectangleF();
                boundedText.Transform.Scale(HorizontalScale, VerticalScale);
            }

            if (!string.IsNullOrEmpty(text))
            {
                ExtendRectangle(boundedText, graphics);
            }

            var rectHeight = rect.Height;
            var textHeight = boundedText.GetBlackBox().Height;

            var verticalOffset = 0f;

            switch (VerticalAlignment)
            {
            case TextVerticalAlignment.Center:
                verticalOffset = (rectHeight - textHeight) / 2 - RenderingMargin;
                break;

            case TextVerticalAlignment.Bottom:
                verticalOffset = rectHeight - textHeight - RenderingMargin;
                break;
            }

            if (verticalOffset > 0)
            {
                if (!Utils.EqualsOfFloatNumbers(1, VerticalScale))
                {
                    verticalOffset *= 1 / VerticalScale;
                }

                var rectangle = boundedText.Rectangle;
                rectangle.Y      += verticalOffset;
                rectangle.Height -= verticalOffset;

                boundedText.Rectangle = rectangle;
            }

            var wrappingPath = GetWrappingPath(dpi);

            if (wrappingPath.Points.Count > 0)
            {
                boundedText.WrappingPaths.Add(wrappingPath);
            }

            return(boundedText);
        }
Beispiel #13
0
 internal override void Draw(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement)
 {
     FillShape(graphics, destImageParams, colorManagement);
     StrokeShape(graphics, destImageParams, colorManagement);
 }
 protected abstract Text CreateAdvancedText(string text, Graphics graphics);
Beispiel #15
0
 internal abstract void Draw(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement);