Peter Lubbers - Pro HTML 5 Programming
Pro HTML 5 Programming
Pro HTML 5 Programming
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Download from Wow! eBook <br />
32<br />
CHAPTER 2 ■ USING THE <strong>HTML</strong>5 CANVAS API<br />
Figure 2-3. Diagonal line on a canvas<br />
Triumph! Although this simple line may not appear to be the start of a revolution, keep in mind that<br />
drawing a diagonal line between two arbitrary points using classic <strong>HTML</strong> techniques was a very difficult<br />
maneuver involving stretched images, strange CSS and DOM objects, or other forms of black magic. Let<br />
us never speak of them again.<br />
As you can see from this example’s code, all operations on the canvas are performed via the context<br />
object. This will hold true for the rest of your interaction with the canvas because all the important<br />
functions with visual output are accessible only from the context, not the canvas object itself. This<br />
flexibility allows the canvas to support different types of drawing models in the future, based on the type<br />
of context that is retrieved from the canvas. Although we will frequently refer in this chapter to actions<br />
we will take on the canvas, keep in mind that this actually means that we will be working with the<br />
context object that the canvas supplies.<br />
As demonstrated in the previous example, many operations on the context do not immediately<br />
update the drawing surface. Functions such as beginPath, moveTo, and lineTo do not modify the canvas<br />
appearance immediately. The same is true of many functions that set the styling and preferences of the<br />
canvas. Only when a path is stroked or filled does it appear on the display. Otherwise, the canvas will<br />
only be immediately updated when images are displayed, text is shown, or rectangles are drawn, filled,<br />
or cleared.<br />
Applying Transformations to Drawings<br />
Now let’s look at another way to draw on the canvas using transformation. In the following example, the<br />
result is identical to the previous example, but the code used to draw the diagonal line is different. For<br />
this simple example, you could argue that the use of transformation adds unnecessary complexity.<br />
However, you can think of using transformation as a best practice for more complex canvas operations<br />
and you’ll see that we’ll use it a lot throughout the remaining examples, and it is critical to<br />
understanding the <strong>HTML</strong>5 Canvas API’s complex capabilities.<br />
Perhaps the easiest way to think of the transformation system—at least, the easiest way that does<br />
not involve a great amount of mathematical formulae and hand-waving—is as a modification layer that<br />
sits between the commands you issue and the output on the canvas display. This modification layer is<br />
always present, even if you choose not to interact with it.