| Index: site/user/api/skpaint.md
|
| diff --git a/site/user/api/skpaint.md b/site/user/api/skpaint.md
|
| index 0323da554c3b3a3847d92dd05ecdc82ec7750eae..f6b81692baa0b51395bdf5b9a1c57bb2c05f69e7 100644
|
| --- a/site/user/api/skpaint.md
|
| +++ b/site/user/api/skpaint.md
|
| @@ -18,7 +18,7 @@ Unlike `SkCanvas`, paints do not maintain an internal stack of state
|
| (i.e. there is no save/restore on a paint). However, paints are
|
| relatively light-weight, so the client may create and maintain any
|
| number of paint objects, each set up for a particular use. Factoring
|
| -all of these color and stylistic attribute out of the canvas state,
|
| +all of these color and stylistic attributes out of the canvas state,
|
| and into (multiple) paint objects, allows canvas' save/restore to be
|
| that much more efficient, as all they have to do is maintain the stack
|
| of matrix and clip settings.
|
| @@ -52,8 +52,8 @@ of matrix and clip settings.
|
| canvas->drawText(text, strlen(text), 20.0f, 224.0f, paint3);
|
| }
|
|
|
| -<a href="https://fiddle.skia.org/c/c4cfc71ed9232dac9c0d6518311b386e">
|
| -<img src="https://fiddle.skia.org/i/c4cfc71ed9232dac9c0d6518311b386e_raster.png"></a>
|
| +<a href='https://fiddle.skia.org/c/@skpaint_skia'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_skia_raster.png'></a>
|
|
|
| This shows three different paints, each set up to draw in a different
|
| style. Now the caller can intermix these paints freely, either using
|
| @@ -78,8 +78,8 @@ them as is, or modifying them as the drawing proceeds.
|
| paint3.setColor(SK_ColorBLUE);
|
| canvas->drawText("SKIA", 4, 20, 220, paint3);
|
|
|
| -<a href="https://fiddle.skia.org/c/5203b17103f487dd33965b4211d80956">
|
| -<img src="https://fiddle.skia.org/i/5203b17103f487dd33965b4211d80956_raster.png"></a>
|
| +<a href='https://fiddle.skia.org/c/@skpaint_mix'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_mix_raster.png'></a>
|
|
|
| Beyond simple attributes such as color, strokes, and text values,
|
| paints support effects. These are subclasses of different aspects of
|
| @@ -92,25 +92,24 @@ assign a SkShader to the paint.
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| - SkPoint points[2] = {
|
| - SkPoint::Make(0.0f, 0.0f),
|
| - SkPoint::Make(256.0f, 256.0f)
|
| - };
|
| - SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
|
| - SkShader* shader =
|
| - SkGradientShader::CreateLinear(
|
| - points, colors, nullptr, 2,
|
| - SkShader::kClamp_TileMode, 0, nullptr);
|
| - SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| - canvas->drawPaint(paint);
|
| -
|
| -<a href="https://fiddle.skia.org/c/f91b5310d57744a5a1475b7e47d4a172">
|
| -<img src="https://fiddle.skia.org/i/f91b5310d57744a5a1475b7e47d4a172_raster.png"></a>
|
| + void draw(SkCanvas* canvas) {
|
| + SkPoint points[2] = {
|
| + SkPoint::Make(0.0f, 0.0f),
|
| + SkPoint::Make(256.0f, 256.0f)
|
| + };
|
| + SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
|
| + SkPaint paint;
|
| + paint.setShader(SkGradientShader::MakeLinear(
|
| + points, colors, nullptr, 2,
|
| + SkShader::kClamp_TileMode, 0, nullptr));
|
| + canvas->drawPaint(paint);
|
| + }
|
| +
|
| +<a href='https://fiddle.skia.org/c/@skpaint_shader'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_shader_raster.png'></a>
|
|
|
| Now, anything drawn with that paint will be drawn with the gradient
|
| -specified in the call to `CreateLinear()`. The shader object that is
|
| +specified in the call to `MakeLinear()`. The shader object that is
|
| returned is reference-counted. Whenever any effects object, like a
|
| shader, is assigned to a paint, its reference-count is increased by
|
| the paint. To balance this, the caller in the above example calls
|
| @@ -156,87 +155,86 @@ with a vertical alpha gradient.
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| - SkXfermode::Mode modes[] = {
|
| - SkXfermode::kClear_Mode,
|
| - SkXfermode::kSrc_Mode,
|
| - SkXfermode::kDst_Mode,
|
| - SkXfermode::kSrcOver_Mode,
|
| - SkXfermode::kDstOver_Mode,
|
| - SkXfermode::kSrcIn_Mode,
|
| - SkXfermode::kDstIn_Mode,
|
| - SkXfermode::kSrcOut_Mode,
|
| - SkXfermode::kDstOut_Mode,
|
| - SkXfermode::kSrcATop_Mode,
|
| - SkXfermode::kDstATop_Mode,
|
| - SkXfermode::kXor_Mode,
|
| - SkXfermode::kPlus_Mode,
|
| - SkXfermode::kModulate_Mode,
|
| - SkXfermode::kScreen_Mode,
|
| - SkXfermode::kOverlay_Mode,
|
| - SkXfermode::kDarken_Mode,
|
| - SkXfermode::kLighten_Mode,
|
| - SkXfermode::kColorDodge_Mode,
|
| - SkXfermode::kColorBurn_Mode,
|
| - SkXfermode::kHardLight_Mode,
|
| - SkXfermode::kSoftLight_Mode,
|
| - SkXfermode::kDifference_Mode,
|
| - SkXfermode::kExclusion_Mode,
|
| - SkXfermode::kMultiply_Mode,
|
| - SkXfermode::kHue_Mode,
|
| - SkXfermode::kSaturation_Mode,
|
| - SkXfermode::kColor_Mode,
|
| - SkXfermode::kLuminosity_Mode,
|
| - };
|
| - SkRect rect = SkRect::MakeWH(64.0f, 64.0f);
|
| - SkPaint text, stroke, src, dst;
|
| - stroke.setStyle(SkPaint::kStroke_Style);
|
| - text.setTextSize(24.0f);
|
| - text.setAntiAlias(true);
|
| - SkPoint srcPoints[2] = {
|
| - SkPoint::Make(0.0f, 0.0f),
|
| - SkPoint::Make(64.0f, 0.0f)
|
| - };
|
| - SkColor srcColors[2] = {
|
| - SK_ColorMAGENTA & 0x00FFFFFF,
|
| - SK_ColorMAGENTA};
|
| - SkAutoTUnref<SkShader> srcShader(
|
| - SkGradientShader::CreateLinear(
|
| - srcPoints, srcColors, nullptr, 2,
|
| - SkShader::kClamp_TileMode, 0, nullptr));
|
| - src.setShader(srcShader);
|
| -
|
| - SkPoint dstPoints[2] = {
|
| - SkPoint::Make(0.0f, 0.0f),
|
| - SkPoint::Make(0.0f, 64.0f)
|
| - };
|
| - SkColor dstColors[2] = {
|
| - SK_ColorCYAN & 0x00FFFFFF,
|
| - SK_ColorCYAN};
|
| - SkAutoTUnref<SkShader> dstShader(
|
| - SkGradientShader::CreateLinear(
|
| - dstPoints, dstColors, nullptr, 2,
|
| - SkShader::kClamp_TileMode, 0, nullptr));
|
| - dst.setShader(dstShader);
|
| - canvas->clear(SK_ColorWHITE);
|
| - size_t N = sizeof(modes) / sizeof(modes[0]);
|
| - size_t K = (N - 1) / 3 + 1;
|
| - SkASSERT(K * 64 == 640); // tall enough
|
| - for (size_t i = 0; i < N; ++i) {
|
| - SkAutoCanvasRestore autoCanvasRestore(canvas, true);
|
| - canvas->translate(192.0f * (i / K), 64.0f * (i % K));
|
| - const char* desc = SkXfermode::ModeName(modes[i]);
|
| - canvas->drawText(desc, strlen(desc), 68.0f, 30.0f, text);
|
| - canvas->clipRect(SkRect::MakeWH(64.0f, 64.0f));
|
| - canvas->drawColor(SK_ColorLTGRAY);
|
| - (void)canvas->saveLayer(nullptr, nullptr);
|
| - canvas->clear(SK_ColorTRANSPARENT);
|
| - canvas->drawPaint(dst);
|
| - src.setXfermodeMode(modes[i]);
|
| - canvas->drawPaint(src);
|
| - canvas->drawRect(rect, stroke);
|
| + void draw(SkCanvas* canvas) {
|
| + SkXfermode::Mode modes[] = {
|
| + SkXfermode::kClear_Mode,
|
| + SkXfermode::kSrc_Mode,
|
| + SkXfermode::kDst_Mode,
|
| + SkXfermode::kSrcOver_Mode,
|
| + SkXfermode::kDstOver_Mode,
|
| + SkXfermode::kSrcIn_Mode,
|
| + SkXfermode::kDstIn_Mode,
|
| + SkXfermode::kSrcOut_Mode,
|
| + SkXfermode::kDstOut_Mode,
|
| + SkXfermode::kSrcATop_Mode,
|
| + SkXfermode::kDstATop_Mode,
|
| + SkXfermode::kXor_Mode,
|
| + SkXfermode::kPlus_Mode,
|
| + SkXfermode::kModulate_Mode,
|
| + SkXfermode::kScreen_Mode,
|
| + SkXfermode::kOverlay_Mode,
|
| + SkXfermode::kDarken_Mode,
|
| + SkXfermode::kLighten_Mode,
|
| + SkXfermode::kColorDodge_Mode,
|
| + SkXfermode::kColorBurn_Mode,
|
| + SkXfermode::kHardLight_Mode,
|
| + SkXfermode::kSoftLight_Mode,
|
| + SkXfermode::kDifference_Mode,
|
| + SkXfermode::kExclusion_Mode,
|
| + SkXfermode::kMultiply_Mode,
|
| + SkXfermode::kHue_Mode,
|
| + SkXfermode::kSaturation_Mode,
|
| + SkXfermode::kColor_Mode,
|
| + SkXfermode::kLuminosity_Mode,
|
| + };
|
| + SkRect rect = SkRect::MakeWH(64.0f, 64.0f);
|
| + SkPaint text, stroke, src, dst;
|
| + stroke.setStyle(SkPaint::kStroke_Style);
|
| + text.setTextSize(24.0f);
|
| + text.setAntiAlias(true);
|
| + SkPoint srcPoints[2] = {
|
| + SkPoint::Make(0.0f, 0.0f),
|
| + SkPoint::Make(64.0f, 0.0f)
|
| + };
|
| + SkColor srcColors[2] = {
|
| + SK_ColorMAGENTA & 0x00FFFFFF,
|
| + SK_ColorMAGENTA};
|
| + src.setShader(SkGradientShader::MakeLinear(
|
| + srcPoints, srcColors, nullptr, 2,
|
| + SkShader::kClamp_TileMode, 0, nullptr));
|
| +
|
| + SkPoint dstPoints[2] = {
|
| + SkPoint::Make(0.0f, 0.0f),
|
| + SkPoint::Make(0.0f, 64.0f)
|
| + };
|
| + SkColor dstColors[2] = {
|
| + SK_ColorCYAN & 0x00FFFFFF,
|
| + SK_ColorCYAN};
|
| + dst.setShader(SkGradientShader::MakeLinear(
|
| + dstPoints, dstColors, nullptr, 2,
|
| + SkShader::kClamp_TileMode, 0, nullptr));
|
| + canvas->clear(SK_ColorWHITE);
|
| + size_t N = sizeof(modes) / sizeof(modes[0]);
|
| + size_t K = (N - 1) / 3 + 1;
|
| + SkASSERT(K * 64 == 640); // tall enough
|
| + for (size_t i = 0; i < N; ++i) {
|
| + SkAutoCanvasRestore autoCanvasRestore(canvas, true);
|
| + canvas->translate(192.0f * (i / K), 64.0f * (i % K));
|
| + const char* desc = SkXfermode::ModeName(modes[i]);
|
| + canvas->drawText(desc, strlen(desc), 68.0f, 30.0f, text);
|
| + canvas->clipRect(SkRect::MakeWH(64.0f, 64.0f));
|
| + canvas->drawColor(SK_ColorLTGRAY);
|
| + (void)canvas->saveLayer(nullptr, nullptr);
|
| + canvas->clear(SK_ColorTRANSPARENT);
|
| + canvas->drawPaint(dst);
|
| + src.setXfermodeMode(modes[i]);
|
| + canvas->drawPaint(src);
|
| + canvas->drawRect(rect, stroke);
|
| + }
|
| }
|
|
|
| -<a href="https://fiddle.skia.org/c/0a2392be5adf339ce6537799f2807f3c"><img src="https://fiddle.skia.org/i/0a2392be5adf339ce6537799f2807f3c_raster.png" alt=""></a>
|
| +<a href='https://fiddle.skia.org/c/@skpaint_xfer'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_xfer_raster.png'></a>
|
|
|
| <span id="ShShader"></span>
|
|
|
| @@ -253,54 +251,44 @@ Several shaders are defined (besides the linear gradient already mentioned):
|
| SkMatrix matrix;
|
| matrix.setScale(0.75f, 0.75f);
|
| matrix.preRotate(30.0f);
|
| - SkShader* shader =
|
| - SkShader::CreateBitmapShader(
|
| - source,
|
| - SkShader::kRepeat_TileMode ,
|
| - SkShader::kRepeat_TileMode ,
|
| - &matrix);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| + paint.setShader(SkShader::MakeBitmapShader(source,
|
| + SkShader::kRepeat_TileMode,
|
| + SkShader::kRepeat_TileMode,
|
| + &matrix));
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/0e8d08e0a0b342e9e45c364d0e5cea8a">
|
| - <img src="https://fiddle.skia.org/i/0e8d08e0a0b342e9e45c364d0e5cea8a_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_bitmap_shader'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_bitmap_shader_raster.png'></a>
|
|
|
| * Radial Gradient Shader
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
|
| - SkShader* shader =
|
| - SkGradientShader::CreateRadial(
|
| - SkPoint::Make(128.0f, 128.0f), 180.0f,
|
| - colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| + paint.setShader(SkGradientShader::MakeRadial(
|
| + SkPoint::Make(128.0f, 128.0f), 180.0f,
|
| + colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr));
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/601abd2819e38365900bf62286986024">
|
| - <img src="https://fiddle.skia.org/i/601abd2819e38365900bf62286986024_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_radial'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_radial_raster.png'></a>
|
|
|
| * Two-Point Conical Gradient Shader
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
|
| - SkShader* shader =
|
| - SkGradientShader::CreateTwoPointConical(
|
| - SkPoint::Make(128.0f, 128.0f), 128.0f,
|
| - SkPoint::Make(128.0f, 16.0f), 16.0f,
|
| - colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| + paint.setShader(SkGradientShader::MakeTwoPointConical(
|
| + SkPoint::Make(128.0f, 128.0f), 128.0f,
|
| + SkPoint::Make(128.0f, 16.0f), 16.0f,
|
| + colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr));
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/991f7d67ff1ccebd6c2c4fab18a76edc">
|
| - <img src="https://fiddle.skia.org/i/991f7d67ff1ccebd6c2c4fab18a76edc_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_2pt'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_2pt_raster.png'></a>
|
|
|
|
|
| * Sweep Gradient Shader
|
| @@ -309,69 +297,58 @@ Several shaders are defined (besides the linear gradient already mentioned):
|
|
|
| SkColor colors[4] = {
|
| SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW, SK_ColorCYAN};
|
| - SkShader* shader =
|
| - SkGradientShader::CreateSweep(
|
| - 128.0f, 128.0f, colors, nullptr, 4, 0, nullptr);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| + paint.setShader(SkGradientShader::MakeSweep(
|
| + 128.0f, 128.0f, colors, nullptr, 4, 0, nullptr));
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/cee9d1831f6679c3d88170f857995d12">
|
| - <img src="https://fiddle.skia.org/i/cee9d1831f6679c3d88170f857995d12_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_sweep'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_sweep_raster.png'></a>
|
|
|
| * Fractal Perlin Noise Shader
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| canvas->clear(SK_ColorWHITE);
|
| - SkShader* shader = SkPerlinNoiseShader::CreateFractalNoise(
|
| - 0.05f, 0.05f, 4, 0.0f, nullptr);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| + paint.setShader(SkPerlinNoiseShader::MakeFractalNoise(
|
| + 0.05f, 0.05f, 4, 0.0f, nullptr));
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/cc45c5349c3b31f97da7c1af7f84162a">
|
| - <img src="https://fiddle.skia.org/i/cc45c5349c3b31f97da7c1af7f84162a_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_perlin'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_perlin_raster.png'></a>
|
|
|
| * Turbulence Perlin Noise Shader
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| canvas->clear(SK_ColorWHITE);
|
| - SkShader* shader = SkPerlinNoiseShader::CreateTurbulence(
|
| - 0.05f, 0.05f, 4, 0.0f, nullptr);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| + paint.setShader(SkPerlinNoiseShader::MakeTurbulence(
|
| + 0.05f, 0.05f, 4, 0.0f, nullptr));
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/52729ed3a71b89a6dba4f60e8eb67727">
|
| - <img src="https://fiddle.skia.org/i/52729ed3a71b89a6dba4f60e8eb67727_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_turb'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_turb_raster.png'></a>
|
|
|
| * Compose Shader
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
|
| - SkShader* shader1 =
|
| - SkGradientShader::CreateRadial(
|
| - SkPoint::Make(128.0f, 128.0f), 180.0f,
|
| - colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr);
|
| - SkShader* shader2 = SkPerlinNoiseShader::CreateTurbulence(
|
| - 0.025f, 0.025f, 2, 0.0f, nullptr);
|
| - SkShader* shader =
|
| - new SkComposeShader(shader1, shader2);
|
| SkPaint paint;
|
| - paint.setShader(shader);
|
| - shader->unref();
|
| - shader2->unref();
|
| - shader1->unref();
|
| + paint.setShader(
|
| + SkShader::MakeComposeShader(
|
| + SkGradientShader::MakeRadial(
|
| + SkPoint::Make(128.0f, 128.0f), 180.0f,
|
| + colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr),
|
| + SkPerlinNoiseShader::MakeTurbulence(0.025f, 0.025f, 2, 0.0f, nullptr),
|
| + SkXfermode::kDifference_Mode)
|
| + );
|
| canvas->drawPaint(paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/1209b7a29d870302edcc43dc0916e8d5">
|
| - <img src="https://fiddle.skia.org/i/1209b7a29d870302edcc43dc0916e8d5_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_compose_shader'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_compose_shader_raster.png'></a>
|
|
|
|
|
| <span id="SkMaskFilter"></span>
|
| @@ -383,20 +360,18 @@ SkMaskFilter
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| + canvas->drawText(text, strlen(text), 0, 160, paint);
|
| canvas->drawColor(SK_ColorWHITE);
|
| SkPaint paint;
|
| paint.setAntiAlias(true);
|
| paint.setTextSize(120);
|
| - SkMaskFilter* filter =
|
| - SkBlurMaskFilter::Create(
|
| - kNormal_SkBlurStyle, 5.0f, 0);
|
| - paint.setMaskFilter(filter);
|
| - filter->unref();
|
| + paint.setMaskFilter(SkBlurMaskFilter::Make(
|
| + kNormal_SkBlurStyle, 5.0f, 0));
|
| const char text[] = "Skia";
|
| canvas->drawText(text, strlen(text), 0, 160, paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/0e004664122851691d67a291007b64d7">
|
| - <img src="https://fiddle.skia.org/i/0e004664122851691d67a291007b64d7_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_blur_mask_filter'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_blur_mask_filter_raster.png'></a>
|
|
|
| * Emboss Mask Filter
|
|
|
| @@ -407,16 +382,13 @@ SkMaskFilter
|
| paint.setAntiAlias(true);
|
| paint.setTextSize(120);
|
| SkScalar direction[3] = {1.0f, 1.0f, 1.0f};
|
| - SkMaskFilter* filter =
|
| - SkBlurMaskFilter::CreateEmboss(
|
| - 2.0f, direction, 0.3f, 0.1f);
|
| - paint.setMaskFilter(filter);
|
| - filter->unref();
|
| + paint.setMaskFilter(SkBlurMaskFilter::MakeEmboss(
|
| + 2.0f, direction, 0.3f, 0.1f));
|
| const char text[] = "Skia";
|
| canvas->drawText(text, strlen(text), 0, 160, paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/1ef71be7fb749a2d81a55721b2d2c77d">
|
| - <img src="https://fiddle.skia.org/i/1ef71be7fb749a2d81a55721b2d2c77d_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_emboss'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_emboss_raster.png'></a>
|
|
|
|
|
| <span id="SkColorFilter"></span>
|
| @@ -429,12 +401,11 @@ SkColorFilter
|
| <!--?prettify lang=cc?-->
|
|
|
| void f(SkCanvas* c, SkScalar x, SkScalar y, SkScalar colorMatrix[20]) {
|
| - SkColorFilter* cf = SkColorMatrixFilter::Create(colorMatrix);
|
| SkPaint paint;
|
| - paint.setColorFilter(cf);
|
| - cf->unref();
|
| + paint.setColorFilter(SkColorFilter::MakeMatrixFilterRowMajor255(colorMatrix));
|
| c->drawBitmap(source, x, y, &paint);
|
| }
|
| +
|
| void draw(SkCanvas* c) {
|
| c->scale(0.25, 0.25);
|
| SkScalar colorMatrix1[20] = {
|
| @@ -494,27 +465,27 @@ SkColorFilter
|
| f(c, 1536, 512, inverter);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/91fb5341ee7903c9682df20bb3d73dbb">
|
| - <img src="https://fiddle.skia.org/i/91fb5341ee7903c9682df20bb3d73dbb_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_matrix_color_filter'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_matrix_color_filter_raster.png'></a>
|
|
|
| * Color Table Color Filter
|
|
|
| <!--?prettify lang=cc?-->
|
|
|
| - canvas->scale(0.5, 0.5);
|
| - uint8_t ct[256];
|
| - for (int i = 0; i < 256; ++i) {
|
| - int x = (i - 96) * 255 / 64;
|
| - ct[i] = x < 0 ? 0 : x > 255 ? 255 : x;
|
| + void draw(SkCanvas* canvas) {
|
| + canvas->scale(0.5, 0.5);
|
| + uint8_t ct[256];
|
| + for (int i = 0; i < 256; ++i) {
|
| + int x = (i - 96) * 255 / 64;
|
| + ct[i] = x < 0 ? 0 : x > 255 ? 255 : x;
|
| + }
|
| + SkPaint paint;
|
| + paint.setColorFilter(SkTableColorFilter::MakeARGB(nullptr, ct, ct, ct));
|
| + canvas->drawBitmap(source, 0, 0, &paint);
|
| }
|
| - SkColorFilter* cf = SkTableColorFilter::CreateARGB(nullptr, ct, ct, ct);
|
| - SkPaint paint;
|
| - paint.setColorFilter(cf);
|
| - cf->unref();
|
| - canvas->drawBitmap(source, 0, 0, &paint);
|
|
|
| - <a href="https://fiddle.skia.org/c/0d3d339543afa1b10c60f9826f264c3f">
|
| - <img src="https://fiddle.skia.org/i/0d3d339543afa1b10c60f9826f264c3f_raster.png"></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_color_table_filter'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_color_table_filter_raster.png'></a>
|
|
|
|
|
| <span id="SkPathEffect"></span>
|
| @@ -528,8 +499,8 @@ SkPathEffect
|
| <!--?prettify lang=cc?-->
|
|
|
| void draw(SkCanvas* canvas) {
|
| - SkScalar scale = 10.0f;
|
| - SkPath path;
|
| + SkScalar scale = 10.0f;
|
| + SkPath path;
|
| static const int8_t pts[] = { 2, 2, 1, 3, 0, 3, 2, 1, 3, 1,
|
| 4, 0, 4, 1, 5, 1, 4, 2, 4, 3, 2, 5, 2, 4, 3, 3, 2, 3 };
|
| path.moveTo(2 * scale, 3 * scale);
|
| @@ -538,10 +509,8 @@ SkPathEffect
|
| }
|
| path.close();
|
| SkMatrix matrix = SkMatrix::MakeScale(4 * scale);
|
| - SkAutoTUnref<SkPathEffect> pathEffect(
|
| - SkPath2DPathEffect::Create(matrix, path));
|
| SkPaint paint;
|
| - paint.setPathEffect(pathEffect);
|
| + paint.setPathEffect(SkPath2DPathEffect::Make(matrix, path));
|
| paint.setAntiAlias(true);
|
| canvas->clear(SK_ColorWHITE);
|
| SkRect bounds;
|
| @@ -550,7 +519,8 @@ SkPathEffect
|
| canvas->drawRect(bounds, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/aae271e4f0178455f0e128981d714d73"><img src="https://fiddle.skia.org/i/aae271e4f0178455f0e128981d714d73_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_path_2d_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_path_2d_path_effect_raster.png'></a>
|
|
|
| * SkLine2DPathEffect: a special case of SkPath2DPathEffect where the
|
| path is a straight line to be stroked, not a path to be filled.
|
| @@ -562,9 +532,7 @@ SkPathEffect
|
| SkMatrix lattice;
|
| lattice.setScale(8.0f, 8.0f);
|
| lattice.preRotate(30.0f);
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkLine2DPathEffect::Create(0.0f, lattice));
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkLine2DPathEffect::Make(0.0f, lattice));
|
| paint.setAntiAlias(true);
|
| SkRect bounds;
|
| (void)canvas->getClipBounds(&bounds);
|
| @@ -573,7 +541,8 @@ SkPathEffect
|
| canvas->drawRect(bounds, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/3f49502145886920f95d43912e0f550d"><img src="https://fiddle.skia.org/i/3f49502145886920f95d43912e0f550d_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_line_2d_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_line_2d_path_effect_raster.png'></a>
|
|
|
| * SkPath1DPathEffect: create dash-like effects by replicating the specified path along the drawn path.
|
|
|
| @@ -583,16 +552,15 @@ SkPathEffect
|
| SkPaint paint;
|
| SkPath path;
|
| path.addOval(SkRect::MakeWH(16.0f, 6.0f));
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkPath1DPathEffect::Create(
|
| + paint.setPathEffect(SkPath1DPathEffect::Make(
|
| path, 32.0f, 0.0f, SkPath1DPathEffect::kRotate_Style));
|
| - paint.setPathEffect(pe);
|
| paint.setAntiAlias(true);
|
| canvas->clear(SK_ColorWHITE);
|
| canvas->drawCircle(128.0f, 128.0f, 122.0f, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/756a8cdb9458c05f6c1c7c398d979dac"><img src="https://fiddle.skia.org/i/756a8cdb9458c05f6c1c7c398d979dac_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_path_1d_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_path_1d_path_effect_raster.png'></a>
|
|
|
| * SkArcToPathEffect
|
|
|
| @@ -604,21 +572,15 @@ SkPathEffect
|
| const SkScalar R = 115.2f, C = 128.0f;
|
| SkPath path;
|
| path.moveTo(C + R, C);
|
| - for (int i = 1; i < 7; ++i) {
|
| + for (int i = 1; i < 8; ++i) {
|
| SkScalar a = 2.6927937f * i;
|
| path.lineTo(C + R * cos(a), C + R * sin(a));
|
| }
|
| - path.close();
|
| return path;
|
| }
|
| -
|
| - <!--?prettify lang=cc?-->
|
| -
|
| void draw(SkCanvas* canvas) {
|
| SkPaint paint;
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkArcToPathEffect::Create(8.0f));
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkArcToPathEffect::Make(8.0f));
|
| paint.setStyle(SkPaint::kStroke_Style);
|
| paint.setAntiAlias(true);
|
| canvas->clear(SK_ColorWHITE);
|
| @@ -626,7 +588,9 @@ SkPathEffect
|
| canvas->drawPath(path, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/1cc2a1363dd0e96954e084f7ca29aa5f"><img src="https://fiddle.skia.org/i/1cc2a1363dd0e96954e084f7ca29aa5f_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_arc_to_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_arc_to_path_effect_raster.png'></a>
|
| +
|
|
|
| * SkCornerPathEffect: a path effect that can turn sharp corners into
|
| various treatments (e.g. rounded corners).
|
| @@ -635,9 +599,7 @@ SkPathEffect
|
|
|
| void draw(SkCanvas* canvas) {
|
| SkPaint paint;
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkCornerPathEffect::Create(32.0f));
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkCornerPathEffect::Make(32.0f));
|
| paint.setStyle(SkPaint::kStroke_Style);
|
| paint.setAntiAlias(true);
|
| canvas->clear(SK_ColorWHITE);
|
| @@ -646,7 +608,7 @@ SkPathEffect
|
| canvas->drawPath(path, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/f5361bbb33ad43c656dd40bb03ee2114"><img src="https://fiddle.skia.org/i/f5361bbb33ad43c656dd40bb03ee2114_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_corner_path_effects'><img src='https://fiddle.skia.org/c/@skpaint_corner_path_effects_raster.png'></a>
|
|
|
| * SkDashPathEffect: a path effect that implements dashing.
|
|
|
| @@ -655,10 +617,8 @@ SkPathEffect
|
| void draw(SkCanvas* canvas) {
|
| const SkScalar intervals[] = { 10.0f, 5.0f, 2.0f, 5.0f };
|
| size_t count = sizeof(intervals) / sizeof(intervals[0]);
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkDashPathEffect::Create(intervals, count, 0.0f));
|
| SkPaint paint;
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkDashPathEffect::Make(intervals, count, 0.0f));
|
| paint.setStyle(SkPaint::kStroke_Style);
|
| paint.setStrokeWidth(2.0f);
|
| paint.setAntiAlias(true);
|
| @@ -667,7 +627,7 @@ SkPathEffect
|
| canvas->drawPath(path, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/d221ced999a80ac23870d0301ffeedad"><img src="https://fiddle.skia.org/i/d221ced999a80ac23870d0301ffeedad_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_dash_path_effect'><img src='https://fiddle.skia.org/c/@skpaint_dash_path_effect_raster.png'></a>
|
|
|
| * SkDiscretePathEffect: This path effect chops a path into discrete
|
| segments, and randomly displaces them.
|
| @@ -675,10 +635,8 @@ SkPathEffect
|
| <!--?prettify lang=cc?-->
|
|
|
| void draw(SkCanvas* canvas) {
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkDiscretePathEffect::Create(10.0f, 4.0f));
|
| SkPaint paint;
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkDiscretePathEffect::Make(10.0f, 4.0f));
|
| paint.setStyle(SkPaint::kStroke_Style);
|
| paint.setStrokeWidth(2.0f);
|
| paint.setAntiAlias(true);
|
| @@ -687,7 +645,8 @@ SkPathEffect
|
| canvas->drawPath(path, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/af2f177438b376ca45cfffc29cc0177a"><img src="https://fiddle.skia.org/i/af2f177438b376ca45cfffc29cc0177a_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_discrete_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_discrete_path_effect_raster.png'></a>
|
|
|
| * SkComposePathEffect: a pathEffect whose effect is to apply
|
| first the inner pathEffect and the the outer pathEffect (i.e.
|
| @@ -696,16 +655,13 @@ SkPathEffect
|
| <!--?prettify lang=cc?-->
|
|
|
| void draw(SkCanvas* canvas) {
|
| - SkAutoTUnref<SkPathEffect> pe0(
|
| - SkDiscretePathEffect::Create(10.0f, 4.0f));
|
| const SkScalar intervals[] = { 10.0f, 5.0f, 2.0f, 5.0f };
|
| size_t count = sizeof(intervals) / sizeof(intervals[0]);
|
| - SkAutoTUnref<SkPathEffect> pe1(
|
| - SkDashPathEffect::Create(intervals, count, 0.0f));
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkComposePathEffect::Create(pe1, pe0));
|
| SkPaint paint;
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkComposePathEffect::Make(
|
| + SkDashPathEffect::Make(intervals, count, 0.0f),
|
| + SkDiscretePathEffect::Make(10.0f, 4.0f)
|
| + ));
|
| paint.setStyle(SkPaint::kStroke_Style);
|
| paint.setStrokeWidth(2.0f);
|
| paint.setAntiAlias(true);
|
| @@ -714,7 +670,8 @@ SkPathEffect
|
| canvas->drawPath(path, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/39a644161da79e8b5e49c193adac7173"><img src="https://fiddle.skia.org/i/39a644161da79e8b5e49c193adac7173_raster.png" alt=""></a>
|
| + <a href='https://fiddle.skia.org/c/@skpaint_compose_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_compose_path_effect_raster.png'></a>
|
|
|
| * SkSumPathEffect: a pathEffect whose effect is to apply two effects,
|
| in sequence (i.e. first(path) + second(path)).
|
| @@ -722,14 +679,11 @@ SkPathEffect
|
| <!--?prettify lang=cc?-->
|
|
|
| void draw(SkCanvas* canvas) {
|
| - SkAutoTUnref<SkPathEffect> pe0(
|
| - SkDiscretePathEffect::Create(10.0f, 4.0f));
|
| - SkAutoTUnref<SkPathEffect> pe1(
|
| - SkDiscretePathEffect::Create(10.0f, 4.0f, 1245u));
|
| - SkAutoTUnref<SkPathEffect> pe(
|
| - SkSumPathEffect::Create(pe1, pe0));
|
| SkPaint paint;
|
| - paint.setPathEffect(pe);
|
| + paint.setPathEffect(SkSumPathEffect::Make(
|
| + SkDiscretePathEffect::Make(10.0f, 4.0f),
|
| + SkDiscretePathEffect::Make(10.0f, 4.0f, 1245u)
|
| + ));
|
| paint.setStyle(SkPaint::kStroke_Style);
|
| paint.setStrokeWidth(2.0f);
|
| paint.setAntiAlias(true);
|
| @@ -738,9 +692,6 @@ SkPathEffect
|
| canvas->drawPath(path, paint);
|
| }
|
|
|
| - <a href="https://fiddle.skia.org/c/e5f7861072893bd08c305a076bf32958"><img src="https://fiddle.skia.org/i/e5f7861072893bd08c305a076bf32958_raster.png" alt=""></a>
|
| -
|
| -<!--
|
| - <a href="https://fiddle.skia.org/c/"><img src="https://fiddle.skia.org/i/_raster.png" alt=""></a>
|
| --->
|
| + <a href='https://fiddle.skia.org/c/@skpaint_sum_path_effect'><img
|
| + src='https://fiddle.skia.org/c/@skpaint_sum_path_effect_raster.png'></a>
|
|
|
|
|