OSDN Git Service

Add conic support to HWUI path tessellator.
authorDerek Sollenberger <djsollen@google.com>
Mon, 16 Mar 2015 18:35:55 +0000 (14:35 -0400)
committerDerek Sollenberger <djsollen@google.com>
Mon, 16 Mar 2015 19:28:16 +0000 (15:28 -0400)
bug: 19732872
Change-Id: Ic3ae46f746325468ab972c9daf829099165eb596

libs/hwui/PathTessellator.cpp

index 3d8a749..c1f61d6 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <SkPath.h>
 #include <SkPaint.h>
+#include <SkGeometry.h> // WARNING: Internal Skia Header
 
 #include <stdlib.h>
 #include <stdint.h>
@@ -951,6 +952,21 @@ bool PathTessellator::approximatePathOutlineVertices(const SkPath& path, bool fo
                         pts[2].x(), pts[2].y(),
                         sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
                 break;
+            case SkPath::kConic_Verb: {
+                ALOGV("kConic_Verb");
+                SkAutoConicToQuads converter;
+                const SkPoint* quads = converter.computeQuads(pts, iter.conicWeight(),
+                        thresholdSquared);
+                for (int i = 0; i < converter.countQuads(); ++i) {
+                    const int offset = 2 * i;
+                    recursiveQuadraticBezierVertices(
+                            quads[offset].x(), quads[offset].y(),
+                            quads[offset+2].x(), quads[offset+2].y(),
+                            quads[offset+1].x(), quads[offset+1].y(),
+                            sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
+                }
+                break;
+            }
             default:
                 break;
             }