| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index dcc7047dbcee58ecf56d9d914a09b109afa3baeb..6beb26e4cad9c42d70b99e44f7d62f867a15e222 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -4,6 +4,7 @@
|
| * Use of this source code is governed by a BSD-style license that can be
|
| * found in the LICENSE file.
|
| */
|
| +
|
|
|
| #include "SkCanvas.h"
|
| #include "SkCanvasPriv.h"
|
| @@ -66,19 +67,6 @@
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -static uint32_t filter_paint_flags(const SkSurfaceProps& props, uint32_t flags) {
|
| - const uint32_t propFlags = props.flags();
|
| - if (propFlags & SkSurfaceProps::kDisallowDither_Flag) {
|
| - flags &= ~SkPaint::kDither_Flag;
|
| - }
|
| - if (propFlags & SkSurfaceProps::kDisallowAntiAlias_Flag) {
|
| - flags &= ~SkPaint::kAntiAlias_Flag;
|
| - }
|
| - return flags;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| /* This is the record we keep for each SkBaseDevice that the user installs.
|
| The clip/matrix/proc are fields that reflect the top of the save/restore
|
| stack. Whenever the canvas changes, it marks a dirty flag, and then before
|
| @@ -262,12 +250,12 @@
|
|
|
| class AutoDrawLooper {
|
| public:
|
| - AutoDrawLooper(SkCanvas* canvas, const SkSurfaceProps& props, const SkPaint& paint,
|
| + AutoDrawLooper(SkCanvas* canvas, const SkPaint& paint,
|
| bool skipLayerForImageFilter = false,
|
| const SkRect* bounds = NULL) : fOrigPaint(paint) {
|
| fCanvas = canvas;
|
| fFilter = canvas->getDrawFilter();
|
| - fPaint = &fOrigPaint;
|
| + fPaint = NULL;
|
| fSaveCount = canvas->getSaveCount();
|
| fDoClearImageFilter = false;
|
| fDone = false;
|
| @@ -292,15 +280,6 @@
|
| // can we be marked as simple?
|
| fIsSimple = !fFilter && !fDoClearImageFilter;
|
| }
|
| -
|
| - uint32_t oldFlags = paint.getFlags();
|
| - fNewPaintFlags = filter_paint_flags(props, oldFlags);
|
| - if (fIsSimple && (fNewPaintFlags != oldFlags)) {
|
| - SkPaint* paint = fLazyPaint.set(fOrigPaint);
|
| - paint->setFlags(fNewPaintFlags);
|
| - fPaint = paint;
|
| - // if we're not simple, doNext() will take care of calling setFlags()
|
| - }
|
| }
|
|
|
| ~AutoDrawLooper() {
|
| @@ -320,6 +299,7 @@
|
| return false;
|
| } else if (fIsSimple) {
|
| fDone = true;
|
| + fPaint = &fOrigPaint;
|
| return !fPaint->nothingToDraw();
|
| } else {
|
| return this->doNext(drawType);
|
| @@ -333,7 +313,6 @@
|
| SkDrawFilter* fFilter;
|
| const SkPaint* fPaint;
|
| int fSaveCount;
|
| - uint32_t fNewPaintFlags;
|
| bool fDoClearImageFilter;
|
| bool fDone;
|
| bool fIsSimple;
|
| @@ -349,7 +328,6 @@
|
| SkASSERT(fLooperContext || fFilter || fDoClearImageFilter);
|
|
|
| SkPaint* paint = fLazyPaint.set(fOrigPaint);
|
| - paint->setFlags(fNewPaintFlags);
|
|
|
| if (fDoClearImageFilter) {
|
| paint->setImageFilter(NULL);
|
| @@ -384,27 +362,25 @@
|
| return true;
|
| }
|
|
|
| +#include "SkColorPriv.h"
|
| +
|
| ////////// macros to place around the internal draw calls //////////////////
|
|
|
| #define LOOPER_BEGIN_DRAWDEVICE(paint, type) \
|
| this->predrawNotify(); \
|
| - AutoDrawLooper looper(this, fProps, paint, true); \
|
| + AutoDrawLooper looper(this, paint, true); \
|
| while (looper.next(type)) { \
|
| SkDrawIter iter(this);
|
|
|
| #define LOOPER_BEGIN(paint, type, bounds) \
|
| this->predrawNotify(); \
|
| - AutoDrawLooper looper(this, fProps, paint, false, bounds); \
|
| + AutoDrawLooper looper(this, paint, false, bounds); \
|
| while (looper.next(type)) { \
|
| SkDrawIter iter(this);
|
|
|
| #define LOOPER_END }
|
|
|
| ////////////////////////////////////////////////////////////////////////////
|
| -
|
| -void SkCanvas::setupDevice(SkBaseDevice* device) {
|
| - device->setPixelGeometry(fProps.pixelGeometry());
|
| -}
|
|
|
| SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) {
|
| fConservativeRasterClip = SkToBool(flags & kConservativeRasterClip_InitFlag);
|
| @@ -417,6 +393,10 @@
|
| fCullCount = 0;
|
| fMetaData = NULL;
|
|
|
| + if (device && device->forceConservativeRasterClip()) {
|
| + fConservativeRasterClip = true;
|
| + }
|
| +
|
| fMCRec = (MCRec*)fMCStack.push_back();
|
| new (fMCRec) MCRec(fConservativeRasterClip);
|
|
|
| @@ -426,10 +406,6 @@
|
| fSurfaceBase = NULL;
|
|
|
| if (device) {
|
| - this->setupDevice(device);
|
| - if (device->forceConservativeRasterClip()) {
|
| - fConservativeRasterClip = true;
|
| - }
|
| device->onAttachToCanvas(this);
|
| fMCRec->fLayer->fDevice = SkRef(device);
|
| fMCRec->fRasterClip.setRect(SkIRect::MakeWH(device->width(), device->height()));
|
| @@ -439,7 +415,6 @@
|
|
|
| SkCanvas::SkCanvas()
|
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
|
| {
|
| inc_canvas();
|
|
|
| @@ -463,7 +438,6 @@
|
|
|
| SkCanvas::SkCanvas(int width, int height)
|
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
|
| {
|
| inc_canvas();
|
|
|
| @@ -472,16 +446,14 @@
|
|
|
| SkCanvas::SkCanvas(int width, int height, InitFlags flags)
|
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
|
| {
|
| inc_canvas();
|
|
|
| this->init(SkNEW_ARGS(SkNoPixelsBitmapDevice, (width, height)), flags)->unref();
|
| }
|
|
|
| -SkCanvas::SkCanvas(SkBaseDevice* device, const SkSurfaceProps* props, InitFlags flags)
|
| +SkCanvas::SkCanvas(SkBaseDevice* device, InitFlags flags)
|
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(SkSurfacePropsCopyOrDefault(props))
|
| {
|
| inc_canvas();
|
|
|
| @@ -490,31 +462,18 @@
|
|
|
| SkCanvas::SkCanvas(SkBaseDevice* device)
|
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
|
| {
|
| inc_canvas();
|
|
|
| this->init(device, kDefault_InitFlags);
|
| }
|
|
|
| -SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)
|
| +SkCanvas::SkCanvas(const SkBitmap& bitmap)
|
| : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(props)
|
| {
|
| inc_canvas();
|
| -
|
| - SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap)));
|
| - this->init(device, kDefault_InitFlags);
|
| -}
|
| -
|
| -SkCanvas::SkCanvas(const SkBitmap& bitmap)
|
| - : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
|
| - , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
|
| -{
|
| - inc_canvas();
|
| -
|
| - SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap)));
|
| - this->init(device, kDefault_InitFlags);
|
| +
|
| + this->init(SkNEW_ARGS(SkBitmapDevice, (bitmap)), kDefault_InitFlags)->unref();
|
| }
|
|
|
| SkCanvas::~SkCanvas() {
|
| @@ -605,7 +564,6 @@
|
|
|
| SkRefCnt_SafeAssign(rec->fLayer->fDevice, device);
|
| rootDevice = device;
|
| - this->setupDevice(device);
|
|
|
| fDeviceCMDirty = true;
|
|
|
| @@ -941,7 +899,6 @@
|
| SkDebugf("Unable to create device for layer.");
|
| return count;
|
| }
|
| - this->setupDevice(device);
|
|
|
| device->setOrigin(ir.fLeft, ir.fTop);
|
| DeviceCM* layer = SkNEW_ARGS(DeviceCM,
|
| @@ -1037,16 +994,13 @@
|
| return fSaveLayerCount > 0;
|
| }
|
|
|
| -SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* props) {
|
| - if (NULL == props) {
|
| - props = &fProps;
|
| - }
|
| - return this->onNewSurface(info, *props);
|
| -}
|
| -
|
| -SkSurface* SkCanvas::onNewSurface(const SkImageInfo& info, const SkSurfaceProps& props) {
|
| +SkSurface* SkCanvas::newSurface(const SkImageInfo& info) {
|
| + return this->onNewSurface(info);
|
| +}
|
| +
|
| +SkSurface* SkCanvas::onNewSurface(const SkImageInfo& info) {
|
| SkBaseDevice* dev = this->getDevice();
|
| - return dev ? dev->newSurface(info, props) : NULL;
|
| + return dev ? dev->newSurface(info) : NULL;
|
| }
|
|
|
| SkImageInfo SkCanvas::imageInfo() const {
|
|
|