18ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com/* 28ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com * Copyright 2012 The Android Open Source Project 38ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com * 48ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com * Use of this source code is governed by a BSD-style license that can be 58ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com * found in the LICENSE file. 68ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com */ 78ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 88ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com#ifndef ANDROID_HWUI_PATH_RENDERER_H 98ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com#define ANDROID_HWUI_PATH_RENDERER_H 108ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 1124b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com#include <SkTArray.h> 128ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 138ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com#include "Vertex.h" 148ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 1524b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.comclass SkMatrix; 1624b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com 178ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.comnamespace android { 188ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.comnamespace uirenderer { 198ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 208ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.comclass VertexBuffer { 218ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.compublic: 228ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com VertexBuffer(): 238ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mBuffer(0), 248ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mSize(0), 258ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mCleanupMethod(0) 268ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com {} 278ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 288ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com ~VertexBuffer() { 298ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com if (mCleanupMethod) 308ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mCleanupMethod(mBuffer); 318ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com } 328ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 338ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com template <class TYPE> 348ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com TYPE* alloc(int size) { 358ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mSize = size; 368ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mBuffer = (void*)new TYPE[size]; 378ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com mCleanupMethod = &(cleanup<TYPE>); 388ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 398ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com return (TYPE*)mBuffer; 408ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com } 418ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 428ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com void* getBuffer() { return mBuffer; } 438ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com unsigned int getSize() { return mSize; } 448ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 458ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.comprivate: 468ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com template <class TYPE> 478ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com static void cleanup(void* buffer) { 488ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com delete[] (TYPE*)buffer; 498ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com } 508ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 518ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com void* mBuffer; 528ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com unsigned int mSize; 538ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com void (*mCleanupMethod)(void*); 548ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com}; 558ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 568ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.comclass PathRenderer { 578ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.compublic: 5824b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com static SkRect ComputePathBounds(const SkPath& path, const SkPaint* paint); 598ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 6074dda9018e8bdd650698e763404f19144c6d0a42jvanverth@google.com static void ConvexPathVertices(const SkPath& path, const SkStrokeRec& stroke, bool isAA, 6124b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com const SkMatrix* transform, VertexBuffer* vertexBuffer); 628ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 638ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.comprivate: 6424b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com static bool ConvexPathPerimeterVertices(const SkPath &path, bool forceClose, 6524b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com float sqrInvScaleX, float sqrInvScaleY, SkTArray<Vertex, true>* outputVertices); 668ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 678ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com/* 688ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com endpoints a & b, 698ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com control c 708ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com */ 7124b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com static void RecursiveQuadraticBezierVertices( 728ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float ax, float ay, 738ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float bx, float by, 748ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float cx, float cy, 758ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float sqrInvScaleX, float sqrInvScaleY, 7624b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com SkTArray<Vertex, true>* outputVertices); 778ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 788ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com/* 798ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com endpoints p1, p2 808ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com control c1, c2 818ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com */ 8224b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com static void RecursiveCubicBezierVertices( 838ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float p1x, float p1y, 848ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float c1x, float c1y, 858ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float p2x, float p2y, 868ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float c2x, float c2y, 878ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com float sqrInvScaleX, float sqrInvScaleY, 8824b4f97d00988efefb856abdbd4357cafdc36c86jvanverth@google.com SkTArray<Vertex, true>* outputVertices); 898ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com}; 908ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 918ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com}; // namespace uirenderer 928ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com}; // namespace android 938ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com 948ffb7046cb789ade4dde1ad588fb8ae995fd3f9ajvanverth@google.com#endif // ANDROID_HWUI_PATH_RENDERER_H 95