| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2008 The Android Open Source Project | 2  * Copyright 2008 The Android Open Source Project | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" | 
| 9 #include "SkCanvasDrawable.h" | 9 #include "SkCanvasDrawable.h" | 
| 10 #include "SkCanvasPriv.h" | 10 #include "SkCanvasPriv.h" | 
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 409 //////////////////////////////////////////////////////////////////////////// | 409 //////////////////////////////////////////////////////////////////////////// | 
| 410 | 410 | 
| 411 SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) { | 411 SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) { | 
| 412     fConservativeRasterClip = SkToBool(flags & kConservativeRasterClip_InitFlag)
      ; | 412     fConservativeRasterClip = SkToBool(flags & kConservativeRasterClip_InitFlag)
      ; | 
| 413     fCachedLocalClipBounds.setEmpty(); | 413     fCachedLocalClipBounds.setEmpty(); | 
| 414     fCachedLocalClipBoundsDirty = true; | 414     fCachedLocalClipBoundsDirty = true; | 
| 415     fAllowSoftClip = true; | 415     fAllowSoftClip = true; | 
| 416     fAllowSimplifyClip = false; | 416     fAllowSimplifyClip = false; | 
| 417     fDeviceCMDirty = true; | 417     fDeviceCMDirty = true; | 
| 418     fSaveCount = 1; | 418     fSaveCount = 1; | 
| 419     fSaveLayerCount = 0; |  | 
| 420     fMetaData = NULL; | 419     fMetaData = NULL; | 
| 421 | 420 | 
| 422     fMCRec = (MCRec*)fMCStack.push_back(); | 421     fMCRec = (MCRec*)fMCStack.push_back(); | 
| 423     new (fMCRec) MCRec(fConservativeRasterClip); | 422     new (fMCRec) MCRec(fConservativeRasterClip); | 
| 424 | 423 | 
| 425     fMCRec->fLayer = SkNEW_ARGS(DeviceCM, (NULL, 0, 0, NULL, NULL, fConservative
      RasterClip)); | 424     fMCRec->fLayer = SkNEW_ARGS(DeviceCM, (NULL, 0, 0, NULL, NULL, fConservative
      RasterClip)); | 
| 426     fMCRec->fTopLayer = fMCRec->fLayer; | 425     fMCRec->fTopLayer = fMCRec->fLayer; | 
| 427 | 426 | 
| 428     fSurfaceBase = NULL; | 427     fSurfaceBase = NULL; | 
| 429 | 428 | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 520 { | 519 { | 
| 521     inc_canvas(); | 520     inc_canvas(); | 
| 522 | 521 | 
| 523     SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap))); | 522     SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap))); | 
| 524     this->init(device, kDefault_InitFlags); | 523     this->init(device, kDefault_InitFlags); | 
| 525 } | 524 } | 
| 526 | 525 | 
| 527 SkCanvas::~SkCanvas() { | 526 SkCanvas::~SkCanvas() { | 
| 528     // free up the contents of our deque | 527     // free up the contents of our deque | 
| 529     this->restoreToCount(1);    // restore everything but the last | 528     this->restoreToCount(1);    // restore everything but the last | 
| 530     SkASSERT(0 == fSaveLayerCount); |  | 
| 531 | 529 | 
| 532     this->internalRestore();    // restore the last, since we're going away | 530     this->internalRestore();    // restore the last, since we're going away | 
| 533 | 531 | 
| 534     SkDELETE(fMetaData); | 532     SkDELETE(fMetaData); | 
| 535 | 533 | 
| 536     dec_canvas(); | 534     dec_canvas(); | 
| 537 } | 535 } | 
| 538 | 536 | 
| 539 SkDrawFilter* SkCanvas::getDrawFilter() const { | 537 SkDrawFilter* SkCanvas::getDrawFilter() const { | 
| 540     return fMCRec->fFilter; | 538     return fMCRec->fFilter; | 
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 983     } | 981     } | 
| 984 | 982 | 
| 985     device->setOrigin(ir.fLeft, ir.fTop); | 983     device->setOrigin(ir.fLeft, ir.fTop); | 
| 986     DeviceCM* layer = SkNEW_ARGS(DeviceCM, | 984     DeviceCM* layer = SkNEW_ARGS(DeviceCM, | 
| 987                                  (device, ir.fLeft, ir.fTop, paint, this, fConse
      rvativeRasterClip)); | 985                                  (device, ir.fLeft, ir.fTop, paint, this, fConse
      rvativeRasterClip)); | 
