fix(force invert): fix white-on-white text when text is drawn against a fill rect in the same RenderNode
This fixes issues with custom Views that draw background and text in the
same View/RenderNode. Instead of trying to force the individual paints
to be dark, we simply invert the whole view.
Adds a new hasFill() member to DisplayList and Canvas so that we record
when the RenderNode has a call that fills the background.
Also adds a new Container usage hint type, for this exact situation.
Bug: 282821643
Bug: 293883260
Test: RenderNodeTests.cpp:
mmm -j8 frameworks/base/libs/hwui && adb push $ANDROID_PRODUCT_OUT/data/nativetest/hwui_unit_tests/hwui_unit_tests /data/nativetest/hwui_unit_tests/hwui_unit_tests && adb shell /data/nativetest/hwui_unit_tests/hwui_unit_tests
Change-Id: Ia0fe9c739bf07c1f3a8508d3f295a1dc54ee48f9
diff --git a/libs/hwui/DisplayList.h b/libs/hwui/DisplayList.h
index 8c180da..b1c5bf4 100644
--- a/libs/hwui/DisplayList.h
+++ b/libs/hwui/DisplayList.h
@@ -145,6 +145,8 @@
return mImpl && mImpl->hasText();
}
+ [[nodiscard]] bool hasFill() const { return mImpl && mImpl->hasFill(); }
+
void applyColorTransform(ColorTransform transform) {
if (mImpl) {
mImpl->applyColorTransform(transform);