| SkCanvas Overview |
| ======== |
| |
| *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](canvas). |
| |
| 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](/user/api/skpaint_overview) |