• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 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 SkImageShader_DEFINED
9 #define SkImageShader_DEFINED
10 
11 #include "SkBitmapProcShader.h"
12 #include "SkColorSpaceXformer.h"
13 #include "SkImage.h"
14 #include "SkShaderBase.h"
15 
16 class SkImageShader : public SkShaderBase {
17 public:
18     static sk_sp<SkShader> Make(sk_sp<SkImage>, TileMode tx, TileMode ty,
19                                 const SkMatrix* localMatrix);
20 
21     bool isOpaque() const override;
22 
23     SK_TO_STRING_OVERRIDE()
24     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageShader)
25 
26 #if SK_SUPPORT_GPU
27     std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
28 #endif
29 
30     SkImageShader(sk_sp<SkImage>, TileMode tx, TileMode ty, const SkMatrix* localMatrix);
31 
32     static bool IsRasterPipelineOnly(const SkMatrix& ctm, SkColorType, SkAlphaType,
33                                      SkShader::TileMode tx, SkShader::TileMode ty,
34                                      const SkMatrix& localM);
35 
36 protected:
37     void flatten(SkWriteBuffer&) const override;
38     Context* onMakeContext(const ContextRec&, SkArenaAlloc* storage) const override;
39 #ifdef SK_SUPPORT_LEGACY_SHADER_ISABITMAP
40     bool onIsABitmap(SkBitmap*, SkMatrix*, TileMode*) const override;
41 #endif
42     SkImage* onIsAImage(SkMatrix*, TileMode*) const override;
43 
44     bool onIsRasterPipelineOnly(const SkMatrix& ctm) const override;
45 
46     bool onAppendStages(const StageRec&) const override;
47 
onMakeColorSpace(SkColorSpaceXformer * xformer)48     sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override {
49         return xformer->apply(fImage.get())->makeShader(fTileModeX, fTileModeY,
50                                                         &this->getLocalMatrix());
51     }
52 
53     sk_sp<SkImage>  fImage;
54     const TileMode  fTileModeX;
55     const TileMode  fTileModeY;
56 
57 private:
58     friend class SkShaderBase;
59 
60     typedef SkShaderBase INHERITED;
61 };
62 
63 #endif
64