コード例 #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();
        }
コード例 #2
0
            void Render()
            {
                if (layout == null)
                {
                    return;
                }

                if (wrap)
                {
                    layout.Width = (int)(Allocation.Width * Pango.Scale.PangoScale);
                }
                else
                {
                    layout.Width = int.MaxValue;
                }

                Rectangle ink, log;

                layout.GetPixelExtents(out ink, out log);
                HeightRequest = ink.Y + ink.Height + 3;
                if (!wrap)
                {
                    WidthRequest = ink.X + ink.Width + 3;
                }
            }