| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index 9d1462b33921c9306daef52d64b033e3f5b5cc22..7d71ffb13bdd573ea0b014e66975e4c81de9393b 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -38,9 +38,7 @@
|
| #include "GrRenderTarget.h"
|
| #endif
|
|
|
| -#ifndef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| #define SK_SUPPORT_SRC_BOUNDS_BLOAT_FOR_IMAGEFILTERS
|
| -#endif
|
|
|
| /*
|
| * Return true if the drawing this rect would hit every pixels in the canvas.
|
| @@ -412,7 +410,6 @@ static SkColorFilter* image_to_color_filter(const SkPaint& paint) {
|
| return SkColorFilter::CreateComposeFilter(imgCF, paintCF);
|
| }
|
|
|
| -#ifndef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| /**
|
| * There are many bounds in skia. A circle's bounds is just its center extended by its radius.
|
| * However, if we stroke a circle, then the "bounds" of that is larger, since it will now draw
|
| @@ -434,7 +431,6 @@ static const SkRect& apply_paint_to_bounds_sans_imagefilter(const SkPaint& paint
|
| return rawBounds;
|
| }
|
| }
|
| -#endif
|
|
|
| class AutoDrawLooper {
|
| public:
|
| @@ -478,13 +474,11 @@ public:
|
| SkPaint tmp;
|
| tmp.setImageFilter(fPaint->getImageFilter());
|
| tmp.setXfermode(fPaint->getXfermode());
|
| -#ifndef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| SkRect storage;
|
| if (rawBounds) {
|
| // Make rawBounds include all paint outsets except for those due to image filters.
|
| rawBounds = &apply_paint_to_bounds_sans_imagefilter(*fPaint, *rawBounds, &storage);
|
| }
|
| -#endif
|
| (void)canvas->internalSaveLayer(rawBounds, &tmp, SkCanvas::kARGB_ClipLayer_SaveFlag,
|
| SkCanvas::kFullLayer_SaveLayerStrategy);
|
| fTempLayerForImageFilter = true;
|
| @@ -2016,17 +2010,10 @@ void SkCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts[],
|
| } else {
|
| r.set(pts, SkToInt(count));
|
| }
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastStrokeBounds(r, &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint.computeFastStrokeBounds(r, &storage))) {
|
| return;
|
| }
|
| bounds = &r;
|
| -#endif
|
| }
|
|
|
| SkASSERT(pts != nullptr);
|
| @@ -2050,17 +2037,10 @@ void SkCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
|
| SkRect tmp(r);
|
| tmp.sort();
|
|
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastBounds(tmp, &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint.computeFastBounds(tmp, &storage))) {
|
| return;
|
| }
|
| bounds = &r;
|
| -#endif
|
| }
|
|
|
| LOOPER_BEGIN_CHECK_COMPLETE_OVERWRITE(paint, SkDrawFilter::kRect_Type, bounds, false)
|
| @@ -2077,17 +2057,10 @@ void SkCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) {
|
| SkRect storage;
|
| const SkRect* bounds = nullptr;
|
| if (paint.canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastBounds(oval, &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint.computeFastBounds(oval, &storage))) {
|
| return;
|
| }
|
| bounds = &oval;
|
| -#endif
|
| }
|
|
|
| LOOPER_BEGIN(paint, SkDrawFilter::kOval_Type, bounds)
|
| @@ -2104,17 +2077,10 @@ void SkCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
|
| SkRect storage;
|
| const SkRect* bounds = nullptr;
|
| if (paint.canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastBounds(rrect.getBounds(), &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint.computeFastBounds(rrect.getBounds(), &storage))) {
|
| return;
|
| }
|
| bounds = &rrect.getBounds();
|
| -#endif
|
| }
|
|
|
| if (rrect.isRect()) {
|
| @@ -2141,17 +2107,10 @@ void SkCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
|
| SkRect storage;
|
| const SkRect* bounds = nullptr;
|
| if (paint.canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastBounds(outer.getBounds(), &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint.computeFastBounds(outer.getBounds(), &storage))) {
|
| return;
|
| }
|
| bounds = &outer.getBounds();
|
| -#endif
|
| }
|
|
|
| LOOPER_BEGIN(paint, SkDrawFilter::kRRect_Type, bounds)
|
| @@ -2173,17 +2132,10 @@ void SkCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
|
| const SkRect* bounds = nullptr;
|
| if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
|
| const SkRect& pathBounds = path.getBounds();
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastBounds(pathBounds, &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint.computeFastBounds(pathBounds, &storage))) {
|
| return;
|
| }
|
| bounds = &pathBounds;
|
| -#endif
|
| }
|
|
|
| const SkRect& r = path.getBounds();
|
| @@ -2208,14 +2160,6 @@ void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const S
|
| SkRect bounds = SkRect::MakeXYWH(x, y,
|
| SkIntToScalar(image->width()), SkIntToScalar(image->height()));
|
| if (nullptr == paint || paint->canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - if (paint) {
|
| - paint->computeFastBounds(bounds, &bounds);
|
| - }
|
| - if (this->quickReject(bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| SkRect tmp = bounds;
|
| if (paint) {
|
| paint->computeFastBounds(tmp, &tmp);
|
| @@ -2223,7 +2167,6 @@ void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const S
|
| if (this->quickReject(tmp)) {
|
| return;
|
| }
|
| -#endif
|
| }
|
|
|
| SkLazyPaint lazy;
|
| @@ -2246,14 +2189,6 @@ void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk
|
| SkRect storage;
|
| const SkRect* bounds = &dst;
|
| if (nullptr == paint || paint->canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - if (paint) {
|
| - bounds = &paint->computeFastBounds(dst, &storage);
|
| - }
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| storage = dst;
|
| if (paint) {
|
| paint->computeFastBounds(dst, &storage);
|
| @@ -2261,7 +2196,6 @@ void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk
|
| if (this->quickReject(storage)) {
|
| return;
|
| }
|
| -#endif
|
| }
|
| SkLazyPaint lazy;
|
| if (nullptr == paint) {
|
| @@ -2298,18 +2232,11 @@ void SkCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, cons
|
| if (paint->canComputeFastBounds()) {
|
| bitmap.getBounds(&storage);
|
| matrix.mapRect(&storage);
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint->computeFastBounds(storage, &storage);
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| SkRect tmp = storage;
|
| if (this->quickReject(paint->computeFastBounds(tmp, &tmp))) {
|
| return;
|
| }
|
| bounds = &storage;
|
| -#endif
|
| }
|
|
|
| LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, bounds)
|
| @@ -2332,18 +2259,9 @@ void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
|
| SkRect storage;
|
| const SkRect* bounds = &dst;
|
| if (nullptr == paint || paint->canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - if (paint) {
|
| - bounds = &paint->computeFastBounds(dst, &storage);
|
| - }
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) : dst)) {
|
| return;
|
| }
|
| -#endif
|
| }
|
|
|
| SkLazyPaint lazy;
|
| @@ -2375,18 +2293,9 @@ void SkCanvas::onDrawImageNine(const SkImage* image, const SkIRect& center, cons
|
| SkRect storage;
|
| const SkRect* bounds = &dst;
|
| if (nullptr == paint || paint->canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - if (paint) {
|
| - bounds = &paint->computeFastBounds(dst, &storage);
|
| - }
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) : dst)) {
|
| return;
|
| }
|
| -#endif
|
| }
|
|
|
| SkLazyPaint lazy;
|
| @@ -2411,18 +2320,9 @@ void SkCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, c
|
| SkRect storage;
|
| const SkRect* bounds = &dst;
|
| if (nullptr == paint || paint->canComputeFastBounds()) {
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - if (paint) {
|
| - bounds = &paint->computeFastBounds(dst, &storage);
|
| - }
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) : dst)) {
|
| return;
|
| }
|
| -#endif
|
| }
|
|
|
| SkLazyPaint lazy;
|
| @@ -2595,19 +2495,11 @@ void SkCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
|
| const SkRect* bounds = nullptr;
|
| if (paint.canComputeFastBounds()) {
|
| storage = blob->bounds().makeOffset(x, y);
|
| -#ifdef SK_SAVE_LAYER_BOUNDS_ARE_FILTERED
|
| - bounds = &paint.computeFastBounds(storage, &storage);
|
| -
|
| - if (this->quickReject(*bounds)) {
|
| - return;
|
| - }
|
| -#else
|
| SkRect tmp;
|
| if (this->quickReject(paint.computeFastBounds(storage, &tmp))) {
|
| return;
|
| }
|
| bounds = &storage;
|
| -#endif
|
| }
|
|
|
| // We cannot filter in the looper as we normally do, because the paint is
|
|
|