Home | History | Annotate | Download | only in effects
      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  */
     19 class SK_API SkXfermodeImageFilter {
     20 public:
     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 
     45 private:
     46     SkXfermodeImageFilter();    // can't instantiate
     47 };
     48 
     49 #endif
     50