diff --git a/.mapping.json b/.mapping.json index b4c6d1f7d..b0705d31a 100644 --- a/.mapping.json +++ b/.mapping.json @@ -3211,6 +3211,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -4524,6 +4525,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -5837,6 +5839,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -7150,6 +7153,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -8463,6 +8467,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -9776,6 +9781,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -11089,6 +11095,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -12402,6 +12409,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -13715,6 +13723,7 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/custom_shadow.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/diagonal-gradient-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/display-text.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis-with-image.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellipsis.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/empty-text-height.png", @@ -18099,6 +18108,8 @@ "client/ios/Tests/reference_snapshots/div-text/diagonal-gradient-background_414@3x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/diagonal-gradient-background_414@3x.png", "client/ios/Tests/reference_snapshots/div-text/display-text_375@2x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/display-text_375@2x.png", "client/ios/Tests/reference_snapshots/div-text/display-text_414@3x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/display-text_414@3x.png", + "client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_375@2x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_375@2x.png", + "client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_414@3x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_414@3x.png", "client/ios/Tests/reference_snapshots/div-text/ellipsis-with-image_375@2x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/ellipsis-with-image_375@2x.png", "client/ios/Tests/reference_snapshots/div-text/ellipsis-with-image_414@3x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/ellipsis-with-image_414@3x.png", "client/ios/Tests/reference_snapshots/div-text/ellipsis_375@2x.png":"divkit/public/client/ios/Tests/reference_snapshots/div-text/ellipsis_375@2x.png", @@ -24233,6 +24244,7 @@ "test_data/snapshot_test_data/div-text/custom_shadow.json":"divkit/public/test_data/snapshot_test_data/div-text/custom_shadow.json", "test_data/snapshot_test_data/div-text/diagonal-gradient-background.json":"divkit/public/test_data/snapshot_test_data/div-text/diagonal-gradient-background.json", "test_data/snapshot_test_data/div-text/display-text.json":"divkit/public/test_data/snapshot_test_data/div-text/display-text.json", + "test_data/snapshot_test_data/div-text/ellips-ranges-background.json":"divkit/public/test_data/snapshot_test_data/div-text/ellips-ranges-background.json", "test_data/snapshot_test_data/div-text/ellipsis-with-image.json":"divkit/public/test_data/snapshot_test_data/div-text/ellipsis-with-image.json", "test_data/snapshot_test_data/div-text/ellipsis.json":"divkit/public/test_data/snapshot_test_data/div-text/ellipsis.json", "test_data/snapshot_test_data/div-text/empty-text-height.json":"divkit/public/test_data/snapshot_test_data/div-text/empty-text-height.json", diff --git a/client/android/div/src/main/java/com/yandex/div/core/util/text/CloudTextRangeBackgroundRenderer.kt b/client/android/div/src/main/java/com/yandex/div/core/util/text/CloudTextRangeBackgroundRenderer.kt index 8500b26d4..974a6bbc0 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/util/text/CloudTextRangeBackgroundRenderer.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/util/text/CloudTextRangeBackgroundRenderer.kt @@ -13,8 +13,6 @@ 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 @@ -39,10 +37,9 @@ internal class CloudTextRangeBackgroundRenderer( endLine: Int, startOffset: Int, endOffset: Int, - border: DivTextRangeBorder?, - background: DivTextRangeBackground? + span: DivBackgroundSpan, ) { - val cloudBackground = background?.value() as? DivCloudBackground ?: return + val cloudBackground = span.background?.value() as? DivCloudBackground ?: return draw(canvas, layout, startLine, endLine, startOffset, endOffset, cloudBackground) } diff --git a/client/android/div/src/main/java/com/yandex/div/core/util/text/DivBackgroundSpan.kt b/client/android/div/src/main/java/com/yandex/div/core/util/text/DivBackgroundSpan.kt index 027609868..da0400fc1 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/util/text/DivBackgroundSpan.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/util/text/DivBackgroundSpan.kt @@ -1,13 +1,24 @@ package com.yandex.div.core.util.text +import android.graphics.Typeface import android.text.TextPaint import android.text.style.UnderlineSpan +import androidx.annotation.Px +import com.yandex.div2.DivTextAlignmentVertical import com.yandex.div2.DivTextRangeBackground import com.yandex.div2.DivTextRangeBorder internal class DivBackgroundSpan( val border: DivTextRangeBorder?, - val background: DivTextRangeBackground? + val background: DivTextRangeBackground?, + @param:Px val baselineOffset: Int, + val alignmentVertical: DivTextAlignmentVertical?, + @param:Px val lineHeight: Int?, + @param:Px val fontSize: Int?, + @param:Px val topOffset: Int?, + val typeface: Typeface?, + val fontFeatureSettings: String?, + val fontVariationSettings: String?, ) : UnderlineSpan() { override fun updateDrawState(ds: TextPaint) { diff --git a/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundHelper.kt b/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundHelper.kt index 376de7c16..06fcf6f97 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundHelper.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundHelper.kt @@ -34,6 +34,14 @@ internal class DivTextRangesBackgroundHelper( val spannedText = text as? Spannable ?: return false return spans.any { span -> span.border == backgroundSpan.border && span.background == backgroundSpan.background + && span.baselineOffset == backgroundSpan.baselineOffset + && span.alignmentVertical == backgroundSpan.alignmentVertical + && span.lineHeight == backgroundSpan.lineHeight + && span.fontSize == backgroundSpan.fontSize + && span.topOffset == backgroundSpan.topOffset + && span.typeface == backgroundSpan.typeface + && span.fontFeatureSettings == backgroundSpan.fontFeatureSettings + && span.fontVariationSettings == backgroundSpan.fontVariationSettings && end == spannedText.getSpanEnd(span) && start == spannedText.getSpanStart(span) } } @@ -75,14 +83,12 @@ internal class DivTextRangesBackgroundHelper( when (span.background) { is DivTextRangeBackground.Cloud -> { - cloudBackgroundRenderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset, - span.border, span.background) + cloudBackgroundRenderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset, span) } else -> { val renderer = if (startLine == endLine) singleLineRenderer else multiLineRenderer - renderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset, - span.border, span.background) + renderer.draw(canvas, layout, startLine, endLine, startOffset, endOffset, span) } } } diff --git a/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundRenderer.kt b/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundRenderer.kt index c818e749f..47050c935 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundRenderer.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/util/text/DivTextRangesBackgroundRenderer.kt @@ -5,21 +5,24 @@ import android.graphics.Paint import android.graphics.Path import android.graphics.RectF import android.text.Layout +import android.text.TextPaint import android.util.DisplayMetrics import android.view.View import com.yandex.div.core.view2.divs.dpToPx +import com.yandex.div.core.view2.divs.supportFontVariations import com.yandex.div.core.view2.divs.widgets.widthPx import com.yandex.div.json.expressions.ExpressionResolver import com.yandex.div2.DivSolidBackground +import com.yandex.div2.DivTextAlignmentVertical import com.yandex.div2.DivTextRangeBackground import com.yandex.div2.DivTextRangeBorder import kotlin.math.max import kotlin.math.min -private const val DEFAULT_LINESPACING_EXTRA = 0f -private const val DEFAULT_LINESPACING_MULTIPLIER = 1f - internal abstract class DivTextRangesBackgroundRenderer() { + + private val tempPaint = TextPaint() + abstract fun draw( canvas: Canvas, layout: Layout, @@ -27,56 +30,80 @@ internal abstract class DivTextRangesBackgroundRenderer() { endLine: Int, startOffset: Int, endOffset: Int, - border: DivTextRangeBorder?, - background: DivTextRangeBackground?, + span: DivBackgroundSpan, ) - protected fun getLineTop(layout: Layout, line: Int): Int { - var lineTop = layout.getLineTop(line) - if (line == 0) { - lineTop -= layout.topPadding - } - return lineTop - } + protected fun getLineBounds( + layout: Layout, + line: Int, + span: DivBackgroundSpan, + isFirstLine: Boolean = false, + ): LineBounds { + val baseline = layout.getLineBaseline(line) + val lineAscent = layout.getLineAscent(line) + val lineDescent = layout.getLineDescent(line) - protected fun getLineBottom(layout: Layout, line: Int): Int { - var lineBottom = layout.getLineBottomWithoutSpacing(line) - if (line == layout.lineCount - 1) { - lineBottom -= layout.bottomPadding - } - return lineBottom - } - - private fun Layout.getLineBottomWithoutSpacing(line: Int): Int { - val lineBottom = getLineBottom(line) - val isLastLine = line == lineCount - 1 - - val lineBottomWithoutSpacing: Int - val lineSpacingExtra = spacingAdd - val lineSpacingMultiplier = spacingMultiplier - val hasLineSpacing = lineSpacingExtra != DEFAULT_LINESPACING_EXTRA - || lineSpacingMultiplier != DEFAULT_LINESPACING_MULTIPLIER - - if (!hasLineSpacing || isLastLine) { - lineBottomWithoutSpacing = lineBottom - } else { - val extra: Float - if (lineSpacingMultiplier.compareTo(DEFAULT_LINESPACING_MULTIPLIER) != 0) { - val lineHeight = getLineHeight(line) - extra = lineHeight - (lineHeight - lineSpacingExtra) / lineSpacingMultiplier - } else { - extra = lineSpacingExtra + val textAscent: Int + val textDescent: Int + if (span.fontSize != null) { + tempPaint.textSize = span.fontSize.toFloat() + tempPaint.typeface = span.typeface + tempPaint.fontFeatureSettings = span.fontFeatureSettings + if (supportFontVariations) { + tempPaint.fontVariationSettings = span.fontVariationSettings } - lineBottomWithoutSpacing = (lineBottom - extra).toInt() + val fontMetrics = tempPaint.fontMetricsInt + textAscent = fontMetrics.ascent + textDescent = fontMetrics.descent + } else { + textAscent = lineAscent + textDescent = lineDescent } - return lineBottomWithoutSpacing + val backgroundAscent: Int + val backgroundDescent: Int + if (span.lineHeight != null) { + val textHeight = textDescent - textAscent + val extraSpace = span.lineHeight - textHeight + val extraTop = extraSpace / 2 + val extraBottom = extraSpace - extraTop + backgroundAscent = textAscent - extraTop + backgroundDescent = textDescent + extraBottom + } else { + backgroundAscent = textAscent + backgroundDescent = textDescent + } + + val baselineShift = when { + span.baselineOffset != 0 -> -span.baselineOffset + span.alignmentVertical == DivTextAlignmentVertical.TOP -> { + lineAscent - textAscent + } + span.alignmentVertical == DivTextAlignmentVertical.CENTER -> { + val lineCenter = (lineAscent + lineDescent) / 2 + val textCenter = (textAscent + textDescent) / 2 + lineCenter - textCenter + } + + span.alignmentVertical == DivTextAlignmentVertical.BOTTOM -> { + lineDescent - textDescent + } + else -> 0 + } + + val topOffsetShift = if (isFirstLine) -(span.topOffset ?: 0) else 0 + + val top = baseline + backgroundAscent + baselineShift + topOffsetShift + val bottom = baseline + backgroundDescent + baselineShift + + return LineBounds(top, bottom) } - private fun Layout.getLineHeight(line: Int): Int { - return getLineTop(line + 1) - getLineTop(line) - } + protected data class LineBounds( + val top: Int, + val bottom: Int + ) } internal class SingleLineRenderer( @@ -91,15 +118,13 @@ internal class SingleLineRenderer( endLine: Int, startOffset: Int, endOffset: Int, - border: DivTextRangeBorder?, - background: DivTextRangeBackground?, + span: DivBackgroundSpan, ) { - val lineTop = getLineTop(layout, startLine) - val lineBottom = getLineBottom(layout, startLine) + val bounds = getLineBounds(layout, startLine, span, isFirstLine = true) val left = min(startOffset, endOffset) val right = max(startOffset, endOffset) - val borderDrawer = BackgroundDrawer(view.resources.displayMetrics, border, background, canvas, resolver) - borderDrawer.drawBackground(left.toFloat(), lineTop.toFloat(), right.toFloat(), lineBottom.toFloat()) + val borderDrawer = BackgroundDrawer(view.resources.displayMetrics, span.border, span.background, canvas, resolver) + borderDrawer.drawBackground(left.toFloat(), bounds.top.toFloat(), right.toFloat(), bounds.bottom.toFloat()) } } @@ -116,8 +141,7 @@ internal class MultiLineRenderer( endLine: Int, startOffset: Int, endOffset: Int, - border: DivTextRangeBorder?, - background: DivTextRangeBackground?, + span: DivBackgroundSpan, ) { val paragDir = layout.getParagraphDirection(startLine) val lineEndOffset = if (paragDir == Layout.DIR_RIGHT_TO_LEFT) { @@ -126,20 +150,18 @@ internal class MultiLineRenderer( layout.getLineRight(startLine) }.toInt() - var lineBottom = getLineBottom(layout, startLine) - var lineTop = getLineTop(layout, startLine) - val drawer = BackgroundDrawer(view.resources.displayMetrics, border, background, canvas, resolver) - drawer.drawBackgroundStart(startOffset.toFloat(), lineTop.toFloat(), - lineEndOffset.toFloat(), lineBottom.toFloat()) + var bounds = getLineBounds(layout, startLine, span, isFirstLine = true) + val drawer = BackgroundDrawer(view.resources.displayMetrics, span.border, span.background, canvas, resolver) + drawer.drawBackgroundStart(startOffset.toFloat(), bounds.top.toFloat(), + lineEndOffset.toFloat(), bounds.bottom.toFloat()) for (line in startLine + 1 until endLine) { - lineTop = getLineTop(layout, line) - lineBottom = getLineBottom(layout, line) + bounds = getLineBounds(layout, line, span, isFirstLine = false) drawer.drawBackgroundMiddle( (layout.getLineLeft(line).toInt()).toFloat(), - lineTop.toFloat(), + bounds.top.toFloat(), (layout.getLineRight(line).toInt()).toFloat(), - lineBottom.toFloat() + bounds.bottom.toFloat() ) } @@ -149,11 +171,10 @@ internal class MultiLineRenderer( layout.getLineLeft(startLine) }.toInt() - lineBottom = getLineBottom(layout, endLine) - lineTop = getLineTop(layout, endLine) + bounds = getLineBounds(layout, endLine, span, isFirstLine = false) - drawer.drawBackgroundEnd(lineStartOffset.toFloat(), lineTop.toFloat(), endOffset.toFloat(), - lineBottom.toFloat()) + drawer.drawBackgroundEnd(lineStartOffset.toFloat(), bounds.top.toFloat(), endOffset.toFloat(), + bounds.bottom.toFloat()) } } diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/spannable/SpannedTextBuilder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/spannable/SpannedTextBuilder.kt index 17ef8f7be..fb5430f4d 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/spannable/SpannedTextBuilder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/spannable/SpannedTextBuilder.kt @@ -41,14 +41,13 @@ import com.yandex.div.internal.spannable.NoStrikethroughSpan import com.yandex.div.internal.spannable.NoUnderlineSpan import com.yandex.div.internal.spannable.TextColorSpan import com.yandex.div.internal.spannable.TypefaceSpan +import com.yandex.div.internal.util.makeIf import com.yandex.div.json.expressions.ExpressionResolver import com.yandex.div2.DivAction import com.yandex.div2.DivLineStyle import com.yandex.div2.DivShadow import com.yandex.div2.DivText import com.yandex.div2.DivTextAlignmentVertical -import com.yandex.div2.DivTextRangeBackground -import com.yandex.div2.DivTextRangeBorder import com.yandex.div2.DivTextRangeMask import javax.inject.Inject @@ -169,8 +168,8 @@ internal class SpannedTextBuilder @Inject constructor( spannedText, start, end, - range.border, - range.background, + range, + textData, inEllipsis ) } @@ -478,14 +477,51 @@ internal class SpannedTextBuilder @Inject constructor( spannedText: Spannable, start: Int, end: Int, - border: DivTextRangeBorder?, - background: DivTextRangeBackground?, + range: DivText.Range, + textData: TextData, inEllipsis: Boolean, ) { + val border = range.border + val background = range.background if (border == null && background == null) return + val displayMetrics = textView.context.resources.displayMetrics val resolver = bindingContext.expressionResolver - val backgroundSpan = DivBackgroundSpan(border, background) + + val fontSizeValue = range.fontSize?.evaluate(resolver)?.toIntSafely() + val fontSizeUnit = range.fontSizeUnit.evaluate(resolver) + + val typefaceProvider = typefaceResolver.getTypefaceProvider( + range.fontFamily?.evaluate(resolver) ?: textData.fontFamily + ) + + val rangeFontWeight = range.fontWeight?.evaluate(resolver) + val rangeFontWeightValue = range.fontWeightValue?.evaluate(resolver)?.toIntSafely() + val fontWeightValue = if (rangeFontWeight != null || rangeFontWeightValue != null) { + getTypefaceValue(rangeFontWeight, rangeFontWeightValue) + } else { + getTypefaceValue(textData.fontWeight, textData.fontWeightValue) + } + + val rangeFontVariationSettings = range.fontVariationSettings?.evaluate(resolver) + val fontVariationSettings = makeIf(typefaceProvider.isVariable && + (rangeFontWeight != null || rangeFontWeightValue != null || rangeFontVariationSettings != null) + ) { + getFontVariations(rangeFontWeight, rangeFontWeightValue, rangeFontVariationSettings) + } + + val backgroundSpan = DivBackgroundSpan( + border = border, + background = background, + baselineOffset = range.baselineOffset.evaluate(resolver).unitToPx(displayMetrics, fontSizeUnit), + alignmentVertical = range.alignmentVertical?.evaluate(resolver), + lineHeight = range.lineHeight?.evaluate(resolver)?.unitToPx(displayMetrics, fontSizeUnit), + fontSize = fontSizeValue?.unitToPx(displayMetrics, fontSizeUnit), + topOffset = range.topOffset?.evaluate(resolver)?.toIntSafely()?.unitToPx(displayMetrics, fontSizeUnit), + typeface = getTypeface(fontWeightValue, typefaceProvider), + fontFeatureSettings = range.fontFeatureSettings?.evaluate(resolver), + fontVariationSettings = fontVariationSettings, + ) if (textView is DivLineHeightTextView && !textView.hasBackgroundSpan(spannedText, backgroundSpan, start, end, resolver)) { spannedText.setSpan(backgroundSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..34f160469 Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..a040874fd Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..e9cad5a2c Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..848b82030 Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..882341a9f Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..bf1b762ce Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..ae1a182de Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..a14abe7cb Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png new file mode 100644 index 000000000..de2b63a58 Binary files /dev/null and b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2ScreenshotTest/div-text/ellips-ranges-background.png differ diff --git a/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_375@2x.png b/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_375@2x.png new file mode 100644 index 000000000..94536ef20 Binary files /dev/null and b/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_375@2x.png differ diff --git a/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_414@3x.png b/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_414@3x.png new file mode 100644 index 000000000..8601a4ff3 Binary files /dev/null and b/client/ios/Tests/reference_snapshots/div-text/ellips-ranges-background_414@3x.png differ diff --git a/test_data/snapshot_test_data/div-text/ellips-ranges-background.json b/test_data/snapshot_test_data/div-text/ellips-ranges-background.json new file mode 100644 index 000000000..a07a95439 --- /dev/null +++ b/test_data/snapshot_test_data/div-text/ellips-ranges-background.json @@ -0,0 +1,339 @@ +{ + "description": "Text with auto_ellipsize and ellipsis using various range properties", + "platforms": [ + "android", + "ios" + ], + "unsupported_platforms": { + "web": "There is no css implementation for this." + }, + "templates": { + "title": { + "type": "text", + "paddings": { + "left": 4, + "right": 4 + }, + "font_size": 12, + "font_weight": "medium", + "text_color": "#586E75" + }, + "test_text": { + "type": "text", + "paddings": { + "left": 4, + "right": 4 + }, + "background": [ + { + "type": "solid", + "$color": "background_color" + } + ], + "border": { + "corner_radius": 4 + }, + "font_size": 16, + "font_weight": "medium", + "text_color": "#002B36", + "width": { + "type": "fixed", + "value": 280 + } + } + }, + "card": { + "log_id": "ellipsis_range_properties", + "states": [ + { + "state_id": 0, + "div": { + "type": "container", + "orientation": "vertical", + "paddings": { + "left": 16, + "top": 16, + "right": 16, + "bottom": 16 + }, + "background": [ + { + "type": "solid", + "color": "#FDF6E3" + } + ], + "items": [ + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with corner_radius and border stroke on range" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has corner_radius on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "border": { + "corner_radius": 8, + "stroke": { + "color": "#191817", + "width": 2.0 + } + } + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with background_color on range" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has background_color on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "background": { + "type": "solid", + "color": "#FFEB3B" + } + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with alignment_vertical: top" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has alignment_vertical top on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "font_size": 12, + "alignment_vertical": "top", + "text_color": "#FF0000" + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with alignment_vertical: center" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has alignment_vertical center on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "font_size": 12, + "alignment_vertical": "center", + "text_color": "#00FF00" + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with alignment_vertical: bottom" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has alignment_vertical bottom on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "font_size": 12, + "alignment_vertical": "bottom", + "text_color": "#0000FF" + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with positive baseline_offset" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has positive baseline_offset on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "baseline_offset": 7, + "text_color": "#FF5722" + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis with negative baseline_offset" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis that has negative baseline_offset on range", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "baseline_offset": -7, + "text_color": "#9C27B0" + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis combining alignment_vertical, border stroke, corner_radius and background_color" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis combining border stroke, corner_radius, background and alignment_vertical properties", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "alignment_vertical": "top", + "background": { + "type": "solid", + "color": "#FFEB3B" + }, + "border": { + "stroke": { + "color": "#000", + "width": 1.0 + }, + "corner_radius": 4 + }, + "font_size": 11, + "text_color": "#1976D2" + } + ] + } + }, + { + "type": "title", + "margins": { + "bottom": 4 + }, + "text": "Ellipsis combining baseline_offset, border stroke, corner_radius and background_color" + }, + { + "type": "test_text", + "margins": { + "bottom": 16 + }, + "background_color": "#FFFFFF", + "text": "This is a very long text that will be truncated with ellipsis combining border stroke, corner_radius, background and baseline_offset properties", + "max_lines": 2, + "auto_ellipsize": true, + "ellipsis": { + "text": "… more", + "ranges": [ + { + "font_size": 11, + "background": { + "type": "solid", + "color": "#FFEB3B" + }, + "border": { + "stroke": { + "color": "#000", + "width": 1.0 + }, + "corner_radius": 4 + }, + "baseline_offset": -7, + "text_color": "#1976D2" + } + ] + } + } + ] + } + } + ] + } +}