From e00fa2a24f757f355a2253530b74430bfcc128fc Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Thu, 10 Nov 2016 14:41:48 +0200 Subject: [PATCH] Add `inset` CSS clip-path support Resolves https://github.com/NativeScript/NativeScript/issues/2693 Resolves https://github.com/NativeScript/NativeScript/issues/3060 --- .../nativescript/widgets/BorderDrawable.java | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/android/widgets/src/main/java/org/nativescript/widgets/BorderDrawable.java b/android/widgets/src/main/java/org/nativescript/widgets/BorderDrawable.java index 506abaeb8..dc861545d 100644 --- a/android/widgets/src/main/java/org/nativescript/widgets/BorderDrawable.java +++ b/android/widgets/src/main/java/org/nativescript/widgets/BorderDrawable.java @@ -513,13 +513,51 @@ public class BorderDrawable extends ColorDrawable { String value = clipPath.substring(clipPath.indexOf("(") + 1, clipPath.indexOf(")")); String[] arr; + float top; + float right; + float bottom; + float left; switch (functionName){ case "rect": arr = spaceAndComma.split(value); - float top = cssValueToDevicePixels(arr[0], bounds.top, density); - float left = cssValueToDevicePixels(arr[1], bounds.left, density); - float bottom = cssValueToDevicePixels(arr[2], bounds.bottom, density); - float right = cssValueToDevicePixels(arr[3], bounds.right, density); + + top = cssValueToDevicePixels(arr[0], bounds.bottom, density); + right = cssValueToDevicePixels(arr[1], bounds.right, density); + bottom = cssValueToDevicePixels(arr[2], bounds.bottom, density); + left = cssValueToDevicePixels(arr[3], bounds.right, density); + + canvas.drawRect(left, top, right, bottom, paint); + break; + case "inset": + arr = spaceAndComma.split(value); + String topString = "0"; + String rightString = "0"; + String bottomString = "0"; + String leftString = "0"; + if (arr.length == 1) { + topString = rightString = bottomString = leftString = arr[0]; + } + else if (arr.length == 2) { + topString = bottomString = arr[0]; + rightString = leftString = arr[1]; + } + else if (arr.length == 3) { + topString = arr[0]; + rightString = leftString = arr[1]; + bottomString = arr[2]; + } + else if (arr.length == 4) { + topString = arr[0]; + rightString = arr[1]; + bottomString = arr[2]; + leftString = arr[3]; + } + + top = cssValueToDevicePixels(topString, bounds.bottom, density); + right = cssValueToDevicePixels("100%", bounds.right, density) - cssValueToDevicePixels(rightString, bounds.right, density); + bottom = cssValueToDevicePixels("100%", bounds.bottom, density) - cssValueToDevicePixels(bottomString, bounds.bottom, density); + left = cssValueToDevicePixels(leftString, bounds.right, density); + canvas.drawRect(left, top, right, bottom, paint); break; case "circle":