11c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org/*
21c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org * Copyright 2013 Google Inc.
31c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org *
41c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
51c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org * found in the LICENSE file.
61c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org */
71c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
81c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org#include "SkBitmap.h"
91c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org#include "SkComposeImageFilter.h"
108b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h"
118b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h"
121c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
131c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.orgSkComposeImageFilter::~SkComposeImageFilter() {
141c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org}
151c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
161c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.orgbool SkComposeImageFilter::onFilterImage(Proxy* proxy,
171c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org                                         const SkBitmap& src,
184cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org                                         const Context& ctx,
191c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org                                         SkBitmap* result,
20ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org                                         SkIPoint* offset) const {
211c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    SkImageFilter* outer = getInput(0);
221c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    SkImageFilter* inner = getInput(1);
231c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
241c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    if (!outer && !inner) {
251c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org        return false;
261c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    }
271c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
281c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    if (!outer || !inner) {
294cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org        return (outer ? outer : inner)->filterImage(proxy, src, ctx, result, offset);
301c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    }
311c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
321c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    SkBitmap tmp;
334cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org    return inner->filterImage(proxy, src, ctx, &tmp, offset) &&
344cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org           outer->filterImage(proxy, tmp, ctx, result, offset);
351c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org}
361c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
371c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.orgbool SkComposeImageFilter::onFilterBounds(const SkIRect& src,
381c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org                                          const SkMatrix& ctm,
39c4b12f19a46946e1c02f3525e0ea4902b09feac5senorblanco@chromium.org                                          SkIRect* dst) const {
401c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    SkImageFilter* outer = getInput(0);
411c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    SkImageFilter* inner = getInput(1);
421c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
431c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    if (!outer && !inner) {
441c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org        return false;
451c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    }
461c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
471c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    if (!outer || !inner) {
481c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org        return (outer ? outer : inner)->filterBounds(src, ctm, dst);
491c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    }
501c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
511c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    SkIRect tmp;
521c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org    return inner->filterBounds(src, ctm, &tmp) &&
531c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org           outer->filterBounds(tmp, ctm, dst);
541c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org}
551c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org
568b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgSkComposeImageFilter::SkComposeImageFilter(SkReadBuffer& buffer)
57ce33d60187718e7bb01944ee130c9f5d9fb335eccommit-bot@chromium.org  : INHERITED(2, buffer) {
581c4c9ef43747b42d2c31b5f17fe5e054fb3fee64commit-bot@chromium.org}
59