1/*
2 * Copyright 2014 Google Inc.
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 SkPatchUtils_DEFINED
9#define SkPatchUtils_DEFINED
10
11#include "SkColorData.h"
12#include "SkMatrix.h"
13#include "SkVertices.h"
14
15class SK_API SkPatchUtils {
16
17public:
18    // Enums for control points based on the order specified in the constructor (clockwise).
19    enum {
20        kNumCtrlPts = 12,
21        kNumCorners = 4,
22        kNumPtsCubic = 4
23    };
24
25    /**
26     * Get the points corresponding to the top cubic of cubics.
27     */
28    static void GetTopCubic(const SkPoint cubics[12], SkPoint points[4]);
29
30    /**
31     * Get the points corresponding to the bottom cubic of cubics.
32     */
33    static void GetBottomCubic(const SkPoint cubics[12], SkPoint points[4]);
34
35    /**
36     * Get the points corresponding to the left cubic of cubics.
37     */
38    static void GetLeftCubic(const SkPoint cubics[12], SkPoint points[4]);
39
40    /**
41     * Get the points corresponding to the right cubic of cubics.
42     */
43    static void GetRightCubic(const SkPoint cubics[12], SkPoint points[4]);
44
45    /**
46     * Method that calculates a level of detail (number of subdivisions) for a patch in both axis.
47     */
48    static SkISize GetLevelOfDetail(const SkPoint cubics[12], const SkMatrix* matrix);
49
50    static sk_sp<SkVertices> MakeVertices(const SkPoint cubics[12], const SkColor colors[4],
51                                          const SkPoint texCoords[4], int lodX, int lodY,
52                                          bool interpColorsLinearly = false);
53};
54
55#endif
56