static MaskedColor get_term(GrBlendCoeff coeff, const MaskedColor& src, const MaskedColor& dst, const MaskedColor& value) { switch (coeff) { case kZero_GrBlendCoeff: return MaskedColor(0, kRGBA_GrColorComponentFlags); case kOne_GrBlendCoeff: return value; case kDC_GrBlendCoeff: return MaskedColor::Mul(dst, value); case kIDC_GrBlendCoeff: return MaskedColor::Mul(MaskedColor::Invert(dst), value); case kDA_GrBlendCoeff: return MaskedColor::Mul(MaskedColor::ExtractAlpha(dst), value); case kIDA_GrBlendCoeff: return MaskedColor::Mul(MaskedColor::ExtractInverseAlpha(dst), value); case kSC_GrBlendCoeff: return MaskedColor::Mul(src, value); case kISC_GrBlendCoeff: return MaskedColor::Mul(MaskedColor::Invert(src), value); case kSA_GrBlendCoeff: return MaskedColor::Mul(MaskedColor::ExtractAlpha(src), value); case kISA_GrBlendCoeff: return MaskedColor::Mul(MaskedColor::ExtractInverseAlpha(src), value); default: SK_ABORT("Illegal coefficient"); return MaskedColor(); } }
AlphaFont::AlphaFont( const char *alpha_image, const char *font_desc ) :FacedFont( MaskedColor(alpha_image), font_desc ), _opacity(1.0), _back_opacity(0.0), _back_color(0xFFFFFF) { _color = 0xFFFFFF; }
static MaskedColor ExtractInverseAlpha(const MaskedColor& in) { GrColorComponentFlags flags = (in.fFlags & kA_GrColorComponentFlag) ? kRGBA_GrColorComponentFlags : kNone_GrColorComponentFlags; return MaskedColor(GrColorPackA4(0xFF - GrColorUnpackA(in.fColor)), flags); }
static MaskedColor SatAdd(const MaskedColor& a, const MaskedColor& b) { GrColorComponentFlags outFlags = (a.fFlags & b.fFlags) | a.componentsWithValue(0xFF) | b.componentsWithValue(0xFF); return MaskedColor(GrColorSatAdd(a.fColor, b.fColor), outFlags); }
static MaskedColor Invert(const MaskedColor& in) { return MaskedColor(GrInvertColor(in.fColor), in.fFlags); }