- From: Richard Schwerdtfeger <schwer@us.ibm.com>
- Date: Mon, 9 Dec 2013 19:11:44 -0600
- To: "Rik Cabanier" <cabanier@gmail.com>
- Cc: "Dominic Mazzoni" <dmazzoni@google.com>, Canvas <public-canvas-api@w3.org>, "Jatinder Mann" <jmann@microsoft.com>, eoconnor@apple.com
- Message-ID: <OF3949A529.6B12CB2A-ON86257C39.0082D07F-86257C3D.00069137@us.ibm.com>
Hi Rik, I am working on updated text for the Canvas 2D API spec. for the discussion later this week. I have text changes I am working on that could be added as marked <rss> this pen </rss>. Apple had a concern over what happens to the focus ring when the ring extends outside the canvas element width and height. The text for these methods should be subhect to the clipping region. Should we make this a must to ensure that the drawing object is clipped to the associated canvas and should we further state that clipping includes the bounding rectangle for the canvas element? The spec. is not clear here. The drawSystemFocusRing(element) method, when invoked, must run the following steps: 1. If element is not focused or is not a descendant of the element with whose context the method is associated, then abort these steps. 2. If the user has requested the use of particular focus rings (e.g. high-contrast focus rings), or if the element would have a focus ring drawn around it, then draw a focus ring of the appropriate style along the intended path, following platform conventions. Some platforms only draw focus rings around elements that have been focused from the keyboard, and not those focused from the mouse. Other platforms simply don't draw focus rings around some elements at all unless relevant accessibility features are enabled. This API is intended to follow these conventions. User agents that implement distinctions based on the manner in which the element was focused are encouraged to classify focus driven by the focus() method based on the kind of user interaction event from which the call was triggered (if any). The focus ring should not be subject to the shadow effects, the global alpha, or the global composition operators, but should be subject to the clipping region. (The effect of transformations is described above and varies based on which path is being used.) 3. Optionally, inform the user that the focus is at the location given by the intended path. User agents may wait until the next time the event loop reaches its "update the rendering" step to optionally inform the user. The drawCustomFocusRing(element) method, when invoked, must run the following steps: 1. If element is not focused or is not a descendant of the element with whose context the method is associated, then return false and abort these steps. 2. Let result be true. 3. If the user has requested the use of particular focus rings (e.g. high-contrast focus rings), then draw a focus ring of the appropriate style along the intended path, and set result to false. The focus ring should not be subject to the shadow effects, the global alpha, or the global composition operators, but should be subject to the clipping region. (The effect of transformations is described above and varies based on which path is being used.) 4. Optionally, inform the user that the focus is at the location given by the intended path. User agents may wait until the next time the event loop reaches its "update the rendering" step to optionally inform the user. 5. Return result. <rss> drawSystemFocusRing() and drawCustomFocusRing() refer to a descendant of the canvas element. These descendants are each considered a notional child. Notional children are hypothetical elements that are rendered children of the canvas element and their dimensions are those of the bounding box of the specifed path. When tabbing to a notional child, having an assigned location through the use of drawSystemFocusRing or drawCustomFocusRing, scroll the notional child into view following the steps defined by scrollPathIntoView. When a canvas elements is scrolled as a result of being contained within an element having CSS stylle overscroll:scroll, notional children having an assigned location through the use of drawSystemFocusRing or drawCustomFocusRing, scroll the notional children bounds by the same change in position as the corresponding canvas element. </rss> I could start including a copy of the scrolling algorithms from CSS but I believe that would be overkill as we don't do that elsewhere in the HTML specification. So you want me to include a detailed version of this procedure in the document to cover page scrolling? To scroll an element into view element, optionally with an align to top flag set, and optionally with a scroll behavior behavior (which is auto if omitted), means to run these steps for each ancestor element or viewport that establishes a scrolling box scrolling box, in order of innermost to outermost scrolling box: 1. If the Document associated with element is not same origin with the Document associated with the element or viewport associated with box, terminate these steps. 2. Let element bounding border box be the box that the return value of invoking getBoundingClientRect() on element represents. 3. Let scrolling box edge A be the beginning edge in the block flow direction of scrolling box, and let element edge A be element bounding border box's edge on the same physical side as that of scrolling box edge A. 4. Let scrolling box edge B be the ending edge in the block flow direction of scrolling box, and let element edge B be element bounding border box's edge on the same physical side as that of scrolling box edge B. 5. Let scrolling box edge C be the beginning edge in the inline base direction of scrolling box, and let element edge C be element bounding border box's edge on the same physical side as that of scrolling box edge C. 6. Let scrolling box edge D be the ending edge in the inline base direction of scrolling box, and let element edge D be element bounding border box's edge on the same physical side as that of box edge D. 7. Let element width be the distance between element edge C and element edge D. 8. Let scrolling box width be the distance between scrolling box edge C and scrolling box edge D. 9. Let position be the scroll position scrolling box would have by following these steps: 1. If the align to top flag is set align element edge A with scrolling box edge A. 2. Otherwise, the align to top flag is not set; align element edge B with scrolling box edge B. 3. If element edge C and element edge D are both outside scrolling box edge C and scrolling box edge D Do nothing. If element edge C is outside scrolling box edge C and element width is less than scrolling box width If element edge D is outside scrolling box edge D and element width is greater than scrolling box width Align element edge C with scrolling box edge C. If element edge C is outside scrolling box edge C and element width is greater than scrolling box width If element edge D is outside scrolling box edge D and element width is less than scrolling box width Align element edge D with scrolling box edge D. 10. If position is the same as scrolling box's current scroll position, and scrolling box does not have an ongoing smooth scroll, abort these steps. 11. If scrolling box is associated with an element Let associated element be the element. Let task be these steps: 1. Fire an event named scroll at associated element. If scrolling box is associated with a viewport Let associated element be the Document's root element, if there is one, or null otherwise. Let task be these steps: 1. Fire an event named scroll that bubbles at the Document object associated with the viewport. 12. Perform a scroll of scrolling box to position, with the set of steps task, associated element as the associated element and behavior as the scroll behavior. To scroll an element element to x,y optionally with a scroll behavior behavior (which is auto if omitted) means to: 1. Let box be element's associated scrolling box. 2. If box has rightward overflow direction Let x be max(0, min(x, element scrolling area width - element padding edge width)). If box has leftward overflow direction Let x be min(0, max(x, element padding edge width - element scrolling area width)). 3. If box has downward overflow direction Let y be max(0, min(y, element scrolling area height - element padding edge height)). If box has upward overflow direction Let y be min(0, max(y, element padding edge height - element scrolling area height)). 4. Let position be the scroll position box would have by aligning scrolling area x-coordinate x with the left of box and aligning scrolling area y-coordinate y with the top of box. 5. If position is the same as box's current scroll position, and box does not have an ongoing smooth scroll, abort these steps. 6. Let task be these steps: 1. Fire an event named scroll at the element. 7. Perform a scroll of box to position, with the set of steps task, element as the associated element and behavior as the scroll behavior. Let notional child be a hypothetical element that is a rendered child of the canvas element whose dimensions are those of the specified rectangle.
Received on Tuesday, 10 December 2013 01:12:18 UTC