HWUI: Fix snapping in path rendering
bug:30444274
Change-Id: Ib10058659af47625b366c26e0b872fa3f1854cd0
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index b5c43ff..1c298b1 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -127,8 +127,8 @@
const float pathWidth = std::max(bounds.width(), 1.0f);
const float pathHeight = std::max(bounds.height(), 1.0f);
- texture->left = bounds.fLeft;
- texture->top = bounds.fTop;
+ texture->left = floorf(bounds.fLeft);
+ texture->top = floorf(bounds.fTop);
texture->offset = (int) floorf(std::max(paint->getStrokeWidth(), 1.0f) * 1.5f + 0.5f);
diff --git a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
index eb236c4..9deb441 100644
--- a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
+++ b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
@@ -27,6 +27,7 @@
#include <SkBlurDrawLooper.h>
#include <SkDashPathEffect.h>
+#include <SkPath.h>
using namespace android::uirenderer;
@@ -273,3 +274,17 @@
}
}
}
+
+RENDERTHREAD_TEST(BakedOpDispatcher, pathTextureSnapping) {
+ Rect bounds(10, 15, 20, 25);
+ SkPaint paint;
+ SkPath path;
+ path.addRect(SkRect::MakeXYWH(1.5, 3.8, 100, 90));
+ PathOp op(bounds, Matrix4::identity(), nullptr, &paint, &path);
+ testUnmergedGlopDispatch(renderThread, &op, [] (const Glop& glop) {
+ auto texture = glop.fill.texture.texture;
+ ASSERT_NE(nullptr, texture);
+ EXPECT_EQ(1, reinterpret_cast<PathTexture*>(texture)->left);
+ EXPECT_EQ(3, reinterpret_cast<PathTexture*>(texture)->top);
+ });
+}
\ No newline at end of file