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