| Index: site/user/api/skpaint.md
|
| diff --git a/site/user/api/skpaint.md b/site/user/api/skpaint.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fdee783d4b992aa82cf5fb17968124a1f82d7a95
|
| --- /dev/null
|
| +++ b/site/user/api/skpaint.md
|
| @@ -0,0 +1,102 @@
|
| +SkPaint
|
| +=======
|
| +
|
| +*color, stroke, font, effects*
|
| +
|
| +<!-- Updated Jan 17, 2013 by humper@google.com -->
|
| +
|
| +Anytime you draw something in Skia, and want to specify what color it
|
| +is, or how it blends with the background, or what style or font to
|
| +draw it in, you specify those attributes in a paint.
|
| +
|
| +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 setup for a particular use. Factoring
|
| +all of these color and stylistic attribute 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.
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + SkPaint paint1, paint2, paint3;
|
| +
|
| + paint1.setColor(0xFFFF0000:
|
| + paint1.setStyle(SkPaint::kFill_Style);
|
| +
|
| + paint2.setColor(0x8000FF00);
|
| + paint2.setStyle(SkPaint::kStroke_Style);
|
| + paint2.setStrokeWidth(SkIntToScalar(3));
|
| +
|
| + paint3.setColor(0xFF888888);
|
| + paint3.setTextSize(SkIntToScalar(24));
|
| + paint3.setTextScaleX(SkFloatToScalar(0.75f));
|
| +
|
| +
|
| +This shows three different paints, each setup 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?-->
|
| +
|
| + canvas->drawRect(..., paint1);
|
| + canvas->drawRect(..., paint2);
|
| +
|
| + paint2.setStrokeWidth(SkIntToScalar(5));
|
| + canvas->drawOval(..., paint2);
|
| +
|
| + canvas->drawText(..., paint3);
|
| + paint3.setColor(0xFF0000FF);
|
| + canvas->drawText(..., paint3);
|
| +
|
| +
|
| +Beyond simple attributes such as color, strokes, and text values,
|
| +paints support effects. These are subclasses of different aspects of
|
| +the drawing pipeline, that when referenced by a paint (each of them is
|
| +reference-counted), are called to override some part of the drawing
|
| +pipeline.
|
| +
|
| +For example, to draw using a gradient instead of a single color,
|
| +assign a SkShader to the paint.
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + SkShader* shader = SkGradientShader::CreateLinear(...);
|
| + paint.setShader(shader);
|
| + shader->unref();
|
| +
|
| +Now, anything drawn with that paint will be drawn with the gradient
|
| +specified in the call to CreateLinear(). 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
|
| +unref() on the shader once it has assigned it to the paint. Now the
|
| +paint is the only "owner" of that shader, and it will automatically
|
| +call unref() on the shader when either the paint goes out of scope, or
|
| +if another shader (or null) is assigned to it.
|
| +
|
| +There are 6 types of effects that can be assigned to a paint:
|
| +
|
| +* **SkPathEffect** - modifications to the geometry (path) before it
|
| + generates an alpha mask (e.g. dashing)
|
| +* **SkRasterizer** - composing custom mask layers (e.g. shadows)
|
| +* **SkMaskFilter** - modifications to the alpha mask before it is
|
| + colorized and drawn (e.g. blur, emboss)
|
| +* **SkShader** - e.g. gradients (linear, radial, sweep), bitmap patterns
|
| + (clamp, repeat, mirror)
|
| +* **SkColorFilter** - modify the source color(s) before applying the
|
| + xfermode (e.g. color matrix)
|
| +* **SkXfermode** - e.g. porter-duff transfermodes, blend modes
|
| +
|
| +Paints also hold a reference to a SkTypeface. The typeface represents
|
| +a specific font style, to be used for measuring and drawing
|
| +text. Speaking of which, paints are used not only for drawing text,
|
| +but also for measuring it.
|
| +
|
| +<!--?prettify lang=cc?-->
|
| +
|
| + paint.measureText(...);
|
| + paint.getTextBounds(...);
|
| + paint.textToGlyphs(...);
|
| + paint.getFontMetrics(...);
|
|
|