fix: safeguards against invalid values

This commit is contained in:
Igor Randjelovic
2021-02-26 18:49:50 +01:00
committed by Nathan Walker
parent 9f710411bf
commit 6f875b2eb7
2 changed files with 14 additions and 4 deletions

View File

@@ -733,15 +733,25 @@ function drawBoxShadow(nativeView: NativeView, view: View, boxShadow: CSSShadow,
}
// shadow opacity is handled on the shadow's color instance
layer.shadowOpacity = boxShadow.color?.a ? boxShadow.color?.a / 255 : 1;
layer.shadowRadius = Length.toDevicePixels(boxShadow.blurRadius);
layer.shadowRadius = Length.toDevicePixels(boxShadow.blurRadius, 0.0);
layer.shadowColor = boxShadow.color.ios.CGColor;
layer.shadowOffset = CGSizeMake(Length.toDevicePixels(boxShadow.offsetX), Length.toDevicePixels(boxShadow.offsetY));
// prettier-ignore
layer.shadowOffset = CGSizeMake(
Length.toDevicePixels(boxShadow.offsetX, 0.0),
Length.toDevicePixels(boxShadow.offsetY, 0.0)
);
// this should match the view's border radius
const cornerRadius = Length.toDevicePixels(<LengthType>view.style.borderRadius);
// apply spreadRadius by expanding shadow layer bounds
const bounds = boxShadow.spreadRadius ? CGRectInset(nativeView.bounds, -Length.toDevicePixels(boxShadow.spreadRadius), -Length.toDevicePixels(boxShadow.spreadRadius)) : nativeView.bounds;
// prettier-ignore
const bounds = boxShadow.spreadRadius ?
CGRectInset(nativeView.bounds,
-Length.toDevicePixels(boxShadow.spreadRadius),
-Length.toDevicePixels(boxShadow.spreadRadius)
) : nativeView.bounds;
// This has the nice glow with box shadow of 0,0
layer.shadowPath = UIBezierPath.bezierPathWithRoundedRectCornerRadius(bounds, cornerRadius).CGPath;

View File

@@ -34,7 +34,7 @@ const isLength = (v) => v === '0' || LENGTH_RE.test(v);
* @param value
*/
export function parseCSSShadow(value: string): CSSShadow {
const parts = value.split(PARTS_RE);
const parts = value.trim().split(PARTS_RE);
const inset = parts.includes('inset');
const first = parts[0];
const last = parts[parts.length - 1];