aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-02-08 21:03:30 +0000
committerGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-02-08 21:03:30 +0000
commitf507c410e3a2a7ef7dab84152d836da5e5a8a5e9 (patch)
tree4e35b3361898c98a003ee0b0a9c1734876440390 /src/core
parentf729a711a7eb66504e891a5bfc463d09620f92fe (diff)
Adding option to SkTileGrid for specifying border pixels.
The purpose of this patch is to make it possible for the chromium compositor to generate a TileGrid structure that is better suited for scaled playback. Review URL: https://codereview.appspot.com/7300072 git-svn-id: http://skia.googlecode.com/svn/trunk@7680 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkTileGrid.cpp17
-rw-r--r--src/core/SkTileGrid.h4
-rw-r--r--src/core/SkTileGridPicture.cpp7
3 files changed, 17 insertions, 11 deletions
diff --git a/src/core/SkTileGrid.cpp b/src/core/SkTileGrid.cpp
index 2b885c9f1f..51c40cc0af 100644
--- a/src/core/SkTileGrid.cpp
+++ b/src/core/SkTileGrid.cpp
@@ -8,12 +8,16 @@
#include "SkTileGrid.h"
-SkTileGrid::SkTileGrid(int tileWidth, int tileHeight, int xTileCount, int yTileCount, SkTileGridNextDatumFunctionPtr nextDatumFunction)
+SkTileGrid::SkTileGrid(int tileWidth, int tileHeight, int xTileCount, int yTileCount,
+ int borderPixels, SkTileGridNextDatumFunctionPtr nextDatumFunction)
{
fTileWidth = tileWidth;
fTileHeight = tileHeight;
fXTileCount = xTileCount;
fYTileCount = yTileCount;
+ // Border padding is offset by 1 as a provision for AA and
+ // to cancel-out the outset applied by getClipDeviceBounds.
+ fBorderPixels = borderPixels + 1;
fTileCount = fXTileCount * fYTileCount;
fInsertionCount = 0;
fGridBounds = SkIRect::MakeXYWH(0, 0, fTileWidth * fXTileCount, fTileHeight * fYTileCount);
@@ -32,7 +36,7 @@ SkTDArray<void *>& SkTileGrid::tile(int x, int y) {
void SkTileGrid::insert(void* data, const SkIRect& bounds, bool) {
SkASSERT(!bounds.isEmpty());
SkIRect dilatedBounds = bounds;
- dilatedBounds.outset(1,1); // Consideration for filtering and AA
+ dilatedBounds.outset(fBorderPixels, fBorderPixels);
if (!SkIRect::Intersects(dilatedBounds, fGridBounds)) {
return;
@@ -52,11 +56,10 @@ void SkTileGrid::insert(void* data, const SkIRect& bounds, bool) {
}
void SkTileGrid::search(const SkIRect& query, SkTDArray<void*>* results) {
- // The +1/-1 is to compensate for the outset in applied SkCanvas::getClipBounds
- int tileStartX = (query.left() + 1) / fTileWidth;
- int tileEndX = (query.right() + fTileWidth - 1) / fTileWidth;
- int tileStartY = (query.top() + 1) / fTileHeight;
- int tileEndY = (query.bottom() + fTileHeight - 1) / fTileHeight;
+ int tileStartX = (query.left() + fBorderPixels) / fTileWidth;
+ int tileEndX = (query.right() + fTileWidth - fBorderPixels) / fTileWidth;
+ int tileStartY = (query.top() + fBorderPixels) / fTileHeight;
+ int tileEndY = (query.bottom() + fTileHeight - fBorderPixels) / fTileHeight;
if (tileStartX >= fXTileCount || tileStartY >= fYTileCount || tileEndX <= 0 || tileEndY <= 0) {
return; // query does not intersect the grid
}
diff --git a/src/core/SkTileGrid.h b/src/core/SkTileGrid.h
index 8ae3f2c1cc..3f69f073b7 100644
--- a/src/core/SkTileGrid.h
+++ b/src/core/SkTileGrid.h
@@ -26,7 +26,7 @@ class SkTileGrid : public SkBBoxHierarchy {
public:
typedef void* (*SkTileGridNextDatumFunctionPtr)(SkTDArray<void*>** tileData, SkTDArray<int>& tileIndices);
- SkTileGrid(int tileWidth, int tileHeight, int xTileCount, int yTileCount,
+ SkTileGrid(int tileWidth, int tileHeight, int xTileCount, int yTileCount, int borderPixels,
SkTileGridNextDatumFunctionPtr nextDatumFunction);
virtual ~SkTileGrid();
@@ -61,7 +61,7 @@ public:
private:
SkTDArray<void*>& tile(int x, int y);
- int fTileWidth, fTileHeight, fXTileCount, fYTileCount, fTileCount;
+ int fTileWidth, fTileHeight, fXTileCount, fYTileCount, fTileCount, fBorderPixels;
SkTDArray<void*>* fTileData;
int fInsertionCount;
SkIRect fGridBounds;
diff --git a/src/core/SkTileGridPicture.cpp b/src/core/SkTileGridPicture.cpp
index 212e3b6243..8a39d4949b 100644
--- a/src/core/SkTileGridPicture.cpp
+++ b/src/core/SkTileGridPicture.cpp
@@ -11,14 +11,17 @@
#include "SkTileGrid.h"
-SkTileGridPicture::SkTileGridPicture(int tileWidth, int tileHeight, int width, int height) {
+SkTileGridPicture::SkTileGridPicture(int tileWidth, int tileHeight, int width, int height,
+ int borderPixels) {
+ SkASSERT(borderPixels >= 0);
fTileWidth = tileWidth;
fTileHeight = tileHeight;
fXTileCount = (width + tileWidth - 1) / tileWidth;
fYTileCount = (height + tileHeight - 1) / tileHeight;
+ fBorderPixels = borderPixels;
}
SkBBoxHierarchy* SkTileGridPicture::createBBoxHierarchy() const {
return SkNEW_ARGS(SkTileGrid, (fTileWidth, fTileHeight, fXTileCount, fYTileCount,
- SkTileGridNextDatum<SkPictureStateTree::Draw>));
+ fBorderPixels, SkTileGridNextDatum<SkPictureStateTree::Draw>));
}