Fixed
Status Update
Comments
an...@google.com <an...@google.com>
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 392d5beb3bb6f5b82439fe53986c3c818aef5075
Author: Nader Jawad <njawad@google.com>
Date: Thu Apr 11 14:05:41 2024
Updated GraphicsLayer outline APIs to consume floats.
Relnote: "Updated GraphicsLayer outline APIs to consume float
parameters instead of int.
Removed UnsetOffset/UnsetSize IntSize sentinel values in favor
of already exising Unspecified constants on float based Offset
and Size inline classes"
Fixes: 333863462
Test: Re-ran graphicsLayer tests
Change-Id: I2fb03296a009ad4957a59905b97b6f21355cb8ba
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
M compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/GraphicsLayerSamples.kt
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.kt
M compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.desktop.kt
M compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/layer/DesktopGraphicsLayerTest.kt
https://android-review.googlesource.com/3038659
Branch: androidx-main
commit 392d5beb3bb6f5b82439fe53986c3c818aef5075
Author: Nader Jawad <njawad@google.com>
Date: Thu Apr 11 14:05:41 2024
Updated GraphicsLayer outline APIs to consume floats.
Relnote: "Updated GraphicsLayer outline APIs to consume float
parameters instead of int.
Removed UnsetOffset/UnsetSize IntSize sentinel values in favor
of already exising Unspecified constants on float based Offset
and Size inline classes"
Fixes: 333863462
Test: Re-ran graphicsLayer tests
Change-Id: I2fb03296a009ad4957a59905b97b6f21355cb8ba
M compose/ui/ui-graphics/api/current.txt
M compose/ui/ui-graphics/api/restricted_current.txt
M compose/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/GraphicsLayerSamples.kt
M compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayerTest.kt
M compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt
M compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.kt
M compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.desktop.kt
M compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/layer/DesktopGraphicsLayerTest.kt
Description
Note: as this bug requires an API change I think it is urgent.
In the previous api for graphics layers it was possible to set a rect with float offset/size as an outline. Users we providing a Shape implementation, and Shape is a way to produce an Outline object. Outline.Rectangle works with Rect, not IntRect. Outline.Rounded works with RoundRect.
However in the new api for GraphicsLayer we didn't support floats. Only IntOffset and IntSize is supported:https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt;l=744
https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt;l=719
Even that on Android we can't really apply float based outlines to RenderNode, it was possible on other platforms like Desktop, where skia is used directly. We can also potentially support in on Android as well if we use canvas.clipRect directly instead of using outline clipping.
Another related issue is that the getter for outline is working with Outline objectshttps://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/layer/AndroidGraphicsLayer.android.kt;l=659 , and we introduced an extension setter for Outline objects https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/layer/GraphicsLayer.kt;l=422 .
It creates a strange situation where I set float based values, but get back rounded values.
This test will not pass: