You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.2 KiB
79 lines
2.2 KiB
7 months ago
|
|
||
|
---
|
||
|
title: "SkCanvas Overview"
|
||
|
linkTitle: "SkCanvas Overview"
|
||
|
|
||
|
weight: 240
|
||
|
|
||
|
---
|
||
|
|
||
|
|
||
|
*The drawing context*
|
||
|
|
||
|
<!-- Updated Mar 4, 2011 -->
|
||
|
|
||
|
Preview
|
||
|
-------
|
||
|
|
||
|
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/).
|
||
|
|
||
|
<fiddle-embed name='@skcanvas_star'></fiddle-embed>
|
||
|
|
||
|
Details
|
||
|
-------
|
||
|
|
||
|
SkCanvas is the drawing context for Skia. It knows where to direct the
|
||
|
drawing (i.e. where the screen of offscreen pixels are), and maintains
|
||
|
a stack of matrices and clips. Note however, that unlike similar
|
||
|
contexts in other APIs like postscript, cairo, or awt, Skia does not
|
||
|
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.
|
||
|
|
||
|
<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
|
||
|
paint, not the canvas.
|
||
|
|
||
|
Check out more detailed info on [creating a SkCanvas object](../skcanvas_creation).
|
||
|
|
||
|
To begin with, we might want to erase the entire canvas. We can do
|
||
|
this by drawing an enormous rectangle, but there are easier ways to do
|
||
|
it.
|
||
|
|
||
|
<!--?prettify lang=cc?-->
|
||
|
|
||
|
void draw(SkCanvas* canvas) {
|
||
|
SkPaint paint;
|
||
|
paint.setColor(SK_ColorWHITE);
|
||
|
canvas->drawPaint(paint);
|
||
|
}
|
||
|
|
||
|
This fills the entire canvas (though respecting the current clip of
|
||
|
course) with whatever color or shader (and xfermode) is specified by
|
||
|
the paint. If there is a shader in the paint, then it will respect the
|
||
|
current matrix on the canvas as well (see SkShader). If you just want
|
||
|
to draw a color (with an optional xfermode), you can just call
|
||
|
drawColor(), and save yourself having to allocate a paint.
|
||
|
|
||
|
<!--?prettify lang=cc?-->
|
||
|
|
||
|
void draw(SkCanvas* canvas) {
|
||
|
canvas->drawColor(SK_ColorWHITE);
|
||
|
}
|
||
|
|
||
|
All of the other draw APIs are similar, each one ending with a paint
|
||
|
parameter.
|
||
|
|
||
|
<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
|
||
|
other cases the paint parameter is required.
|
||
|
|
||
|
Next: [SkPaint](../skpaint_overview)
|
||
|
|