aboutsummaryrefslogtreecommitdiffhomepage
path: root/site/user
diff options
context:
space:
mode:
authorGravatar Joe Gregorio <jcgregorio@google.com>2017-02-15 12:54:08 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-15 19:53:59 +0000
commitca4c60f5413ba2af4ddfce7160ddd226e8738e02 (patch)
tree3f864e019d39e7a8d57a8f04c871565e94b25ff3 /site/user
parent3614d9adb328ccf3fc37f8e530f5f530330e37b4 (diff)
Move documentation to use the embedded fiddle elements.
Now code and images will always be in sync, and users can edit and run the fiddles that are inline with the docs. Previews: https://skia.org/user/api/skcanvas?cl=8507 https://skia.org/user/api/skpaint?cl=8507 BUG=skia: NOTRY=true DOCS_PREVIEW= https://skia.org/?cl=8507 Change-Id: Iaf62d98d9aa73cf7b4e4a6baa522402ecb9e505a Reviewed-on: https://skia-review.googlesource.com/8507 Reviewed-by: Hal Canary <halcanary@google.com> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'site/user')
-rw-r--r--site/user/api/skcanvas.md86
-rw-r--r--site/user/api/skpaint.md525
2 files changed, 26 insertions, 585 deletions
diff --git a/site/user/api/skcanvas.md b/site/user/api/skcanvas.md
index 659cbf14a5..a1e3428a32 100644
--- a/site/user/api/skcanvas.md
+++ b/site/user/api/skcanvas.md
@@ -12,28 +12,7 @@ Here is an example of a set of drawing commands to draw a filled
heptagram. This function can be cut and pasted into
[fiddle.skia.org](https://fiddle.skia.org/).
-<!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- const SkScalar scale = 256.0f;
- const SkScalar R = 0.45f * scale;
- const SkScalar TAU = 6.2831853f;
- SkPath path;
- path.moveTo(R, 0.0f);
- for (int i = 1; i < 7; ++i) {
- SkScalar theta = 3 * i * TAU / 7;
- path.lineTo(R * cos(theta), R * sin(theta));
- }
- path.close();
- SkPaint p;
- p.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- canvas->translate(0.5f * scale, 0.5f * scale);
- canvas->drawPath(path, p);
- }
-
-<a href='https://fiddle.skia.org/c/@skcanvas_star'><img
- src='https://fiddle.skia.org/i/@skcanvas_star_raster.png'></a>
+<fiddle-embed name='@skcanvas_star'></fiddle-embed>
Details
-------
@@ -46,21 +25,7 @@ store any other drawing attributes in the context (e.g. color, pen
size). Rather, these are specified explicitly in each draw call, via a
SkPaint.
-<!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- canvas->save();
- canvas->translate(SkIntToScalar(128), SkIntToScalar(128));
- canvas->rotate(SkIntToScalar(45));
- SkRect rect = SkRect::MakeXYWH(-90.5f, -90.5f, 181.0f, 181.0f);
- SkPaint paint;
- paint.setColor(SK_ColorBLUE);
- canvas->drawRect(rect, paint);
- canvas->restore();
- }
-
-<a href='https://fiddle.skia.org/c/@skcanvas_square'><img
- src='https://fiddle.skia.org/i/@skcanvas_square_raster.png'></a>
+<fiddle-embed name='@skcanvas_square'></fiddle-embed>
The code above will draw a rectangle rotated by 45 degrees. Exactly
what color and style the rect will be drawn in is described by the
@@ -96,52 +61,7 @@ drawColor(), and save yourself having to allocate a paint.
All of the other draw APIs are similar, each one ending with a paint
parameter.
-<!--?prettify lang=cc?-->
-
- SkBitmap source;
-
- void draw(SkCanvas* canvas) {
- canvas->drawColor(SK_ColorWHITE);
-
- SkPaint paint;
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setStrokeWidth(4);
- paint.setColor(SK_ColorRED);
-
- SkRect rect = SkRect::MakeXYWH(50, 50, 40, 60);
- canvas->drawRect(rect, paint);
-
- SkRRect oval;
- oval.setOval(rect);
- oval.offset(40, 60);
- paint.setColor(SK_ColorBLUE);
- canvas->drawRRect(oval, paint);
-
- paint.setColor(SK_ColorCYAN);
- canvas->drawCircle(180, 50, 25, paint);
-
- rect.offset(80, 0);
- paint.setColor(SK_ColorYELLOW);
- canvas->drawRoundRect(rect, 10, 10, paint);
-
- SkPath path;
- path.cubicTo(768, 0, -512, 256, 256, 256);
- paint.setColor(SK_ColorGREEN);
- canvas->drawPath(path, paint);
-
- canvas->drawImage(image, 128, 128, &paint);
-
- SkRect rect2 = SkRect::MakeXYWH(0, 0, 40, 60);
- canvas->drawImageRect(image, rect2, &paint);
-
- SkPaint paint2;
- const char text[] = "Hello, Skia!";
- canvas->drawText(text, strlen(text), 50, 25, paint2);
- }
-
-
-<a href='https://fiddle.skia.org/c/@skcanvas_paint'><img
- src='https://fiddle.skia.org/i/@skcanvas_paint_raster.png'></a>
+<fiddle-embed name='@skcanvas_paint'></fiddle-embed>
In some of the calls, we pass a pointer, rather than a reference, to
the paint. In those instances, the paint parameter may be null. In all
diff --git a/site/user/api/skpaint.md b/site/user/api/skpaint.md
index a1e17eed26..0d404cacc8 100644
--- a/site/user/api/skpaint.md
+++ b/site/user/api/skpaint.md
@@ -29,63 +29,13 @@ 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.
-<!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- canvas->clear(SK_ColorWHITE);
-
- SkPaint paint1, paint2, paint3;
-
- paint1.setTextSize(64.0f);
- paint1.setAntiAlias(true);
- paint1.setColor(SkColorSetRGB(255, 0, 0));
- paint1.setStyle(SkPaint::kFill_Style);
-
- paint2.setTextSize(64.f);
- paint2.setAntiAlias(true);
- paint2.setColor(SkColorSetRGB(0, 136, 0));
- paint2.setStyle(SkPaint::kStroke_Style);
- paint2.setStrokeWidth(SkIntToScalar(3));
-
- paint3.setTextSize(64.0f);
- paint3.setAntiAlias(true);
- paint3.setColor(SkColorSetRGB(136, 136, 136));
- paint3.setTextScaleX(SkFloatToScalar(1.5f));
-
- const char text[] = "Skia!";
- canvas->drawText(text, strlen(text), 20.0f, 64.0f, paint1);
- canvas->drawText(text, strlen(text), 20.0f, 144.0f, paint2);
- canvas->drawText(text, strlen(text), 20.0f, 224.0f, paint3);
- }
-
-<a href='https://fiddle.skia.org/c/@skpaint_skia'><img
- src='https://fiddle.skia.org/i/@skpaint_skia_raster.png'></a>
+<fiddle-embed name='@skpaint_skia'></fiddle-embed>
This shows three different paints, each set up to draw in a different
style. Now the caller can intermix these paints freely, either using
them as is, or modifying them as the drawing proceeds.
-<!--?prettify lang=cc?-->
-
- SkPaint paint1, paint2, paint3;
- paint2.setStyle(SkPaint::kStroke_Style);
- paint2.setStrokeWidth(3);
- paint3.setAntiAlias(true);
- paint3.setColor(SK_ColorRED);
- paint3.setTextSize(80);
-
- canvas->drawRect(SkRect::MakeXYWH(10,10,60,20), paint1);
- canvas->drawRect(SkRect::MakeXYWH(80,10,60,20), paint2);
-
- paint2.setStrokeWidth(SkIntToScalar(5));
- canvas->drawOval(SkRect::MakeXYWH(150,10,60,20), paint2);
-
- canvas->drawText("SKIA", 4, 20, 120, paint3);
- paint3.setColor(SK_ColorBLUE);
- canvas->drawText("SKIA", 4, 20, 220, paint3);
-
-<a href='https://fiddle.skia.org/c/@skpaint_mix'><img
- src='https://fiddle.skia.org/i/@skpaint_mix_raster.png'></a>
+<fiddle-embed name='@skpaint_mix'></fiddle-embed>
Beyond simple attributes such as color, strokes, and text values,
paints support effects. These are subclasses of different aspects of
@@ -96,23 +46,7 @@ pipeline.
For example, to draw using a gradient instead of a single color,
assign a SkShader to the paint.
-<!--?prettify lang=cc?-->
-
- 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/i/@skpaint_shader_raster.png'></a>
+<fiddle-embed name='@skpaint_shader'></fiddle-embed>
Now, anything drawn with that paint will be drawn with the gradient
specified in the call to `MakeLinear()`. The shader object that is
@@ -159,88 +93,7 @@ modes. In this example the source is a solid magenta color with a
horizontal alpha gradient and the destination is a solid cyan color
with a vertical alpha gradient.
-<!--?prettify lang=cc?-->
-
- 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/@skpaint_xfer'><img
- src='https://fiddle.skia.org/i/@skpaint_xfer_raster.png'></a>
+<fiddle-embed name='@skpaint_xfer'></fiddle-embed>
<span id="SkShader"></span>
@@ -251,111 +104,32 @@ Several shaders are defined (besides the linear gradient already mentioned):
* Bitmap Shader
- <!--?prettify lang=cc?-->
-
- canvas->clear(SK_ColorWHITE);
- SkMatrix matrix;
- matrix.setScale(0.75f, 0.75f);
- matrix.preRotate(30.0f);
- SkPaint paint;
- paint.setShader(
- image->makeShader(
- SkShader::kRepeat_TileMode,
- SkShader::kRepeat_TileMode,
- &matrix));
- canvas->drawPaint(paint);
-
- <a href='https://fiddle.skia.org/c/@skpaint_bitmap_shader'><img
- src='https://fiddle.skia.org/i/@skpaint_bitmap_shader_raster.png'></a>
+ <fiddle-embed name='@skpaint_bitmap_shader'></fiddle-embed>
* Radial Gradient Shader
- <!--?prettify lang=cc?-->
-
- SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
- SkPaint paint;
- 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/@skpaint_radial'><img
- src='https://fiddle.skia.org/i/@skpaint_radial_raster.png'></a>
+ <fiddle-embed name='@skpaint_radial'></fiddle-embed>
* Two-Point Conical Gradient Shader
- <!--?prettify lang=cc?-->
-
- SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
- SkPaint paint;
- 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/@skpaint_2pt'><img
- src='https://fiddle.skia.org/i/@skpaint_2pt_raster.png'></a>
+ <fiddle-embed name='@skpaint_2pt'></fiddle-embed>
* Sweep Gradient Shader
- <!--?prettify lang=cc?-->
-
- SkColor colors[4] = {
- SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW, SK_ColorCYAN};
- SkPaint paint;
- paint.setShader(SkGradientShader::MakeSweep(
- 128.0f, 128.0f, colors, nullptr, 4, 0, nullptr));
- canvas->drawPaint(paint);
-
- <a href='https://fiddle.skia.org/c/@skpaint_sweep'><img
- src='https://fiddle.skia.org/i/@skpaint_sweep_raster.png'></a>
+ <fiddle-embed name='@skpaint_sweep'></fiddle-embed>
* Fractal Perlin Noise Shader
- <!--?prettify lang=cc?-->
-
- canvas->clear(SK_ColorWHITE);
- SkPaint paint;
- paint.setShader(SkPerlinNoiseShader::MakeFractalNoise(
- 0.05f, 0.05f, 4, 0.0f, nullptr));
- canvas->drawPaint(paint);
-
- <a href='https://fiddle.skia.org/c/@skpaint_perlin'><img
- src='https://fiddle.skia.org/i/@skpaint_perlin_raster.png'></a>
+ <fiddle-embed name='@skpaint_perlin'></fiddle-embed>
* Turbulence Perlin Noise Shader
- <!--?prettify lang=cc?-->
-
- canvas->clear(SK_ColorWHITE);
- SkPaint paint;
- paint.setShader(SkPerlinNoiseShader::MakeTurbulence(
- 0.05f, 0.05f, 4, 0.0f, nullptr));
- canvas->drawPaint(paint);
-
- <a href='https://fiddle.skia.org/c/@skpaint_turb'><img
- src='https://fiddle.skia.org/i/@skpaint_turb_raster.png'></a>
+ <fiddle-embed name='@skpaint_turb'></fiddle-embed>
* Compose Shader
- <!--?prettify lang=cc?-->
-
- SkColor colors[2] = {SK_ColorBLUE, SK_ColorYELLOW};
- SkPaint paint;
- 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/@skpaint_compose_shader'><img
- src='https://fiddle.skia.org/i/@skpaint_compose_shader_raster.png'></a>
+ <fiddle-embed name='@skpaint_compose_shader'></fiddle-embed>
<span id="SkMaskFilter"></span>
@@ -365,20 +139,7 @@ SkMaskFilter
* Blur Mask Filter
- <!--?prettify lang=cc?-->
-
- canvas->drawText(text, strlen(text), 0, 160, paint);
- canvas->drawColor(SK_ColorWHITE);
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setTextSize(120);
- 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/@skpaint_blur_mask_filter'><img
- src='https://fiddle.skia.org/i/@skpaint_blur_mask_filter_raster.png'></a>
+ <fiddle-embed name='@skpaint_blur_mask_filter'></fiddle-embed>
<span id="SkColorFilter"></span>
@@ -388,96 +149,11 @@ SkColorFilter
* Color Matrix Color Filter
- <!--?prettify lang=cc?-->
-
- void f(SkCanvas* c, SkScalar x, SkScalar y, SkScalar colorMatrix[20]) {
- SkPaint paint;
- paint.setColorFilter(SkColorFilter::MakeMatrixFilterRowMajor255(colorMatrix));
- c->drawImage(image, x, y, &paint);
- }
-
- void draw(SkCanvas* c) {
- c->scale(0.25, 0.25);
- SkScalar colorMatrix1[20] = {
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0};
- f(c, 0, 0, colorMatrix1);
-
- SkScalar grayscale[20] = {
- 0.21, 0.72, 0.07, 0.0, 0.0,
- 0.21, 0.72, 0.07, 0.0, 0.0,
- 0.21, 0.72, 0.07, 0.0, 0.0,
- 0.0, 0.0, 0.0, 1.0, 0.0};
- f(c, 512, 0, grayscale);
-
- SkScalar colorMatrix3[20] = {
- -1, 1, 1, 0, 0,
- 1, -1, 1, 0, 0,
- 1, 1, -1, 0, 0,
- 0, 0, 0, 1, 0};
- f(c, 0, 512, colorMatrix3);
-
- SkScalar colorMatrix4[20] = {
- 0.0, 0.5, 0.5, 0, 0,
- 0.5, 0.0, 0.5, 0, 0,
- 0.5, 0.5, 0.0, 0, 0,
- 0.0, 0.0, 0.0, 1, 0};
- f(c, 512, 512, colorMatrix4);
-
- SkScalar highContrast[20] = {
- 4.0, 0.0, 0.0, 0.0, -4.0 * 255 / (4.0 - 1),
- 0.0, 4.0, 0.0, 0.0, -4.0 * 255 / (4.0 - 1),
- 0.0, 0.0, 4.0, 0.0, -4.0 * 255 / (4.0 - 1),
- 0.0, 0.0, 0.0, 1.0, 0.0};
- f(c, 1024, 0, highContrast);
-
- SkScalar colorMatrix6[20] = {
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0};
- f(c, 1024, 512, colorMatrix6);
-
- SkScalar sepia[20] = {
- 0.393, 0.769, 0.189, 0.0, 0.0,
- 0.349, 0.686, 0.168, 0.0, 0.0,
- 0.272, 0.534, 0.131, 0.0, 0.0,
- 0.0, 0.0, 0.0, 1.0, 0.0};
- f(c, 1536, 0, sepia);
-
- SkScalar inverter[20] = {
- -1, 0, 0, 0, 255,
- 0, -1, 0, 0, 255,
- 0, 0, -1, 0, 255,
- 0, 0, 0, 1, 0};
- f(c, 1536, 512, inverter);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_matrix_color_filter'><img
- src='https://fiddle.skia.org/i/@skpaint_matrix_color_filter_raster.png'></a>
+ <fiddle-embed name='@skpaint_matrix_color_filter'></fiddle-embed>
* Color Table Color Filter
- <!--?prettify lang=cc?-->
-
- 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->drawImage(image, 0, 0, &paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_color_table_filter'><img
- src='https://fiddle.skia.org/i/@skpaint_color_table_filter_raster.png'></a>
-
+ <fiddle-embed name='@skpaint_color_table_filter'></fiddle-embed>
<span id="SkPathEffect"></span>
@@ -487,200 +163,45 @@ SkPathEffect
* SkPath2DPathEffect: Stamp the specified path to fill the shape,
using the matrix to define the latice.
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- 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);
- for (size_t i = 0 ; i < sizeof(pts)/sizeof(pts[0]); i += 2) {
- path.lineTo(pts[i] * scale, pts[i + 1] * scale);
- }
- path.close();
- SkMatrix matrix = SkMatrix::MakeScale(4 * scale);
- SkPaint paint;
- paint.setPathEffect(SkPath2DPathEffect::Make(matrix, path));
- paint.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- SkRect bounds = canvas->getLocalClipBounds();
- bounds.outset(2 * scale, 2 * scale);
- canvas->drawRect(bounds, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_path_2d_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_path_2d_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_path_2d_path_effect'></fiddle-embed>
* SkLine2DPathEffect: a special case of SkPath2DPathEffect where the
path is a straight line to be stroked, not a path to be filled.
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- SkPaint paint;
- SkMatrix lattice;
- lattice.setScale(8.0f, 8.0f);
- lattice.preRotate(30.0f);
- paint.setPathEffect(SkLine2DPathEffect::Make(0.0f, lattice));
- paint.setAntiAlias(true);
- SkRect bounds = canvas->getLocalClipBounds();
- bounds.outset(8.0f, 8.0f);
- canvas->clear(SK_ColorWHITE);
- canvas->drawRect(bounds, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_line_2d_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_line_2d_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_line_2d_path_effect'></fiddle-embed>
* SkPath1DPathEffect: create dash-like effects by replicating the specified path along the drawn path.
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- SkPaint paint;
- SkPath path;
- path.addOval(SkRect::MakeWH(16.0f, 6.0f));
- paint.setPathEffect(SkPath1DPathEffect::Make(
- path, 32.0f, 0.0f, SkPath1DPathEffect::kRotate_Style));
- paint.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- canvas->drawCircle(128.0f, 128.0f, 122.0f, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_path_1d_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_path_1d_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_path_1d_path_effect'></fiddle-embed>
* SkArcToPathEffect
The following few examples use this function:
- <!--?prettify lang=cc?-->
-
- SkPath star() {
- const SkScalar R = 115.2f, C = 128.0f;
- SkPath path;
- path.moveTo(C + R, C);
- for (int i = 1; i < 8; ++i) {
- SkScalar a = 2.6927937f * i;
- path.lineTo(C + R * cos(a), C + R * sin(a));
- }
- return path;
- }
- void draw(SkCanvas* canvas) {
- SkPaint paint;
- paint.setPathEffect(SkArcToPathEffect::Make(8.0f));
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- SkPath path(star());
- canvas->drawPath(path, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_arc_to_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_arc_to_path_effect_raster.png'></a>
-
+ <fiddle-embed name='@skpaint_arc_to_path_effect'></fiddle-embed>
* SkCornerPathEffect: a path effect that can turn sharp corners into
various treatments (e.g. rounded corners).
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- SkPaint paint;
- paint.setPathEffect(SkCornerPathEffect::Make(32.0f));
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- const SkScalar R = 115.2f;
- SkPath path(star());
- canvas->drawPath(path, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_corner_path_effects'><img src='https://fiddle.skia.org/i/@skpaint_corner_path_effects_raster.png'></a>
+ <fiddle-embed name='@skpaint_corner_path_effects'></fiddle-embed>
* SkDashPathEffect: a path effect that implements dashing.
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- const SkScalar intervals[] = { 10.0f, 5.0f, 2.0f, 5.0f };
- size_t count = sizeof(intervals) / sizeof(intervals[0]);
- SkPaint paint;
- paint.setPathEffect(SkDashPathEffect::Make(intervals, count, 0.0f));
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setStrokeWidth(2.0f);
- paint.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- SkPath path(star());
- canvas->drawPath(path, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_dash_path_effect'><img src='https://fiddle.skia.org/i/@skpaint_dash_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_dash_path_effect'></fiddle-embed>
* SkDiscretePathEffect: This path effect chops a path into discrete
segments, and randomly displaces them.
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- SkPaint paint;
- paint.setPathEffect(SkDiscretePathEffect::Make(10.0f, 4.0f));
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setStrokeWidth(2.0f);
- paint.setAntiAlias(true);
- canvas->clear(SK_ColorWHITE);
- SkPath path(star());
- canvas->drawPath(path, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_discrete_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_discrete_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_discrete_path_effect'></fiddle-embed>
* SkComposePathEffect: a pathEffect whose effect is to apply
first the inner pathEffect and the the outer pathEffect (i.e.
outer(inner(path))).
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- const SkScalar intervals[] = { 10.0f, 5.0f, 2.0f, 5.0f };
- size_t count = sizeof(intervals) / sizeof(intervals[0]);
- SkPaint paint;
- 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);
- canvas->clear(SK_ColorWHITE);
- SkPath path(star());
- canvas->drawPath(path, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_compose_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_compose_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_compose_path_effect'></fiddle-embed>
* SkSumPathEffect: a pathEffect whose effect is to apply two effects,
in sequence (i.e. first(path) + second(path)).
- <!--?prettify lang=cc?-->
-
- void draw(SkCanvas* canvas) {
- SkPaint paint;
- 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);
- canvas->clear(SK_ColorWHITE);
- SkPath path(star());
- canvas->drawPath(path, paint);
- }
-
- <a href='https://fiddle.skia.org/c/@skpaint_sum_path_effect'><img
- src='https://fiddle.skia.org/i/@skpaint_sum_path_effect_raster.png'></a>
+ <fiddle-embed name='@skpaint_sum_path_effect'></fiddle-embed>