Chromium Code Reviews| Index: src/core/SkCanvas.cpp |
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
| index 7d71ffb13bdd573ea0b014e66975e4c81de9393b..895d36fe8c57d696a1effcff290fcd7608ed1a0d 100644 |
| --- a/src/core/SkCanvas.cpp |
| +++ b/src/core/SkCanvas.cpp |
| @@ -627,7 +627,13 @@ void SkCanvas::resetForNextPicture(const SkIRect& bounds) { |
| } |
| SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) { |
| - fConservativeRasterClip = SkToBool(flags & kConservativeRasterClip_InitFlag); |
| + if (device && device->forceConservativeRasterClip()) { |
| + flags = InitFlags(flags | kConservativeRasterClip_InitFlag); |
| + } |
|
robertphillips
2015/11/20 19:45:47
Why don't we just do this inside the above else:
reed1
2015/11/20 20:46:34
doesn't seem smaller or clearer (to me) since it p
|
| + // Since init() is only called once by our constructors, it is safe to perform this |
| + // const-cast. |
| + *const_cast<bool*>(&fConservativeRasterClip) = SkToBool(flags & kConservativeRasterClip_InitFlag); |
| + |
| fCachedLocalClipBounds.setEmpty(); |
| fCachedLocalClipBoundsDirty = true; |
| fAllowSoftClip = true; |
| @@ -652,9 +658,6 @@ SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) { |
| if (device) { |
| // The root device and the canvas should always have the same pixel geometry |
| SkASSERT(fProps.pixelGeometry() == device->surfaceProps().pixelGeometry()); |
| - if (device->forceConservativeRasterClip()) { |
| - fConservativeRasterClip = true; |
| - } |
| device->onAttachToCanvas(this); |
| fMCRec->fLayer->fDevice = SkRef(device); |
| fMCRec->fRasterClip.setRect(device->getGlobalBounds()); |
| @@ -665,6 +668,7 @@ SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) { |
| SkCanvas::SkCanvas() |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(SkSurfaceProps::kLegacyFontHost_InitType) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |
| @@ -693,6 +697,7 @@ private: |
| SkCanvas::SkCanvas(int width, int height, const SkSurfaceProps* props) |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(SkSurfacePropsCopyOrDefault(props)) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |
| @@ -703,6 +708,7 @@ SkCanvas::SkCanvas(int width, int height, const SkSurfaceProps* props) |
| SkCanvas::SkCanvas(const SkIRect& bounds, InitFlags flags) |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(SkSurfaceProps::kLegacyFontHost_InitType) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |
| @@ -712,6 +718,7 @@ SkCanvas::SkCanvas(const SkIRect& bounds, InitFlags flags) |
| SkCanvas::SkCanvas(SkBaseDevice* device) |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(device->surfaceProps()) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |
| @@ -721,6 +728,7 @@ SkCanvas::SkCanvas(SkBaseDevice* device) |
| SkCanvas::SkCanvas(SkBaseDevice* device, InitFlags flags) |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(device->surfaceProps()) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |
| @@ -730,6 +738,7 @@ SkCanvas::SkCanvas(SkBaseDevice* device, InitFlags flags) |
| SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props) |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(props) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |
| @@ -740,6 +749,7 @@ SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props) |
| SkCanvas::SkCanvas(const SkBitmap& bitmap) |
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) |
| , fProps(SkSurfaceProps::kLegacyFontHost_InitType) |
| + , fConservativeRasterClip(false) |
| { |
| inc_canvas(); |