Example #1
0
        public void DrawString(RectangleD layout, string text, Cairo.Color color, ObjectFont font, StringTrimming trimming, HorizontalAlignment hAlign = HorizontalAlignment.Left, bool wrap = false)
        {
            double x      = Math.Ceiling(layout.X * drawingScaleX);
            double y      = Math.Ceiling(layout.Y * drawingScaleY);
            double width  = Math.Floor(layout.Width * drawingScaleX);
            double height = Math.Floor(layout.Height * drawingScaleY);

            SetupPangoLayout(text, font, trimming, wrap ? (float?)width : null);

            cairoContext.Save();
            cairoContext.Rectangle(x, y, width, height);
            cairoContext.Clip();
            cairoContext.Antialias = Antialias.None;

            Pango.Rectangle ink, logical;
            pangoLayout.GetPixelExtents(out ink, out logical);
            if (ink.X < 0)
            {
                x             -= ink.X;
                logical.Width -= ink.X;
            }

            switch (hAlign)
            {
            case HorizontalAlignment.Left:
                pangoLayout.Alignment = Alignment.Left;
                break;

            case HorizontalAlignment.Center:
                pangoLayout.Alignment = Alignment.Center;
                if (width > logical.Width)
                {
                    x += (width - logical.Width) / 2;
                }
                break;

            case HorizontalAlignment.Right:
                pangoLayout.Alignment = Alignment.Right;
                if (width > logical.Width)
                {
                    x += width - logical.Width;
                }
                break;
            }

            cairoContext.MoveTo(x, y);
            cairoContext.Color = color;
            cairoContext.ShowLayout(pangoLayout);

            cairoContext.Restore();
        }
Example #2
0
        private void SetupPangoLayout(string text, ObjectFont font, StringTrimming trimming, double?width)
        {
            PangoStyle style = new PangoStyle
            {
                ExactSize  = font.Size,
                FontFamily = DataHelper.GetPreferredFont(text) ?? (font.NameSpecified ? font.Name : DataHelper.DefaultDocumentsFont)
            };

            if (font.Italic)
            {
                style.Italic = true;
            }
            if (font.Bold)
            {
                style.Bold = true;
            }
            if (font.Underline)
            {
                style.Underline = true;
            }
            if (font.StrikeThrought)
            {
                style.Strikethrough = true;
            }

            pangoLayout.SetMarkup(style.GetMarkup(text));
            pangoLayout.Ellipsize = EllipsizeMode.None;
            pangoLayout.Wrap      = WrapMode.Word;
            if (width != null)
            {
                pangoLayout.Width = (int)(width * Scale.PangoScale);
            }
            else
            {
                pangoLayout.Width = -1;
                if (trimming != StringTrimming.None)
                {
                    pangoLayout.Ellipsize = EllipsizeMode.End;
                }
            }
        }
Example #3
0
        public SizeD MeasureString(string text, ObjectFont font, double?width)
        {
            bool emptyString = string.IsNullOrWhiteSpace(text);

            if (emptyString)
            {
                text = "W";
            }
            SetupPangoLayout(text, font, StringTrimming.Character, width != null ? width * drawingScaleX : null);

            Pango.Rectangle ink, logical;
            pangoLayout.GetPixelExtents(out ink, out logical);
            if (ink.X < 0)
            {
                logical.Width -= ink.X;
            }
            if (emptyString)
            {
                logical.Width = 0;
            }

            return(new SizeD(logical.Width / drawingScaleX, logical.Height / drawingScaleY));
        }
 /// <summary>
 /// Gets the name of the specified font in the format used by <c>Pango</c>.
 /// </summary>
 /// <param name="font">The font.</param>
 /// <returns>The name of the specified font in the format used by <c>Pango</c>.</returns>
 public static string GetPangoName(ObjectFont font)
 {
     return(GetPangoName(font.Name, font.Bold, font.Italic, font.Size));
 }