48 paint.setAntiAlias(
true);
59 paint.setBlendMode(mode);
60 for (
int angle = 0; angle < 24; ++angle) {
97 constexpr SkAlpha gAlphaValue[] = { 0xFF, 0x88, 0x88 };
101 for (
int alpha = 0; alpha < 4; ++alpha) {
104 for (
size_t i = 0; i < std::size(
gModes); ++i) {
114 gAlphaValue[alpha & 1],
115 gAlphaValue[alpha & 2]);
127 using INHERITED =
GM;
132 DEF_GM(
return new HairModesGM; )
@ kSrcOver
r = s + (1-sa)*d
@ kXor
r = s*(1-da) + d*(1-sa)
@ kSrcATop
r = s*da + d*(1-sa)
@ kDstATop
r = d*sa + s*(1-da)
@ kDstOver
r = d + (1-da)*s
static SkPMColor SkPackARGB32(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
constexpr SkColor SK_ColorBLUE
constexpr SkColor SK_ColorRED
#define SkScalarSin(radians)
#define SkScalarCos(radians)
static sk_sp< SkShader > make_bg_shader()
static SkScalar drawCell(SkCanvas *canvas, SkBlendMode mode, SkAlpha a0, SkAlpha a1)
constexpr SkBlendMode gModes[]
sk_sp< SkShader > makeShader(SkTileMode tmx, SkTileMode tmy, const SkSamplingOptions &, const SkMatrix *localMatrix=nullptr) const
void allocN32Pixels(int width, int height, bool isOpaque=false)
uint32_t * getAddr32(int x, int y) const
int saveLayer(const SkRect *bounds, const SkPaint *paint)
void drawRect(const SkRect &rect, const SkPaint &paint)
void drawOval(const SkRect &oval, const SkPaint &paint)
void translate(SkScalar dx, SkScalar dy)
void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const SkPaint &paint)
void setShader(sk_sp< SkShader > shader)
SkString getName() const override
void onDraw(SkCanvas *canvas) override
void onOnceBeforeDraw() override
SkISize getISize() override
static sk_sp< SkShader > make_bg_shader()
static SkScalar drawCell(SkCanvas *canvas, SkBlendMode mode, SkAlpha a0, SkAlpha a1)
constexpr SkBlendMode gModes[]
static constexpr SkISize Make(int32_t w, int32_t h)
void inset(float dx, float dy)
static constexpr SkRect MakeWH(float w, float h)