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)); }
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)); }