blob: f9b4c260ef7b562f56f75109f7391d1a8a278487 [file] [log] [blame]
keyar@chromium.org451bb9f2012-07-26 17:27:57 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef PictureRenderer_DEFINED
9#define PictureRenderer_DEFINED
10#include "SkTypes.h"
11#include "SkTDArray.h"
12#include "SkRefCnt.h"
13
14class SkBitmap;
15class SkCanvas;
16class SkPicture;
17
18namespace sk_tools {
19
20class PictureRenderer : public SkRefCnt {
21public:
keyar@chromium.org9d696c02012-08-07 17:11:33 +000022 virtual void init(SkPicture* pict);
23 virtual void render() = 0;
24 virtual void end();
25
26 SkCanvas* getCanvas() {
27 return fCanvas.get();
28 }
29
30 PictureRenderer() : fPicture(NULL){}
31protected:
32 SkAutoTUnref<SkCanvas> fCanvas;
33 SkPicture* fPicture;
34
35private:
36 typedef SkRefCnt INHERITED;
keyar@chromium.org451bb9f2012-07-26 17:27:57 +000037};
38
39class PipePictureRenderer : public PictureRenderer {
keyar@chromium.org163b5672012-08-01 17:53:29 +000040public:
keyar@chromium.org9d696c02012-08-07 17:11:33 +000041 virtual void render() SK_OVERRIDE;
42
43private:
44 typedef PictureRenderer INHERITED;
keyar@chromium.org451bb9f2012-07-26 17:27:57 +000045};
46
47class SimplePictureRenderer : public PictureRenderer {
keyar@chromium.org163b5672012-08-01 17:53:29 +000048public:
keyar@chromium.org9d696c02012-08-07 17:11:33 +000049 virtual void render () SK_OVERRIDE;
50
51private:
52 typedef PictureRenderer INHERITED;
keyar@chromium.org451bb9f2012-07-26 17:27:57 +000053};
54
55class TiledPictureRenderer : public PictureRenderer {
56public:
57 TiledPictureRenderer();
58
keyar@chromium.org9d696c02012-08-07 17:11:33 +000059 virtual void init(SkPicture* pict) SK_OVERRIDE;
60 virtual void render() SK_OVERRIDE;
61 virtual void end() SK_OVERRIDE;
62 void drawTiles();
keyar@chromium.org451bb9f2012-07-26 17:27:57 +000063
keyar@chromium.orgcc6e5ef2012-07-27 20:09:26 +000064 void setTileWidth(int width) {
65 fTileWidth = width;
66 }
67
68 int getTileWidth() const {
69 return fTileWidth;
70 }
71
72 void setTileHeight(int height) {
73 fTileHeight = height;
74 }
75
76 int getTileHeight() const {
77 return fTileHeight;
78 }
79
80 void setTileWidthPercentage(double percentage) {
81 fTileWidthPercentage = percentage;
82 }
83
keyar@chromium.org163b5672012-08-01 17:53:29 +000084 double getTileWidthPercentage() const {
keyar@chromium.orgcc6e5ef2012-07-27 20:09:26 +000085 return fTileWidthPercentage;
86 }
87
88 void setTileHeightPercentage(double percentage) {
89 fTileHeightPercentage = percentage;
90 }
91
keyar@chromium.org163b5672012-08-01 17:53:29 +000092 double getTileHeightPercentage() const {
keyar@chromium.orgcc6e5ef2012-07-27 20:09:26 +000093 return fTileHeightPercentage;
94 }
95
keyar@chromium.org163b5672012-08-01 17:53:29 +000096 int numTiles() const {
97 return fTiles.count();
98 }
99
keyar@chromium.org451bb9f2012-07-26 17:27:57 +0000100 ~TiledPictureRenderer();
101
102private:
103 struct TileInfo {
104 SkBitmap* fBitmap;
105 SkCanvas* fCanvas;
106 };
107
108 int fTileWidth;
109 int fTileHeight;
keyar@chromium.orgcc6e5ef2012-07-27 20:09:26 +0000110 double fTileWidthPercentage;
111 double fTileHeightPercentage;
keyar@chromium.org451bb9f2012-07-26 17:27:57 +0000112
113 SkTDArray<TileInfo> fTiles;
114
115 // Clips the tile to an area that is completely in what the SkPicture says is the
116 // drawn-to area. This is mostly important for tiles on the right and bottom edges
117 // as they may go over this area and the picture may have some commands that
118 // draw outside of this area and so should not actually be written.
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000119 void clipTile(const TileInfo& tile);
120 void addTile(int tile_x_start, int tile_y_start);
121 void setupTiles();
keyar@chromium.org451bb9f2012-07-26 17:27:57 +0000122 // We manually delete the tiles instead of having a destructor on TileInfo as
123 // the destructor on TileInfo will be during a realloc. This would result in
124 // the canvases and bitmaps being prematurely deleted.
125 void deleteTiles();
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000126 void copyTilesToCanvas();
127
128 typedef PictureRenderer INHERITED;
keyar@chromium.org451bb9f2012-07-26 17:27:57 +0000129};
130
131}
132
133#endif // PictureRenderer_DEFINED