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