From b9bb38cd187bfd43abfa8577da0ab4e34d181073 Mon Sep 17 00:00:00 2001 From: reed Date: Mon, 8 Dec 2014 06:06:36 -0800 Subject: make SkColorShader private, use public factory BUG=skia: Need https://codereview.chromium.org/785823002/ to land first Review URL: https://codereview.chromium.org/788533002 --- src/core/SkColorShader.h | 78 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/core/SkColorShader.h (limited to 'src') diff --git a/src/core/SkColorShader.h b/src/core/SkColorShader.h new file mode 100644 index 0000000000..dc45f2d6cb --- /dev/null +++ b/src/core/SkColorShader.h @@ -0,0 +1,78 @@ +/* + * Copyright 2007 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkColorShader_DEFINED +#define SkColorShader_DEFINED + +#include "SkShader.h" + +/** \class SkColorShader + A Shader that represents a single color. In general, this effect can be + accomplished by just using the color field on the paint, but if an + actual shader object is needed, this provides that feature. +*/ +class SK_API SkColorShader : public SkShader { +public: + /** Create a ColorShader that ignores the color in the paint, and uses the + specified color. Note: like all shaders, at draw time the paint's alpha + will be respected, and is applied to the specified color. + */ + explicit SkColorShader(SkColor c); + + virtual bool isOpaque() const SK_OVERRIDE; + + virtual size_t contextSize() const SK_OVERRIDE { + return sizeof(ColorShaderContext); + } + + class ColorShaderContext : public SkShader::Context { + public: + ColorShaderContext(const SkColorShader& shader, const ContextRec&); + + virtual uint32_t getFlags() const SK_OVERRIDE; + virtual uint8_t getSpan16Alpha() const SK_OVERRIDE; + virtual void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE; + virtual void shadeSpan16(int x, int y, uint16_t span[], int count) SK_OVERRIDE; + virtual void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) SK_OVERRIDE; + + private: + SkPMColor fPMColor; + uint32_t fFlags; + uint16_t fColor16; + + typedef SkShader::Context INHERITED; + }; + + // we return false for this, use asAGradient + virtual BitmapType asABitmap(SkBitmap* outTexture, + SkMatrix* outMatrix, + TileMode xy[2]) const SK_OVERRIDE; + + virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE; + + virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix*, GrColor*, + GrFragmentProcessor**) const SK_OVERRIDE; + + SK_TO_STRING_OVERRIDE() + SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorShader) + +protected: + SkColorShader(SkReadBuffer&); + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; + virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; + virtual bool onAsLuminanceColor(SkColor* lum) const SK_OVERRIDE { + *lum = fColor; + return true; + } + +private: + SkColor fColor; + + typedef SkShader INHERITED; +}; + +#endif -- cgit v1.2.3