Skia
2D Graphics Library
SkGradientShader Class Reference

SkGradientShader hosts factories for creating subclasses of SkShader that render linear and radial gradients. More...

#include <SkGradientShader.h>

Classes

struct  Interpolation
 

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=0, const SkMatrix *localMatrix=nullptr)
 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, const Interpolation &interpolation, 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, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
 
static sk_sp< SkShaderMakeRadial (const SkPoint &center, SkScalar radius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
 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, const Interpolation &interpolation, 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, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
 
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=0, const SkMatrix *localMatrix=nullptr)
 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, const Interpolation &interpolation, 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, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
 
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=0, const SkMatrix *localMatrix=nullptr)
 
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, const Interpolation &interpolation, 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, SkTileMode mode, SkScalar startAngle, SkScalar endAngle, 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, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
 

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/3]

static sk_sp<SkShader> SkGradientShader::MakeLinear ( const SkPoint  pts[2],
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags = 0,
const SkMatrix localMatrix = nullptr 
)
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 lie between 0.0 and 1.0, and be strictly increasing. If the first value is not 0.0, then an additional color stop is added at position 0.0, with the same color as colors[0]. If the the last value is not 1.0, then an additional color stop is added at position 1.0, with the same color as colors[count - 1].
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() [2/3]

static sk_sp<SkShader> SkGradientShader::MakeLinear ( const SkPoint  pts[2],
const SkColor4f  colors[],
sk_sp< SkColorSpace colorSpace,
const SkScalar  pos[],
int  count,
SkTileMode  mode,
const Interpolation interpolation,
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 lie between 0.0 and 1.0, and be strictly increasing. If the first value is not 0.0, then an additional color stop is added at position 0.0, with the same color as colors[0]. If the the last value is not 1.0, then an additional color stop is added at position 1.0, with the same color as colors[count - 1].
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/3]

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 = 0,
const SkMatrix localMatrix = nullptr 
)
inlinestatic

◆ MakeRadial() [1/3]

static sk_sp<SkShader> SkGradientShader::MakeRadial ( const SkPoint &  center,
SkScalar  radius,
const SkColor  colors[],
const SkScalar  pos[],
int  count,
SkTileMode  mode,
uint32_t  flags = 0,
const SkMatrix localMatrix = nullptr 
)
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 lie between 0.0 and 1.0, and be strictly increasing. If the first value is not 0.0, then an additional color stop is added at position 0.0, with the same color as colors[0]. If the the last value is not 1.0, then an additional color stop is added at position 1.0, with the same color as colors[count - 1].
countMust be >= 2. The number of colors (and pos if not NULL) entries
modeThe tiling mode

◆ MakeRadial() [2/3]

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,
const Interpolation interpolation,
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 lie between 0.0 and 1.0, and be strictly increasing. If the first value is not 0.0, then an additional color stop is added at position 0.0, with the same color as colors[0]. If the the last value is not 1.0, then an additional color stop is added at position 1.0, with the same color as colors[count - 1].
countMust be >= 2. The number of colors (and pos if not NULL) entries
modeThe tiling mode

◆ MakeRadial() [3/3]

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 = 0,
const SkMatrix localMatrix = nullptr 
)
inlinestatic

◆ MakeSweep() [1/5]

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.

The shader accepts negative angles and angles larger than 360, draws between 0 and 360 degrees, similar to the CSS conic-gradient semantics. 0 degrees means horizontal positive x axis. The start angle must be less than the end angle, otherwise a null pointer is returned. If color stops do not contain 0 and 1 but are within this range, the respective outer color stop is repeated for 0 and 1. Color stops less than 0 are clamped to 0, and greater than 1 are clamped to 1.

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 lie between 0.0 and 1.0, and be strictly increasing. If the first value is not 0.0, then an additional color stop is added at position 0.0, with the same color as colors[0]. If the the last value is not 1.0, then an additional color stop is added at position 1.0, with the same color as colors[count - 1].
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() [2/5]

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

◆ MakeSweep() [3/5]

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,
const Interpolation interpolation,
const SkMatrix localMatrix 
)
static

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

The shader accepts negative angles and angles larger than 360, draws between 0 and 360 degrees, similar to the CSS conic-gradient semantics. 0 degrees means horizontal positive x axis. The start angle must be less than the end angle, otherwise a null pointer is returned. If color stops do not contain 0 and 1 but are within this range, the respective outer color stop is repeated for 0 and 1. Color stops less than 0 are clamped to 0, and greater than 1 are clamped to 1.

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 lie between 0.0 and 1.0, and be strictly increasing. If the first value is not 0.0, then an additional color stop is added at position 0.0, with the same color as colors[0]. If the the last value is not 1.0, then an additional color stop is added at position 1.0, with the same color as colors[count - 1].
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() [4/5]

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 
)
inlinestatic

◆ MakeSweep() [5/5]

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 = 0,
const SkMatrix localMatrix = nullptr 
)
inlinestatic

◆ MakeTwoPointConical() [1/3]

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 = 0,
const SkMatrix localMatrix = nullptr 
)
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() [2/3]

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,
const Interpolation interpolation,
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/3]

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 = 0,
const SkMatrix localMatrix = nullptr 
)
inlinestatic

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