1/*
2 * Copyright 2006 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 SkTransparentShader_DEFINED
9#define SkTransparentShader_DEFINED
10
11#include "SkShader.h"
12
13class SK_API SkTransparentShader : public SkShader {
14public:
15    SkTransparentShader() {}
16
17    virtual size_t contextSize() const SK_OVERRIDE;
18
19    class TransparentShaderContext : public SkShader::Context {
20    public:
21        TransparentShaderContext(const SkTransparentShader& shader, const ContextRec&);
22        virtual ~TransparentShaderContext();
23
24        virtual uint32_t getFlags() const SK_OVERRIDE;
25        virtual void shadeSpan(int x, int y, SkPMColor[], int count) SK_OVERRIDE;
26        virtual void shadeSpan16(int x, int y, uint16_t span[], int count) SK_OVERRIDE;
27
28    private:
29        const SkBitmap* fDevice;
30
31        typedef SkShader::Context INHERITED;
32    };
33
34    SK_TO_STRING_OVERRIDE()
35    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTransparentShader)
36
37protected:
38    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
39
40    // we don't need to flatten anything at all
41    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE {}
42
43private:
44#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
45    SkTransparentShader(SkReadBuffer& buffer) : INHERITED(buffer) {}
46#endif
47
48    typedef SkShader INHERITED;
49};
50
51#endif
52