support cloud text background
commit_hash:60ec380cf4a8581a070ae3f077255a520eb8c974
@@ -1165,6 +1165,7 @@
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/mask/FixedLengthInputMask.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/mask/FixedLengthInputMask.kt",
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/mask/PhoneInputMask.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/mask/PhoneInputMask.kt",
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/mask/TextDiff.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/mask/TextDiff.kt",
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/text/CloudTextRangeBackgroundRenderer.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/text/CloudTextRangeBackgroundRenderer.kt",
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/text/DivBackgroundSpan.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/text/DivBackgroundSpan.kt",
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundHelper.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundHelper.kt",
|
||||
"client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundRenderer.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundRenderer.kt",
|
||||
@@ -2777,6 +2778,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -3706,6 +3710,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -4635,6 +4642,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -5564,6 +5574,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -6493,6 +6506,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -7422,6 +7438,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -8351,6 +8370,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -9280,6 +9302,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -10209,6 +10234,9 @@
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text-shadow.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_image_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_vertical_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_range_with_cloud_background.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_alignment.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/text_with_cloud_background_padding.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/underline.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/variables-rendering.png",
|
||||
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/vertical-alignments.png",
|
||||
@@ -18483,6 +18511,9 @@
|
||||
"test_data/snapshot_test_data/div-text/text-shadow.json":"divkit/public/test_data/snapshot_test_data/div-text/text-shadow.json",
|
||||
"test_data/snapshot_test_data/div-text/text_image_vertical_alignment.json":"divkit/public/test_data/snapshot_test_data/div-text/text_image_vertical_alignment.json",
|
||||
"test_data/snapshot_test_data/div-text/text_range_vertical_alignment.json":"divkit/public/test_data/snapshot_test_data/div-text/text_range_vertical_alignment.json",
|
||||
"test_data/snapshot_test_data/div-text/text_range_with_cloud_background.json":"divkit/public/test_data/snapshot_test_data/div-text/text_range_with_cloud_background.json",
|
||||
"test_data/snapshot_test_data/div-text/text_with_cloud_background_alignment.json":"divkit/public/test_data/snapshot_test_data/div-text/text_with_cloud_background_alignment.json",
|
||||
"test_data/snapshot_test_data/div-text/text_with_cloud_background_padding.json":"divkit/public/test_data/snapshot_test_data/div-text/text_with_cloud_background_padding.json",
|
||||
"test_data/snapshot_test_data/div-text/underline.json":"divkit/public/test_data/snapshot_test_data/div-text/underline.json",
|
||||
"test_data/snapshot_test_data/div-text/variables-rendering.json":"divkit/public/test_data/snapshot_test_data/div-text/variables-rendering.json",
|
||||
"test_data/snapshot_test_data/div-text/vertical-alignments.json":"divkit/public/test_data/snapshot_test_data/div-text/vertical-alignments.json",
|
||||
|
||||
@@ -0,0 +1,356 @@
|
||||
package com.yandex.div.core.util.text
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.graphics.Path
|
||||
import android.graphics.Rect
|
||||
import android.text.Layout
|
||||
import android.util.DisplayMetrics
|
||||
import androidx.annotation.ColorInt
|
||||
import com.yandex.div.core.view2.divs.dpToPx
|
||||
import com.yandex.div.core.view2.divs.unitToPx
|
||||
import com.yandex.div.json.expressions.ExpressionResolver
|
||||
import com.yandex.div2.DivCloudBackground
|
||||
import com.yandex.div2.DivSizeUnit
|
||||
import com.yandex.div2.DivTextRangeBackground
|
||||
import com.yandex.div2.DivTextRangeBorder
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.math.sign
|
||||
|
||||
internal class CloudTextRangeBackgroundRenderer(
|
||||
private val context: Context,
|
||||
private val expressionResolver: ExpressionResolver
|
||||
) : DivTextRangesBackgroundRenderer() {
|
||||
|
||||
private val path = Path()
|
||||
private val paint = Paint()
|
||||
|
||||
private val displayMetrics: DisplayMetrics
|
||||
get() = context.resources.displayMetrics
|
||||
|
||||
override fun draw(
|
||||
canvas: Canvas,
|
||||
layout: Layout,
|
||||
startLine: Int,
|
||||
endLine: Int,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
border: DivTextRangeBorder?,
|
||||
background: DivTextRangeBackground?
|
||||
) {
|
||||
val cloudBackground = background?.value() as? DivCloudBackground ?: return
|
||||
draw(canvas, layout, startLine, endLine, startOffset, endOffset, cloudBackground)
|
||||
}
|
||||
|
||||
private fun draw(
|
||||
canvas: Canvas,
|
||||
layout: Layout,
|
||||
startLine: Int,
|
||||
endLine: Int,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
background: DivCloudBackground
|
||||
) {
|
||||
val metrics = displayMetrics
|
||||
val fillColor = background.color.evaluate(expressionResolver)
|
||||
val cornerRadius = background.cornerRadius.evaluate(expressionResolver).dpToPx(metrics)
|
||||
val unit = background.paddings?.unit?.evaluate(expressionResolver) ?: DivSizeUnit.DP
|
||||
val padding = Rect(
|
||||
background.paddings?.left?.evaluate(expressionResolver)?.unitToPx(metrics, unit) ?: 0,
|
||||
background.paddings?.top?.evaluate(expressionResolver)?.unitToPx(metrics, unit) ?: 0,
|
||||
background.paddings?.right?.evaluate(expressionResolver)?.unitToPx(metrics, unit) ?: 0,
|
||||
background.paddings?.bottom?.evaluate(expressionResolver)?.unitToPx(metrics, unit) ?: 0
|
||||
)
|
||||
val lines = buildLines(layout, startLine, endLine, startOffset, endOffset, cornerRadius, padding)
|
||||
|
||||
if (lines.size < 2) {
|
||||
drawLines(canvas, lines, 0, lines.size, cornerRadius, fillColor)
|
||||
} else {
|
||||
var componentStart = 0
|
||||
var lineCount = 1
|
||||
for (i in 0 until lines.size - 1) {
|
||||
if (lines[i].left > lines[i + 1].right) {
|
||||
drawLines(canvas, lines, componentStart, lineCount, cornerRadius, fillColor)
|
||||
componentStart = i + 1
|
||||
lineCount = 0
|
||||
}
|
||||
lineCount++
|
||||
}
|
||||
drawLines(canvas, lines, componentStart, lineCount, cornerRadius, fillColor)
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildLines(
|
||||
layout: Layout,
|
||||
startLine: Int,
|
||||
endLine: Int,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
cornerRadius: Int,
|
||||
padding: Rect
|
||||
): Array<Rect> {
|
||||
val lastLine = endLine - startLine
|
||||
val lineCount = lastLine + 1
|
||||
if (lineCount == 0) return emptyArray()
|
||||
|
||||
val lines = Array(lineCount) { index ->
|
||||
Rect(
|
||||
(if (index == 0) startOffset else layout.getLineLeft(startLine + index).roundToInt()) - padding.left,
|
||||
layout.getLineTop(startLine + index) - padding.top,
|
||||
(if (index == lastLine) endOffset else layout.getLineRight(startLine + index).roundToInt()) + padding.right,
|
||||
layout.getLineBottom(startLine + index) + padding.bottom
|
||||
)
|
||||
}
|
||||
|
||||
coalesceInvisibleLeftBounds(lines)
|
||||
coalesceInvisibleRightBounds(lines)
|
||||
|
||||
val leftBounds = IntArray(lineCount)
|
||||
val rightBounds = IntArray(lineCount)
|
||||
for (i in lines.indices) {
|
||||
leftBounds[i] = -lines[i].left
|
||||
rightBounds[i] = lines[i].right
|
||||
}
|
||||
|
||||
coalesceCloseBounds(leftBounds, cornerRadius * 2)
|
||||
coalesceCloseBounds(rightBounds, cornerRadius * 2)
|
||||
|
||||
for (i in lines.indices) {
|
||||
lines[i].left = -leftBounds[i]
|
||||
lines[i].right = rightBounds[i]
|
||||
}
|
||||
return lines
|
||||
}
|
||||
|
||||
private fun coalesceInvisibleLeftBounds(lines: Array<Rect>) {
|
||||
val lineCount = lines.size
|
||||
var x = lines.first().left
|
||||
var y = lines.first().top
|
||||
for (i in lines.indices) {
|
||||
val line = lines[i]
|
||||
var visibleLineHeight = line.bottom - y
|
||||
var j = i + 1
|
||||
var nextX = Int.MIN_VALUE
|
||||
while (j < lineCount && lines[j].top < line.bottom) {
|
||||
if (lines[j].left <= line.left) {
|
||||
visibleLineHeight -= line.bottom - lines[j].top
|
||||
nextX = lines[j].left
|
||||
break
|
||||
}
|
||||
j++
|
||||
}
|
||||
if (visibleLineHeight <= 0) {
|
||||
line.left = max(x, nextX)
|
||||
visibleLineHeight = 0
|
||||
} else {
|
||||
x = line.left
|
||||
}
|
||||
y += visibleLineHeight
|
||||
}
|
||||
}
|
||||
|
||||
private fun coalesceInvisibleRightBounds(lines: Array<Rect>) {
|
||||
val lineCount = lines.size
|
||||
var x = lines.first().right
|
||||
var y = lines.first().top
|
||||
for (i in lines.indices) {
|
||||
val line = lines[i]
|
||||
var visibleLineHeight = line.bottom - y
|
||||
var j = i + 1
|
||||
var nextX = Int.MAX_VALUE
|
||||
while (j < lineCount && lines[j].top < line.bottom) {
|
||||
if (lines[j].right >= line.right) {
|
||||
visibleLineHeight -= line.bottom - lines[j].top
|
||||
nextX = lines[j].right
|
||||
break
|
||||
}
|
||||
j++
|
||||
}
|
||||
if (visibleLineHeight <= 0) {
|
||||
line.right = min(x, nextX)
|
||||
visibleLineHeight = 0
|
||||
} else {
|
||||
x = line.right
|
||||
}
|
||||
y += visibleLineHeight
|
||||
}
|
||||
}
|
||||
|
||||
private fun coalesceCloseBounds(lines: IntArray, minDelta: Int) {
|
||||
var boundCoalesced: Boolean
|
||||
var pass = 0
|
||||
do {
|
||||
boundCoalesced = false
|
||||
val indices = if (pass % 2 == 0) lines.indices else lines.indices.reversed()
|
||||
for (i in indices) {
|
||||
val upDelta = if (i == 0) 0 else lines[i - 1] - lines[i]
|
||||
val downDelta = if (i == lines.lastIndex) 0 else lines[i + 1] - lines[i]
|
||||
val isStable = (upDelta <= 0 || upDelta >= minDelta) && (downDelta <= 0 || downDelta >= minDelta)
|
||||
if (isStable) {
|
||||
if (i != 0) {
|
||||
if (upDelta < 0 && abs(upDelta) < minDelta) {
|
||||
lines[i - 1] = lines[i]
|
||||
boundCoalesced = true
|
||||
}
|
||||
}
|
||||
if (i != lines.lastIndex) {
|
||||
if (downDelta < 0 && abs(downDelta) < minDelta) {
|
||||
lines[i + 1] = lines[i]
|
||||
boundCoalesced = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pass++
|
||||
} while (boundCoalesced)
|
||||
}
|
||||
|
||||
private fun drawLines(
|
||||
canvas: Canvas,
|
||||
lines: Array<Rect>,
|
||||
start: Int,
|
||||
lineCount: Int,
|
||||
cornerRadius: Int,
|
||||
@ColorInt fillColor: Int
|
||||
) {
|
||||
if (lineCount < 1) return
|
||||
|
||||
val firstLine = lines[start]
|
||||
val lastLine = lines[start + lineCount - 1]
|
||||
val leftSegments = buildLeftSegments(lines, start, lineCount)
|
||||
val rightSegments = buildRightSegments(lines, start, lineCount)
|
||||
path.reset()
|
||||
|
||||
val baseRadius = cornerRadius.toFloat()
|
||||
var inRadius = min(baseRadius, min(firstLine.width() / 2.0f, rightSegments[OFFSET_SEGMENT_DELTA_Y] / 2.0f))
|
||||
var outRadius = 0.0f
|
||||
path.moveTo(firstLine.right.toFloat() - inRadius, firstLine.top.toFloat())
|
||||
path.rQuadTo(0.9f * inRadius, 0.1f * inRadius, inRadius, inRadius)
|
||||
for (i in rightSegments.indices step SEGMENT_VALUES) {
|
||||
val isLastSegment = i >= rightSegments.size - SEGMENT_VALUES
|
||||
val deltaX = rightSegments[i + OFFSET_SEGMENT_DELTA_X].toFloat()
|
||||
val deltaY = rightSegments[i + OFFSET_SEGMENT_DELTA_Y].toFloat()
|
||||
val nextDeltaY = if (isLastSegment) 0.0f else rightSegments[i + SEGMENT_VALUES + OFFSET_SEGMENT_DELTA_Y].toFloat()
|
||||
|
||||
outRadius = min(baseRadius, min(abs(deltaX) / 2.0f, deltaY / 2.0f))
|
||||
path.rLineTo(0.0f, deltaY - inRadius - outRadius)
|
||||
path.rQuadTo(0.1f * inRadius * deltaX.sign, 0.9f * outRadius, outRadius * deltaX.sign, outRadius)
|
||||
if (!isLastSegment) {
|
||||
inRadius = min(baseRadius, min(abs(deltaX) / 2.0f, nextDeltaY / 2.0f))
|
||||
path.rLineTo(deltaX - (inRadius + outRadius) * deltaX.sign, 0.0f)
|
||||
path.rQuadTo(0.9f * inRadius * deltaX.sign, 0.1f * inRadius, inRadius * deltaX.sign, inRadius)
|
||||
}
|
||||
}
|
||||
|
||||
inRadius = min(baseRadius, min(lastLine.width() / 2.0f, -leftSegments[OFFSET_SEGMENT_DELTA_Y] / 2.0f))
|
||||
path.rLineTo(-lastLine.width().toFloat() + outRadius + inRadius, 0.0f)
|
||||
path.rQuadTo(-0.9f * inRadius, -0.1f * inRadius, -inRadius, -inRadius)
|
||||
for (i in leftSegments.indices step SEGMENT_VALUES) {
|
||||
val isLastSegment = i >= leftSegments.size - SEGMENT_VALUES
|
||||
val deltaX = leftSegments[i + OFFSET_SEGMENT_DELTA_X].toFloat()
|
||||
val deltaY = leftSegments[i + OFFSET_SEGMENT_DELTA_Y].toFloat()
|
||||
val nextDeltaY = if (isLastSegment) 0.0f else leftSegments[i + SEGMENT_VALUES + OFFSET_SEGMENT_DELTA_Y].toFloat()
|
||||
|
||||
outRadius = min(baseRadius, min(abs(deltaX) / 2.0f, -deltaY / 2.0f))
|
||||
path.rLineTo(0.0f, deltaY + inRadius + outRadius)
|
||||
path.rQuadTo(0.1f * outRadius * deltaX.sign, -0.9f * outRadius, outRadius * deltaX.sign, -outRadius)
|
||||
if (!isLastSegment) {
|
||||
inRadius = min(baseRadius, min(abs(deltaX) / 2.0f, -nextDeltaY / 2.0f))
|
||||
path.rLineTo(deltaX - (inRadius + outRadius) * deltaX.sign, 0.0f)
|
||||
path.rQuadTo(0.9f * inRadius * deltaX.sign, -0.1f * inRadius, inRadius * deltaX.sign, -inRadius)
|
||||
}
|
||||
}
|
||||
path.close()
|
||||
|
||||
paint.color = fillColor
|
||||
canvas.drawPath(path, paint)
|
||||
}
|
||||
|
||||
private fun buildLeftSegments(lines: Array<Rect>, start: Int, lineCount: Int): IntArray {
|
||||
val end = start + lineCount - 1
|
||||
if (lineCount == 1) {
|
||||
return IntArray(2).apply {
|
||||
set(OFFSET_SEGMENT_DELTA_X, lines[end].width())
|
||||
set(OFFSET_SEGMENT_DELTA_Y, -lines[end].height())
|
||||
}
|
||||
}
|
||||
|
||||
var x = lines[end].left
|
||||
var y = lines[end].bottom
|
||||
val segments = IntArray(lineCount * SEGMENT_VALUES)
|
||||
var segmentIndex = 0
|
||||
for (i in (start..end).reversed()) {
|
||||
val line = lines[i]
|
||||
if (line.left != x) {
|
||||
segments[SEGMENT_VALUES * segmentIndex + OFFSET_SEGMENT_DELTA_X] = line.left - x
|
||||
x = line.left
|
||||
segmentIndex++
|
||||
}
|
||||
|
||||
var deltaY = line.top - y
|
||||
var j = i - 1
|
||||
while (j >= start && lines[j].bottom > line.top) {
|
||||
if (lines[j].left <= line.left) {
|
||||
deltaY -= line.top - lines[j].bottom
|
||||
break
|
||||
}
|
||||
j--
|
||||
}
|
||||
deltaY = deltaY.coerceAtMost(0)
|
||||
segments[SEGMENT_VALUES * segmentIndex + OFFSET_SEGMENT_DELTA_Y] += deltaY
|
||||
y += deltaY
|
||||
}
|
||||
segments[SEGMENT_VALUES * segmentIndex + OFFSET_SEGMENT_DELTA_X] = lines[start].width()
|
||||
|
||||
return segments.copyOf((segmentIndex + 1) * SEGMENT_VALUES)
|
||||
}
|
||||
|
||||
private fun buildRightSegments(lines: Array<Rect>, start: Int, lineCount: Int): IntArray {
|
||||
val end = start + lineCount - 1
|
||||
if (lineCount == 1) {
|
||||
return IntArray(2).apply {
|
||||
set(OFFSET_SEGMENT_DELTA_X, -lines[start].width())
|
||||
set(OFFSET_SEGMENT_DELTA_Y, lines[start].height())
|
||||
}
|
||||
}
|
||||
|
||||
var x = lines[start].right
|
||||
var y = lines[start].top
|
||||
val segments = IntArray(lineCount * SEGMENT_VALUES)
|
||||
var segmentIndex = 0
|
||||
for (i in start..end) {
|
||||
val line = lines[i]
|
||||
if (line.right != x) {
|
||||
segments[SEGMENT_VALUES * segmentIndex + OFFSET_SEGMENT_DELTA_X] = line.right - x
|
||||
x = line.right
|
||||
segmentIndex++
|
||||
}
|
||||
|
||||
var deltaY = line.bottom - y
|
||||
var j = i + 1
|
||||
while (j <= end && lines[j].top < line.bottom) {
|
||||
if (lines[j].right >= line.right) {
|
||||
deltaY -= line.bottom - lines[j].top
|
||||
break
|
||||
}
|
||||
j++
|
||||
}
|
||||
deltaY = deltaY.coerceAtLeast(0)
|
||||
segments[SEGMENT_VALUES * segmentIndex + OFFSET_SEGMENT_DELTA_Y] += deltaY
|
||||
y += deltaY
|
||||
}
|
||||
segments[SEGMENT_VALUES * segmentIndex + OFFSET_SEGMENT_DELTA_X] = -lines[end].width()
|
||||
|
||||
return segments.copyOf((segmentIndex + 1) * SEGMENT_VALUES)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val SEGMENT_VALUES = 2
|
||||
const val OFFSET_SEGMENT_DELTA_X = 0
|
||||
const val OFFSET_SEGMENT_DELTA_Y = 1
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
import android.view.View
|
||||
import com.yandex.div.json.expressions.ExpressionResolver
|
||||
import com.yandex.div2.DivTextRangeBackground
|
||||
|
||||
internal class DivTextRangesBackgroundHelper(
|
||||
val view: View,
|
||||
@@ -37,6 +38,13 @@ internal class DivTextRangesBackgroundHelper(
|
||||
)
|
||||
}
|
||||
|
||||
private val cloudBackgroundRenderer: CloudTextRangeBackgroundRenderer by lazy {
|
||||
CloudTextRangeBackgroundRenderer(
|
||||
context = view.context,
|
||||
expressionResolver = resolver
|
||||
)
|
||||
}
|
||||
|
||||
fun draw(canvas: Canvas, text: Spanned, layout: Layout) {
|
||||
spans.forEach { span ->
|
||||
val spanStart = text.getSpanStart(span)
|
||||
@@ -47,9 +55,18 @@ internal class DivTextRangesBackgroundHelper(
|
||||
val startOffset = layout.getPrimaryHorizontal(spanStart).toInt()
|
||||
val endOffset = layout.getPrimaryHorizontal(spanEnd).toInt()
|
||||
|
||||
val renderer = if (startLine == endLine) singleLineRenderer else multiLineRenderer
|
||||
renderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset,
|
||||
span.border, span.background)
|
||||
when (span.background) {
|
||||
is DivTextRangeBackground.Cloud -> {
|
||||
cloudBackgroundRenderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset,
|
||||
span.border, span.background)
|
||||
}
|
||||
|
||||
else -> {
|
||||
val renderer = if (startLine == endLine) singleLineRenderer else multiLineRenderer
|
||||
renderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset,
|
||||
span.border, span.background)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 211 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 123 KiB |
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"type": "object",
|
||||
"$description": "translations.json#/div_cloud_background",
|
||||
"platforms": [],
|
||||
"platforms": [
|
||||
"android"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
@@ -14,12 +16,12 @@
|
||||
"$description": "translations.json#/div_cloud_background_color"
|
||||
},
|
||||
"corner_radius": {
|
||||
"$ref": "div-fixed-size.json",
|
||||
"$ref": "common.json#/non_negative_integer",
|
||||
"$description": "translations.json#/div_cloud_background_corner_radius"
|
||||
},
|
||||
"padding": {
|
||||
"paddings": {
|
||||
"$ref": "div-edge-insets.json",
|
||||
"$description": "translations.json#/div_cloud_background_padding"
|
||||
"$description": "translations.json#/div_cloud_background_paddings"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"en": "Corner rounding radius.",
|
||||
"ru": "Радиус скругления углов."
|
||||
},
|
||||
"div_cloud_background_padding": {
|
||||
"div_cloud_background_paddings": {
|
||||
"en": "Margins between line bounds and background.",
|
||||
"ru": "Отступы от границы строки до границы фона."
|
||||
},
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
{
|
||||
"description": "Text range with cloud background",
|
||||
"platforms": [
|
||||
"android"
|
||||
],
|
||||
"templates": {
|
||||
"title": {
|
||||
"type": "text",
|
||||
"font_size": 14,
|
||||
"font_weight": "medium",
|
||||
"text_color": "#586E75"
|
||||
},
|
||||
"test_text": {
|
||||
"type": "text",
|
||||
"width": {
|
||||
"type": "fixed",
|
||||
"value": 256
|
||||
},
|
||||
"paddings": {
|
||||
"left": 16,
|
||||
"top": 16,
|
||||
"right": 16,
|
||||
"bottom": 16
|
||||
},
|
||||
"background": [
|
||||
{
|
||||
"type": "solid",
|
||||
"color": "#FDF6E3"
|
||||
}
|
||||
],
|
||||
"border": {
|
||||
"corner_radius": 12
|
||||
},
|
||||
"font_size": 16,
|
||||
"font_weight": "medium",
|
||||
"text_color": "#073642"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"log_id": "text_range_with_cloud_background",
|
||||
"states": [
|
||||
{
|
||||
"state_id": 0,
|
||||
"div": {
|
||||
"type": "container",
|
||||
"paddings": {
|
||||
"left": 16,
|
||||
"top": 16,
|
||||
"right": 16,
|
||||
"bottom": 16
|
||||
},
|
||||
"background": [
|
||||
{
|
||||
"type": "solid",
|
||||
"color": "#EEE8D5"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text range with cloud background"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"start": 12,
|
||||
"end": 71,
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Disconnected text range"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"start": 51,
|
||||
"end": 63,
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Weakly connected text range"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"start": 11,
|
||||
"end": 40,
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Overlapping text ranges"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"start": 12,
|
||||
"end": 71,
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#40CB4B16",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": 40,
|
||||
"end": 99,
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#40268BD2",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
{
|
||||
"description": "Text with cloud background (alignment test)",
|
||||
"platforms": [
|
||||
"android"
|
||||
],
|
||||
"templates": {
|
||||
"title": {
|
||||
"type": "text",
|
||||
"font_size": 14,
|
||||
"font_weight": "medium",
|
||||
"text_color": "#586E75"
|
||||
},
|
||||
"test_text": {
|
||||
"type": "text",
|
||||
"width": {
|
||||
"type": "fixed",
|
||||
"value": 256
|
||||
},
|
||||
"paddings": {
|
||||
"left": 16,
|
||||
"top": 16,
|
||||
"right": 16,
|
||||
"bottom": 16
|
||||
},
|
||||
"background": [
|
||||
{
|
||||
"type": "solid",
|
||||
"color": "#FDF6E3"
|
||||
}
|
||||
],
|
||||
"border": {
|
||||
"corner_radius": 12
|
||||
},
|
||||
"font_size": 16,
|
||||
"font_weight": "medium",
|
||||
"text_color": "#073642"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"log_id": "text_with_cloud_background_alignment",
|
||||
"states": [
|
||||
{
|
||||
"state_id": 0,
|
||||
"div": {
|
||||
"type": "container",
|
||||
"paddings": {
|
||||
"left": 16,
|
||||
"top": 16,
|
||||
"right": 16,
|
||||
"bottom": 16
|
||||
},
|
||||
"background": [
|
||||
{
|
||||
"type": "solid",
|
||||
"color": "#EEE8D5"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text with cloud background: left alignment"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text with cloud background: center alignment"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text_alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text with cloud background: right alignment"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"alignment_horizontal": "center",
|
||||
"text_alignment_horizontal": "right",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 4,
|
||||
"top": 4,
|
||||
"right": 4,
|
||||
"bottom": 4
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"description": "Text with cloud background (padding test)",
|
||||
"platforms": [
|
||||
"android"
|
||||
],
|
||||
"templates": {
|
||||
"title": {
|
||||
"type": "text",
|
||||
"font_size": 14,
|
||||
"font_weight": "medium",
|
||||
"text_color": "#586E75"
|
||||
},
|
||||
"test_text": {
|
||||
"type": "text",
|
||||
"width": {
|
||||
"type": "fixed",
|
||||
"value": 256
|
||||
},
|
||||
"paddings": {
|
||||
"left": 16,
|
||||
"top": 16,
|
||||
"right": 16,
|
||||
"bottom": 16
|
||||
},
|
||||
"background": [
|
||||
{
|
||||
"type": "solid",
|
||||
"color": "#FDF6E3"
|
||||
}
|
||||
],
|
||||
"border": {
|
||||
"corner_radius": 12
|
||||
},
|
||||
"font_size": 16,
|
||||
"font_weight": "medium",
|
||||
"text_color": "#073642"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"log_id": "text_with_cloud_background_padding",
|
||||
"states": [
|
||||
{
|
||||
"state_id": 0,
|
||||
"div": {
|
||||
"type": "container",
|
||||
"paddings": {
|
||||
"left": 16,
|
||||
"top": 16,
|
||||
"right": 16,
|
||||
"bottom": 16
|
||||
},
|
||||
"background": [
|
||||
{
|
||||
"type": "solid",
|
||||
"color": "#EEE8D5"
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text with cloud background: without padding"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text with cloud background: different padding"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 8,
|
||||
"top": 12,
|
||||
"right": 12,
|
||||
"bottom": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"margins": {
|
||||
"bottom": 16
|
||||
},
|
||||
"text": "Text with cloud background: large padding"
|
||||
},
|
||||
{
|
||||
"type": "test_text",
|
||||
"alignment_horizontal": "center",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||
"ranges": [
|
||||
{
|
||||
"background": {
|
||||
"type": "cloud",
|
||||
"color": "#20002B36",
|
||||
"corner_radius": 12,
|
||||
"paddings": {
|
||||
"left": 12,
|
||||
"top": 12,
|
||||
"right": 12,
|
||||
"bottom": 12
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||