diff options
Diffstat (limited to 'include/utils')
-rw-r--r-- | include/utils/SkBoundaryPatch.h | 66 | ||||
-rw-r--r-- | include/utils/SkMeshUtils.h | 50 |
2 files changed, 116 insertions, 0 deletions
diff --git a/include/utils/SkBoundaryPatch.h b/include/utils/SkBoundaryPatch.h new file mode 100644 index 0000000000..f8edd594b9 --- /dev/null +++ b/include/utils/SkBoundaryPatch.h @@ -0,0 +1,66 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef SkBoundaryPatch_DEFINED +#define SkBoundaryPatch_DEFINED + +#include "SkPoint.h" +#include "SkRefCnt.h" + +class SkBoundary : public SkRefCnt { +public: + + + // These must be 0, 1, 2, 3 for efficiency in the subclass implementations + enum Edge { + kTop = 0, + kRight = 1, + kBottom = 2, + kLeft = 3 + }; + // Edge index goes clockwise around the boundary, beginning at the "top" + virtual SkPoint eval(Edge, SkScalar unitInterval) = 0; + +private: + typedef SkRefCnt INHERITED; +}; + +class SkBoundaryPatch { +public: + SkBoundaryPatch(); + ~SkBoundaryPatch(); + + SkBoundary* getBoundary() const { return fBoundary; } + SkBoundary* setBoundary(SkBoundary*); + + SkPoint eval(SkScalar unitU, SkScalar unitV); + bool evalPatch(SkPoint verts[], int rows, int cols); + +private: + SkBoundary* fBoundary; +}; + +//////////////////////////////////////////////////////////////////////// + +class SkLineBoundary : public SkBoundary { +public: + SkPoint fPts[4]; + + // override + virtual SkPoint eval(Edge, SkScalar); +}; + +class SkCubicBoundary : public SkBoundary { +public: + // the caller sets the first 12 entries. The 13th is used by the impl. + SkPoint fPts[13]; + + // override + virtual SkPoint eval(Edge, SkScalar); +}; + +#endif diff --git a/include/utils/SkMeshUtils.h b/include/utils/SkMeshUtils.h new file mode 100644 index 0000000000..7e0e8f4de2 --- /dev/null +++ b/include/utils/SkMeshUtils.h @@ -0,0 +1,50 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef SkMeshUtils_DEFINED +#define SkMeshUtils_DEFINED + +#include "SkPoint.h" +#include "SkColor.h" + +class SkBitmap; +class SkCanvas; +class SkPaint; + +class SkMeshIndices { +public: + SkMeshIndices(); + ~SkMeshIndices(); + + bool init(int texW, int texH, int rows, int cols) { + return this->init(NULL, NULL, texW, texH, rows, cols); + } + + bool init(SkPoint tex[], uint16_t indices[], + int texW, int texH, int rows, int cols); + + int indexCount() const { return fIndexCount; } + const uint16_t* indices() const { return fIndices; } + + size_t texCount() const { return fTexCount; } + const SkPoint* tex() const { return fTex; } + +private: + int fIndexCount, fTexCount; + SkPoint* fTex; + uint16_t* fIndices; + void* fStorage; // may be null +}; + +class SkMeshUtils { +public: + static void Draw(SkCanvas*, const SkBitmap&, int rows, int cols, + const SkPoint verts[], const SkColor colors[], + const SkPaint& paint); +}; + +#endif |