Add isPointIn{Fill,Stroke} methods, and an SVGMarkerList to access the markers painted on a markable element. (ACTION-3275)
authorCameron McCormack <cam@mcc.id.au>
Sat Sep 15 02:15:32 2012 +1000
changeset 3699f46c2f1cb89
parent 368 13274fa208d7
child 370 36db2d0d9b62
Add isPointIn{Fill,Stroke} methods, and an SVGMarkerList to access the markers painted on a markable element. (ACTION-3275)
master/definitions.xml
master/painting.html
master/paths.html
master/shapes.html
master/text.html
master/types.html
     1.1 --- a/master/definitions.xml
     1.2 +++ b/master/definitions.xml
     1.3 @@ -1052,16 +1052,17 @@
     1.4    <interface name='SVGNumberList' href='types.html#InterfaceSVGNumberList'/>
     1.5    <interface name='SVGAnimatedNumberList' href='types.html#InterfaceSVGAnimatedNumberList'/>
     1.6    <interface name='SVGLengthList' href='types.html#InterfaceSVGLengthList'/>
     1.7    <interface name='SVGColor' href='types.html#InterfaceSVGColor'/>
     1.8    <interface name='SVGICCColor' href='types.html#InterfaceSVGICCColor'/>
     1.9    <interface name='SVGLocatableElement' href='types.html#InterfaceSVGLocatableElement'/>
    1.10    <interface name='SVGTransformableElement' href='types.html#InterfaceSVGTransformableElement'/>
    1.11    <interface name='SVGGraphicsElement' href='types.html#InterfaceSVGGraphicsElement'/>
    1.12 +  <interface name='SVGGeometryElement' href='types.html#InterfaceSVGGeometryElement'/>
    1.13    <interface name='SVGDefinitionElement' href='types.html#InterfaceSVGDefinitionElement'/>
    1.14    <interface name='SVGTests' href='types.html#InterfaceSVGTests'/>
    1.15    <interface name='SVGURIReference' href='types.html#InterfaceSVGURIReference'/>
    1.16    <interface name='SVGCSSRule' href='types.html#InterfaceSVGCSSRule'/>
    1.17    <interface name='SVGRenderingIntent' href='types.html#InterfaceSVGRenderingIntent'/>
    1.18    <interface name='SVGAnimatedBoolean' href='types.html#InterfaceSVGAnimatedBoolean'/>
    1.19    <interface name='SVGUnitTypes' href='types.html#InterfaceSVGUnitTypes'/>
    1.20    <interface name='SVGStyleElement' href='styling.html#InterfaceSVGStyleElement'/>
    1.21 @@ -1103,17 +1104,20 @@
    1.22    <interface name='SVGTRefElement' href='text.html#InterfaceSVGTRefElement'/>
    1.23    <interface name='SVGTextPathElement' href='text.html#InterfaceSVGTextPathElement'/>
    1.24    <interface name='SVGAltGlyphElement' href='text.html#InterfaceSVGAltGlyphElement'/>
    1.25    <interface name='SVGAltGlyphDefElement' href='text.html#InterfaceSVGAltGlyphDefElement'/>
    1.26    <interface name='SVGAltGlyphItemElement' href='text.html#InterfaceSVGAltGlyphItemElement'/>
    1.27    <interface name='SVGGlyphRefElement' href='text.html#InterfaceSVGGlyphRefElement'/>
    1.28    <interface name='SVGTextContentElement' href='text.html#InterfaceSVGTextContentElement'/>
    1.29    <interface name='SVGTextPositioningElement' href='text.html#InterfaceSVGTextPositioningElement'/>
    1.30 +  <interface name='SVGMarkableElement' href='painting.html#InterfaceSVGMarkableElement'/>
    1.31    <interface name='SVGMarkerElement' href='painting.html#InterfaceSVGMarkerElement'/>
    1.32 +  <interface name='SVGMarkerInstance' href='painting.html#InterfaceSVGMarkerInstance'/>
    1.33 +  <interface name='SVGMarkerList' href='painting.html#InterfaceSVGMarkerList'/>
    1.34    <interface name='SVGColorProfileElement' href='color.html#InterfaceSVGColorProfileElement'/>
    1.35    <interface name='SVGColorProfileRule' href='color.html#InterfaceSVGColorProfileRule'/>
    1.36    <interface name='SVGLinearGradientElement' href='pservers.html#InterfaceSVGLinearGradientElement'/>
    1.37    <interface name='SVGRadialGradientElement' href='pservers.html#InterfaceSVGRadialGradientElement'/>
    1.38    <interface name='SVGMeshGradientElement' href='pservers.html#InterfaceSVGMeshGradientElement'/>
    1.39    <interface name='SVGMeshRowElement' href='pservers.html#InterfaceSVGMeshRowElement'/>
    1.40    <interface name='SVGMeshPatchElement' href='pservers.html#InterfaceSVGMeshPatchElement'/>
    1.41    <interface name='SVGStopElement' href='pservers.html#InterfaceSVGStopElement'/>
     2.1 --- a/master/painting.html
     2.2 +++ b/master/painting.html
     2.3 @@ -3385,16 +3385,171 @@ interface SVGPaint : SVGColor {
     2.4    void setUri(DOMString uri);
     2.5    void setPaint(unsigned short paintType, DOMString uri, DOMString rgbColor, DOMString iccColor);
     2.6  };
     2.7  </pre>
     2.8  
     2.9  <p class="issue">There are some missing definitions of 
    2.10  SVGPaint members here.  The interface might be going away, however.</p>
    2.11  
    2.12 +
    2.13 +<div class="ready-for-wg-review">
    2.14 +<h3 id="InterfaceSVGMarkerInstance">Interface SVGMarkerInstance</h3>
    2.15 +
    2.16 +<p>The <a>SVGMarkerInstance</a> interface is used to represent an instance
    2.17 +of a marker that is on a <a>markable element</a>.  An <a>SVGMarkerInstance</a>
    2.18 +can represent any kind of marker, including <a>positioned markers</a>.</p>
    2.19 +
    2.20 +<p class="issue">What should we do about liveness?  If it is live, we
    2.21 +could have it know what index it is for, and always return information
    2.22 +about the marker at that index (and return null for the element if
    2.23 +that index is no longer valid).</p>
    2.24 +
    2.25 +<pre class='idl'>interface <b>SVGMarkerInstance</b> {
    2.26 +  readonly attribute <a>SVGMarkerElement</a> element;
    2.27 +  readonly attribute float position;
    2.28 +  readonly attribute <a>SVGPoint</a> point;
    2.29 +  readonly attribute float angle;
    2.30 +};</pre>
    2.31 +
    2.32 +<dl class="interface">
    2.33 +  <dt class="attributes-header">Attributes:</dt>
    2.34 +  <dd>
    2.35 +    <dl class="attributes">
    2.36 +      <dt id="__svg__SVGMarkerInstance__element" class="attribute first-child"><b>element</b><span class="idl-type-parenthetical"> (readonly <a>SVGMarkerElement</a>)</span></dt>
    2.37 +      <dd class="attribute">The <a>'marker element'</a> element that defines
    2.38 +      the marker.  If the marker is a <a>vertex marker</a>, <a>segment marker</a>
    2.39 +      or <a>repeating marker</a>, then this will be the <a>'marker element'</a>
    2.40 +      element that the relevant marker property referenced.  If the marker is
    2.41 +      a <a>positioned marker</a>, then this will be the child <a>'marker element'</a>
    2.42 +      element of the <a>markable element</a>.</dd>
    2.43 +
    2.44 +      <dt id="__svg__SVGMarkerInstance__position" class="attribute"><b>position</b><span class="idl-type-parenthetical"> (readonly float)</span></dt>
    2.45 +      <dd class="attribute">The distance along the <a>equivalent path</a> of the
    2.46 +      <a>markable element</a> that the marker is positioned at.</dd>
    2.47 +
    2.48 +      <dt id="__svg__SVGMarkerInstance__point" class="attribute"><b>point</b><span class="idl-type-parenthetical"> (readonly <a>SVGPoint</a>)</span></dt>
    2.49 +      <dd class="attribute">The point, in the user space of the
    2.50 +      <a>markable element</a>, that the marker is positioned at.
    2.51 +      The <a>SVGPoint</a> object is read only.</dd>
    2.52 +
    2.53 +      <dt id="__svg__SVGMarkerInstance__angle" class="attribute"><b>angle</b><span class="idl-type-parenthetical"> (readonly float)</span></dt>
    2.54 +      <dd class="attribute">The orientation of the marker relative to a
    2.55 +      vector pointing in the direction of the positive y-axis of the
    2.56 +      <a>markable element</a>'s user space.</dd>
    2.57 +    </dl>
    2.58 +  </dd>
    2.59 +</dl>
    2.60 +
    2.61 +
    2.62 +<h3 id="InterfaceSVGMarkerList">Interface SVGMarkerList</h3>
    2.63 +
    2.64 +<p>The <a>SVGMarkerList</a> interface is used to expose the list of markers that
    2.65 +are painted on a given <a>markable element</a>.  This list includes all
    2.66 +<a>vertex markers</a>, <a>segment markers</a>, <a>repeating markers</a> and
    2.67 +<a>positioned markers</a>.  The list of <a>SVGMarkerInstance</a> objects
    2.68 +is maintained in the order that the markers are painted (see
    2.69 +<a href='painting.html#Markers'>Markers</a>).</p>
    2.70 +
    2.71 +<pre class='idl'>interface <b>SVGMarkerList</b> {
    2.72 +  readonly attribute unsigned long <a href='#__svg__SVGMarkerList__length'>length</a>;
    2.73 +  getter <a>SVGMarkerInstance</a>? <a href='#__svg__SVGMarkerList__item'>item</a>(unsigned long index);
    2.74 +};</pre>
    2.75 +
    2.76 +<dl class="interface">
    2.77 +  <dt class="attributes-header">Attributes:</dt>
    2.78 +  <dd>
    2.79 +    <dl class="attributes">
    2.80 +      <dt id="__svg__SVGMarkerList__length" class="attribute first-child"><b>length</b><span class="idl-type-parenthetical"> (readonly unsigned long)</span></dt>
    2.81 +      <dd class="attribute">The number of markers on this element.</dd>
    2.82 +    </dl>
    2.83 +  </dd>
    2.84 +  <dt class="operations-header">Operations:</dt>
    2.85 +  <dd>
    2.86 +    <dl class="attributes">
    2.87 +      <dt id="__svg__SVGMarkerList__item" class="operation first-child"><a>SVGMarkerInstance</a>? <b>item</b>(unsigned long <var>index</var>)</dt>
    2.88 +      <dd class="operation">
    2.89 +        Gets the <a>SVGMarkerInstance</a> at the given position in the
    2.90 +        list of markers on this element.
    2.91 +        <dl class="operation">
    2.92 +          <dt class="parameters-header">Parameters</dt>
    2.93 +          <dd>
    2.94 +            <ol class="parameters">
    2.95 +              <li class="parameter first-child">
    2.96 +                <div>unsigned long <var>index</var></div>
    2.97 +                <div>The index of the <a>SVGMarkerInstance</a> to return.</div>
    2.98 +              </li>
    2.99 +            </ol>
   2.100 +          </dd>
   2.101 +          <dt class="returns-header">Returns</dt>
   2.102 +          <dd>Returns the <a>SVGMarkerInstance</a> at position <var>index</var>
   2.103 +          in the list of markers on this element, or null if <var>index</var>
   2.104 +          is out of range.</dd>
   2.105 +        </dl>
   2.106 +      </dd>
   2.107 +    </dl>
   2.108 +  </dd>
   2.109 +</dl>
   2.110 +
   2.111 +
   2.112 +<h3 id="InterfaceSVGMarkableElement">Interface SVGMarkableElement</h3>
   2.113 +
   2.114 +<p>The <a>SVGMarkableElement</a> interface is implemented on all
   2.115 +<a>markable elements</a>, and provides access to the markers that are placed on
   2.116 +the element's path.</p>
   2.117 +
   2.118 +<pre class='idl'>[NoInterfaceObject]
   2.119 +interface <b>SVGMarkableElement</b> {
   2.120 +  readonly attribute <a>SVGMarkerList</a> <a href='#__svg__SVGMarkableElement__markers'>markers</a>;
   2.121 +
   2.122 +  long <a href='#__svg__SVGMarkableElement__getMarkerIndexFromPoint'>getMarkerIndexFromPoint</a>(<a>SVGPoint</a> point);
   2.123 +};</pre>
   2.124 +
   2.125 +<dl class="interface">
   2.126 +  <dt class="attributes-header">Attributes:</dt>
   2.127 +  <dd>
   2.128 +    <dl class="attributes">
   2.129 +      <dt id="__svg__SVGMarkableElement__markers" class="attribute first-child"><b>markers</b><span class="idl-type-parenthetical"> (readonly <a>SVGMarkerList</a>)</span></dt>
   2.130 +      <dd class="attribute">The list of markers on this element.</dd>
   2.131 +    </dl>
   2.132 +  </dd>
   2.133 +  <dt class="operations-header">Operations:</dt>
   2.134 +  <dd>
   2.135 +    <dl class="attributes">
   2.136 +      <dt id="__svg__SVGMarkableElement__getMarkerIndexFromPoint" class="operation first-child">long <b>getMarkerIndexFromPoint</b>(<a>SVGPoint</a> point)</dt>
   2.137 +      <dd class="operation">
   2.138 +        Returns the index into the <a>SVGMarkerList</a> of the marker that is at
   2.139 +        the specified point.  Normal hit testing rules apply; the value of the
   2.140 +        <a>'pointer-events'</a> property on the elements that comprise the markers,
   2.141 +        as well as its value on this element, is honored, and the top-most marker
   2.142 +        is selected when there are multiple markers whose content is at the given
   2.143 +        point.
   2.144 +        <dl class="operation">
   2.145 +          <dt class="parameters-header">Parameters</dt>
   2.146 +          <dd>
   2.147 +            <ol class="parameters">
   2.148 +              <li class="parameter first-child">
   2.149 +                <div><a>SVGPoint</a> <var>point</var></div>
   2.150 +                <div>The point to check for intersection with the markers
   2.151 +                on this element.  The <a>SVGPoint</a> is interpreted as a
   2.152 +                point in the user space of this element.</div>
   2.153 +              </li>
   2.154 +            </ol>
   2.155 +          </dd>
   2.156 +          <dt class="returns-header">Returns</dt>
   2.157 +          <dd>The index into this element's <a>SVGMarkerList</a> of the marker
   2.158 +          at the given point, or -1 if there is no such marker.</dd>
   2.159 +        </dl>
   2.160 +      </dd>
   2.161 +    </dl>
   2.162 +  </dd>
   2.163 +</dl>
   2.164 +</div>
   2.165 +
   2.166 +
   2.167  <h3 id="InterfaceSVGMarkerElement">Interface SVGMarkerElement</h3>
   2.168  
   2.169  
   2.170  <edit:with element='marker'>
   2.171  
   2.172  The <a>SVGMarkerElement</a> interface corresponds to the
   2.173  <a>'marker element'</a> element.
   2.174  <pre class="idl">interface <b>SVGMarkerElement</b> : <a>SVGDefinitionElement</a> {
     3.1 --- a/master/paths.html
     3.2 +++ b/master/paths.html
     3.3 @@ -2480,17 +2480,17 @@ the same value as <a>normalizedPathSegLi
     3.4  
     3.5  
     3.6  <h3 id="InterfaceSVGPathElement">Interface SVGPathElement</h3>
     3.7  
     3.8  
     3.9  
    3.10  The <a>SVGPathElement</a> interface corresponds to the <a>'path'</a>
    3.11  element.
    3.12 -<pre class="idl">interface <b>SVGPathElement</b> : <a>SVGGraphicsElement</a> {
    3.13 +<pre class="idl">interface <b>SVGPathElement</b> : <a>SVGGeometryElement</a> {
    3.14  
    3.15    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedNumber">SVGAnimatedNumber</a> <a href="paths.html#__svg__SVGPathElement__pathLength">pathLength</a>;
    3.16  
    3.17    float <a href="paths.html#__svg__SVGPathElement__getTotalLength">getTotalLength</a>();
    3.18    <a class="idlinterface" href="coords.html#InterfaceSVGPoint">SVGPoint</a> <a href="paths.html#__svg__SVGPathElement__getPointAtLength">getPointAtLength</a>(float distance);
    3.19    unsigned long <a href="paths.html#__svg__SVGPathElement__getPathSegAtLength">getPathSegAtLength</a>(float distance);
    3.20    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegClosePath">SVGPathSegClosePath</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegClosePath">createSVGPathSegClosePath</a>();
    3.21    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegMovetoAbs">SVGPathSegMovetoAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegMovetoAbs">createSVGPathSegMovetoAbs</a>(float x, float y);
    3.22 @@ -2508,17 +2508,18 @@ element.
    3.23    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegLinetoVerticalAbs">SVGPathSegLinetoVerticalAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegLinetoVerticalAbs">createSVGPathSegLinetoVerticalAbs</a>(float y);
    3.24    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegLinetoVerticalRel">SVGPathSegLinetoVerticalRel</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegLinetoVerticalRel">createSVGPathSegLinetoVerticalRel</a>(float y);
    3.25    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegCurvetoCubicSmoothAbs">SVGPathSegCurvetoCubicSmoothAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegCurvetoCubicSmoothAbs">createSVGPathSegCurvetoCubicSmoothAbs</a>(float x, float y, float x2, float y2);
    3.26    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegCurvetoCubicSmoothRel">SVGPathSegCurvetoCubicSmoothRel</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegCurvetoCubicSmoothRel">createSVGPathSegCurvetoCubicSmoothRel</a>(float x, float y, float x2, float y2);
    3.27    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegCurvetoQuadraticSmoothAbs">SVGPathSegCurvetoQuadraticSmoothAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegCurvetoQuadraticSmoothAbs">createSVGPathSegCurvetoQuadraticSmoothAbs</a>(float x, float y);
    3.28    <a class="idlinterface" href="paths.html#InterfaceSVGPathSegCurvetoQuadraticSmoothRel">SVGPathSegCurvetoQuadraticSmoothRel</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegCurvetoQuadraticSmoothRel">createSVGPathSegCurvetoQuadraticSmoothRel</a>(float x, float y);
    3.29  };
    3.30  
    3.31 -<a>SVGPathElement</a> implements <a>SVGAnimatedPathData</a>;</pre><dl class="interface">
    3.32 +<a>SVGPathElement</a> implements <a>SVGAnimatedPathData</a>;
    3.33 +<a>SVGPathElement</a> implements <a>SVGMarkableElement</a>;</pre><dl class="interface">
    3.34  <dt class="attributes-header">Attributes:</dt>
    3.35  <dd>
    3.36  <dl class="attributes">
    3.37  
    3.38  <dt id="__svg__SVGPathElement__pathLength" class="attribute first-child"><b>pathLength</b><span class="idl-type-parenthetical"> (readonly <a class="idlinterface" href="types.html#InterfaceSVGAnimatedNumber">SVGAnimatedNumber</a>)</span></dt>
    3.39  <dd class="attribute">
    3.40  <div>
    3.41  Corresponds to attribute <a>pathLength</a> on the given <a>'path'</a>
     4.1 --- a/master/shapes.html
     4.2 +++ b/master/shapes.html
     4.3 @@ -87,17 +87,17 @@ appropriate values for attributes <a>'rx
     4.4        <span class="attr-name"><a href="#RectElementHeightAttribute"><span>height</span></a></span>,
     4.5        <span class="attr-name"><a href="#RectElementRXAttribute"><span>rx</span></a></span>,
     4.6        <span class="attr-name"><a href="#RectElementRYAttribute"><span>ry</span></a></span>
     4.7      </td>
     4.8    </tr>
     4.9    <tr>
    4.10      <th>DOM Interface:</th>
    4.11      <td>
    4.12 -<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGraphicsElement</a> {
    4.13 +<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGeometryElement</a> {
    4.14    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__x">x</a>;
    4.15    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__y">y</a>;
    4.16    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__width">width</a>;
    4.17    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__height">height</a>;
    4.18    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__rx">rx</a>;
    4.19    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__ry">ry</a>;
    4.20  };</pre>
    4.21      </td>
    4.22 @@ -678,17 +678,17 @@ wsp:
    4.23  
    4.24  <h3 id="InterfaceSVGRectElement">Interface SVGRectElement</h3>
    4.25  
    4.26  
    4.27  <edit:with element='rect'>
    4.28  
    4.29  The <a>SVGRectElement</a> interface corresponds to the <a>'rect'</a>
    4.30  element.
    4.31 -<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGraphicsElement</a> {
    4.32 +<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGeometryElement</a> {
    4.33    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__x">x</a>;
    4.34    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__y">y</a>;
    4.35    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__width">width</a>;
    4.36    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__height">height</a>;
    4.37    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__rx">rx</a>;
    4.38    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__ry">ry</a>;
    4.39  };</pre><dl class="interface">
    4.40  <dt class="attributes-header">Attributes:</dt>
    4.41 @@ -751,17 +751,17 @@ Corresponds to attribute <a>'ry'</a> on 
    4.42  
    4.43  <h3 id="InterfaceSVGCircleElement">Interface SVGCircleElement</h3>
    4.44  
    4.45  
    4.46  <edit:with element='circle'>
    4.47  
    4.48  The <a>SVGCircleElement</a> interface corresponds to the <a>'circle'</a>
    4.49  element.
    4.50 -<pre class="idl">interface <b>SVGCircleElement</b> : <a>SVGGraphicsElement</a> {
    4.51 +<pre class="idl">interface <b>SVGCircleElement</b> : <a>SVGGeometryElement</a> {
    4.52    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGCircleElement__cx">cx</a>;
    4.53    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGCircleElement__cy">cy</a>;
    4.54    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGCircleElement__r">r</a>;
    4.55  };</pre><dl class="interface">
    4.56  <dt class="attributes-header">Attributes:</dt>
    4.57  <dd>
    4.58  <dl class="attributes">
    4.59  
    4.60 @@ -797,17 +797,17 @@ Corresponds to attribute <a>'r'</a> on t
    4.61  
    4.62  <h3 id="InterfaceSVGEllipseElement">Interface SVGEllipseElement</h3>
    4.63  
    4.64  
    4.65  <edit:with element='ellipse'>
    4.66  
    4.67  The <a>SVGEllipseElement</a> interface corresponds to the <a>'ellipse'</a>
    4.68  element.
    4.69 -<pre class="idl">interface <b>SVGEllipseElement</b> : <a>SVGGraphicsElement</a> {
    4.70 +<pre class="idl">interface <b>SVGEllipseElement</b> : <a>SVGGeometryElement</a> {
    4.71    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__cx">cx</a>;
    4.72    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__cy">cy</a>;
    4.73    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__rx">rx</a>;
    4.74    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__ry">ry</a>;
    4.75  };</pre><dl class="interface">
    4.76  <dt class="attributes-header">Attributes:</dt>
    4.77  <dd>
    4.78  <dl class="attributes">
    4.79 @@ -852,22 +852,24 @@ Corresponds to attribute <a>'ry'</a> on 
    4.80  
    4.81  <h3 id="InterfaceSVGLineElement">Interface SVGLineElement</h3>
    4.82  
    4.83  
    4.84  <edit:with element='line'>
    4.85  
    4.86  The <a>SVGLineElement</a> interface corresponds to the <a>'line'</a>
    4.87  element.
    4.88 -<pre class="idl">interface <b>SVGLineElement</b> : <a>SVGGraphicsElement</a> {
    4.89 +<pre class="idl">interface <b>SVGLineElement</b> : <a>SVGGeometryElement</a> {
    4.90    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__x1">x1</a>;
    4.91    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__y1">y1</a>;
    4.92    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__x2">x2</a>;
    4.93    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__y2">y2</a>;
    4.94 -};</pre><dl class="interface">
    4.95 +};
    4.96 +
    4.97 +<a>SVGLineElement</a> implements <a>SVGMarkableElement</a>;</pre><dl class="interface">
    4.98  <dt class="attributes-header">Attributes:</dt>
    4.99  <dd>
   4.100  <dl class="attributes">
   4.101  
   4.102  <dt id="__svg__SVGLineElement__x1" class="attribute first-child"><b>x1</b><span class="idl-type-parenthetical"> (readonly <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a>)</span></dt>
   4.103  <dd class="attribute">
   4.104  <div>
   4.105  Corresponds to attribute <a>'x1'</a> on the given <a>'line'</a> element.
   4.106 @@ -957,31 +959,33 @@ currently being animated, contains the s
   4.107  
   4.108  
   4.109  <h3 id="InterfaceSVGPolylineElement">Interface SVGPolylineElement</h3>
   4.110  
   4.111  <edit:with element='polyline'>
   4.112  
   4.113  <p>The <a>SVGPolylineElement</a> interface corresponds to the <a>'polyline'</a> element.</p>
   4.114  
   4.115 -<pre class="idl">interface <b>SVGPolylineElement</b> : <a>SVGGraphicsElement</a> {
   4.116 +<pre class="idl">interface <b>SVGPolylineElement</b> : <a>SVGGeometryElement</a> {
   4.117  };
   4.118  
   4.119 -<a>SVGPolylineElement</a> implements <a>SVGAnimatedPoints</a>;</pre>
   4.120 +<a>SVGPolylineElement</a> implements <a>SVGAnimatedPoints</a>;
   4.121 +<a>SVGPolylineElement</a> implements <a>SVGMarkableElement</a>;</pre>
   4.122  
   4.123  </edit:with>
   4.124  
   4.125  <h3 id="InterfaceSVGPolygonElement">Interface SVGPolygonElement</h3>
   4.126  
   4.127  
   4.128  <edit:with element='polygon'>
   4.129  
   4.130  <p>The <a>SVGPolygonElement</a> interface corresponds to the <a>'polygon'</a> element.</p>
   4.131  
   4.132 -<pre class="idl">interface <b>SVGPolygonElement</b> : <a>SVGGraphicsElement</a> {
   4.133 +<pre class="idl">interface <b>SVGPolygonElement</b> : <a>SVGGeometryElement</a> {
   4.134  };
   4.135  
   4.136 -<a>SVGPolygonElement</a> implements <a>SVGAnimatedPoints</a>;</pre>
   4.137 +<a>SVGPolygonElement</a> implements <a>SVGAnimatedPoints</a>;
   4.138 +<a>SVGPolygonElement</a> implements <a>SVGMarkableElement</a>;</pre>
   4.139  
   4.140  </edit:with>
   4.141  
   4.142  </body>
   4.143  </html>
     5.1 --- a/master/text.html
     5.2 +++ b/master/text.html
     5.3 @@ -4754,17 +4754,17 @@ index to a UTF-16 code unit or a number 
     5.4  This is for consistency with DOM Level 2 Core, where methods on the
     5.5  <a>CharacterData</a> interface use UTF-16 code units as indexes and counts
     5.6  within the character data. Thus for example, if the text content of a
     5.7  <a>'text'</a> element is a single non-BMP character, such as U+10000, then
     5.8  invoking <a>SVGTextContentElement::getNumberOfChars</a> on that element
     5.9  will return 2 since there are two UTF-16 code units (the surrogate pair)
    5.10  used to represent that one character.
    5.11  </p>
    5.12 -<pre class="idl">interface <b>SVGTextContentElement</b> : <a>SVGGraphicsElement</a> {
    5.13 +<pre class="idl">interface <b>SVGTextContentElement</b> : <a>SVGGeometryElement</a> {
    5.14  
    5.15    // lengthAdjust Types
    5.16    const unsigned short <a href="text.html#__svg__SVGTextContentElement__LENGTHADJUST_UNKNOWN">LENGTHADJUST_UNKNOWN</a> = 0;
    5.17    const unsigned short <a href="text.html#__svg__SVGTextContentElement__LENGTHADJUST_SPACING">LENGTHADJUST_SPACING</a> = 1;
    5.18    const unsigned short <a href="text.html#__svg__SVGTextContentElement__LENGTHADJUST_SPACINGANDGLYPHS">LENGTHADJUST_SPACINGANDGLYPHS</a> = 2;
    5.19  
    5.20    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="text.html#__svg__SVGTextContentElement__textLength">textLength</a>;
    5.21    readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedEnumeration">SVGAnimatedEnumeration</a> <a href="text.html#__svg__SVGTextContentElement__lengthAdjust">lengthAdjust</a>;
     6.1 --- a/master/types.html
     6.2 +++ b/master/types.html
     6.3 @@ -4485,16 +4485,83 @@ property.</p>
     6.4  is to directly render graphics into a group.</p>
     6.5  
     6.6  <pre class="idl">interface <b>SVGGraphicsElement</b> : <a>SVGTransformableElement</a> {
     6.7  };
     6.8  
     6.9  <a>SVGGraphicsElement</a> implements <a>SVGTests</a>;</pre>
    6.10  
    6.11  
    6.12 +<div class="ready-for-wg-review">
    6.13 +<h3 id="InterfaceSVGGeometryElement">Interface SVGGeometryElement</h3>
    6.14 +
    6.15 +<p>Interface <a>SVGGeometryElement</a> represents SVG elements whose rendering
    6.16 +is defined by geometry and which can be filled and stroked.  This includes
    6.17 +paths, text and the basic shapes.</p>
    6.18 +
    6.19 +<pre class="idl">interface <b>SVGGeometryElement</b> : <a>SVGGraphicsElement</a> {
    6.20 +  bool isPointInFill(<a>SVGPoint</a> point);
    6.21 +  bool isPointInStroke(<a>SVGPoint</a> point);
    6.22 +};</pre>
    6.23 +
    6.24 +<dl class="interface">
    6.25 +  <dt class="operations-header">Operations:</dt>
    6.26 +  <dd>
    6.27 +    <dl class="attributes">
    6.28 +      <dt id="__svg__SVGGeometryElement__isPointInFill" class="operation first-child">bool <b>isPointInFill</b>(<a>SVGPoint</a> point)</dt>
    6.29 +      <dd class="operation">
    6.30 +        Returns whether the specified point is within the fill of the element.
    6.31 +        Normal hit testing rules apply; the value of the <a>'pointer-events'</a>
    6.32 +	property on the element determines whether a point is considered to be
    6.33 +	within the fill.
    6.34 +        <dl class="operation">
    6.35 +          <dt class="parameters-header">Parameters</dt>
    6.36 +          <dd>
    6.37 +            <ol class="parameters">
    6.38 +              <li class="parameter first-child">
    6.39 +                <div><a>SVGPoint</a> <var>point</var></div>
    6.40 +                <div>The point to check for intersection with the fill
    6.41 +                of this element.  The <a>SVGPoint</a> is interpreted as a
    6.42 +                as a point in the user space of this element.</div>
    6.43 +              </li>
    6.44 +            </ol>
    6.45 +          </dd>
    6.46 +          <dt class="returns-header">Returns</dt>
    6.47 +          <dd>true if the point is within the fill of this shape,
    6.48 +	  or false otherwise.</dd>
    6.49 +        </dl>
    6.50 +      </dd>
    6.51 +      <dt id="__svg__SVGGeometryElement__isPointInStroke" class="operation">bool <b>isPointInStroke</b>(<a>SVGPoint</a> point)</dt>
    6.52 +      <dd class="operation">
    6.53 +        Returns whether the specified point is within the stroke of the element.
    6.54 +        Normal hit testing rules apply; the value of the <a>'pointer-events'</a>
    6.55 +	property on the element determines whether a point is considered to be
    6.56 +	within the stroke.
    6.57 +        <dl class="operation">
    6.58 +          <dt class="parameters-header">Parameters</dt>
    6.59 +          <dd>
    6.60 +            <ol class="parameters">
    6.61 +              <li class="parameter first-child">
    6.62 +                <div><a>SVGPoint</a> <var>point</var></div>
    6.63 +                <div>The point to check for intersection with the stroke
    6.64 +                of this element.  The <a>SVGPoint</a> is interpreted as a
    6.65 +                as a point in the user space of this element.</div>
    6.66 +              </li>
    6.67 +            </ol>
    6.68 +          </dd>
    6.69 +          <dt class="returns-header">Returns</dt>
    6.70 +          <dd>true if the point is within the stroke of this shape,
    6.71 +	  or false otherwise.</dd>
    6.72 +        </dl>
    6.73 +      </dd>
    6.74 +    </dl>
    6.75 +  </dd>
    6.76 +</dl>
    6.77 +</div>
    6.78 +
    6.79  <h3 id="InterfaceSVGDefinitionElement">Interface SVGDefinitionElement</h3>
    6.80  
    6.81  <p>Interface <a>SVGGraphicsElement</a> represents SVG elements whose primary purpose
    6.82  is to define a reusable resource.</p>
    6.83  
    6.84  <pre class="idl">interface <b>SVGDefinitionElement</b> : <a>SVGElement</a> {
    6.85  };
    6.86