Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Side by Side Diff: src/core/SkCanvas.cpp

Issue 355193006: stop calling SkCanvas::getDevice (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 8
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkBitmapDevice.h" 10 #include "SkBitmapDevice.h"
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa yer_SaveFlag); 868 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLa yer_SaveFlag);
869 return this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, fals e, strategy); 869 return this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, fals e, strategy);
870 } 870 }
871 871
872 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, 872 int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
873 SaveFlags flags) { 873 SaveFlags flags) {
874 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags); 874 SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags);
875 return this->internalSaveLayer(bounds, paint, flags, false, strategy); 875 return this->internalSaveLayer(bounds, paint, flags, false, strategy);
876 } 876 }
877 877
878 static SkBaseDevice* create_compatible_device(SkCanvas* canvas,
879 const SkImageInfo& info) {
880 SkBaseDevice* device = canvas->getDevice();
881 return device ? device->createCompatibleDevice(info) : NULL;
882 }
883
884 int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Save Flags flags, 878 int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Save Flags flags,
885 bool justForImageFilter, SaveLayerStrategy strat egy) { 879 bool justForImageFilter, SaveLayerStrategy strat egy) {
886 #ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG 880 #ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
887 flags |= kClipToLayer_SaveFlag; 881 flags |= kClipToLayer_SaveFlag;
888 #endif 882 #endif
889 883
890 // do this before we create the layer. We don't call the public save() since 884 // do this before we create the layer. We don't call the public save() since
891 // that would invoke a possibly overridden virtual 885 // that would invoke a possibly overridden virtual
892 int count = this->internalSave(flags); 886 int count = this->internalSave(flags);
893 887
(...skipping 23 matching lines...) Expand all
917 paint = p; 911 paint = p;
918 } 912 }
919 } 913 }
920 914
921 bool isOpaque = !SkToBool(flags & kHasAlphaLayer_SaveFlag); 915 bool isOpaque = !SkToBool(flags & kHasAlphaLayer_SaveFlag);
922 SkImageInfo info = SkImageInfo::MakeN32(ir.width(), ir.height(), 916 SkImageInfo info = SkImageInfo::MakeN32(ir.width(), ir.height(),
923 isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); 917 isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
924 918
925 SkBaseDevice* device; 919 SkBaseDevice* device;
926 if (paint && paint->getImageFilter()) { 920 if (paint && paint->getImageFilter()) {
927 device = create_compatible_device(this, info); 921 device = this->getDevice();
922 if (device) {
923 device = device->createCompatibleDevice(info);
924 }
928 } else { 925 } else {
929 device = this->createLayerDevice(info); 926 device = this->createLayerDevice(info);
930 } 927 }
931 if (NULL == device) { 928 if (NULL == device) {
932 SkDebugf("Unable to create device for layer."); 929 SkDebugf("Unable to create device for layer.");
933 return count; 930 return count;
934 } 931 }
935 932
936 device->setOrigin(ir.fLeft, ir.fTop); 933 device->setOrigin(ir.fLeft, ir.fTop);
937 DeviceCM* layer = SkNEW_ARGS(DeviceCM, (device, ir.fLeft, ir.fTop, paint, th is)); 934 DeviceCM* layer = SkNEW_ARGS(DeviceCM, (device, ir.fLeft, ir.fTop, paint, th is));
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 // but relaxing the test above triggers GM asserts in 1392 // but relaxing the test above triggers GM asserts in
1396 // SkRgnBuilder::blitH(). We need to investigate what's going on. 1393 // SkRgnBuilder::blitH(). We need to investigate what's going on.
1397 currClip->setPath(devPath, currClip->bwRgn(), doAA); 1394 currClip->setPath(devPath, currClip->bwRgn(), doAA);
1398 } else { 1395 } else {
1399 base.setRect(currClip->getBounds()); 1396 base.setRect(currClip->getBounds());
1400 SkRasterClip clip; 1397 SkRasterClip clip;
1401 clip.setPath(devPath, base, doAA); 1398 clip.setPath(devPath, base, doAA);
1402 currClip->op(clip, op); 1399 currClip->op(clip, op);
1403 } 1400 }
1404 } else { 1401 } else {
1405 const SkBaseDevice* device = canvas->getDevice(); 1402 const SkISize size = canvas->getBaseLayerSize();
1406 if (!device) { 1403 base.setRect(0, 0, size.width(), size.height());
1407 currClip->setEmpty();
1408 return;
1409 }
1410
1411 base.setRect(0, 0, device->width(), device->height());
1412 1404
1413 if (SkRegion::kReplace_Op == op) { 1405 if (SkRegion::kReplace_Op == op) {
1414 currClip->setPath(devPath, base, doAA); 1406 currClip->setPath(devPath, base, doAA);
1415 } else { 1407 } else {
1416 SkRasterClip clip; 1408 SkRasterClip clip;
1417 clip.setPath(devPath, base, doAA); 1409 clip.setPath(devPath, base, doAA);
1418 currClip->op(clip, op); 1410 currClip->op(clip, op);
1419 } 1411 }
1420 } 1412 }
1421 } 1413 }
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2585 if (!supported_for_raster_canvas(info)) { 2577 if (!supported_for_raster_canvas(info)) {
2586 return NULL; 2578 return NULL;
2587 } 2579 }
2588 2580
2589 SkBitmap bitmap; 2581 SkBitmap bitmap;
2590 if (!bitmap.installPixels(info, pixels, rowBytes)) { 2582 if (!bitmap.installPixels(info, pixels, rowBytes)) {
2591 return NULL; 2583 return NULL;
2592 } 2584 }
2593 return SkNEW_ARGS(SkCanvas, (bitmap)); 2585 return SkNEW_ARGS(SkCanvas, (bitmap));
2594 } 2586 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698