| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 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 "SkImageSource.h" | 8 #include "SkImageSource.h" |
| 9 | 9 |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 return SkImageSource::Create(image, src, dst, filterQuality); | 58 return SkImageSource::Create(image, src, dst, filterQuality); |
| 59 } | 59 } |
| 60 | 60 |
| 61 void SkImageSource::flatten(SkWriteBuffer& buffer) const { | 61 void SkImageSource::flatten(SkWriteBuffer& buffer) const { |
| 62 buffer.writeInt(fFilterQuality); | 62 buffer.writeInt(fFilterQuality); |
| 63 buffer.writeRect(fSrcRect); | 63 buffer.writeRect(fSrcRect); |
| 64 buffer.writeRect(fDstRect); | 64 buffer.writeRect(fDstRect); |
| 65 buffer.writeImage(fImage.get()); | 65 buffer.writeImage(fImage.get()); |
| 66 } | 66 } |
| 67 | 67 |
| 68 SkSpecialImage* SkImageSource::onFilterImage(SkSpecialImage* source, const Conte
xt& ctx, | 68 sk_sp<SkSpecialImage> SkImageSource::onFilterImage(SkSpecialImage* source, const
Context& ctx, |
| 69 SkIPoint* offset) const { | 69 SkIPoint* offset) const { |
| 70 SkRect dstRect; | 70 SkRect dstRect; |
| 71 ctx.ctm().mapRect(&dstRect, fDstRect); | 71 ctx.ctm().mapRect(&dstRect, fDstRect); |
| 72 | 72 |
| 73 SkRect bounds = SkRect::MakeIWH(fImage->width(), fImage->height()); | 73 SkRect bounds = SkRect::MakeIWH(fImage->width(), fImage->height()); |
| 74 if (fSrcRect == bounds && dstRect == bounds) { | 74 if (fSrcRect == bounds && dstRect == bounds) { |
| 75 // No regions cropped out or resized; return entire image. | 75 // No regions cropped out or resized; return entire image. |
| 76 offset->fX = offset->fY = 0; | 76 offset->fX = offset->fY = 0; |
| 77 return SkSpecialImage::MakeFromImage(source->internal_getProxy(), | 77 return SkSpecialImage::MakeFromImage(source->internal_getProxy(), |
| 78 SkIRect::MakeWH(fImage->width(), fI
mage->height()), | 78 SkIRect::MakeWH(fImage->width(), fI
mage->height()), |
| 79 fImage).release(); | 79 fImage); |
| 80 } | 80 } |
| 81 | 81 |
| 82 const SkIRect dstIRect = dstRect.roundOut(); | 82 const SkIRect dstIRect = dstRect.roundOut(); |
| 83 | 83 |
| 84 const SkImageInfo info = SkImageInfo::MakeN32(dstIRect.width(), dstIRect.hei
ght(), | 84 const SkImageInfo info = SkImageInfo::MakeN32(dstIRect.width(), dstIRect.hei
ght(), |
| 85 kPremul_SkAlphaType); | 85 kPremul_SkAlphaType); |
| 86 | 86 |
| 87 sk_sp<SkSpecialSurface> surf(source->makeSurface(info)); | 87 sk_sp<SkSpecialSurface> surf(source->makeSurface(info)); |
| 88 if (!surf) { | 88 if (!surf) { |
| 89 return nullptr; | 89 return nullptr; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 103 // FIXME: this probably shouldn't be necessary, but drawImageRect asserts | 103 // FIXME: this probably shouldn't be necessary, but drawImageRect asserts |
| 104 // None filtering when it's translate-only | 104 // None filtering when it's translate-only |
| 105 paint.setFilterQuality( | 105 paint.setFilterQuality( |
| 106 fSrcRect.width() == dstRect.width() && fSrcRect.height() == dstRect.heig
ht() ? | 106 fSrcRect.width() == dstRect.width() && fSrcRect.height() == dstRect.heig
ht() ? |
| 107 kNone_SkFilterQuality : fFilterQuality); | 107 kNone_SkFilterQuality : fFilterQuality); |
| 108 canvas->drawImageRect(fImage.get(), fSrcRect, dstRect, &paint, | 108 canvas->drawImageRect(fImage.get(), fSrcRect, dstRect, &paint, |
| 109 SkCanvas::kStrict_SrcRectConstraint); | 109 SkCanvas::kStrict_SrcRectConstraint); |
| 110 | 110 |
| 111 offset->fX = dstIRect.fLeft; | 111 offset->fX = dstIRect.fLeft; |
| 112 offset->fY = dstIRect.fTop; | 112 offset->fY = dstIRect.fTop; |
| 113 return surf->makeImageSnapshot().release(); | 113 return surf->makeImageSnapshot(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 SkRect SkImageSource::computeFastBounds(const SkRect& src) const { | 116 SkRect SkImageSource::computeFastBounds(const SkRect& src) const { |
| 117 return fDstRect; | 117 return fDstRect; |
| 118 } | 118 } |
| 119 | 119 |
| 120 #ifndef SK_IGNORE_TO_STRING | 120 #ifndef SK_IGNORE_TO_STRING |
| 121 void SkImageSource::toString(SkString* str) const { | 121 void SkImageSource::toString(SkString* str) const { |
| 122 str->appendf("SkImageSource: ("); | 122 str->appendf("SkImageSource: ("); |
| 123 str->appendf("src: (%f,%f,%f,%f) dst: (%f,%f,%f,%f) ", | 123 str->appendf("src: (%f,%f,%f,%f) dst: (%f,%f,%f,%f) ", |
| 124 fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBotto
m, | 124 fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBotto
m, |
| 125 fDstRect.fLeft, fDstRect.fTop, fDstRect.fRight, fDstRect.fBotto
m); | 125 fDstRect.fLeft, fDstRect.fTop, fDstRect.fRight, fDstRect.fBotto
m); |
| 126 str->appendf("image: (%d,%d)", | 126 str->appendf("image: (%d,%d)", |
| 127 fImage->width(), fImage->height()); | 127 fImage->width(), fImage->height()); |
| 128 str->append(")"); | 128 str->append(")"); |
| 129 } | 129 } |
| 130 #endif | 130 #endif |
| OLD | NEW |