| 988     device->unref(); | 986     device->unref(); | 
| 989 | 987 | 
| 990     layer->fNext = fMCRec->fTopLayer; | 988     layer->fNext = fMCRec->fTopLayer; | 
| 991     fMCRec->fLayer = layer; | 989     fMCRec->fLayer = layer; | 
| 992     fMCRec->fTopLayer = layer;    // this field is NOT an owner of layer | 990     fMCRec->fTopLayer = layer;    // this field is NOT an owner of layer | 
| 993 |  | 
| 994     fSaveLayerCount += 1; |  | 
| 995 } | 991 } | 
| 996 | 992 | 
| 997 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha) { | 993 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha) { | 
| 998     return this->saveLayerAlpha(bounds, alpha, kARGB_ClipLayer_SaveFlag); | 994     return this->saveLayerAlpha(bounds, alpha, kARGB_ClipLayer_SaveFlag); | 
| 999 } | 995 } | 
| 1000 | 996 | 
| 1001 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha, | 997 int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha, | 
| 1002                              SaveFlags flags) { | 998                              SaveFlags flags) { | 
| 1003     if (0xFF == alpha) { | 999     if (0xFF == alpha) { | 
| 1004         return this->saveLayer(bounds, NULL, flags); | 1000         return this->saveLayer(bounds, NULL, flags); | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 1031         since if we're being recorded, we don't want to record this (the | 1027         since if we're being recorded, we don't want to record this (the | 
| 1032         recorder will have already recorded the restore). | 1028         recorder will have already recorded the restore). | 
| 1033     */ | 1029     */ | 
| 1034     if (layer) { | 1030     if (layer) { | 
| 1035         if (layer->fNext) { | 1031         if (layer->fNext) { | 
| 1036             const SkIPoint& origin = layer->fDevice->getOrigin(); | 1032             const SkIPoint& origin = layer->fDevice->getOrigin(); | 
| 1037             this->internalDrawDevice(layer->fDevice, origin.x(), origin.y(), | 1033             this->internalDrawDevice(layer->fDevice, origin.x(), origin.y(), | 
| 1038                                      layer->fPaint); | 1034                                      layer->fPaint); | 
| 1039             // reset this, since internalDrawDevice will have set it to true | 1035             // reset this, since internalDrawDevice will have set it to true | 
| 1040             fDeviceCMDirty = true; | 1036             fDeviceCMDirty = true; | 
| 1041 |  | 
| 1042             SkASSERT(fSaveLayerCount > 0); |  | 
| 1043             fSaveLayerCount -= 1; |  | 
| 1044         } | 1037         } | 
| 1045         SkDELETE(layer); | 1038         SkDELETE(layer); | 
| 1046     } | 1039     } | 
| 1047 } | 1040 } | 
| 1048 | 1041 | 
| 1049 bool SkCanvas::isDrawingToLayer() const { |  | 
| 1050     return fSaveLayerCount > 0; |  | 
| 1051 } |  | 
| 1052 |  | 
| 1053 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
      rops) { | 1042 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
      rops) { | 
| 1054     if (NULL == props) { | 1043     if (NULL == props) { | 
| 1055         props = &fProps; | 1044         props = &fProps; | 
| 1056     } | 1045     } | 
| 1057     return this->onNewSurface(info, *props); | 1046     return this->onNewSurface(info, *props); | 
| 1058 } | 1047 } | 
| 1059 | 1048 | 
| 1060 SkSurface* SkCanvas::onNewSurface(const SkImageInfo& info, const SkSurfaceProps&
       props) { | 1049 SkSurface* SkCanvas::onNewSurface(const SkImageInfo& info, const SkSurfaceProps&
       props) { | 
| 1061     SkBaseDevice* dev = this->getDevice(); | 1050     SkBaseDevice* dev = this->getDevice(); | 
| 1062     return dev ? dev->newSurface(info, props) : NULL; | 1051     return dev ? dev->newSurface(info, props) : NULL; | 
| (...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2502     } | 2491     } | 
| 2503 | 2492 | 
| 2504     if (matrix) { | 2493     if (matrix) { | 
| 2505         canvas->concat(*matrix); | 2494         canvas->concat(*matrix); | 
| 2506     } | 2495     } | 
| 2507 } | 2496 } | 
| 2508 | 2497 | 
| 2509 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 2498 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 
| 2510     fCanvas->restoreToCount(fSaveCount); | 2499     fCanvas->restoreToCount(fSaveCount); | 
| 2511 } | 2500 } | 
| OLD | NEW | 
|---|