Home | History | Annotate | Download | only in effects
      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