1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkBitmap.h" 9 #include "SkComposeImageFilter.h" 10 #include "SkReadBuffer.h" 11 #include "SkWriteBuffer.h" 12 13 SkComposeImageFilter::~SkComposeImageFilter() { 14 } 15 16 bool SkComposeImageFilter::onFilterImage(Proxy* proxy, 17 const SkBitmap& src, 18 const Context& ctx, 19 SkBitmap* result, 20 SkIPoint* offset) const { 21 SkImageFilter* outer = getInput(0); 22 SkImageFilter* inner = getInput(1); 23 24 if (!outer && !inner) { 25 return false; 26 } 27 28 if (!outer || !inner) { 29 return (outer ? outer : inner)->filterImage(proxy, src, ctx, result, offset); 30 } 31 32 SkBitmap tmp; 33 return inner->filterImage(proxy, src, ctx, &tmp, offset) && 34 outer->filterImage(proxy, tmp, ctx, result, offset); 35 } 36 37 bool SkComposeImageFilter::onFilterBounds(const SkIRect& src, 38 const SkMatrix& ctm, 39 SkIRect* dst) const { 40 SkImageFilter* outer = getInput(0); 41 SkImageFilter* inner = getInput(1); 42 43 if (!outer && !inner) { 44 return false; 45 } 46 47 if (!outer || !inner) { 48 return (outer ? outer : inner)->filterBounds(src, ctm, dst); 49 } 50 51 SkIRect tmp; 52 return inner->filterBounds(src, ctm, &tmp) && 53 outer->filterBounds(tmp, ctm, dst); 54 } 55 56 SkComposeImageFilter::SkComposeImageFilter(SkReadBuffer& buffer) 57 : INHERITED(2, buffer) { 58 } 59