SkImageFilter.cpp revision b295fb6ff3222453912dfcb7a1ea5184d40014b5
1bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org/* 2bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org * Copyright 2012 The Android Open Source Project 3bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org * 4bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 5bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org * found in the LICENSE file. 6bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org */ 7bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 8bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org#include "SkImageFilter.h" 99f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org 109f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org#include "SkBitmap.h" 119f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org#include "SkFlattenableBuffers.h" 12bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org#include "SkRect.h" 13d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#if SK_SUPPORT_GPU 14d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#include "GrContext.h" 15d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#include "GrTexture.h" 16d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#include "SkImageFilterUtils.h" 17d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#endif 18bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 19bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.orgSK_DEFINE_INST_COUNT(SkImageFilter) 20bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 21b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.orgSkImageFilter::SkImageFilter(int inputCount, SkImageFilter** inputs, const CropRect* cropRect) 22194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org : fInputCount(inputCount), 23194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org fInputs(new SkImageFilter*[inputCount]), 24b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#ifdef SK_CROP_RECT_IS_INT 25194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { 26b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#else 27b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org fCropRect(cropRect ? *cropRect : CropRect(SkRect(), 0x0)) { 28b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#endif 298d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org for (int i = 0; i < inputCount; ++i) { 309f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org fInputs[i] = inputs[i]; 319f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org SkSafeRef(fInputs[i]); 329f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } 339f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org} 349f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org 35b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.orgSkImageFilter::SkImageFilter(SkImageFilter* input, const CropRect* cropRect) 36194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org : fInputCount(1), 37194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org fInputs(new SkImageFilter*[1]), 38b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#ifdef SK_CROP_RECT_IS_INT 39194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { 40b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#else 41b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org fCropRect(cropRect ? *cropRect : CropRect(SkRect(), 0x0)) { 42b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#endif 43c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org fInputs[0] = input; 44c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org SkSafeRef(fInputs[0]); 45c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org} 46c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org 47b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.orgSkImageFilter::SkImageFilter(SkImageFilter* input1, SkImageFilter* input2, const CropRect* cropRect) 48194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org : fInputCount(2), fInputs(new SkImageFilter*[2]), 49b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#ifdef SK_CROP_RECT_IS_INT 50b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org fCropRect(cropRect ? *cropRect : SkIRect::MakeLargest()) { 51b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#else 52b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org fCropRect(cropRect ? *cropRect : CropRect(SkRect(), 0x0)) { 53b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#endif 54c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org fInputs[0] = input1; 55c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org fInputs[1] = input2; 56c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org SkSafeRef(fInputs[0]); 57c2e8cef4792b478547973d312b26fff4aab7c729senorblanco@chromium.org SkSafeRef(fInputs[1]); 589f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org} 599f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org 609f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.orgSkImageFilter::~SkImageFilter() { 618d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org for (int i = 0; i < fInputCount; i++) { 629f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org SkSafeUnref(fInputs[i]); 639f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } 649f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org delete[] fInputs; 659f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org} 669f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org 67fc84359aa920567e72742877a1249f52d076ad35skia.committer@gmail.comSkImageFilter::SkImageFilter(SkFlattenableReadBuffer& buffer) 688d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org : fInputCount(buffer.readInt()), fInputs(new SkImageFilter*[fInputCount]) { 698d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org for (int i = 0; i < fInputCount; i++) { 709f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org if (buffer.readBool()) { 719f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org fInputs[i] = static_cast<SkImageFilter*>(buffer.readFlattenable()); 729f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } else { 739f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org fInputs[i] = NULL; 749f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } 759f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } 76b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#ifdef SK_CROP_RECT_IS_INT 77194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org buffer.readIRect(&fCropRect); 78b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#else 79b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org buffer.readRect(&fCropRect.fRect); 80b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org fCropRect.fFlags = buffer.readUInt(); 81b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#endif 829f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org} 839f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org 849f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.orgvoid SkImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { 858d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org buffer.writeInt(fInputCount); 868d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org for (int i = 0; i < fInputCount; i++) { 879f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org SkImageFilter* input = getInput(i); 889f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org buffer.writeBool(input != NULL); 899f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org if (input != NULL) { 909f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org buffer.writeFlattenable(input); 919f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } 929f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org } 93b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#ifdef SK_CROP_RECT_IS_INT 94194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org buffer.writeIRect(fCropRect); 95b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#else 96b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org buffer.writeRect(fCropRect.fRect); 97b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org buffer.writeUInt(fCropRect.fFlags); 98b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#endif 999f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org} 1009f25de79009ce721aa13abe71c38179d5a6710e2senorblanco@chromium.org 101bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.orgbool SkImageFilter::filterImage(Proxy* proxy, const SkBitmap& src, 102bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org const SkMatrix& ctm, 103bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkBitmap* result, SkIPoint* loc) { 104bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkASSERT(result); 105bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkASSERT(loc); 106bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org /* 107bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org * Give the proxy first shot at the filter. If it returns false, ask 108bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org * the filter to do it. 109bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org */ 110bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org return (proxy && proxy->filterImage(this, src, ctm, result, loc)) || 111bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org this->onFilterImage(proxy, src, ctm, result, loc); 112bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 113bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 114bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.orgbool SkImageFilter::filterBounds(const SkIRect& src, const SkMatrix& ctm, 115bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkIRect* dst) { 116bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkASSERT(&src); 117bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkASSERT(dst); 118bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org return this->onFilterBounds(src, ctm, dst); 119bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 120bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 121bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.orgbool SkImageFilter::onFilterImage(Proxy*, const SkBitmap&, const SkMatrix&, 122bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkBitmap*, SkIPoint*) { 123bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org return false; 124bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 125bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 126bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.orgbool SkImageFilter::canFilterImageGPU() const { 127fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org return this->asNewEffect(NULL, NULL, SkMatrix::I()); 128bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 129bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 1301aa54bf6696afc7d06fc8ecc63dad2840a4d6179commit-bot@chromium.orgbool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm, 1311aa54bf6696afc7d06fc8ecc63dad2840a4d6179commit-bot@chromium.org SkBitmap* result, SkIPoint* offset) { 132d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#if SK_SUPPORT_GPU 133d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org SkBitmap input; 134d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org SkASSERT(fInputCount == 1); 1351aa54bf6696afc7d06fc8ecc63dad2840a4d6179commit-bot@chromium.org if (!SkImageFilterUtils::GetInputResultGPU(this->getInput(0), proxy, src, ctm, &input, offset)) { 136d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org return false; 137d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org } 138b8d00db075b5ea09e353508a26ef5ced50722a6ccommit-bot@chromium.org GrTexture* srcTexture = input.getTexture(); 1394e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org SkIRect bounds; 1404e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org src.getBounds(&bounds); 141fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org if (!this->applyCropRect(&bounds, ctm)) { 1424e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org return false; 1434e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org } 1444e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org SkRect srcRect = SkRect::Make(bounds); 1454e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org SkRect dstRect = SkRect::MakeWH(srcRect.width(), srcRect.height()); 146d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrContext* context = srcTexture->getContext(); 147d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org 148d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrTextureDesc desc; 149d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org desc.fFlags = kRenderTarget_GrTextureFlagBit, 1504e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org desc.fWidth = bounds.width(); 1514e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org desc.fHeight = bounds.height(); 152d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org desc.fConfig = kRGBA_8888_GrPixelConfig; 153d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org 154d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrAutoScratchTexture dst(context, desc); 155d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrContext::AutoMatrix am; 156d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org am.setIdentity(context); 157d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrContext::AutoRenderTarget art(context, dst.texture()->asRenderTarget()); 1584e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org GrContext::AutoClip acs(context, dstRect); 159d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrEffectRef* effect; 160fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org SkMatrix matrix(ctm); 161fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.top())); 162fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org this->asNewEffect(&effect, srcTexture, matrix); 163d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org SkASSERT(effect); 164d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org SkAutoUnref effectRef(effect); 165d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org GrPaint paint; 16642dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org paint.addColorEffect(effect); 1674e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org context->drawRectToRect(paint, dstRect, srcRect); 1684e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org 169d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org SkAutoTUnref<GrTexture> resultTex(dst.detach()); 1704e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org SkImageFilterUtils::WrapTexture(resultTex, bounds.width(), bounds.height(), result); 1714e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org offset->fX += bounds.left(); 1724e16bb2a322f2bd16cb1afd2f78c27e420a4b9dbsenorblanco@chromium.org offset->fY += bounds.top(); 173d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org return true; 174d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#else 175c2594f41066102d7a8a73effd3c574142a018b9asenorblanco@chromium.org return false; 176d043ccee3788ea4192806bd8c94484ed003fa828senorblanco@chromium.org#endif 177bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 178bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 179fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.orgbool SkImageFilter::applyCropRect(SkIRect* rect, const SkMatrix& matrix) const { 180fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org SkRect cropRect; 181b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#ifdef SK_CROP_RECT_IS_INT 182fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org matrix.mapRect(&cropRect, SkRect::Make(fCropRect)); 183fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org SkIRect cropRectI; 184fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org cropRect.roundOut(&cropRectI); 185fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org // If the original crop rect edges were unset, max out the new crop edges 186fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org if (fCropRect.fLeft == SK_MinS32) cropRectI.fLeft = SK_MinS32; 187fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org if (fCropRect.fTop == SK_MinS32) cropRectI.fTop = SK_MinS32; 188fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org if (fCropRect.fRight == SK_MaxS32) cropRectI.fRight = SK_MaxS32; 189fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org if (fCropRect.fBottom == SK_MaxS32) cropRectI.fBottom = SK_MaxS32; 190b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#else 191b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org matrix.mapRect(&cropRect, fCropRect.fRect); 192b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org SkIRect cropRectI; 193b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org cropRect.roundOut(&cropRectI); 194b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org // If the original crop rect edges were unset, max out the new crop edges 195b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org if (!(fCropRect.fFlags & CropRect::kHasLeft_CropEdge)) cropRectI.fLeft = SK_MinS32; 196b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org if (!(fCropRect.fFlags & CropRect::kHasTop_CropEdge)) cropRectI.fTop = SK_MinS32; 197b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org if (!(fCropRect.fFlags & CropRect::kHasRight_CropEdge)) cropRectI.fRight = SK_MaxS32; 198b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org if (!(fCropRect.fFlags & CropRect::kHasBottom_CropEdge)) cropRectI.fBottom = SK_MaxS32; 199b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org#endif 200fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.org return rect->intersect(cropRectI); 201194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org} 202194d775edcf5fa6e82098a97ad53018d70db1155senorblanco@chromium.org 203bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.orgbool SkImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, 204bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org SkIRect* dst) { 205bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org *dst = src; 206bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org return true; 207bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 208bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org 209fbaea5336690ffc4fd9ee695608e9457da10eeabsenorblanco@chromium.orgbool SkImageFilter::asNewEffect(GrEffectRef**, GrTexture*, const SkMatrix&) const { 210bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org return false; 211bf2768bab9f3b21c03a8f9a75dc891231d5857ccsenorblanco@chromium.org} 2128d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org 213a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.combool SkImageFilter::asColorFilter(SkColorFilter**) const { 214a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com return false; 2158d21f6c7a9d0cf4f87d77c235c6da7203620c7e5senorblanco@chromium.org} 216