35 matrix.postScale(
inv,
inv);
48 info->fPoint[0] = fCenter;
49 info->fRadius[0] = fRadius;
54 return GradientType::kRadial;
59 SkMatrix legacyLocalMatrix, *lmPtr =
nullptr;
60 if (!desc.unflatten(
buffer, &legacyLocalMatrix)) {
64 lmPtr = &legacyLocalMatrix;
71 std::move(
desc.fColorSpace),
81 buffer.writePoint(fCenter);
82 buffer.writeScalar(fRadius);
87 p->append(SkRasterPipelineOp::xy_to_radius);
104 if (1 == colorCount) {
105 return SkShaders::Color(colors[0], std::move(colorSpace));
107 if (localMatrix && !localMatrix->
invert(
nullptr)) {
114 colors,
pos, colorCount, std::move(colorSpace), mode);
118 colors, std::move(colorSpace),
pos, colorCount, mode, interpolation);
119 return SkLocalMatrixShader::MakeWrapped<SkRadialGradient>(localMatrix,
center, radius, desc);
130 return MakeRadial(
center, radius, converter.fColors4f.begin(),
nullptr,
pos, colorCount, mode,
static SkM44 inv(const SkM44 &m)
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
#define SK_REGISTER_FLATTENABLE(type)
static SkMatrix rad_to_unit_matrix(const SkPoint ¢er, SkScalar radius)
void SkRegisterRadialGradientShaderFlattenable()
#define SkScalarInvert(x)
static bool SkScalarNearlyZero(SkScalar x, SkScalar tolerance=SK_ScalarNearlyZero)
static SkScalar center(float pos0, float pos1)
static sk_sp< SkShader > MakeRadial()
static constexpr SkScalar kDegenerateThreshold
static bool ValidGradient(const SkColor4f colors[], int count, SkTileMode tileMode, const Interpolation &interpolation)
static sk_sp< SkShader > MakeDegenerateGradient(const SkColor4f colors[], const SkScalar pos[], int colorCount, sk_sp< SkColorSpace > colorSpace, SkTileMode mode)
void flatten(SkWriteBuffer &) const override
void commonAsAGradient(GradientInfo *) const
static sk_sp< SkShader > MakeRadial(const SkPoint ¢er, SkScalar radius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
bool invert(SkMatrix *inverse) const
static const SkMatrix & I()
void flatten(SkWriteBuffer &buffer) const override
SkRadialGradient(const SkPoint ¢er, SkScalar radius, const Descriptor &)
void appendGradientStages(SkArenaAlloc *alloc, SkRasterPipeline *tPipeline, SkRasterPipeline *postPipeline) const override
const SkPoint & center() const
GradientType asGradient(GradientInfo *info, SkMatrix *matrix) const override
FlutterSemanticsFlag flags
static const uint8_t buffer[]