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