1/* 2 * Copyright 2013 The Android Open Source Project 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#ifndef SkXfermodeImageFilter_DEFINED 9#define SkXfermodeImageFilter_DEFINED 10 11#include "SkArithmeticImageFilter.h" 12#include "SkBlendMode.h" 13#include "SkImageFilter.h" 14 15/** 16 * This filter takes a SkBlendMode, and uses it to composite the foreground over the background. 17 * If foreground or background is NULL, the input bitmap (src) is used instead. 18 */ 19class SK_API SkXfermodeImageFilter { 20public: 21 static sk_sp<SkImageFilter> Make(SkBlendMode, sk_sp<SkImageFilter> background, 22 sk_sp<SkImageFilter> foreground, 23 const SkImageFilter::CropRect* cropRect); 24 static sk_sp<SkImageFilter> Make(SkBlendMode mode, sk_sp<SkImageFilter> background) { 25 return Make(mode, std::move(background), nullptr, nullptr); 26 } 27 28 // Arithmetic image filtering used to be implemented using SkXfermode. Some clients still rely 29 // on these factories existing in this class. 30 static sk_sp<SkImageFilter> MakeArithmetic(float k1, float k2, float k3, float k4, 31 bool enforcePMColor, sk_sp<SkImageFilter> background, 32 sk_sp<SkImageFilter> foreground, 33 const SkImageFilter::CropRect* cropRect) { 34 return SkArithmeticImageFilter::Make(k1, k2, k3, k4, enforcePMColor, std::move(background), 35 std::move(foreground), cropRect); 36 } 37 static sk_sp<SkImageFilter> MakeArithmetic(float k1, float k2, float k3, float k4, 38 bool enforcePMColor, 39 sk_sp<SkImageFilter> background) { 40 return SkArithmeticImageFilter::Make(k1, k2, k3, k4, enforcePMColor, std::move(background)); 41 } 42 43 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP(); 44 45private: 46 SkXfermodeImageFilter(); // can't instantiate 47}; 48 49#endif 50