Test
This commit is contained in:
		
							
								
								
									
										392
									
								
								PrintPDF/PdfSharp/SilverlightInternals/AgDrawingContext.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										392
									
								
								PrintPDF/PdfSharp/SilverlightInternals/AgDrawingContext.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,392 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
#if SILVERLIGHT
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using System.Windows.Shapes;
 | 
			
		||||
using PdfSharp.Drawing;
 | 
			
		||||
using PdfSharp.Internal;
 | 
			
		||||
 | 
			
		||||
// ReSharper disable ConvertPropertyToExpressionBody
 | 
			
		||||
 | 
			
		||||
namespace System.Windows.Media
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// The WPF graphic system has the DrawingContext class that implements the low-level
 | 
			
		||||
    /// primitives for retained drawing. The lowest level in Silverlight a some non-aggregated
 | 
			
		||||
    /// UI elements like several Shape objects, TextBlock and Glyphs.
 | 
			
		||||
    /// This Silverlight version of DrawingContext simplyfies the implementation of XGraphics.
 | 
			
		||||
    /// It converts function calls to DrawingContext into UI elements layered on Canvas
 | 
			
		||||
    /// objects.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    internal class AgDrawingContext
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="AgDrawingContext"/> class.
 | 
			
		||||
        /// Drawing creates objects that are placed on the specified canvas.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        internal AgDrawingContext(Canvas canvas)
 | 
			
		||||
        {
 | 
			
		||||
            if (canvas == null)
 | 
			
		||||
                throw new ArgumentNullException("canvas");
 | 
			
		||||
 | 
			
		||||
            // The size of the canvas is not used and does not matter.
 | 
			
		||||
            // The properties of the canvas are not modified. Instead a new
 | 
			
		||||
            // canvas is added to its Children list.
 | 
			
		||||
            _canvasStack.Push(canvas);
 | 
			
		||||
            PushCanvas();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Close()
 | 
			
		||||
        {
 | 
			
		||||
            // There is nothing to close in Silverlight.
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // There are no drawing objects in Silverlight.
 | 
			
		||||
        //public void DrawDrawing(Drawing drawing);
 | 
			
		||||
 | 
			
		||||
        public void DrawEllipse(Brush brush, Pen pen, Point center, double radiusX, double radiusY)
 | 
			
		||||
        {
 | 
			
		||||
            Ellipse ellipse = new Ellipse();
 | 
			
		||||
            SetupShape(ellipse, center.X - radiusX, center.Y - radiusY, radiusX * 2, radiusY * 2, brush, pen);
 | 
			
		||||
            ellipse.Fill = brush;
 | 
			
		||||
            ActiveCanvas.Children.Add(ellipse);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public void DrawEllipse(Brush brush, Pen pen, Point center, AnimationClock centerAnimations, double radiusX, AnimationClock radiusXAnimations, double radiusY, AnimationClock radiusYAnimations);
 | 
			
		||||
 | 
			
		||||
        public void DrawGeometry(Brush brush, Pen pen, Geometry geometry)
 | 
			
		||||
        {
 | 
			
		||||
            Path path = new Path();
 | 
			
		||||
            SetupShape(path, 0, 0, Double.NaN, Double.NaN, brush, pen);
 | 
			
		||||
            path.Data = geometry;
 | 
			
		||||
            ActiveCanvas.Children.Add(path);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void DrawPath(Brush brush, Pen pen, Path path)
 | 
			
		||||
        {
 | 
			
		||||
            SetupShape(path, brush, pen);
 | 
			
		||||
            ActiveCanvas.Children.Add(path);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public void DrawGlyphRun(Brush foregroundBrush, GlyphRun glyphRun);
 | 
			
		||||
 | 
			
		||||
        public void DrawImage(ImageSource imageSource, Rect rectangle)
 | 
			
		||||
        {
 | 
			
		||||
            // TODO
 | 
			
		||||
            Image image = new Image();
 | 
			
		||||
            image.Source = imageSource;
 | 
			
		||||
            Canvas.SetLeft(image, rectangle.X);
 | 
			
		||||
            Canvas.SetTop(image, rectangle.Y);
 | 
			
		||||
            image.Width = rectangle.Width;
 | 
			
		||||
            image.Height = rectangle.Height;
 | 
			
		||||
 | 
			
		||||
            ActiveCanvas.Children.Add(image);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void DrawLine(Pen pen, Point point0, Point point1)
 | 
			
		||||
        {
 | 
			
		||||
#if true
 | 
			
		||||
            Line line = new Line();
 | 
			
		||||
            SetupShape(line, 0, 0, Double.NaN, Double.NaN, null, pen);
 | 
			
		||||
            line.X1 = point0.X;
 | 
			
		||||
            line.Y1 = point0.Y;
 | 
			
		||||
            line.X2 = point1.X;
 | 
			
		||||
            line.Y2 = point1.Y;
 | 
			
		||||
            ActiveCanvas.Children.Add(line);
 | 
			
		||||
#else
 | 
			
		||||
            Line line = new Line();
 | 
			
		||||
            double x = Math.Min(point0.X, point1.X);
 | 
			
		||||
            double y = Math.Min(point0.Y, point1.Y);
 | 
			
		||||
 | 
			
		||||
            // Prevent clipping thick lines parallel to shape boundaries.
 | 
			
		||||
            double delta = 0; // 2 * pen.Thickness;
 | 
			
		||||
            //SetupShape(line, x - delta, y - delta, width + 2 * delta, height + 2 * delta, null, pen);
 | 
			
		||||
            SetupShape(line, x - delta, y - delta, Double.NaN, Double.NaN, null, pen);
 | 
			
		||||
            line.X1 = point0.X - x + delta;
 | 
			
		||||
            line.Y1 = point0.Y - y + delta;
 | 
			
		||||
            line.X2 = point1.X - x + delta;
 | 
			
		||||
            line.Y2 = point1.Y - y + delta;
 | 
			
		||||
            ActiveCanvas.Children.Add(line);
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void DrawRectangle(Brush brush, Pen pen, Rect rect)
 | 
			
		||||
        {
 | 
			
		||||
            Rectangle rectangle = new Rectangle();
 | 
			
		||||
            SetupShape(rectangle, rect.X, rect.Y, rect.Width, rect.Height, brush, pen);
 | 
			
		||||
            ActiveCanvas.Children.Add(rectangle);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void DrawRoundedRectangle(Brush brush, Pen pen, Rect rect, double radiusX, double radiusY)
 | 
			
		||||
        {
 | 
			
		||||
            Rectangle rectangle = new Rectangle();
 | 
			
		||||
            SetupShape(rectangle, rect.X, rect.Y, rect.Width, rect.Height, brush, pen);
 | 
			
		||||
            rectangle.RadiusX = radiusX;
 | 
			
		||||
            rectangle.RadiusY = radiusY;
 | 
			
		||||
            ActiveCanvas.Children.Add(rectangle);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static void SetupShape(Shape shape, double x, double y, double width, double height, Brush brush, Pen pen)
 | 
			
		||||
        {
 | 
			
		||||
            if (width < 0)  // nan < 0 is false
 | 
			
		||||
            {
 | 
			
		||||
                x += width;
 | 
			
		||||
                width = -width;
 | 
			
		||||
            }
 | 
			
		||||
            if (height < 0)
 | 
			
		||||
            {
 | 
			
		||||
                y += height;
 | 
			
		||||
                height = -height;
 | 
			
		||||
            }
 | 
			
		||||
            Canvas.SetLeft(shape, x);
 | 
			
		||||
            Canvas.SetTop(shape, y);
 | 
			
		||||
 | 
			
		||||
            // Setting a double dependency property to Double.NaN is not the same
 | 
			
		||||
            // as simply not setting it. I consider this is a bug in the Silverlight run-time.
 | 
			
		||||
            if (!DoubleUtil.IsNaN(width))
 | 
			
		||||
                shape.Width = width;
 | 
			
		||||
            if (!DoubleUtil.IsNaN(height))
 | 
			
		||||
                shape.Height = height;
 | 
			
		||||
            SetupShape(shape, brush, pen);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static void SetupShape(Shape shape, Brush brush, Pen pen)
 | 
			
		||||
        {
 | 
			
		||||
            shape.Fill = brush;
 | 
			
		||||
            if (pen != null)
 | 
			
		||||
            {
 | 
			
		||||
                DoubleCollection dashArray = new DoubleCollection();
 | 
			
		||||
                foreach (double value in pen.DashArray)
 | 
			
		||||
                    dashArray.Add(value);
 | 
			
		||||
 | 
			
		||||
                shape.Stroke = pen.Brush;
 | 
			
		||||
                shape.StrokeThickness = pen.Thickness;
 | 
			
		||||
                shape.StrokeDashArray = dashArray;
 | 
			
		||||
                shape.StrokeDashOffset = pen.DashOffset;
 | 
			
		||||
                shape.StrokeStartLineCap = pen.StartLineCap;
 | 
			
		||||
                shape.StrokeEndLineCap = pen.EndLineCap;
 | 
			
		||||
                shape.StrokeDashCap = pen.DashCap;
 | 
			
		||||
                shape.StrokeLineJoin = pen.LineJoin;
 | 
			
		||||
                shape.StrokeMiterLimit = pen.MiterLimit;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public void DrawRoundedRectangle(Brush brush, Pen pen, Rect rectangle, AnimationClock rectangleAnimations, double radiusX, AnimationClock radiusXAnimations, double radiusY, AnimationClock radiusYAnimations);
 | 
			
		||||
        //public void DrawText(FormattedText formattedText, Point origin);
 | 
			
		||||
        //public void DrawVideo(MediaPlayer player, Rect rectangle);
 | 
			
		||||
        //public void DrawVideo(MediaPlayer player, Rect rectangle, AnimationClock rectangleAnimations);
 | 
			
		||||
 | 
			
		||||
        public void Pop(int count)
 | 
			
		||||
        {
 | 
			
		||||
            Debug.Assert(_canvasStack.Count - 1 > count);
 | 
			
		||||
            for (int idx = 0; idx < count; idx++)
 | 
			
		||||
                _canvasStack.Pop();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void PushClip(Geometry clipGeometry)
 | 
			
		||||
        {
 | 
			
		||||
            Canvas canvas = ActiveCanvas;
 | 
			
		||||
            if (canvas.Children.Count > 0 || canvas.Clip != null)
 | 
			
		||||
                canvas = PushCanvas();
 | 
			
		||||
            canvas.Clip = clipGeometry;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public void PushEffect(BitmapEffect effect, BitmapEffectInput effectInput);
 | 
			
		||||
        //public void PushGuidelineSet(GuidelineSet guidelines);
 | 
			
		||||
 | 
			
		||||
        public void PushOpacity(double opacity)
 | 
			
		||||
        {
 | 
			
		||||
            Canvas canvas = ActiveCanvas;
 | 
			
		||||
            if (canvas.Children.Count > 0 || !DoubleUtil.IsNaN(canvas.Opacity))
 | 
			
		||||
                canvas = PushCanvas();
 | 
			
		||||
            canvas.Opacity = opacity;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public void PushOpacity(double opacity, AnimationClock opacityAnimations);
 | 
			
		||||
 | 
			
		||||
        public void PushOpacityMask(Brush opacityMask)
 | 
			
		||||
        {
 | 
			
		||||
            Canvas canvas = ActiveCanvas;
 | 
			
		||||
            if (canvas.Children.Count > 0 || canvas.OpacityMask != null)
 | 
			
		||||
                canvas = PushCanvas();
 | 
			
		||||
            canvas.OpacityMask = opacityMask;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void PushTransform(MatrixTransform transform)
 | 
			
		||||
        {
 | 
			
		||||
            Canvas canvas = ActiveCanvas;
 | 
			
		||||
            if (canvas.Children.Count > 0 || canvas.RenderTransform != null)
 | 
			
		||||
                canvas = PushCanvas();
 | 
			
		||||
            canvas.RenderTransform = transform;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Resembles the DrawString function of GDI+.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [Obsolete("Text may be drawn at the wrong position. Requires update!")]
 | 
			
		||||
        public void DrawString(XGraphics gfx, string text, XFont font, XBrush brush, XRect layoutRectangle, XStringFormat format)
 | 
			
		||||
        {
 | 
			
		||||
            double x = layoutRectangle.X;
 | 
			
		||||
            double y = layoutRectangle.Y;
 | 
			
		||||
 | 
			
		||||
            double lineSpace = font.GetHeight(); //old: font.GetHeight(gfx);
 | 
			
		||||
            double cyAscent = lineSpace * font.CellAscent / font.CellSpace;
 | 
			
		||||
            double cyDescent = lineSpace * font.CellDescent / font.CellSpace;
 | 
			
		||||
 | 
			
		||||
            bool bold = (font.Style & XFontStyle.Bold) != 0;
 | 
			
		||||
            bool italic = (font.Style & XFontStyle.Italic) != 0;
 | 
			
		||||
            bool strikeout = (font.Style & XFontStyle.Strikeout) != 0;
 | 
			
		||||
            bool underline = (font.Style & XFontStyle.Underline) != 0;
 | 
			
		||||
 | 
			
		||||
            //Debug.Assert(font.GlyphTypeface != null);
 | 
			
		||||
            TextBlock textBlock = new TextBlock(); //FontHelper.CreateTextBlock(text, font.GlyphTypeface, font.Size, brush.RealizeWpfBrush());
 | 
			
		||||
            if (layoutRectangle.Width > 0)
 | 
			
		||||
                textBlock.Width = layoutRectangle.Width;
 | 
			
		||||
 | 
			
		||||
            switch (format.Alignment)
 | 
			
		||||
            {
 | 
			
		||||
                case XStringAlignment.Near:
 | 
			
		||||
                    textBlock.TextAlignment = TextAlignment.Left;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case XStringAlignment.Center:
 | 
			
		||||
                    textBlock.TextAlignment = TextAlignment.Center;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case XStringAlignment.Far:
 | 
			
		||||
                    textBlock.TextAlignment = TextAlignment.Right;
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (gfx.PageDirection == XPageDirection.Downwards)
 | 
			
		||||
            {
 | 
			
		||||
                switch (format.LineAlignment)
 | 
			
		||||
                {
 | 
			
		||||
                    case XLineAlignment.Near:
 | 
			
		||||
                        //y += cyAscent;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case XLineAlignment.Center:
 | 
			
		||||
                        // TODO use CapHeight. PDFlib also uses 3/4 of ascent
 | 
			
		||||
                        y += (layoutRectangle.Height - textBlock.ActualHeight) / 2;
 | 
			
		||||
                        //y += -formattedText.Baseline + (font.Size * font.Metrics.CapHeight / font.unitsPerEm / 2) + layoutRectangle.Height / 2;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case XLineAlignment.Far:
 | 
			
		||||
                        y += layoutRectangle.Height - textBlock.ActualHeight;
 | 
			
		||||
                        //y -= textBlock.ActualHeight;  //-formattedText.Baseline - cyDescent + layoutRectangle.Height;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case XLineAlignment.BaseLine:
 | 
			
		||||
//#if !WINDOWS_PHONE
 | 
			
		||||
                        y -= textBlock.BaselineOffset;
 | 
			
		||||
//#else
 | 
			
		||||
//                        // No BaselineOffset in Silverlight WP yet.
 | 
			
		||||
//                        //y -= textBlock.BaselineOffset;
 | 
			
		||||
//#endif
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                throw new NotImplementedException("XPageDirection.Downwards");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //if (bold && !descriptor.IsBoldFace)
 | 
			
		||||
            //{
 | 
			
		||||
            //  // TODO: emulate bold by thicker outline
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            //if (italic && !descriptor.IsBoldFace)
 | 
			
		||||
            //{
 | 
			
		||||
            //  // TODO: emulate italic by shearing transformation
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            if (underline)
 | 
			
		||||
                textBlock.TextDecorations = TextDecorations.Underline;
 | 
			
		||||
 | 
			
		||||
            // No strikethrough in Silverlight
 | 
			
		||||
            //if (strikeout)
 | 
			
		||||
            //{
 | 
			
		||||
            //  formattedText.SetTextDecorations(TextDecorations.Strikethrough);
 | 
			
		||||
            //  //double strikeoutPosition = lineSpace * realizedFont.FontDescriptor.descriptor.StrikeoutPosition / font.cellSpace;
 | 
			
		||||
            //  //double strikeoutSize = lineSpace * realizedFont.FontDescriptor.descriptor.StrikeoutSize / font.cellSpace;
 | 
			
		||||
            //  //DrawRectangle(null, brush, x, y - strikeoutPosition - strikeoutSize, width, strikeoutSize);
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            Canvas.SetLeft(textBlock, x);
 | 
			
		||||
            Canvas.SetTop(textBlock, y);
 | 
			
		||||
            ActiveCanvas.Children.Add(textBlock);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// Resembles the MeasureString function of GDI+.
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //[Obsolete("Use XGraphics.MeasureString()")]
 | 
			
		||||
        //public XSize MeasureString(XGraphics gfx, string text, XFont font, XStringFormat stringFormat)
 | 
			
		||||
        //{
 | 
			
		||||
        //    //Debug.Assert(font.GlyphTypeface != null);
 | 
			
		||||
        //    TextBlock textBlock = new TextBlock();  //FontHelper.CreateTextBlock(text, font.GlyphTypeface, font.Size, null);
 | 
			
		||||
        //    // Looks very much like a hack, but is the recommended way documented by Microsoft.
 | 
			
		||||
        //    return new XSize(textBlock.ActualWidth, textBlock.ActualHeight);
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Create new canvas and add it to the children of the current canvas.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        internal Canvas PushCanvas()
 | 
			
		||||
        {
 | 
			
		||||
            Canvas canvas = new Canvas();
 | 
			
		||||
            ActiveCanvas.Children.Add(canvas);
 | 
			
		||||
            _canvasStack.Push(canvas);
 | 
			
		||||
            return canvas;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets the currently active canvas.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Canvas ActiveCanvas
 | 
			
		||||
        {
 | 
			
		||||
            get { return _canvasStack.Peek(); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets the nesting level of Canvas objects.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        internal int Level
 | 
			
		||||
        {
 | 
			
		||||
            get { return _canvasStack.Count; }
 | 
			
		||||
        }
 | 
			
		||||
        readonly Stack<Canvas> _canvasStack = new Stack<Canvas>();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										55
									
								
								PrintPDF/PdfSharp/SilverlightInternals/AgExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								PrintPDF/PdfSharp/SilverlightInternals/AgExtensions.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
#if SILVERLIGHT
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using System.Windows.Shapes;
 | 
			
		||||
 | 
			
		||||
namespace PdfSharp
 | 
			
		||||
{
 | 
			
		||||
    static class AgExtensions
 | 
			
		||||
    {
 | 
			
		||||
        public static Pen PenFromShape(Shape shape)
 | 
			
		||||
        {
 | 
			
		||||
            Pen pen = new Pen();
 | 
			
		||||
            pen.Brush = shape.Stroke;
 | 
			
		||||
            pen.Thickness = shape.StrokeThickness;
 | 
			
		||||
            // Todo
 | 
			
		||||
            pen.DashArray = new DoubleCollection();
 | 
			
		||||
            pen.StartLineCap = PenLineCap.Flat;
 | 
			
		||||
            pen.EndLineCap = PenLineCap.Flat;
 | 
			
		||||
            pen.DashCap = PenLineCap.Flat;
 | 
			
		||||
            pen.LineJoin = PenLineJoin.Miter;  // TODO: check default values
 | 
			
		||||
            pen.MiterLimit = 10;  // TODO: check default values
 | 
			
		||||
 | 
			
		||||
            return pen;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										193
									
								
								PrintPDF/PdfSharp/SilverlightInternals/AgHacks.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								PrintPDF/PdfSharp/SilverlightInternals/AgHacks.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,193 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
#if SILVERLIGHT || UWP
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
#if SILVERLIGHT
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using System.Windows.Documents;
 | 
			
		||||
using System.Windows.Ink;
 | 
			
		||||
using System.Windows.Input;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using System.Windows.Media.Animation;
 | 
			
		||||
using System.Windows.Shapes;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/// <summary>
 | 
			
		||||
/// SerializableAttribute for compatibility with Silverlight.
 | 
			
		||||
/// </summary>
 | 
			
		||||
public class SerializableAttribute : Attribute
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
/// <summary>
 | 
			
		||||
/// ICloneable for compatibility with Silverlight.
 | 
			
		||||
/// </summary>
 | 
			
		||||
public interface ICloneable
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Creates a new object that is a copy of the current instance
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    Object Clone();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace PdfSharp
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// The exception that is thrown when a non-fatal application error occurs.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class ApplicationException : Exception
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ApplicationException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ApplicationException()
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ApplicationException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ApplicationException(string message)
 | 
			
		||||
            : base(message)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ApplicationException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="message">The error message that explains the reason for the exception.</param>
 | 
			
		||||
        /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
 | 
			
		||||
        public ApplicationException(string message, Exception innerException)
 | 
			
		||||
            : base(message, innerException)
 | 
			
		||||
        { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if SILVERLIGHT
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// The exception that is thrown when the value of an argument is outside
 | 
			
		||||
    /// the allowable range of values as defined by the invoked method.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class ArgumentOutOfRangeException : ArgumentException
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ArgumentOutOfRangeException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ArgumentOutOfRangeException()
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ArgumentOutOfRangeException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ArgumentOutOfRangeException(string message)
 | 
			
		||||
            : base(message)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ArgumentOutOfRangeException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ArgumentOutOfRangeException(string message, string message2)
 | 
			
		||||
            : base(message, message2)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ArgumentOutOfRangeException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ArgumentOutOfRangeException(string message, object value, string message2)
 | 
			
		||||
            : base(message, message2)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="ArgumentOutOfRangeException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ArgumentOutOfRangeException(string message, Exception innerException)
 | 
			
		||||
            : base(message, innerException)
 | 
			
		||||
        { }
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// The exception thrown when using invalid arguments that are enumerators.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class InvalidEnumArgumentException : ArgumentException
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="InvalidEnumArgumentException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public InvalidEnumArgumentException()
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="InvalidEnumArgumentException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public InvalidEnumArgumentException(string message)
 | 
			
		||||
            : base(message)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="InvalidEnumArgumentException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public InvalidEnumArgumentException(string message, string message2)
 | 
			
		||||
            : base(message, message2)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="InvalidEnumArgumentException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public InvalidEnumArgumentException(string message, int n, Type type)
 | 
			
		||||
            : base(message)
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="InvalidEnumArgumentException"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public InvalidEnumArgumentException(string message, Exception innerException)
 | 
			
		||||
            : base(message, innerException)
 | 
			
		||||
        { }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //public class FileNotFoundException : Exception
 | 
			
		||||
    //{
 | 
			
		||||
    //  public FileNotFoundException()
 | 
			
		||||
    //  { }
 | 
			
		||||
 | 
			
		||||
    //  public FileNotFoundException(string message)
 | 
			
		||||
    //    : base(message)
 | 
			
		||||
    //  { }
 | 
			
		||||
 | 
			
		||||
    //  public FileNotFoundException(string message, string path)
 | 
			
		||||
    //    : base(message + "/" + path)
 | 
			
		||||
    //  { }
 | 
			
		||||
 | 
			
		||||
    //  public FileNotFoundException(string message, Exception innerException)
 | 
			
		||||
    //    : base(message, innerException)
 | 
			
		||||
    //  { }
 | 
			
		||||
    //}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										100
									
								
								PrintPDF/PdfSharp/SilverlightInternals/Pen.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								PrintPDF/PdfSharp/SilverlightInternals/Pen.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
#if SILVERLIGHT
 | 
			
		||||
using System;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using System.Windows.Documents;
 | 
			
		||||
using System.Windows.Ink;
 | 
			
		||||
using System.Windows.Input;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using System.Windows.Media.Animation;
 | 
			
		||||
using System.Windows.Shapes;
 | 
			
		||||
 | 
			
		||||
namespace System.Windows.Media
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Imitates the WPF Pen object.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    internal sealed class Pen
 | 
			
		||||
    {
 | 
			
		||||
        public Pen()
 | 
			
		||||
        {
 | 
			
		||||
            Thickness = 1;
 | 
			
		||||
            DashArray = new DoubleCollection();
 | 
			
		||||
            StartLineCap = PenLineCap.Flat;
 | 
			
		||||
            EndLineCap = PenLineCap.Flat;
 | 
			
		||||
            DashCap = PenLineCap.Flat;
 | 
			
		||||
            LineJoin = PenLineJoin.Miter;  // TODO: check default values
 | 
			
		||||
            MiterLimit = 10;  // TODO: check default values
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public static Pen FromShape(Shape shape)
 | 
			
		||||
        //{
 | 
			
		||||
        //  Pen pen = new Pen();
 | 
			
		||||
        //  pen.Brush = shape.Stroke;
 | 
			
		||||
        //  pen.Thickness = shape.StrokeThickness;
 | 
			
		||||
        //  // Todo
 | 
			
		||||
        //  pen.DashArray = new DoubleCollection();
 | 
			
		||||
        //  pen.StartLineCap = PenLineCap.Flat;
 | 
			
		||||
        //  pen.EndLineCap = PenLineCap.Flat;
 | 
			
		||||
        //  pen.DashCap = PenLineCap.Flat;
 | 
			
		||||
        //  pen.LineJoin = PenLineJoin.Miter;  // TODO: check default values
 | 
			
		||||
        //  pen.MiterLimit = 10;  // TODO: check default values
 | 
			
		||||
 | 
			
		||||
        //  return pen;
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        public Brush Brush { get; set; }
 | 
			
		||||
 | 
			
		||||
        public double Thickness { get; set; }
 | 
			
		||||
 | 
			
		||||
        //public DashStyle DashStyle { get; set; }
 | 
			
		||||
 | 
			
		||||
        public DoubleCollection DashArray { get; set; }
 | 
			
		||||
 | 
			
		||||
        public double DashOffset { get; set; }
 | 
			
		||||
 | 
			
		||||
        public PenLineCap StartLineCap { get; set; }
 | 
			
		||||
 | 
			
		||||
        public PenLineCap EndLineCap { get; set; }
 | 
			
		||||
 | 
			
		||||
        public PenLineCap DashCap { get; set; }
 | 
			
		||||
 | 
			
		||||
        public PenLineJoin LineJoin { get; set; }
 | 
			
		||||
 | 
			
		||||
        public double MiterLimit { get; set; }
 | 
			
		||||
 | 
			
		||||
        //public Pen Clone();
 | 
			
		||||
        //public Pen CloneCurrentValue();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
		Reference in New Issue
	
	Block a user