[whatwg] Processing the zoom level - MS extensions to window.screen
Boris Zbarsky
bzbarsky at MIT.EDU
Mon Nov 22 12:27:40 PST 2010
On 11/22/10 12:22 AM, Charles Pritchard wrote:
> OpenGL has an immediate-mode which does not require a bitmap backend.
Sure. But if it's going to be resolution independent, then there needs
to be a retained mode somewhere in the stack, even if it's not exposed
to the original caller (e.g. you GL could be outputting to postscript).
That is, to have resolution independence, you _have_ to retain more
information about the logical structure of your image than just pixel
color values.
> The bitmap backend comes in with ImageData and CanvasPixelArray, and CSS
> width/height.
None of those actually require a bitmap backend.... (though there
aren't really very good ways to make putImageData
resolution-independent, I agree).
> Most uses of canvas involve keeping state-info around in order to redraw
> the screen.
Quite a number do, yes. A number don't.
> It's a requirement for apps which use the full width and height of the
> window, as the canvas state resets when the element size is changed.
Sure. This is the first mention of you resizing your canvas to use the
full width and height of the window, which sounds like the sort of
constraint I asked about in my previous mail....
>> Right, so you're trying to build a retained-mode something using
>> canvas as the rendering backend, no?
> I'm getting the impression that you don't use the API in your work.
Well, most of my work related to "the API" is on the C++ end of "the
API", making it work (or more precisely, making it work faster). The
time I spend on that is far greater than the time I spend using it, for
sure. I _have_ used it, of course; just not for "my work".
But I'll note that an ad-hominem attack in response to a technical
question doesn't really get us further towards mutual understanding.
>> Yes, but if you're trying to build SVG-like features on top of canvas
>> one has to stop and ask whether just using SVG might be a better idea.
>> The answer might still be "no", of course. But reinventing wheels
>> usually needs a pretty strong motivation...
> I've a deep and detailed understanding of the SVG, HTML, DOM and CSS specs.
Good for you.
> In this thread, I've only brought up the fact that using <canvas> with
> fillText requires fetching the current DPI ratio,
> so that the text is clear and crisp. How is that reinventing the wheel?
Your specific proposal is for achieving resolution-independent rendering
by using canvas + fillText + DPI ratio + firing resize revents on zoom
(and a few you left out, like firing resize events on non-zoom DPI
change when I switch to an external monitor and so forth, but which are
clearly needed to make this whole approach actually work well).
At the same time, there are existing web technologies whose entire
reason for existence is resolution-independent graphics and text
rendering (SVG, specifically).
What I'm trying to understand is what specific issues with SVG prevent
its use in your situation, and whether those are "the implementations
just suck" issues or whether they're intrinsic to SVG. Understanding
that would make it easier for me to balance the additional API footprint
you seem to think is absolutely and unequivocally necessary, as well as
the work needed in UAs to add the APIs you want and the resulting impact
on sites that aren't yours and users of those sites against the pain
that you would presumably need to endure to use SVG.
Again, if there was a description of this somewhere that I missed, I'd
love a link.
> I haven't requested a whole bunch of new features. Just one.
At the very least, you want resize revents on zoom and an exposure of
the "current DPI", whatever that means.
> One related to making text legible.
_This_ I agree is a worthwhile goal.
>> Because most authors don't think about things like that and won't do
>> it? So you'll get "broken" behavior for users in most cases.
> Most authors re-render their canvas: all authors which use animation
> re-render their canvas
Sure, but there are plenty of canvas uses that aren't animating all the
time (I've seen image editing apps, sites that use canvas as their
_input_, not their output, etc).
> I haven't requested that we change any behavior. What is going to get
> "broken" ?
You have requested a solution that works to make browser zoom work for
your particular case. I'm saying that it might be worth considering
solutions that work for other cases too, assuming they actually work,
rather than tailoring the solution to your situation and allowing other
authors who have the same problem but aren't aware of it, due not having
a detailed understanding of the SVG, HTML, DOM, and CSS specs, to
inflict unreadable text on their users by accident.
Specifically, your proposed solution involves some fairly complicated
manual rescaling of all your canvas drawing on zoom to achieve the
desired effect. This is something most authors just aren't going to do.
I'm glad you're willing to go to those lengths to make your content
accessible, and if that's the only thing we can do, then so be it. But
if we can solve the problem in a way that needs less work on the author
side, that seems strictly preferable. Robert's made a suggestion along
these lines in this thread already....
> Exposing that property changes nothing in existing zooming behavior.
Yes, that's a _bug_, not a feature, imo.
>>> it's a standard practice. There's no reason for the UA to handle it any
>>> differently than it does now (scaling the CSS pixels).
>>
>> Well, no reason other than making all pages accessible when zoomed and
>> not just the rare few that go out of their way to jump through hoops
>> to handle it, right?
>>
> I don't understand your statement. UA behavior should not be changed.
That's what we disagree on. You see a problem in your app and want to
solve it in your app only and are willing to go to great lengths to do that.
I see a problem that is endemic to canvas-using apps, and would like to
make it as easy as possible (ideally, requiring nothing at all) for app
authors to solve this problem.
> I've spoken to my current use case: When a user zooms in, I need to
> readjust my bitmaps, primarily for written text, to serve users who may
> need zoom for accessibility reasons.
Right. I believe I understand the use case.
> I am frustrated, and it certainly shows through in my responses.
Fair enough; let's try to focus on the technical end of this, then.
-Boris
More information about the whatwg
mailing list