diff options
Diffstat (limited to 'skia/include/SkDraw.h')
-rw-r--r-- | skia/include/SkDraw.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/skia/include/SkDraw.h b/skia/include/SkDraw.h new file mode 100644 index 0000000..39fe9206 --- /dev/null +++ b/skia/include/SkDraw.h @@ -0,0 +1,125 @@ +/* libs/graphics/sgl/SkDraw.h +** +** Copyright 2006, Google Inc. +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef SkDraw_DEFINED +#define SkDraw_DEFINED + +#include "SkBitmap.h" +#include "SkCanvas.h" +#include "SkMask.h" +#include "SkMatrix.h" +#include "SkPaint.h" +#include "SkRect.h" +#include "SkAutoKern.h" + +class SkBounder; +class SkDevice; +class SkPath; +class SkRegion; +struct SkDrawProcs; + +class SkDraw { +public: + SkDraw() : fDevice(NULL), fBounder(NULL), fProcs(NULL) {} + SkDraw(const SkDraw& src); + + void drawPaint(const SkPaint&) const; + void drawPoints(SkCanvas::PointMode, size_t count, const SkPoint[], + const SkPaint&) const; + void drawRect(const SkRect&, const SkPaint&) const; + /* To save on mallocs, we allow a flag that tells us that srcPath is + mutable, so that we don't have to make copies of it as we transform it. + */ + void drawPath(const SkPath& srcPath, const SkPaint&, + const SkMatrix* prePathMatrix, bool pathIsMutable) const; + void drawBitmap(const SkBitmap&, const SkMatrix&, const SkPaint&) const; + void drawSprite(const SkBitmap&, int x, int y, const SkPaint&) const; + void drawText(const char text[], size_t byteLength, SkScalar x, + SkScalar y, const SkPaint& paint) const; + void drawPosText(const char text[], size_t byteLength, + const SkScalar pos[], SkScalar constY, + int scalarsPerPosition, const SkPaint& paint) const; + void drawTextOnPath(const char text[], size_t byteLength, + const SkPath&, const SkMatrix*, const SkPaint&) const; + void drawVertices(SkCanvas::VertexMode vmode, int count, + const SkPoint vertices[], const SkPoint textures[], + const SkColor colors[], SkXfermode* mode, + const uint16_t indices[], int ptCount, + const SkPaint& paint) const; + + void drawPath(const SkPath& src, const SkPaint& paint) const { + this->drawPath(src, paint, NULL, false); + } + + /** Helper function that creates a mask from a path and an optional maskfilter. + Note however, that the resulting mask will not have been actually filtered, + that must be done afterwards (by calling filterMask). The maskfilter is provided + solely to assist in computing the mask's bounds (if the mode requests that). + */ + static bool DrawToMask(const SkPath& devPath, const SkIRect* clipBounds, + SkMaskFilter* filter, const SkMatrix* filterMatrix, + SkMask* mask, SkMask::CreateMode mode); + +private: + void drawText_asPaths(const char text[], size_t byteLength, + SkScalar x, SkScalar y, const SkPaint&) const; + void drawDevMask(const SkMask& mask, const SkPaint&) const; + void drawBitmapAsMask(const SkBitmap&, const SkPaint&) const; + +public: + const SkBitmap* fBitmap; // required + const SkMatrix* fMatrix; // required + const SkRegion* fClip; // required + SkDevice* fDevice; // optional + SkBounder* fBounder; // optional + SkDrawProcs* fProcs; // optional + +#ifdef SK_DEBUG + void validate() const; +#endif +}; + +#include "SkGlyphCache.h" + +class SkTextToPathIter { +public: + SkTextToPathIter(const char text[], size_t length, const SkPaint&, + bool applyStrokeAndPathEffects, bool forceLinearTextOn); + ~SkTextToPathIter(); + + const SkPaint& getPaint() const { return fPaint; } + SkScalar getPathScale() const { return fScale; } + + const SkPath* next(SkScalar* xpos); //!< returns nil when there are no more paths + +private: + SkGlyphCache* fCache; + SkPaint fPaint; + SkScalar fScale; + SkFixed fPrevAdvance; + const char* fText; + const char* fStop; + SkMeasureCacheProc fGlyphCacheProc; + + const SkPath* fPath; // returned in next + SkScalar fXPos; // accumulated xpos, returned in next + SkAutoKern fAutoKern; +}; + +#endif + + |