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 15class SkMatrix; 16 17namespace android { 18namespace uirenderer { 19 20class VertexBuffer { 21public: 22 VertexBuffer(): 23 mBuffer(0), 24 mSize(0), 25 mCleanupMethod(0) 26 {} 27 28 ~VertexBuffer() { 29 if (mCleanupMethod) 30 mCleanupMethod(mBuffer); 31 } 32 33 template <class TYPE> 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 42 void* getBuffer() { return mBuffer; } 43 unsigned int getSize() { return mSize; } 44 45private: 46 template <class TYPE> 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 56class PathRenderer { 57public: 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 63private: 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