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