コード例 #1
0
        public override PathF PathForBounds(RectangleF rect)
        {
            var bounds = _path.Bounds;

            AffineTransformF transform = null;

            if (_scaling == PathScaling.AspectFit)
            {
                var factorX = rect.Width / bounds.Width;
                var factorY = rect.Height / bounds.Height;
                var factor  = Math.Min(factorX, factorY);

                var width      = bounds.Width * factor;
                var height     = bounds.Height * factor;
                var translateX = (rect.Width - width) / 2;
                var translateY = (rect.Height - height) / 2;

                transform = AffineTransformF.GetTranslateInstance(-bounds.X, -bounds.Y);
                transform.Translate(translateX, translateY);
                transform.Scale(factor, factor);
            }
            else if (_scaling == PathScaling.AspectFill)
            {
                var factorX = rect.Width / bounds.Width;
                var factorY = rect.Height / bounds.Height;
                var factor  = Math.Max(factorX, factorY);

                var width      = bounds.Width * factor;
                var height     = bounds.Height * factor;
                var translateX = (rect.Width - width) / 2;
                var translateY = (rect.Height - height) / 2;

                transform = AffineTransformF.GetTranslateInstance(-bounds.X, -bounds.Y);
                transform.Translate(translateX, translateY);
                transform.Scale(factor, factor);
            }
            else if (_scaling == PathScaling.Fill)
            {
                var factorX = rect.Width / bounds.Width;
                var factorY = rect.Height / bounds.Height;
                transform = AffineTransformF.GetScaleInstance(factorX, factorY);

                var translateX = bounds.X * factorX;
                var translateY = bounds.Y * factorY;
                transform.Translate(translateX, translateY);
            }
            else
            {
                var width      = bounds.Width;
                var height     = bounds.Height;
                var translateX = (rect.Width - width) / 2;
                var translateY = (rect.Height - height) / 2;

                transform = AffineTransformF.GetTranslateInstance(-bounds.X, -bounds.Y);
                transform.Translate(translateX, translateY);
            }

            if (!transform?.IsIdentity ?? false)
            {
                return(_path.Transform(transform));
            }

            return(_path);
        }