1 /*
2  * Copyright 2016 Google Inc.
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 Sk4fLinearGradient_DEFINED
9 #define Sk4fLinearGradient_DEFINED
10 
11 #include "Sk4fGradientBase.h"
12 #include "SkLinearGradient.h"
13 
14 class SkLinearGradient::
15 LinearGradient4fContext final : public GradientShaderBase4fContext {
16 public:
17     LinearGradient4fContext(const SkLinearGradient&, const ContextRec&);
18 
19     void shadeSpan(int x, int y, SkPMColor dst[], int count) override;
20 
21 private:
22     using INHERITED = GradientShaderBase4fContext;
23 
24     template<ApplyPremul, TileMode>
25     class LinearIntervalProcessor;
26 
27     template <ApplyPremul premul>
28     void shadePremulSpan(int x, int y, SkPMColor dst[], int count,
29                          float bias0, float bias1) const;
30 
31     template <ApplyPremul premul, SkShader::TileMode tileMode>
32     void shadeSpanInternal(int x, int y, SkPMColor dst[], int count,
33                            float bias0, float bias1) const;
34 
35     const Sk4fGradientInterval* findInterval(SkScalar fx) const;
36 
37     mutable const Sk4fGradientInterval* fCachedInterval;
38 };
39 
40 #endif // Sk4fLinearGradient_DEFINED
41