diff --git a/src/Bounds.js b/src/Bounds.js index d54d33254..0fbc5def6 100644 --- a/src/Bounds.js +++ b/src/Bounds.js @@ -202,40 +202,32 @@ export const parseBoundCurves = ( borders: Array, borderRadius: Array ): BoundCurves => { - const HALF_WIDTH = bounds.width / 2; - const HALF_HEIGHT = bounds.height / 2; - const tlh = - borderRadius[CORNER.TOP_LEFT][H].getAbsoluteValue(bounds.width) < HALF_WIDTH - ? borderRadius[CORNER.TOP_LEFT][H].getAbsoluteValue(bounds.width) - : HALF_WIDTH; - const tlv = - borderRadius[CORNER.TOP_LEFT][V].getAbsoluteValue(bounds.height) < HALF_HEIGHT - ? borderRadius[CORNER.TOP_LEFT][V].getAbsoluteValue(bounds.height) - : HALF_HEIGHT; - const trh = - borderRadius[CORNER.TOP_RIGHT][H].getAbsoluteValue(bounds.width) < HALF_WIDTH - ? borderRadius[CORNER.TOP_RIGHT][H].getAbsoluteValue(bounds.width) - : HALF_WIDTH; - const trv = - borderRadius[CORNER.TOP_RIGHT][V].getAbsoluteValue(bounds.height) < HALF_HEIGHT - ? borderRadius[CORNER.TOP_RIGHT][V].getAbsoluteValue(bounds.height) - : HALF_HEIGHT; - const brh = - borderRadius[CORNER.BOTTOM_RIGHT][H].getAbsoluteValue(bounds.width) < HALF_WIDTH - ? borderRadius[CORNER.BOTTOM_RIGHT][H].getAbsoluteValue(bounds.width) - : HALF_WIDTH; - const brv = - borderRadius[CORNER.BOTTOM_RIGHT][V].getAbsoluteValue(bounds.height) < HALF_HEIGHT - ? borderRadius[CORNER.BOTTOM_RIGHT][V].getAbsoluteValue(bounds.height) - : HALF_HEIGHT; - const blh = - borderRadius[CORNER.BOTTOM_LEFT][H].getAbsoluteValue(bounds.width) < HALF_WIDTH - ? borderRadius[CORNER.BOTTOM_LEFT][H].getAbsoluteValue(bounds.width) - : HALF_WIDTH; - const blv = - borderRadius[CORNER.BOTTOM_LEFT][V].getAbsoluteValue(bounds.height) < HALF_HEIGHT - ? borderRadius[CORNER.BOTTOM_LEFT][V].getAbsoluteValue(bounds.height) - : HALF_HEIGHT; + let tlh = borderRadius[CORNER.TOP_LEFT][H].getAbsoluteValue(bounds.width); + let tlv = borderRadius[CORNER.TOP_LEFT][V].getAbsoluteValue(bounds.height); + let trh = borderRadius[CORNER.TOP_RIGHT][H].getAbsoluteValue(bounds.width); + let trv = borderRadius[CORNER.TOP_RIGHT][V].getAbsoluteValue(bounds.height); + let brh = borderRadius[CORNER.BOTTOM_RIGHT][H].getAbsoluteValue(bounds.width); + let brv = borderRadius[CORNER.BOTTOM_RIGHT][V].getAbsoluteValue(bounds.height); + let blh = borderRadius[CORNER.BOTTOM_LEFT][H].getAbsoluteValue(bounds.width); + let blv = borderRadius[CORNER.BOTTOM_LEFT][V].getAbsoluteValue(bounds.height); + + const factors = []; + factors.push((tlh + trh) / bounds.width); + factors.push((blh + brh) / bounds.width); + factors.push((tlv + blv) / bounds.height); + factors.push((trv + brv) / bounds.height); + const maxFactor = Math.max(...factors); + + if (maxFactor > 1) { + tlh /= maxFactor; + tlv /= maxFactor; + trh /= maxFactor; + trv /= maxFactor; + brh /= maxFactor; + brv /= maxFactor; + blh /= maxFactor; + blv /= maxFactor; + } const topWidth = bounds.width - trh; const rightHeight = bounds.height - brv; diff --git a/tests/reftests/border/radius.html b/tests/reftests/border/radius.html index 35634f016..37136e18f 100644 --- a/tests/reftests/border/radius.html +++ b/tests/reftests/border/radius.html @@ -5,7 +5,7 @@