diff options
Diffstat (limited to 'tools/PictureRenderer.h')
-rw-r--r-- | tools/PictureRenderer.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h new file mode 100644 index 0000000000..5fa53c1a7c --- /dev/null +++ b/tools/PictureRenderer.h @@ -0,0 +1,70 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef PictureRenderer_DEFINED +#define PictureRenderer_DEFINED +#include "SkTypes.h" +#include "SkTDArray.h" +#include "SkRefCnt.h" + +class SkBitmap; +class SkCanvas; +class SkPicture; + +namespace sk_tools { + +class PictureRenderer : public SkRefCnt { +public: + virtual void init(const SkPicture& pict){} + virtual void render(SkPicture* pict, SkCanvas* canvas) = 0; +}; + +class PipePictureRenderer : public PictureRenderer { + virtual void render(SkPicture* pict, SkCanvas* canvas); +}; + +class SimplePictureRenderer : public PictureRenderer { + virtual void render (SkPicture* pict, SkCanvas* canvas); +}; + +class TiledPictureRenderer : public PictureRenderer { +public: + TiledPictureRenderer(); + + virtual void init(const SkPicture& pict); + virtual void render(SkPicture* pict, SkCanvas* canvas); + + ~TiledPictureRenderer(); + +private: + struct TileInfo { + SkBitmap* fBitmap; + SkCanvas* fCanvas; + }; + + int fTileWidth; + int fTileHeight; + + SkTDArray<TileInfo> fTiles; + + // Clips the tile to an area that is completely in what the SkPicture says is the + // drawn-to area. This is mostly important for tiles on the right and bottom edges + // as they may go over this area and the picture may have some commands that + // draw outside of this area and so should not actually be written. + static void clipTile(const SkPicture& picture, const TileInfo& tile); + void addTile(const SkPicture& picture, int tile_x_start, int tile_y_start); + void setupTiles(const SkPicture& picture); + // We manually delete the tiles instead of having a destructor on TileInfo as + // the destructor on TileInfo will be during a realloc. This would result in + // the canvases and bitmaps being prematurely deleted. + void deleteTiles(); + void copyTilesToCanvas(const SkPicture& pict, SkCanvas* destination); +}; + +} + +#endif // PictureRenderer_DEFINED |