| /* |
| * Copyright 2014 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkPatchUtils_DEFINED |
| #define SkPatchUtils_DEFINED |
| |
| #include "include/core/SkColor.h" |
| #include "include/core/SkRefCnt.h" |
| |
| class SkColorSpace; |
| class SkMatrix; |
| class SkVertices; |
| struct SkISize; |
| struct SkPoint; |
| |
| class SkPatchUtils { |
| |
| public: |
| // Enums for control points based on the order specified in the constructor (clockwise). |
| enum { |
| kNumCtrlPts = 12, |
| kNumCorners = 4, |
| kNumPtsCubic = 4 |
| }; |
| |
| /** |
| * Get the points corresponding to the top cubic of cubics. |
| */ |
| static void GetTopCubic(const SkPoint cubics[12], SkPoint points[4]); |
| |
| /** |
| * Get the points corresponding to the bottom cubic of cubics. |
| */ |
| static void GetBottomCubic(const SkPoint cubics[12], SkPoint points[4]); |
| |
| /** |
| * Get the points corresponding to the left cubic of cubics. |
| */ |
| static void GetLeftCubic(const SkPoint cubics[12], SkPoint points[4]); |
| |
| /** |
| * Get the points corresponding to the right cubic of cubics. |
| */ |
| static void GetRightCubic(const SkPoint cubics[12], SkPoint points[4]); |
| |
| /** |
| * Method that calculates a level of detail (number of subdivisions) for a patch in both axis. |
| */ |
| static SkISize GetLevelOfDetail(const SkPoint cubics[12], const SkMatrix* matrix); |
| |
| static sk_sp<SkVertices> MakeVertices(const SkPoint cubics[12], const SkColor colors[4], |
| const SkPoint texCoords[4], int lodX, int lodY, |
| SkColorSpace* colorSpace = nullptr); |
| }; |
| |
| #endif |