Exemplo n.º 1
0
        /// <summary>
        ///     Raises the <see cref="E:System.Drawing.Printing.PrintDocument.PrintPage" /> event. It is called before a page
        ///     prints.
        /// </summary>
        /// <param name="e">A <see cref="T:System.Drawing.Printing.PrintPageEventArgs" /> that contains the event data. </param>
        protected override void OnPrintPage(PrintPageEventArgs e)
        {
            base.OnPrintPage(e);

            if (_resourceManager == null)
            {
                return;
            }

            e.Graphics.SetClip(e.MarginBounds);

            using (GDIGraphics graphics = new GDIGraphics(
                       e.Graphics,
                       _resourceManager,
                       SolidColourStyle.White,
                       _lineStyle))
            {
                Matrix3x2 transform, inverseTransform;
                _getTranform(
                    e.MarginBounds.ToRectangle(),
                    out transform,
                    out inverseTransform);

                graphics.Transform = transform;

                Vector2 tl = new Vector2(e.MarginBounds.Left, e.MarginBounds.Top);
                Vector2 br = new Vector2(e.MarginBounds.Right, e.MarginBounds.Bottom);

                tl = Vector2.Transform(tl, inverseTransform);
                br = Vector2.Transform(br, inverseTransform);

                Rectangle bounds = Rectangle.ContainingPoints(tl, br);

                switch (PrintMode)
                {
                case TilingPrintMode.TilingFull:
                    if (Tiling == null)
                    {
                        throw new InvalidOperationException("The Tiling is not set");
                    }

                    Tiling.DrawTiling(GetTiles(bounds), graphics, Tiling.StyleManager.LineStyle);
                    break;

                case TilingPrintMode.TilingLines:
                    if (Tiling == null)
                    {
                        throw new InvalidOperationException("The Tiling is not set");
                    }

                    Tiling.DrawTiling(GetTiles(bounds), graphics, _lineStyle, SolidColourStyle.White);
                    break;

                case TilingPrintMode.SingleTileFull:
                    if (Tile == null)
                    {
                        throw new InvalidOperationException("The Tile is not set");
                    }

                    DrawTile(graphics, Tiling?.StyleManager.LineStyle ?? _lineStyle);
                    break;

                case TilingPrintMode.SingleTileLines:
                    if (Tile == null)
                    {
                        throw new InvalidOperationException("The Tile is not set");
                    }

                    DrawTile(graphics, _lineStyle, SolidColourStyle.White);
                    break;

                default:
                    Debug.Fail($"Unexpected print mode {PrintMode}");
                    throw new NotSupportedException();
                }
            }
        }