aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/SkDevice.cpp17
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);
+}
///////////////////////////////////////////////////////////////////////////////