Skia
2D Graphics Library
SkGradientShader Class Reference

#include <SkGradientShader.h>

Public Types

enum  Flags { kInterpolateColorsInPremul_Flag = 1 << 0 }
 

Static Public Member Functions

static sk_sp< SkShaderMakeLinear (const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a linear gradient between the two specified points. More...
 
static sk_sp< SkShaderMakeLinear (const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode)
 
static sk_sp< SkShaderMakeLinear (const SkPoint pts[2], const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a linear gradient between the two specified points. More...
 
static sk_sp< SkShaderMakeLinear (const SkPoint pts[2], const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode)
 
static sk_sp< SkShaderMakeRadial (const SkPoint &center, SkScalar radius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a radial gradient given the center and radius. More...
 
static sk_sp< SkShaderMakeRadial (const SkPoint &center, SkScalar radius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode)
 
static sk_sp< SkShaderMakeRadial (const SkPoint &center, SkScalar radius, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a radial gradient given the center and radius. More...
 
static sk_sp< SkShaderMakeRadial (const SkPoint &center, SkScalar radius, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode)
 
static sk_sp< SkShaderMakeTwoPointConical (const SkPoint &start, SkScalar startRadius, const SkPoint &end, SkScalar endRadius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a conical gradient given two circles, or returns NULL if the inputs are invalid. More...
 
static sk_sp< SkShaderMakeTwoPointConical (const SkPoint &start, SkScalar startRadius, const SkPoint &end, SkScalar endRadius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode)
 
static sk_sp< SkShaderMakeTwoPointConical (const SkPoint &start, SkScalar startRadius, const SkPoint &end, SkScalar endRadius, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a conical gradient given two circles, or returns NULL if the inputs are invalid. More...
 
static sk_sp< SkShaderMakeTwoPointConical (const SkPoint &start, SkScalar startRadius, const SkPoint &end, SkScalar endRadius, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode)
 
static sk_sp< SkShaderMakeSweep (SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, SkScalar startAngle, SkScalar endAngle, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a sweep gradient given a center. More...
 
static sk_sp< SkShaderMakeSweep (SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int count, uint32_t flags, const SkMatrix *localMatrix)
 
static sk_sp< SkShaderMakeSweep (SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int count)
 
static sk_sp< SkShaderMakeSweep (SkScalar cx, SkScalar cy, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, SkTileMode mode, SkScalar startAngle, SkScalar endAngle, uint32_t flags, const SkMatrix *localMatrix)
 Returns a shader that generates a sweep gradient given a center. More...
 
static sk_sp< SkShaderMakeSweep (SkScalar cx, SkScalar cy, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count, uint32_t flags, const SkMatrix *localMatrix)
 
static sk_sp< SkShaderMakeSweep (SkScalar cx, SkScalar cy, const SkColor4f colors[], sk_sp< SkColorSpace > colorSpace, const SkScalar pos[], int count)
 
static void RegisterFlattenables ()
 

Detailed Description

SkGradientShader hosts factories for creating subclasses of SkShader that render linear and radial gradients. In general, degenerate cases should not produce surprising results, but there are several types of degeneracies:

A linear gradient made from the same two points. A radial gradient with a radius of zero. A sweep gradient where the start and end angle are the same. A two point conical gradient where the two centers and the two radii are the same.

For any degenerate gradient with a decal tile mode, it will draw empty since the interpolating region is zero area and the outer region is discarded by the decal mode.

For any degenerate gradient with a repeat or mirror tile mode, it will draw a solid color that is the average gradient color, since infinitely many repetitions of the gradients will fill the shape.

For a clamped gradient, every type is well-defined at the limit except for linear gradients. The radial gradient with zero radius becomes the last color. The sweep gradient draws the sector from 0 to the provided angle with the first color, with a hardstop switching to the last color. When the provided angle is 0, this is just the solid last color again. Similarly, the two point conical gradient becomes a circle filled with the first color, sized to the provided radius, with a hardstop switching to the last color. When the two radii are both zero, this is just the solid last color.

As a linear gradient approaches the degenerate case, its shader will approach the appearance of two half planes, each filled by the first and last colors of the gradient. The planes will be oriented perpendicular to the vector between the two defining points of the gradient. However, once they become the same point, Skia cannot reconstruct what that expected orientation is. To provide a stable and predictable color in this case, Skia just uses the last color as a solid fill to be similar to many of the other degenerate gradients' behaviors in clamp mode.

Member Enumeration Documentation

◆ Flags

Enumerator
kInterpolateColorsInPremul_Flag 

By default gradients will interpolate their colors in unpremul space and then premultiply each of the results.

By setting this flag, the gradients will premultiply their colors first, and then interpolate between them. example: https://fiddle.skia.org/c/@GradientShader_MakeLinear

Member Function Documentation

◆ MakeLinear() [1/4]

static sk_sp<SkShader> SkGradientShader::MakeLinear ( const SkPoint  pts[2],
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode 
)
inlinestatic

◆ MakeLinear() [2/4]

static sk_sp<SkShader> SkGradientShader::MakeLinear ( const SkPoint  pts[2],
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a linear gradient between the two specified points.

Parameters
ptsThe start and end points for the gradient.
colorsThe array[count] of colors, to be distributed between the two points
posMay be NULL. array[count] of SkScalars, or NULL, of the relative position of each corresponding color in the colors array. If this is NULL, the the colors are distributed evenly between the start and end point. If this is not null, the values must begin with 0, end with 1.0, and intermediate values must be strictly increasing.
countMust be >=2. The number of colors (and pos if not NULL) entries.
modeThe tiling mode

example: https://fiddle.skia.org/c/@GradientShader_MakeLinear

◆ MakeLinear() [3/4]

static sk_sp<SkShader> SkGradientShader::MakeLinear ( const SkPoint  pts[2],
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode 
)
inlinestatic

◆ MakeLinear() [4/4]

static sk_sp<SkShader> SkGradientShader::MakeLinear ( const SkPoint  pts[2],
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a linear gradient between the two specified points.

Parameters
ptsThe start and end points for the gradient.
colorsThe array[count] of colors, to be distributed between the two points
posMay be NULL. array[count] of SkScalars, or NULL, of the relative position of each corresponding color in the colors array. If this is NULL, the the colors are distributed evenly between the start and end point. If this is not null, the values must begin with 0, end with 1.0, and intermediate values must be strictly increasing.
countMust be >=2. The number of colors (and pos if not NULL) entries.
modeThe tiling mode

example: https://fiddle.skia.org/c/@GradientShader_MakeLinear

◆ MakeRadial() [1/4]

static sk_sp<SkShader> SkGradientShader::MakeRadial ( const SkPoint center,
SkScalar  radius,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode 
)
inlinestatic

◆ MakeRadial() [2/4]

static sk_sp<SkShader> SkGradientShader::MakeRadial ( const SkPoint center,
SkScalar  radius,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a radial gradient given the center and radius.

Parameters
centerThe center of the circle for this gradient
radiusMust be positive. The radius of the circle for this gradient
colorsThe array[count] of colors, to be distributed between the center and edge of the circle
posMay be NULL. The array[count] of SkScalars, or NULL, of the relative position of each corresponding color in the colors array. If this is NULL, the the colors are distributed evenly between the center and edge of the circle. If this is not null, the values must begin with 0, end with 1.0, and intermediate values must be strictly increasing.
countMust be >= 2. The number of colors (and pos if not NULL) entries
modeThe tiling mode

◆ MakeRadial() [3/4]

static sk_sp<SkShader> SkGradientShader::MakeRadial ( const SkPoint center,
SkScalar  radius,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode 
)
inlinestatic

◆ MakeRadial() [4/4]

static sk_sp<SkShader> SkGradientShader::MakeRadial ( const SkPoint center,
SkScalar  radius,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a radial gradient given the center and radius.

Parameters
centerThe center of the circle for this gradient
radiusMust be positive. The radius of the circle for this gradient
colorsThe array[count] of colors, to be distributed between the center and edge of the circle
posMay be NULL. The array[count] of SkScalars, or NULL, of the relative position of each corresponding color in the colors array. If this is NULL, the the colors are distributed evenly between the center and edge of the circle. If this is not null, the values must begin with 0, end with 1.0, and intermediate values must be strictly increasing.
countMust be >= 2. The number of colors (and pos if not NULL) entries
modeThe tiling mode

◆ MakeSweep() [1/6]

static sk_sp<SkShader> SkGradientShader::MakeSweep ( SkScalar  cx,
SkScalar  cy,
const SkColor  colors[],
const SkScalar  pos[],
int  count 
)
inlinestatic

◆ MakeSweep() [2/6]

static sk_sp<SkShader> SkGradientShader::MakeSweep ( SkScalar  cx,
SkScalar  cy,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode,
SkScalar  startAngle,
SkScalar  endAngle,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a sweep gradient given a center.

Parameters
cxThe X coordinate of the center of the sweep
cxThe Y coordinate of the center of the sweep
colorsThe array[count] of colors, to be distributed around the center, within the gradient angle range.
posMay be NULL. The array[count] of SkScalars, or NULL, of the relative position of each corresponding color in the colors array. If this is NULL, then the colors are distributed evenly within the angular range. If this is not null, the values must begin with 0, end with 1.0, and intermediate values must be strictly increasing.
countMust be >= 2. The number of colors (and pos if not NULL) entries
modeTiling mode: controls drawing outside of the gradient angular range.
startAngleStart of the angular range, corresponding to pos == 0.
endAngleEnd of the angular range, corresponding to pos == 1.

◆ MakeSweep() [3/6]

static sk_sp<SkShader> SkGradientShader::MakeSweep ( SkScalar  cx,
SkScalar  cy,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
uint32_t  flags,
const SkMatrix localMatrix 
)
inlinestatic

◆ MakeSweep() [4/6]

static sk_sp<SkShader> SkGradientShader::MakeSweep ( SkScalar  cx,
SkScalar  cy,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count 
)
inlinestatic

◆ MakeSweep() [5/6]

static sk_sp<SkShader> SkGradientShader::MakeSweep ( SkScalar  cx,
SkScalar  cy,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode,
SkScalar  startAngle,
SkScalar  endAngle,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a sweep gradient given a center.

Parameters
cxThe X coordinate of the center of the sweep
cxThe Y coordinate of the center of the sweep
colorsThe array[count] of colors, to be distributed around the center, within the gradient angle range.
posMay be NULL. The array[count] of SkScalars, or NULL, of the relative position of each corresponding color in the colors array. If this is NULL, then the colors are distributed evenly within the angular range. If this is not null, the values must begin with 0, end with 1.0, and intermediate values must be strictly increasing.
countMust be >= 2. The number of colors (and pos if not NULL) entries
modeTiling mode: controls drawing outside of the gradient angular range.
startAngleStart of the angular range, corresponding to pos == 0.
endAngleEnd of the angular range, corresponding to pos == 1.

◆ MakeSweep() [6/6]

static sk_sp<SkShader> SkGradientShader::MakeSweep ( SkScalar  cx,
SkScalar  cy,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
uint32_t  flags,
const SkMatrix localMatrix 
)
inlinestatic

◆ MakeTwoPointConical() [1/4]

static sk_sp<SkShader> SkGradientShader::MakeTwoPointConical ( const SkPoint start,
SkScalar  startRadius,
const SkPoint end,
SkScalar  endRadius,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode 
)
inlinestatic

◆ MakeTwoPointConical() [2/4]

static sk_sp<SkShader> SkGradientShader::MakeTwoPointConical ( const SkPoint start,
SkScalar  startRadius,
const SkPoint end,
SkScalar  endRadius,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a conical gradient given two circles, or returns NULL if the inputs are invalid.

The gradient interprets the two circles according to the following HTML spec. http://dev.w3.org/html5/2dcontext/#dom-context-2d-createradialgradient

◆ MakeTwoPointConical() [3/4]

static sk_sp<SkShader> SkGradientShader::MakeTwoPointConical ( const SkPoint start,
SkScalar  startRadius,
const SkPoint end,
SkScalar  endRadius,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode 
)
inlinestatic

◆ MakeTwoPointConical() [4/4]

static sk_sp<SkShader> SkGradientShader::MakeTwoPointConical ( const SkPoint start,
SkScalar  startRadius,
const SkPoint end,
SkScalar  endRadius,
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags,
const SkMatrix localMatrix 
)
static

Returns a shader that generates a conical gradient given two circles, or returns NULL if the inputs are invalid.

The gradient interprets the two circles according to the following HTML spec. http://dev.w3.org/html5/2dcontext/#dom-context-2d-createradialgradient

◆ RegisterFlattenables()

static void SkGradientShader::RegisterFlattenables ( )
static

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