• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 The Android Open Source Project
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef ANDROID_HWUI_PATH_RENDERER_H
9 #define ANDROID_HWUI_PATH_RENDERER_H
10 
11 #include <SkTArray.h>
12 
13 #include "Vertex.h"
14 
15 class SkMatrix;
16 
17 namespace android {
18 namespace uirenderer {
19 
20 class VertexBuffer {
21 public:
VertexBuffer()22     VertexBuffer():
23         mBuffer(0),
24         mSize(0),
25         mCleanupMethod(0)
26     {}
27 
~VertexBuffer()28     ~VertexBuffer() {
29         if (mCleanupMethod)
30             mCleanupMethod(mBuffer);
31     }
32 
33     template <class TYPE>
alloc(int size)34     TYPE* alloc(int size) {
35         mSize = size;
36         mBuffer = (void*)new TYPE[size];
37         mCleanupMethod = &(cleanup<TYPE>);
38 
39         return (TYPE*)mBuffer;
40     }
41 
getBuffer()42     void* getBuffer() { return mBuffer; }
getSize()43     unsigned int getSize() { return mSize; }
44 
45 private:
46     template <class TYPE>
cleanup(void * buffer)47     static void cleanup(void* buffer) {
48         delete[] (TYPE*)buffer;
49     }
50 
51     void* mBuffer;
52     unsigned int mSize;
53     void (*mCleanupMethod)(void*);
54 };
55 
56 class PathRenderer {
57 public:
58     static SkRect ComputePathBounds(const SkPath& path, const SkPaint* paint);
59 
60     static void ConvexPathVertices(const SkPath& path, const SkStrokeRec& stroke, bool isAA,
61             const SkMatrix* transform, VertexBuffer* vertexBuffer);
62 
63 private:
64     static bool ConvexPathPerimeterVertices(const SkPath &path, bool forceClose,
65         float sqrInvScaleX, float sqrInvScaleY, SkTArray<Vertex, true>* outputVertices);
66 
67 /*
68   endpoints a & b,
69   control c
70  */
71     static void RecursiveQuadraticBezierVertices(
72             float ax, float ay,
73             float bx, float by,
74             float cx, float cy,
75             float sqrInvScaleX, float sqrInvScaleY,
76             SkTArray<Vertex, true>* outputVertices);
77 
78 /*
79   endpoints p1, p2
80   control c1, c2
81  */
82     static void RecursiveCubicBezierVertices(
83             float p1x, float p1y,
84             float c1x, float c1y,
85             float p2x, float p2y,
86             float c2x, float c2y,
87             float sqrInvScaleX, float sqrInvScaleY,
88             SkTArray<Vertex, true>* outputVertices);
89 };
90 
91 }; // namespace uirenderer
92 }; // namespace android
93 
94 #endif // ANDROID_HWUI_PATH_RENDERER_H
95