Flutter Engine
The Flutter Engine
Public Member Functions | Friends | List of all members
SkShader Class Reference

#include <SkShader.h>

Inheritance diagram for SkShader:
SkFlattenable SkRefCnt SkRefCntBase SkShaderBase SkBitmapProcLegacyShader SkBlendShader SkCTMShader SkColor4Shader SkColorFilterShader SkColorShader SkCoordClampShader SkEmptyShader SkGradientBaseShader SkImageShader SkLocalMatrixShader SkPerlinNoiseShader SkPictureShader SkRuntimeShader SkTransformShader SkTriColorShader SkWorkingColorSpaceShader

Public Member Functions

virtual bool isOpaque () const
 
SkImageisAImage (SkMatrix *localMatrix, SkTileMode xy[2]) const
 
bool isAImage () const
 
sk_sp< SkShadermakeWithLocalMatrix (const SkMatrix &) const
 
sk_sp< SkShadermakeWithColorFilter (sk_sp< SkColorFilter >) const
 
sk_sp< SkShadermakeWithWorkingColorSpace (sk_sp< SkColorSpace >) const
 
- Public Member Functions inherited from SkFlattenable
 SkFlattenable ()
 
virtual Factory getFactory () const =0
 
virtual const char * getTypeName () const =0
 
virtual void flatten (SkWriteBuffer &) const
 
virtual Type getFlattenableType () const =0
 
sk_sp< SkDataserialize (const SkSerialProcs *=nullptr) const
 
size_t serialize (void *memory, size_t memory_size, const SkSerialProcs *=nullptr) const
 
- Public Member Functions inherited from SkRefCntBase
 SkRefCntBase ()
 
virtual ~SkRefCntBase ()
 
bool unique () const
 
void ref () const
 
void unref () const
 

Friends

class SkShaderBase
 

Additional Inherited Members

- Public Types inherited from SkFlattenable
enum  Type {
  kSkColorFilter_Type , kSkBlender_Type , kSkDrawable_Type , kSkDrawLooper_Type ,
  kSkImageFilter_Type , kSkMaskFilter_Type , kSkPathEffect_Type , kSkShader_Type
}
 
typedef sk_sp< SkFlattenable >(* Factory) (SkReadBuffer &)
 
- Static Public Member Functions inherited from SkFlattenable
static Factory NameToFactory (const char name[])
 
static const char * FactoryToName (Factory)
 
static void Register (const char name[], Factory)
 
static sk_sp< SkFlattenableDeserialize (Type, const void *data, size_t length, const SkDeserialProcs *procs=nullptr)
 

Detailed Description

Shaders specify the source color(s) for what is being drawn. If a paint has no shader, then the paint's color is used. If the paint has a shader, then the shader's color(s) are use instead, but they are modulated by the paint's alpha. This makes it easy to create a shader once (e.g. bitmap tiling or gradient) and then change its transparency w/o having to modify the original shader... only the paint's alpha needs to be modified.

Definition at line 36 of file SkShader.h.

Member Function Documentation

◆ isAImage() [1/2]

bool SkShader::isAImage ( ) const
inline

Definition at line 52 of file SkShader.h.

52 {
53 return this->isAImage(nullptr, (SkTileMode*)nullptr) != nullptr;
54 }
SkTileMode
Definition: SkTileMode.h:13
bool isAImage() const
Definition: SkShader.h:52

◆ isAImage() [2/2]

SkImage * SkShader::isAImage ( SkMatrix localMatrix,
SkTileMode  xy[2] 
) const

Iff this shader is backed by a single SkImage, return its ptr (the caller must ref this if they want to keep it longer than the lifetime of the shader). If not, return nullptr.

Definition at line 22 of file SkShader.cpp.

22 {
23 return as_SB(this)->onIsAImage(localMatrix, xy);
24}
SkShaderBase * as_SB(SkShader *shader)
Definition: SkShaderBase.h:412
virtual SkImage * onIsAImage(SkMatrix *, SkTileMode[2]) const
Definition: SkShaderBase.h:362

◆ isOpaque()

virtual bool SkShader::isOpaque ( ) const
inlinevirtual

Returns true if the shader is guaranteed to produce only opaque colors, subject to the SkPaint using the shader to apply an opaque alpha value. Subclasses should override this to allow some optimizations.

Reimplemented in SkConicalGradient, SkGradientBaseShader, SkColorShader, SkColor4Shader, SkImageShader, SkLocalMatrixShader, SkCTMShader, SkRuntimeShader, and SkTransformShader.

Definition at line 44 of file SkShader.h.

44{ return false; }

◆ makeWithColorFilter()

sk_sp< SkShader > SkShader::makeWithColorFilter ( sk_sp< SkColorFilter filter) const

Create a new shader that produces the same colors as invoking this shader and then applying the colorfilter.

Definition at line 43 of file SkShader.cpp.

43 {
44 SkShader* base = const_cast<SkShader*>(this);
45 if (!filter) {
46 return sk_ref_sp(base);
47 }
48 return sk_make_sp<SkColorFilterShader>(sk_ref_sp(base), 1.0f, std::move(filter));
49}
sk_sp< T > sk_ref_sp(T *obj)
Definition: SkRefCnt.h:381

◆ makeWithLocalMatrix()

sk_sp< SkShader > SkShader::makeWithLocalMatrix ( const SkMatrix localMatrix) const

Return a shader that will apply the specified localMatrix to this shader. The specified matrix will be applied before any matrix associated with this shader.

Definition at line 26 of file SkShader.cpp.

26 {
27 const SkMatrix* lm = &localMatrix;
28
29 sk_sp<SkShader> baseShader;
30 SkMatrix otherLocalMatrix;
31 sk_sp<SkShader> proxy = as_SB(this)->makeAsALocalMatrixShader(&otherLocalMatrix);
32 if (proxy) {
33 otherLocalMatrix = SkShaderBase::ConcatLocalMatrices(localMatrix, otherLocalMatrix);
34 lm = &otherLocalMatrix;
35 baseShader = proxy;
36 } else {
37 baseShader = sk_ref_sp(const_cast<SkShader*>(this));
38 }
39
40 return sk_make_sp<SkLocalMatrixShader>(std::move(baseShader), *lm);
41}
static SkMatrix ConcatLocalMatrices(const SkMatrix &parentLM, const SkMatrix &childLM)
Definition: SkShaderBase.h:384
virtual sk_sp< SkShader > makeAsALocalMatrixShader(SkMatrix *localMatrix) const

◆ makeWithWorkingColorSpace()

sk_sp< SkShader > SkShader::makeWithWorkingColorSpace ( sk_sp< SkColorSpace workingSpace) const

Return a shader that will compute this shader in a specific color space. By default, all shaders operate in the destination (surface) color space. The results of a shader are still always converted to the destination - this API has no impact on simple shaders or images. Primarily, it impacts shaders that perform mathematical operations, like Blend shaders, or runtime shaders.

Definition at line 51 of file SkShader.cpp.

51 {
52 SkShader* base = const_cast<SkShader*>(this);
53 if (!workingSpace) {
54 return sk_ref_sp(base);
55 }
56 return sk_make_sp<SkWorkingColorSpaceShader>(sk_ref_sp(base), std::move(workingSpace));
57}

Friends And Related Function Documentation

◆ SkShaderBase

friend class SkShaderBase
friend

Definition at line 82 of file SkShader.h.


The documentation for this class was generated from the following files: