PathTessellator.h revision d6b65f67717025b1162f86f04e2caa5723566cac
165cd612face362d054a85d0f7e5881c59cd523beChris Craik/* 265cd612face362d054a85d0f7e5881c59cd523beChris Craik * Copyright (C) 2012 The Android Open Source Project 365cd612face362d054a85d0f7e5881c59cd523beChris Craik * 465cd612face362d054a85d0f7e5881c59cd523beChris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 565cd612face362d054a85d0f7e5881c59cd523beChris Craik * you may not use this file except in compliance with the License. 665cd612face362d054a85d0f7e5881c59cd523beChris Craik * You may obtain a copy of the License at 765cd612face362d054a85d0f7e5881c59cd523beChris Craik * 865cd612face362d054a85d0f7e5881c59cd523beChris Craik * http://www.apache.org/licenses/LICENSE-2.0 965cd612face362d054a85d0f7e5881c59cd523beChris Craik * 1065cd612face362d054a85d0f7e5881c59cd523beChris Craik * Unless required by applicable law or agreed to in writing, software 1165cd612face362d054a85d0f7e5881c59cd523beChris Craik * distributed under the License is distributed on an "AS IS" BASIS, 1265cd612face362d054a85d0f7e5881c59cd523beChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365cd612face362d054a85d0f7e5881c59cd523beChris Craik * See the License for the specific language governing permissions and 1465cd612face362d054a85d0f7e5881c59cd523beChris Craik * limitations under the License. 1565cd612face362d054a85d0f7e5881c59cd523beChris Craik */ 1665cd612face362d054a85d0f7e5881c59cd523beChris Craik 1765cd612face362d054a85d0f7e5881c59cd523beChris Craik#ifndef ANDROID_HWUI_PATH_TESSELLATOR_H 1865cd612face362d054a85d0f7e5881c59cd523beChris Craik#define ANDROID_HWUI_PATH_TESSELLATOR_H 1965cd612face362d054a85d0f7e5881c59cd523beChris Craik 2065cd612face362d054a85d0f7e5881c59cd523beChris Craik#include <utils/Vector.h> 2165cd612face362d054a85d0f7e5881c59cd523beChris Craik 2265cd612face362d054a85d0f7e5881c59cd523beChris Craik#include "Matrix.h" 2365cd612face362d054a85d0f7e5881c59cd523beChris Craik#include "Rect.h" 2465cd612face362d054a85d0f7e5881c59cd523beChris Craik#include "Vertex.h" 2555bfb4e728fe1db619af5d2c287f4abe711b3343ztenghui#include "VertexBuffer.h" 2665cd612face362d054a85d0f7e5881c59cd523beChris Craik 2765cd612face362d054a85d0f7e5881c59cd523beChris Craiknamespace android { 2865cd612face362d054a85d0f7e5881c59cd523beChris Craiknamespace uirenderer { 2965cd612face362d054a85d0f7e5881c59cd523beChris Craik 3065cd612face362d054a85d0f7e5881c59cd523beChris Craikclass PathTessellator { 3165cd612face362d054a85d0f7e5881c59cd523beChris Craikpublic: 32f0a590781b2c3e34132b2011d3956135add73ae0Chris Craik static void expandBoundsForStroke(SkRect& bounds, const SkPaint* paint); 3365cd612face362d054a85d0f7e5881c59cd523beChris Craik 3465cd612face362d054a85d0f7e5881c59cd523beChris Craik static void tessellatePath(const SkPath& path, const SkPaint* paint, 35d6b65f67717025b1162f86f04e2caa5723566cacChris Craik const mat4& transform, VertexBuffer& vertexBuffer); 3665cd612face362d054a85d0f7e5881c59cd523beChris Craik 376d29c8d5218cac0fb35f3b7c253f2bdebd44f15aChris Craik static void tessellatePoints(const float* points, int count, SkPaint* paint, 38d6b65f67717025b1162f86f04e2caa5723566cacChris Craik const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer); 396d29c8d5218cac0fb35f3b7c253f2bdebd44f15aChris Craik 4065cd612face362d054a85d0f7e5881c59cd523beChris Craik static void tessellateLines(const float* points, int count, SkPaint* paint, 41d6b65f67717025b1162f86f04e2caa5723566cacChris Craik const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer); 4265cd612face362d054a85d0f7e5881c59cd523beChris Craik 4365cd612face362d054a85d0f7e5881c59cd523beChris Craikprivate: 4465cd612face362d054a85d0f7e5881c59cd523beChris Craik static bool approximatePathOutlineVertices(const SkPath &path, bool forceClose, 4565cd612face362d054a85d0f7e5881c59cd523beChris Craik float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex> &outputVertices); 4665cd612face362d054a85d0f7e5881c59cd523beChris Craik 4765cd612face362d054a85d0f7e5881c59cd523beChris Craik/* 4865cd612face362d054a85d0f7e5881c59cd523beChris Craik endpoints a & b, 4965cd612face362d054a85d0f7e5881c59cd523beChris Craik control c 5065cd612face362d054a85d0f7e5881c59cd523beChris Craik */ 5165cd612face362d054a85d0f7e5881c59cd523beChris Craik static void recursiveQuadraticBezierVertices( 5265cd612face362d054a85d0f7e5881c59cd523beChris Craik float ax, float ay, 5365cd612face362d054a85d0f7e5881c59cd523beChris Craik float bx, float by, 5465cd612face362d054a85d0f7e5881c59cd523beChris Craik float cx, float cy, 5565cd612face362d054a85d0f7e5881c59cd523beChris Craik float sqrInvScaleX, float sqrInvScaleY, 5665cd612face362d054a85d0f7e5881c59cd523beChris Craik Vector<Vertex> &outputVertices); 5765cd612face362d054a85d0f7e5881c59cd523beChris Craik 5865cd612face362d054a85d0f7e5881c59cd523beChris Craik/* 5965cd612face362d054a85d0f7e5881c59cd523beChris Craik endpoints p1, p2 6065cd612face362d054a85d0f7e5881c59cd523beChris Craik control c1, c2 6165cd612face362d054a85d0f7e5881c59cd523beChris Craik */ 6265cd612face362d054a85d0f7e5881c59cd523beChris Craik static void recursiveCubicBezierVertices( 6365cd612face362d054a85d0f7e5881c59cd523beChris Craik float p1x, float p1y, 6465cd612face362d054a85d0f7e5881c59cd523beChris Craik float c1x, float c1y, 6565cd612face362d054a85d0f7e5881c59cd523beChris Craik float p2x, float p2y, 6665cd612face362d054a85d0f7e5881c59cd523beChris Craik float c2x, float c2y, 6765cd612face362d054a85d0f7e5881c59cd523beChris Craik float sqrInvScaleX, float sqrInvScaleY, 6865cd612face362d054a85d0f7e5881c59cd523beChris Craik Vector<Vertex> &outputVertices); 6965cd612face362d054a85d0f7e5881c59cd523beChris Craik}; 7065cd612face362d054a85d0f7e5881c59cd523beChris Craik 7165cd612face362d054a85d0f7e5881c59cd523beChris Craik}; // namespace uirenderer 7265cd612face362d054a85d0f7e5881c59cd523beChris Craik}; // namespace android 7365cd612face362d054a85d0f7e5881c59cd523beChris Craik 7465cd612face362d054a85d0f7e5881c59cd523beChris Craik#endif // ANDROID_HWUI_PATH_TESSELLATOR_H 75