15bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
25bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com/*
35bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2011 Google Inc.
45bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com *
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
65bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
75bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com */
860ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com#ifndef SkBoundaryPatch_DEFINED
960ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com#define SkBoundaryPatch_DEFINED
1060ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
1160ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com#include "SkPoint.h"
1260ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com#include "SkRefCnt.h"
1360ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
1460ca96260ba0793326ba6939438c82ed4baedbf1reed@android.comclass SkBoundary : public SkRefCnt {
1560ca96260ba0793326ba6939438c82ed4baedbf1reed@android.compublic:
168d100972ed5bc63cb48e4a0aa3a954a91601ff21robertphillips@google.com    SK_DECLARE_INST_COUNT(SkBoundary)
178d100972ed5bc63cb48e4a0aa3a954a91601ff21robertphillips@google.com
1860ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    // These must be 0, 1, 2, 3 for efficiency in the subclass implementations
1960ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    enum Edge {
2060ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com        kTop    = 0,
2160ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com        kRight  = 1,
2260ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com        kBottom = 2,
2360ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com        kLeft   = 3
2460ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    };
2560ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    // Edge index goes clockwise around the boundary, beginning at the "top"
2660ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    virtual SkPoint eval(Edge, SkScalar unitInterval) = 0;
278d100972ed5bc63cb48e4a0aa3a954a91601ff21robertphillips@google.com
288d100972ed5bc63cb48e4a0aa3a954a91601ff21robertphillips@google.comprivate:
298d100972ed5bc63cb48e4a0aa3a954a91601ff21robertphillips@google.com    typedef SkRefCnt INHERITED;
3060ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com};
3160ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
3260ca96260ba0793326ba6939438c82ed4baedbf1reed@android.comclass SkBoundaryPatch {
3360ca96260ba0793326ba6939438c82ed4baedbf1reed@android.compublic:
3460ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkBoundaryPatch();
3560ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    ~SkBoundaryPatch();
3660ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
3760ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkBoundary* getBoundary() const { return fBoundary; }
3860ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkBoundary* setBoundary(SkBoundary*);
3960ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
4060ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkPoint eval(SkScalar unitU, SkScalar unitV);
4160ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    bool evalPatch(SkPoint verts[], int rows, int cols);
4260ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
4360ca96260ba0793326ba6939438c82ed4baedbf1reed@android.comprivate:
4460ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkBoundary* fBoundary;
4560ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com};
4660ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
4760ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com////////////////////////////////////////////////////////////////////////
4860ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
4960ca96260ba0793326ba6939438c82ed4baedbf1reed@android.comclass SkLineBoundary : public SkBoundary {
5060ca96260ba0793326ba6939438c82ed4baedbf1reed@android.compublic:
5160ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkPoint fPts[4];
521fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com
5360ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    // override
5460ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    virtual SkPoint eval(Edge, SkScalar);
5560ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com};
5660ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
5760ca96260ba0793326ba6939438c82ed4baedbf1reed@android.comclass SkCubicBoundary : public SkBoundary {
5860ca96260ba0793326ba6939438c82ed4baedbf1reed@android.compublic:
5960ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    // the caller sets the first 12 entries. The 13th is used by the impl.
6060ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    SkPoint fPts[13];
611fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com
6260ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    // override
6360ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com    virtual SkPoint eval(Edge, SkScalar);
6460ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com};
6560ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com
6660ca96260ba0793326ba6939438c82ed4baedbf1reed@android.com#endif
67