Tiles that extend beyond the picture are now clipped.

Review URL: https://codereview.appspot.com/6352078

git-svn-id: http://skia.googlecode.com/svn/trunk@4491 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
keyar@chromium.org 2012-07-09 19:51:05 +00:00
parent cf6c44cf92
commit 70b4222344

View File

@ -84,17 +84,23 @@ struct TileInfo {
SkCanvas* fCanvas;
};
static void setup_single_tile(const SkBitmap& bitmap, const Options& options,
SkTArray<TileInfo>* tiles,
static void clip_tile(SkPicture* picture, const TileInfo& tile) {
SkRect clip = SkRect::MakeWH(picture->width(), picture->height());
tile.fCanvas->clipRect(clip);
}
static void setup_single_tile(SkPicture* picture, const SkBitmap& bitmap,
const Options& options, SkTArray<TileInfo>* tiles,
int tile_x_start, int tile_y_start) {
TileInfo& tile = tiles->push_back();
tile.fBitmap = new SkBitmap();
SkIRect rect = SkIRect::MakeXYWH(tile_x_start, tile_y_start,
options.fTileWidth,
options.fTileHeight);
options.fTileWidth, options.fTileHeight);
bitmap.extractSubset(tile.fBitmap, rect);
tile.fCanvas = new SkCanvas(*(tile.fBitmap));
tile.fCanvas->translate(-tile_x_start, -tile_y_start);
clip_tile(picture, tile);
}
static void setup_tiles(SkPicture* picture, const SkBitmap& bitmap,
@ -103,7 +109,7 @@ static void setup_tiles(SkPicture* picture, const SkBitmap& bitmap,
tile_y_start += options.fTileHeight) {
for (int tile_x_start = 0; tile_x_start < picture->width();
tile_x_start += options.fTileWidth) {
setup_single_tile(bitmap, options, tiles, tile_x_start,
setup_single_tile(picture, bitmap, options, tiles, tile_x_start,
tile_y_start);
}
}