[whatwg] proposed canvas 2d API additions

Ric Hardacre whatwg at cycloid.f9.co.uk
Tue May 9 00:58:10 PDT 2006


>> I agree that they shouldn't be affected by the CTM, but I disagree that
>> they should be integers. e.g. in cases like:
>>
>>    HTML                          CSS
>>    <canvas height=1 width=1>     canvas { height: 100%; width: 100%; }
>>    </canvas>
>>
>> ...where the JS then uses the coordinate space 0..1,0..1 the author might
>> want to grab the top corner by grabbing the 0,0,0.25,0.25 rect.
> 
> So, I really don't like this -- we need to nail down space the
> getPixels/setPixels coordinates should be in.  I still think that they
> should always be in the canvas space, no matter how many pixels they
> refer to in the rendered content or in the device space.  Note that in
> your example, the canvas can still be a 1x1 pixel canvas (and, I
> believe, will be in all current implementations) -- that one pixel
> will just cover the entire page. 

+1

i absolutely agree that pixels should be treated as atomic units. if a 
canvas pixel space is initialized as a 1x1 square then there is only one 
(visible) coordinate you could possibly access: (0,0)

i don't, see any problem allowing the canvas to set it's own dimensions 
e.g. the following allows the canvas' contents to scale to the device 
and assure a 1:1 pixel ratio (note: psudeo code)

<canvas></canvas>

canvas { height: 80%; width: 80%; }

function getDimensions
{
	giWidth = theCanvas.width - 1;
	giHeight = theCanvas.height - 1;
}

function doSomething
{
	for( var x = 0 ; x < giWidth ; x++ )
	...
}



the reverse case should also hold, in the following example the author 
is creating an icon-builder application:

<canvas width="16" height="16"></canvas>

canvas { height: 40%; width: 40%; }

function zoom_out
{
	theCanvas.style.width = "20%";
	theCanvas.style.height = "20%";
}

function zoom_normal
{
	theCanvas.style.width = "40%";
	theCanvas.style.height = "40%";
}

function zoom_in
{
	theCanvas.style.width = "80%";
	theCanvas.style.height = "80%";
}

in all levels of zoom the author is using the pixel-space of the canvas, 
and using the css (via whatever means, perhaps vertical and horizontal 
alignment in a table cell) to show the canvas center-screen. And thus:

function iconLoad( aIconData )
{
	theCanvas.setPixels( 0 , 0 , 15 , 15 , aIconData );
}

function iconSave( )
{
	return theCanvas.getPixels( 0,0,15,15 );
}


Ric Hardacre
http://www.cyclomedia.co.uk/









More information about the whatwg mailing list