11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2007 The Android Open Source Project
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkColorShader_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkColorShader_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkShader.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** \class SkColorShader
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    A Shader that represents a single color. In general, this effect can be
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    accomplished by just using the color field on the paint, but if an
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    actual shader object is needed, this provides that feature.
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
20137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenbergerclass SK_API SkColorShader : public SkShader {
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** Create a ColorShader that will inherit its color from the Paint
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        at draw time.
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    */
2540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    SkColorShader();
26f294d10d594ac335ea3bd09caec89004d41edc5cMike Reed
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** Create a ColorShader that ignores the color in the paint, and uses the
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        specified color. Note: like all shaders, at draw time the paint's alpha
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        will be respected, and is applied to the specified color.
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    */
3140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    SkColorShader(SkColor c);
3240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
3340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    virtual ~SkColorShader();
3440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual uint32_t getFlags() SK_OVERRIDE;
361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual uint8_t getSpan16Alpha() const SK_OVERRIDE;
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual bool isOpaque() const SK_OVERRIDE;
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual bool setContext(const SkBitmap& device, const SkPaint& paint,
391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                            const SkMatrix& matrix) SK_OVERRIDE;
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE;
411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void shadeSpan16(int x, int y, uint16_t span[], int count) SK_OVERRIDE;
421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) SK_OVERRIDE;
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    // we return false for this, use asAGradient
4505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    virtual BitmapType asABitmap(SkBitmap* outTexture,
4640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger                                 SkMatrix* outMatrix,
4705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                                 TileMode xy[2],
481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                 SkScalar* twoPointRadialParams) const SK_OVERRIDE;
4905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
5105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected:
531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkColorShader(SkFlattenableReadBuffer&);
541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual Factory getFactory() SK_OVERRIDE;
571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static SkFlattenable* CreateProc(SkFlattenableReadBuffer&);
601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkColor     fColor;         // ignored if fInheritColor is true
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkPMColor   fPMColor;       // cached after setContext()
63f294d10d594ac335ea3bd09caec89004d41edc5cMike Reed    uint32_t    fFlags;         // cached after setContext()
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    uint16_t    fColor16;       // cached after setContext()
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkBool8     fInheritColor;
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    typedef SkShader INHERITED;
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
71