示例#1
0
        protected override Foundation.Size ArrangeOverride(Foundation.Size finalSize)
        {
            var area = Bounds;

            switch (Stretch)
            {
            default:
            case Stretch.None:
                area = CGRect.Empty;
                break;

            case Stretch.Fill:
                area = Bounds;
                break;

            case Stretch.Uniform:
                area = (area.Height > area.Width)
                                                ? (new global::System.Drawing.RectangleF((float)area.X, (float)area.Y, (float)area.Width, (float)area.Width))
                                                : (new global::System.Drawing.RectangleF((float)area.X, (float)area.Y, (float)area.Height, (float)area.Height));
                break;

            case Stretch.UniformToFill:
                area = (area.Height > area.Width)
                                                ? (new global::System.Drawing.RectangleF((float)area.X, (float)area.Y, (float)area.Height, (float)area.Height))
                                                : (new global::System.Drawing.RectangleF((float)area.X, (float)area.Y, (float)area.Width, (float)area.Width));
                break;
            }

            area = area.Shrink((float)ActualStrokeThickness / 2);

            if (Math.Max(RadiusX, RadiusY) > 0)
            {
#if __IOS__
                _rectangleLayer.Path = _BezierPath.FromRoundedRect(area, UIRectCorner.AllCorners, new CGSize(RadiusX, RadiusY)).CGPath;
#else
                _rectangleLayer.Path = _BezierPath.FromRoundedRect(area, (nfloat)RadiusX, (nfloat)RadiusY).ToCGPath();
#endif
            }
            else
            {
                _rectangleLayer.Path = _BezierPath.FromRect(area).ToCGPath();
            }

            if (_gradientLayer != null)
            {
                _gradientLayer.Frame = _rectangleLayer.Path.BoundingBox;
            }

            return(base.ArrangeOverride(finalSize));
        }
示例#2
0
        protected override Foundation.Size ArrangeOverride(Foundation.Size finalSize)
        {
            var area = Bounds;

            area = Stretch switch
            {
                Stretch.Fill => Bounds,
                Stretch.Uniform => area.Height > area.Width
                                        ? new CGRect((float)area.X, (float)area.Y, (float)area.Width, (float)area.Width)
                                        : new CGRect((float)area.X, (float)area.Y, (float)area.Height, (float)area.Height),
                Stretch.UniformToFill => area.Height > area.Width
                                        ? new CGRect((float)area.X, (float)area.Y, (float)area.Height, (float)area.Height)
                                        : new CGRect((float)area.X, (float)area.Y, (float)area.Width, (float)area.Width),
                // None
                _ => CGRect.Empty,
            };
            area = area.Shrink((float)ActualStrokeThickness / 2);

            if (Math.Max(RadiusX, RadiusY) > 0)
            {
#if __IOS__
                _rectangleLayer.Path = _BezierPath.FromRoundedRect(area, UIRectCorner.AllCorners, new CGSize(RadiusX, RadiusY)).CGPath;
#else
                _rectangleLayer.Path = _BezierPath.FromRoundedRect(area, (nfloat)RadiusX, (nfloat)RadiusY).ToCGPath();
#endif
            }
            else
            {
                _rectangleLayer.Path = _BezierPath.FromRect(area).ToCGPath();
            }

            if (_gradientLayer != null)
            {
                _gradientLayer.Frame = _rectangleLayer.Path.BoundingBox;
            }

            return(base.ArrangeOverride(finalSize));
        }