- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Thu, 7 Jul 2011 14:01:54 -0700
- To: Charles Pritchard <chuck@jumis.com>
- Cc: Doug Schepers <schepers@w3.org>, "public-canvas-api@w3.org" <public-canvas-api@w3.org>
On Thu, Jul 7, 2011 at 10:47 AM, Charles Pritchard <chuck@jumis.com> wrote: > On 7/7/2011 10:30 AM, Tab Atkins Jr. wrote: >> >> On Wed, Jul 6, 2011 at 6:31 PM, Charles Pritchard<chuck@jumis.com> wrote: >>> >>> "easiest solution" for whom? >>> >>> Other than politics, I don't see how this is the easiest. >> >> Well, solving use-case #1 (allowing an AT to read out text in the >> drawing that the user indicates) is solved for free with SVG. That's > > It's not solved for free; it's solved by the author exposing path data to > the UA. I don't understand. Take the following: <text x='10' y='50'>Molar concentration (M)</text> What path data is present here, other than what the author provides to the UA to tell it how to draw? (That's what I mean be "for free" - the author doesn't do anything beyond what they were already wanting to do anyway.) >> a lot easier than how I imagine it would be in canvas 2d, where you'd >> draw the text, then figure out the bounds (which requires some API >> additions, I think, to know how long each line ended up being and how >> many lines there are), then duplicate the drawn text in the > > We have measureText to figure out the "bounds". It's the same code path used > by the browser. measureText provides a bounding box. That's sufficient in many cases, though not always (if the linebreaking produces a sufficiently jagged edge, or if the last line is very short). >> accessibility subtree, then set up a bounding path that points back to >> the text in the tree. Most of this work has to be repeated if the >> text moves around in the image. > > [canvas][div id="myText"]This is text[/div][/canvas] > var text = document.getElementById('myText'); > context.fillText(text,x,y); > context.rect(x,y,context.measureText(text).width, fontSize); > context.setElementPath(text); > // DONE!. Ah, I'd forgotten about measureText. Your code is slightly incorrect (it passes an element to fillText and measureText, and forces single-line, which won't be correct in general), but they're trivial fixes. That's still not ideal in all cases (due to the jagged-edge issue I raised above), but it is simpler than I assumed. Still not free, though. ^_^ >> Use case #2 (getting a caption or description associated with a region >> of the image) isn't free, but it's very simple. In the video for the >> AT that I extracted the use-case from, the user clicked on some points >> in a graph, and iirc got a readout of the trendline that the points >> represented. In SVG that would be something like this: >> >> <svg> >> [boilerplate] >> <g> >> <desc>[trendline caption]</desc> >> <circle ...> >> <circle ...> >> [more points] >> </g> >> </svg> >> >> The only difference between the "accessible" version and an >> "inaccessible" is the<desc> element itself, and possible the use of a >> wrapper<g> (though there's a good chance that an author would already >> have used a<g> there for styling purposes). >> >> The canvas2d solution would be slightly more difficult, because you >> have to figure out the bounding path yourself. It's otherwise roughly >> the same. > > Implementations of Canvas in the UAs have a private get bounding path > method; > this is already handled by the UA. > > The author simply runs their path commands, as they already do. Could you illustrate this like you did with the previous? It actually seems like a much more difficult problem, since you want to associate each of the individual circles with the description, not a huge bounding rectangle. This doesn't seem to work with setElementPath unless the author goes out of their way to draw all the circles with a single path (involving a lot of moveTo). >> Use-case #3 (indicating the bounds of an active region, so magnifiers >> can zoom to it) is similarly easier, because you just have to focus an >> element in the SVG tree. In the canvas solution you again have to >> first create a bounding path, attach it to an element, and then focus >> the element or something similar. >> >> >>> As others have pointed out, it is a diversion anyway. We're trying to >>> finish the Issues with Canvas a11y that were brought up two years ago. >>> "Don't use Canvas" is not a solution. >> >> No we're not, or at least, I'm not, and you shouldn't be. We should >> be trying to fix accessibility problems that we find users have, >> utilizing the best tools we can provide to authors. If that involves >> tweaking Canvas, that's fine, but tweaking Canvas should not be the a >> priori goal of this exercise. > > This is public canvas api; I have several canvas based applications, > and the thread is about canvas accessibility. > > I work on accessibility, I work with Canvas; yes, I should be working > with Canvas accessibility. That's a very narrow view, and I believe shows Conway's Law at work once again. We care about accessibility on the web, however it's achieved. >>> I have surveyed developers, I've worked on AT and on implementations. >>> Passing the path and bounding information via method call is quite easy for >>> vendors, authors and spec editors. The difficulty here is entirely in the >>> mind of those confused few who mistake this simple solution for something >>> sinister. >> >> I don't feel there's anything sinister going on. I have two >> reservations, which I've stated previously. The first is that I can't >> tell what problems you're attempting to solve, and so it's impossible > > I posted use cases, per your request. Were they insufficient? This email, correct? http://lists.w3.org/Archives/Public/public-canvas-api/2011JulSep/0034.html I hadn't yet assimilated that into my list. I've now partially done so - I have questions about some of them, though, which I'll bring up in a separate thread. ~TJ
Received on Thursday, 7 July 2011 21:02:51 UTC