blob: c5bd785c992de4e32ec12af7acc9b666a70ab19e [file] [log] [blame]
reeddb873d82015-03-01 19:53:47 -08001/*
reedc7141eb2016-01-11 13:08:59 -08002 * Copyright 2016 Google Inc.
reeddb873d82015-03-01 19:53:47 -08003 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
reedc7141eb2016-01-11 13:08:59 -08008#include "SkColorFilter.h"
reedc7141eb2016-01-11 13:08:59 -08009
reeddb873d82015-03-01 19:53:47 -080010#ifndef SkModeColorFilter_DEFINED
11#define SkModeColorFilter_DEFINED
12
reeddb873d82015-03-01 19:53:47 -080013class SkModeColorFilter : public SkColorFilter {
14public:
Mike Reed7d954ad2016-10-28 15:42:34 -040015 static sk_sp<SkColorFilter> Make(SkColor color, SkBlendMode mode) {
reedd053ce92016-03-22 10:17:23 -070016 return sk_sp<SkColorFilter>(new SkModeColorFilter(color, mode));
reed4c9776b2016-03-22 08:10:17 -070017 }
reeddb873d82015-03-01 19:53:47 -080018
19 SkColor getColor() const { return fColor; }
reeddb873d82015-03-01 19:53:47 -080020 SkPMColor getPMColor() const { return fPMColor; }
21
Mike Reedfaba3712016-11-03 14:45:31 -040022 bool asColorMode(SkColor*, SkBlendMode*) const override;
mtklein36352bf2015-03-25 18:17:31 -070023 uint32_t getFlags() const override;
reeddb873d82015-03-01 19:53:47 -080024
25#ifndef SK_IGNORE_TO_STRING
reedc7141eb2016-01-11 13:08:59 -080026 void toString(SkString* str) const override;
reeddb873d82015-03-01 19:53:47 -080027#endif
28
29#if SK_SUPPORT_GPU
Brian Salomonaff329b2017-08-11 09:40:37 -040030 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*,
31 SkColorSpace*) const override;
reeddb873d82015-03-01 19:53:47 -080032#endif
33 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
34
35protected:
Mike Reedce9514c2017-06-11 22:14:14 -040036 SkModeColorFilter(SkColor color, SkBlendMode mode);
reedf0280032015-10-12 11:10:10 -070037
mtklein36352bf2015-03-25 18:17:31 -070038 void flatten(SkWriteBuffer&) const override;
reeddb873d82015-03-01 19:53:47 -080039
Mike Kleinfdf31032017-05-09 14:57:58 -040040 void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
Mike Klein744908e2016-11-11 12:51:36 -050041 bool shaderIsOpaque) const override;
Mike Klein96b333a2016-10-12 11:05:05 -040042
Mike Klein4e92b822017-04-26 13:45:36 -040043 sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
44
reeddb873d82015-03-01 19:53:47 -080045private:
Mike Reedce9514c2017-06-11 22:14:14 -040046 SkColor fColor;
47 SkBlendMode fMode;
reeddb873d82015-03-01 19:53:47 -080048 // cache
Mike Reedce9514c2017-06-11 22:14:14 -040049 SkPMColor fPMColor;
reeddb873d82015-03-01 19:53:47 -080050
reedc7141eb2016-01-11 13:08:59 -080051 friend class SkColorFilter;
52
reeddb873d82015-03-01 19:53:47 -080053 typedef SkColorFilter INHERITED;
54};
55
56#endif