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 : public GradientShaderBase4fContext {
16 public:
17     LinearGradient4fContext(const SkLinearGradient&, const ContextRec&);
18 
19     void shadeSpan(int x, int y, SkPMColor dst[], int count) override;
20     void shadeSpan4f(int x, int y, SkPM4f dst[], int count) override;
21 
22 private:
23     using INHERITED = GradientShaderBase4fContext;
24 
25     template<typename DstType, TileMode>
26     class LinearIntervalProcessor;
27 
28     template <typename DstType, bool premul>
29     void shadePremulSpan(int x, int y, DstType[], int count) const;
30 
31     template <typename DstType, bool premul, SkShader::TileMode tileMode>
32     void shadePremulTileSpan(int x, int y, DstType[], int count) const;
33 
34     template <typename DstType, bool premul, SkShader::TileMode tileMode>
35     void shadeSpanInternal(int x, int y, DstType[], int count) const;
36 };
37 
38 #endif // Sk4fLinearGradient_DEFINED
39