Home | History | Annotate | Download | only in utils
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 #ifndef SkBoundaryPatch_DEFINED
      9 #define SkBoundaryPatch_DEFINED
     10 
     11 #include "SkPoint.h"
     12 #include "SkRefCnt.h"
     13 
     14 class SkBoundary : public SkRefCnt {
     15 public:
     16 
     17 
     18     // These must be 0, 1, 2, 3 for efficiency in the subclass implementations
     19     enum Edge {
     20         kTop    = 0,
     21         kRight  = 1,
     22         kBottom = 2,
     23         kLeft   = 3
     24     };
     25     // Edge index goes clockwise around the boundary, beginning at the "top"
     26     virtual SkPoint eval(Edge, SkScalar unitInterval) = 0;
     27 
     28 private:
     29     typedef SkRefCnt INHERITED;
     30 };
     31 
     32 class SkBoundaryPatch {
     33 public:
     34     SkBoundaryPatch();
     35     ~SkBoundaryPatch();
     36 
     37     SkBoundary* getBoundary() const { return fBoundary; }
     38     SkBoundary* setBoundary(SkBoundary*);
     39 
     40     SkPoint eval(SkScalar unitU, SkScalar unitV);
     41     bool evalPatch(SkPoint verts[], int rows, int cols);
     42 
     43 private:
     44     SkBoundary* fBoundary;
     45 };
     46 
     47 ////////////////////////////////////////////////////////////////////////
     48 
     49 class SkLineBoundary : public SkBoundary {
     50 public:
     51     SkPoint fPts[4];
     52 
     53     // override
     54     virtual SkPoint eval(Edge, SkScalar);
     55 };
     56 
     57 class SkCubicBoundary : public SkBoundary {
     58 public:
     59     // the caller sets the first 12 entries. The 13th is used by the impl.
     60     SkPoint fPts[13];
     61 
     62     // override
     63     virtual SkPoint eval(Edge, SkScalar);
     64 };
     65 
     66 #endif
     67