- From: Charles Pritchard <chuck@jumis.com>
- Date: Mon, 18 Apr 2011 18:25:47 -0700
- To: Sam Ruby <rubys@intertwingly.net>
- CC: Richard Schwerdtfeger <schwer@us.ibm.com>, Maciej Stachowiak <mjs@apple.com>, Paul Cotton <Paul.Cotton@microsoft.com>, public-canvas-api@w3.org, public-canvas-api-request@w3.org, public-html@w3.org, public-html-a11y@w3.org
On 4/18/2011 2:03 PM, Sam Ruby wrote:
<snip>
> Additionally, the following was not found to make its case:
>
>> DrawFocusRing does not ensure that the focus ring, drawn, allows
>> the browser to follow focus ring conventions for the OS platform
>> that may also reflect user's preferences
>
> Can you clarify why the "Modify existing Canvas 2D API caret and focus
> ring support proposal" makes it impossible to draw focus without driving
> magnification?
Current UA implementations of drawFocusRing canDrawCustom,
will -not- draw a focus ring, if canDrawCustom is true.
The w3c draft uses a single x/y coordinate to "inform the user that the
focus is at the given (transformed) coordinate on the canvas".
The change proposal instead uses the current path, to expose information
to the AT.
The single x/y coordinate used by the existing w3c draft is insufficient
for driving a magnifier at high magnification levels.
That brings us back to where we are with drawFocusRing(element)
From the current w3c draft:
"If the user has requested the use of particular focus rings (e.g.
high-contrast focus rings), or if the canDrawCustom argument is absent
or false, then draw a focus ring of the appropriate style along the
path, following platform conventions, return false, and abort these steps."
The old semantics of canDrawCustom are intended to "return false" and use
system-based focus rings, if a setting is specified on the OS/UA level.
That intention is highlighted by Ian Hickson's objection:
"This proposal doesn't support having the user agent determine if the
user prefers system rings vs custom rings"
This use was fundamentally altered by the change proposal -- the author is
no longer exposed to system preferences. Instead, it is handled by the UA.
However, that was not the objection noted in the decision.
The objections were, instead, about controlling a custom focus ring:
"by removing the canDrawCustom parameter of the focus ring API, forces
authors
to take the built-in focus drawing if they want to report the focus to
the accessibility layer"
-and-
"This proposal doesn't support having the user agent determine if the
user prefers system rings vs custom rings"
These don't seem to reflect step 3 of drawFocusRing(element):
"If the user has configured the operating system to draw focus rings in
a certain way (e.g. high-contrast focus rings), then the user agent
should draw a focus ring of the appropriate style along the drawing path
otherwise the user agent must draw the focus ring based on the canvas
line drawing settings along the current drawing path"
For the first objection -- a user may simply use strokeStyle =
'rgba(0,0,0,0)'.
A method similar to that is actually used to drive caret magnification
in windows...
The caret is simply set to a transparent bitmap.
The second objection appears to be inaccurate. The proposal does have
the UA determine ring preferences,
based on user settings. It does -hide- that information from the
scripting environment; which is something
Ian Hickson pointed out as an objection. I don't see that as an issue,
though.
This seems to be compliant use of the API per the change proposal:
ctx.strokeStyle = 'rgba(0,0,0,0)'; if(ctx.drawFocusRing(element)) {
ctx.strokeStyle = 'blue'; drawCustomRing(); }
That particular use demonstrates magnification (via current path when
drawFocusRing is called),
as well as the option for the UA to draw a ring based on user
preferences, and the ability
of the author to draw a custom focus ring if the element is focused.
-Charles
Received on Tuesday, 19 April 2011 01:26:27 UTC