1SkCanvas Overview 2======== 3 4*The drawing context* 5 6<!-- Updated Mar 4, 2011 --> 7 8Preview 9------- 10 11Here is an example of a set of drawing commands to draw a filled 12heptagram. This function can be cut and pasted into 13[fiddle.skia.org](https://fiddle.skia.org/). 14 15<fiddle-embed name='@skcanvas_star'></fiddle-embed> 16 17Details 18------- 19 20SkCanvas is the drawing context for Skia. It knows where to direct the 21drawing (i.e. where the screen of offscreen pixels are), and maintains 22a stack of matrices and clips. Note however, that unlike similar 23contexts in other APIs like postscript, cairo, or awt, Skia does not 24store any other drawing attributes in the context (e.g. color, pen 25size). Rather, these are specified explicitly in each draw call, via a 26SkPaint. 27 28<fiddle-embed name='@skcanvas_square'></fiddle-embed> 29 30The code above will draw a rectangle rotated by 45 degrees. Exactly 31what color and style the rect will be drawn in is described by the 32paint, not the canvas. 33 34Check out more detailed info on [creating a SkCanvas object](canvas). 35 36To begin with, we might want to erase the entire canvas. We can do 37this by drawing an enormous rectangle, but there are easier ways to do 38it. 39 40<!--?prettify lang=cc?--> 41 42 void draw(SkCanvas* canvas) { 43 SkPaint paint; 44 paint.setColor(SK_ColorWHITE); 45 canvas->drawPaint(paint); 46 } 47 48This fills the entire canvas (though respecting the current clip of 49course) with whatever color or shader (and xfermode) is specified by 50the paint. If there is a shader in the paint, then it will respect the 51current matrix on the canvas as well (see SkShader). If you just want 52to draw a color (with an optional xfermode), you can just call 53drawColor(), and save yourself having to allocate a paint. 54 55<!--?prettify lang=cc?--> 56 57 void draw(SkCanvas* canvas) { 58 canvas->drawColor(SK_ColorWHITE); 59 } 60 61All of the other draw APIs are similar, each one ending with a paint 62parameter. 63 64<fiddle-embed name='@skcanvas_paint'></fiddle-embed> 65 66In some of the calls, we pass a pointer, rather than a reference, to 67the paint. In those instances, the paint parameter may be null. In all 68other cases the paint parameter is required. 69 70Next: [SkPaint](/user/api/skpaint_overview) 71