@@ -20,6 +20,7 @@ import com.facebook.react.bridge.ReadableType
2020import com.facebook.react.uimanager.FloatUtil
2121import com.facebook.react.uimanager.LengthPercentage
2222import com.facebook.react.uimanager.LengthPercentageType
23+ import com.facebook.react.uimanager.PixelUtil.dpToPx
2324import kotlin.math.max
2425import kotlin.math.min
2526import kotlin.math.pow
@@ -193,15 +194,31 @@ internal class RadialGradient(
193194 var centerY: Float = height / 2f
194195
195196 if (position.top != null ) {
196- centerY = position.top.resolveToPixel(height)
197+ centerY =
198+ if (position.top.type == LengthPercentageType .PERCENT )
199+ position.top.resolve(height)
200+ else
201+ position.top.resolve(height).dpToPx()
197202 } else if (position.bottom != null ) {
198- centerY = height - position.bottom.resolveToPixel(height)
203+ centerY =
204+ if (position.bottom.type == LengthPercentageType .PERCENT )
205+ height - position.bottom.resolve(height)
206+ else
207+ height - position.bottom.resolve(height).dpToPx()
199208 }
200209
201210 if (position.left != null ) {
202- centerX = position.left.resolveToPixel(width)
211+ centerX =
212+ if (position.left.type == LengthPercentageType .PERCENT )
213+ position.left.resolve(width)
214+ else
215+ position.left.resolve(width).dpToPx()
203216 } else if (position.right != null ) {
204- centerX = width - position.right.resolveToPixel(width)
217+ centerX =
218+ if (position.right.type == LengthPercentageType .PERCENT )
219+ width - position.right.resolve(width)
220+ else
221+ width - position.right.resolve(width).dpToPx()
205222 }
206223
207224 val (radiusX, radiusY) = calculateRadius(centerX, centerY, width, height)
@@ -363,8 +380,16 @@ internal class RadialGradient(
363380 }
364381 } else {
365382 val dimensions = size.value as GradientSize .Dimensions
366- val radiusX = dimensions.x.resolveToPixel(width)
367- val radiusY = dimensions.y.resolveToPixel(height)
383+ val radiusX =
384+ if (dimensions.x.type == LengthPercentageType .PERCENT )
385+ dimensions.x.resolve(width)
386+ else
387+ dimensions.x.resolve(width).dpToPx()
388+ val radiusY =
389+ if (dimensions.y.type == LengthPercentageType .PERCENT )
390+ dimensions.y.resolve(height)
391+ else
392+ dimensions.y.resolve(height).dpToPx()
368393
369394 return if (isCircle) {
370395 val radius = max(radiusX, radiusY)
0 commit comments