[whatwg] Canvas lack of drawString method

Gervase Markham gerv at mozilla.org
Wed Oct 18 15:12:03 PDT 2006


Stefan Haustein wrote:
> I think drawElement(elem) opens up a whole new can of worms:
> 
> - how would an application determine the size of the text box?
> - where is the baseline position, needed for exact axis label positioning?
> - there are probably issues with dynamically calculated text values
> - code with lots of cross references to elements will be difficult to read
> - it needs to be specified whether css properties are inherited from the 
> parent element of "elem".
> - how much horizontal/vertical space is drawElement permitted to use for 
> rendering?

The answer to all of these things is that the browser renders all the 
elements in the page as it would if the <canvas> were not supported and 
the alternate content were being used. It then basically screenshots the 
area corresponding to the element (yes, I know this needs careful 
definition) and draws that into the canvas.

Like I said, we want to leverage the browser's deep and complex 
knowledge of text rendering as much as possible, and just take the 
resulting pixel output as it would be shown to the user.

> - the implementation in actual browsers may be more complex than it 
> seems because of problems with internal data structures for rendering 
> hints and implicitly introducing the ability to render the same element 
> twice.
> - what happens with contained plugins, canvas elements, 
> self-references... all this stuff needs to be well-defined

Indeed. I know it's easy to state and there are edge cases. But we could 
put limits on it like e.g. no plugins, no <object>, and still have 
something very useful for rendering text.

I mean, all you really need to support is stuff like:

<style>
   .box {
     width: 300px;
     font-style: cursive;
     font-weight: bold;
     text-transform: uppercase;
    }
</style>

<div class="box">Some text to play with</div>

> Moreover, drawElement() would not solve the drawText problem for 
> non-browser environments such as Rhino.

How are we anticipating <canvas> might be used in a non-browser context?

Gerv



More information about the whatwg mailing list