diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkDevice.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp index 850a53fd16..4a7693673f 100644 --- a/src/core/SkDevice.cpp +++ b/src/core/SkDevice.cpp @@ -25,13 +25,13 @@ SkDeviceFactory::~SkDeviceFactory() { /////////////////////////////////////////////////////////////////////////////// -SkDevice::SkDevice(SkCanvas* canvas) : fCanvas(canvas), fMetaData(NULL) { +SkDevice::SkDevice(SkCanvas* canvas) : fCanvas(canvas), fMetaData(NULL), fMatrixClipObserver(NULL) { fOrigin.setZero(); fCachedDeviceFactory = NULL; } SkDevice::SkDevice(SkCanvas* canvas, const SkBitmap& bitmap, bool isForLayer) - : fCanvas(canvas), fBitmap(bitmap), fMetaData(NULL) { + : fCanvas(canvas), fBitmap(bitmap), fMetaData(NULL), fMatrixClipObserver(NULL) { fOrigin.setZero(); // auto-allocate if we're for offscreen drawing if (isForLayer) { @@ -48,6 +48,7 @@ SkDevice::SkDevice(SkCanvas* canvas, const SkBitmap& bitmap, bool isForLayer) SkDevice::~SkDevice() { delete fMetaData; SkSafeUnref(fCachedDeviceFactory); + SkSafeUnref(fMatrixClipObserver); } SkDeviceFactory* SkDevice::onNewDeviceFactory() { @@ -105,8 +106,16 @@ void SkDevice::clear(SkColor color) { void SkDevice::onAccessBitmap(SkBitmap* bitmap) {} -void SkDevice::setMatrixClip(const SkMatrix&, const SkRegion&, - const SkClipStack&) {} +void SkDevice::setMatrixClip(const SkMatrix& matrix, const SkRegion& region, + const SkClipStack& clipStack) { + if (fMatrixClipObserver) { + fMatrixClipObserver->matrixClipChanged(matrix, region, clipStack); + } +} + +void SkDevice::setMatrixClipObserver(SkMatrixClipObserver* observer) { + SkRefCnt_SafeAssign(fMatrixClipObserver, observer); +} /////////////////////////////////////////////////////////////////////////////// |