svg2: Add isPointIn{Fill, Stroke} methods, and an SVGMarkerList to acc...

details:   https://svgwg.org/hg/svg2/rev/9f46c2f1cb89
branches:  
changeset: 369:9f46c2f1cb89
user:      Cameron McCormack <cam@mcc.id.au>
date:      Sat Sep 15 02:15:32 2012 +1000
description:
Add isPointIn{Fill,Stroke} methods, and an SVGMarkerList to access the markers painted on a markable element. (ACTION-3275)

diffstat:

 master/definitions.xml |    4 +
 master/painting.html   |  155 +++++++++++++++++++++++++++++++++++++++++++++++++
 master/paths.html      |    5 +-
 master/shapes.html     |   24 ++++---
 master/text.html       |    2 +-
 master/types.html      |   67 +++++++++++++++++++++
 6 files changed, 244 insertions(+), 13 deletions(-)

diffs (512 lines):

diff --git a/master/definitions.xml b/master/definitions.xml
--- a/master/definitions.xml
+++ b/master/definitions.xml
@@ -1052,16 +1052,17 @@
   <interface name='SVGNumberList' href='types.html#InterfaceSVGNumberList'/>
   <interface name='SVGAnimatedNumberList' href='types.html#InterfaceSVGAnimatedNumberList'/>
   <interface name='SVGLengthList' href='types.html#InterfaceSVGLengthList'/>
   <interface name='SVGColor' href='types.html#InterfaceSVGColor'/>
   <interface name='SVGICCColor' href='types.html#InterfaceSVGICCColor'/>
   <interface name='SVGLocatableElement' href='types.html#InterfaceSVGLocatableElement'/>
   <interface name='SVGTransformableElement' href='types.html#InterfaceSVGTransformableElement'/>
   <interface name='SVGGraphicsElement' href='types.html#InterfaceSVGGraphicsElement'/>
+  <interface name='SVGGeometryElement' href='types.html#InterfaceSVGGeometryElement'/>
   <interface name='SVGDefinitionElement' href='types.html#InterfaceSVGDefinitionElement'/>
   <interface name='SVGTests' href='types.html#InterfaceSVGTests'/>
   <interface name='SVGURIReference' href='types.html#InterfaceSVGURIReference'/>
   <interface name='SVGCSSRule' href='types.html#InterfaceSVGCSSRule'/>
   <interface name='SVGRenderingIntent' href='types.html#InterfaceSVGRenderingIntent'/>
   <interface name='SVGAnimatedBoolean' href='types.html#InterfaceSVGAnimatedBoolean'/>
   <interface name='SVGUnitTypes' href='types.html#InterfaceSVGUnitTypes'/>
   <interface name='SVGStyleElement' href='styling.html#InterfaceSVGStyleElement'/>
@@ -1103,17 +1104,20 @@
   <interface name='SVGTRefElement' href='text.html#InterfaceSVGTRefElement'/>
   <interface name='SVGTextPathElement' href='text.html#InterfaceSVGTextPathElement'/>
   <interface name='SVGAltGlyphElement' href='text.html#InterfaceSVGAltGlyphElement'/>
   <interface name='SVGAltGlyphDefElement' href='text.html#InterfaceSVGAltGlyphDefElement'/>
   <interface name='SVGAltGlyphItemElement' href='text.html#InterfaceSVGAltGlyphItemElement'/>
   <interface name='SVGGlyphRefElement' href='text.html#InterfaceSVGGlyphRefElement'/>
   <interface name='SVGTextContentElement' href='text.html#InterfaceSVGTextContentElement'/>
   <interface name='SVGTextPositioningElement' href='text.html#InterfaceSVGTextPositioningElement'/>
+  <interface name='SVGMarkableElement' href='painting.html#InterfaceSVGMarkableElement'/>
   <interface name='SVGMarkerElement' href='painting.html#InterfaceSVGMarkerElement'/>
+  <interface name='SVGMarkerInstance' href='painting.html#InterfaceSVGMarkerInstance'/>
+  <interface name='SVGMarkerList' href='painting.html#InterfaceSVGMarkerList'/>
   <interface name='SVGColorProfileElement' href='color.html#InterfaceSVGColorProfileElement'/>
   <interface name='SVGColorProfileRule' href='color.html#InterfaceSVGColorProfileRule'/>
   <interface name='SVGLinearGradientElement' href='pservers.html#InterfaceSVGLinearGradientElement'/>
   <interface name='SVGRadialGradientElement' href='pservers.html#InterfaceSVGRadialGradientElement'/>
   <interface name='SVGMeshGradientElement' href='pservers.html#InterfaceSVGMeshGradientElement'/>
   <interface name='SVGMeshRowElement' href='pservers.html#InterfaceSVGMeshRowElement'/>
   <interface name='SVGMeshPatchElement' href='pservers.html#InterfaceSVGMeshPatchElement'/>
   <interface name='SVGStopElement' href='pservers.html#InterfaceSVGStopElement'/>
diff --git a/master/painting.html b/master/painting.html
--- a/master/painting.html
+++ b/master/painting.html
@@ -3385,16 +3385,171 @@ interface SVGPaint : SVGColor {
   void setUri(DOMString uri);
   void setPaint(unsigned short paintType, DOMString uri, DOMString rgbColor, DOMString iccColor);
 };
 </pre>
 
 <p class="issue">There are some missing definitions of 
 SVGPaint members here.  The interface might be going away, however.</p>
 
+
+<div class="ready-for-wg-review">
+<h3 id="InterfaceSVGMarkerInstance">Interface SVGMarkerInstance</h3>
+
+<p>The <a>SVGMarkerInstance</a> interface is used to represent an instance
+of a marker that is on a <a>markable element</a>.  An <a>SVGMarkerInstance</a>
+can represent any kind of marker, including <a>positioned markers</a>.</p>
+
+<p class="issue">What should we do about liveness?  If it is live, we
+could have it know what index it is for, and always return information
+about the marker at that index (and return null for the element if
+that index is no longer valid).</p>
+
+<pre class='idl'>interface <b>SVGMarkerInstance</b> {
+  readonly attribute <a>SVGMarkerElement</a> element;
+  readonly attribute float position;
+  readonly attribute <a>SVGPoint</a> point;
+  readonly attribute float angle;
+};</pre>
+
+<dl class="interface">
+  <dt class="attributes-header">Attributes:</dt>
+  <dd>
+    <dl class="attributes">
+      <dt id="__svg__SVGMarkerInstance__element" class="attribute first-child"><b>element</b><span class="idl-type-parenthetical"> (readonly <a>SVGMarkerElement</a>)</span></dt>
+      <dd class="attribute">The <a>'marker element'</a> element that defines
+      the marker.  If the marker is a <a>vertex marker</a>, <a>segment marker</a>
+      or <a>repeating marker</a>, then this will be the <a>'marker element'</a>
+      element that the relevant marker property referenced.  If the marker is
+      a <a>positioned marker</a>, then this will be the child <a>'marker element'</a>
+      element of the <a>markable element</a>.</dd>
+
+      <dt id="__svg__SVGMarkerInstance__position" class="attribute"><b>position</b><span class="idl-type-parenthetical"> (readonly float)</span></dt>
+      <dd class="attribute">The distance along the <a>equivalent path</a> of the
+      <a>markable element</a> that the marker is positioned at.</dd>
+
+      <dt id="__svg__SVGMarkerInstance__point" class="attribute"><b>point</b><span class="idl-type-parenthetical"> (readonly <a>SVGPoint</a>)</span></dt>
+      <dd class="attribute">The point, in the user space of the
+      <a>markable element</a>, that the marker is positioned at.
+      The <a>SVGPoint</a> object is read only.</dd>
+
+      <dt id="__svg__SVGMarkerInstance__angle" class="attribute"><b>angle</b><span class="idl-type-parenthetical"> (readonly float)</span></dt>
+      <dd class="attribute">The orientation of the marker relative to a
+      vector pointing in the direction of the positive y-axis of the
+      <a>markable element</a>'s user space.</dd>
+    </dl>
+  </dd>
+</dl>
+
+
+<h3 id="InterfaceSVGMarkerList">Interface SVGMarkerList</h3>
+
+<p>The <a>SVGMarkerList</a> interface is used to expose the list of markers that
+are painted on a given <a>markable element</a>.  This list includes all
+<a>vertex markers</a>, <a>segment markers</a>, <a>repeating markers</a> and
+<a>positioned markers</a>.  The list of <a>SVGMarkerInstance</a> objects
+is maintained in the order that the markers are painted (see
+<a href='painting.html#Markers'>Markers</a>).</p>
+
+<pre class='idl'>interface <b>SVGMarkerList</b> {
+  readonly attribute unsigned long <a href='#__svg__SVGMarkerList__length'>length</a>;
+  getter <a>SVGMarkerInstance</a>? <a href='#__svg__SVGMarkerList__item'>item</a>(unsigned long index);
+};</pre>
+
+<dl class="interface">
+  <dt class="attributes-header">Attributes:</dt>
+  <dd>
+    <dl class="attributes">
+      <dt id="__svg__SVGMarkerList__length" class="attribute first-child"><b>length</b><span class="idl-type-parenthetical"> (readonly unsigned long)</span></dt>
+      <dd class="attribute">The number of markers on this element.</dd>
+    </dl>
+  </dd>
+  <dt class="operations-header">Operations:</dt>
+  <dd>
+    <dl class="attributes">
+      <dt id="__svg__SVGMarkerList__item" class="operation first-child"><a>SVGMarkerInstance</a>? <b>item</b>(unsigned long <var>index</var>)</dt>
+      <dd class="operation">
+        Gets the <a>SVGMarkerInstance</a> at the given position in the
+        list of markers on this element.
+        <dl class="operation">
+          <dt class="parameters-header">Parameters</dt>
+          <dd>
+            <ol class="parameters">
+              <li class="parameter first-child">
+                <div>unsigned long <var>index</var></div>
+                <div>The index of the <a>SVGMarkerInstance</a> to return.</div>
+              </li>
+            </ol>
+          </dd>
+          <dt class="returns-header">Returns</dt>
+          <dd>Returns the <a>SVGMarkerInstance</a> at position <var>index</var>
+          in the list of markers on this element, or null if <var>index</var>
+          is out of range.</dd>
+        </dl>
+      </dd>
+    </dl>
+  </dd>
+</dl>
+
+
+<h3 id="InterfaceSVGMarkableElement">Interface SVGMarkableElement</h3>
+
+<p>The <a>SVGMarkableElement</a> interface is implemented on all
+<a>markable elements</a>, and provides access to the markers that are placed on
+the element's path.</p>
+
+<pre class='idl'>[NoInterfaceObject]
+interface <b>SVGMarkableElement</b> {
+  readonly attribute <a>SVGMarkerList</a> <a href='#__svg__SVGMarkableElement__markers'>markers</a>;
+
+  long <a href='#__svg__SVGMarkableElement__getMarkerIndexFromPoint'>getMarkerIndexFromPoint</a>(<a>SVGPoint</a> point);
+};</pre>
+
+<dl class="interface">
+  <dt class="attributes-header">Attributes:</dt>
+  <dd>
+    <dl class="attributes">
+      <dt id="__svg__SVGMarkableElement__markers" class="attribute first-child"><b>markers</b><span class="idl-type-parenthetical"> (readonly <a>SVGMarkerList</a>)</span></dt>
+      <dd class="attribute">The list of markers on this element.</dd>
+    </dl>
+  </dd>
+  <dt class="operations-header">Operations:</dt>
+  <dd>
+    <dl class="attributes">
+      <dt id="__svg__SVGMarkableElement__getMarkerIndexFromPoint" class="operation first-child">long <b>getMarkerIndexFromPoint</b>(<a>SVGPoint</a> point)</dt>
+      <dd class="operation">
+        Returns the index into the <a>SVGMarkerList</a> of the marker that is at
+        the specified point.  Normal hit testing rules apply; the value of the
+        <a>'pointer-events'</a> property on the elements that comprise the markers,
+        as well as its value on this element, is honored, and the top-most marker
+        is selected when there are multiple markers whose content is at the given
+        point.
+        <dl class="operation">
+          <dt class="parameters-header">Parameters</dt>
+          <dd>
+            <ol class="parameters">
+              <li class="parameter first-child">
+                <div><a>SVGPoint</a> <var>point</var></div>
+                <div>The point to check for intersection with the markers
+                on this element.  The <a>SVGPoint</a> is interpreted as a
+                point in the user space of this element.</div>
+              </li>
+            </ol>
+          </dd>
+          <dt class="returns-header">Returns</dt>
+          <dd>The index into this element's <a>SVGMarkerList</a> of the marker
+          at the given point, or -1 if there is no such marker.</dd>
+        </dl>
+      </dd>
+    </dl>
+  </dd>
+</dl>
+</div>
+
+
 <h3 id="InterfaceSVGMarkerElement">Interface SVGMarkerElement</h3>
 
 
 <edit:with element='marker'>
 
 The <a>SVGMarkerElement</a> interface corresponds to the
 <a>'marker element'</a> element.
 <pre class="idl">interface <b>SVGMarkerElement</b> : <a>SVGDefinitionElement</a> {
diff --git a/master/paths.html b/master/paths.html
--- a/master/paths.html
+++ b/master/paths.html
@@ -2480,17 +2480,17 @@ the same value as <a>normalizedPathSegLi
 
 
 <h3 id="InterfaceSVGPathElement">Interface SVGPathElement</h3>
 
 
 
 The <a>SVGPathElement</a> interface corresponds to the <a>'path'</a>
 element.
-<pre class="idl">interface <b>SVGPathElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGPathElement</b> : <a>SVGGeometryElement</a> {
 
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedNumber">SVGAnimatedNumber</a> <a href="paths.html#__svg__SVGPathElement__pathLength">pathLength</a>;
 
   float <a href="paths.html#__svg__SVGPathElement__getTotalLength">getTotalLength</a>();
   <a class="idlinterface" href="coords.html#InterfaceSVGPoint">SVGPoint</a> <a href="paths.html#__svg__SVGPathElement__getPointAtLength">getPointAtLength</a>(float distance);
   unsigned long <a href="paths.html#__svg__SVGPathElement__getPathSegAtLength">getPathSegAtLength</a>(float distance);
   <a class="idlinterface" href="paths.html#InterfaceSVGPathSegClosePath">SVGPathSegClosePath</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegClosePath">createSVGPathSegClosePath</a>();
   <a class="idlinterface" href="paths.html#InterfaceSVGPathSegMovetoAbs">SVGPathSegMovetoAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegMovetoAbs">createSVGPathSegMovetoAbs</a>(float x, float y);
@@ -2508,17 +2508,18 @@ element.
   <a class="idlinterface" href="paths.html#InterfaceSVGPathSegLinetoVerticalAbs">SVGPathSegLinetoVerticalAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegLinetoVerticalAbs">createSVGPathSegLinetoVerticalAbs</a>(float y);
   <a class="idlinterface" href="paths.html#InterfaceSVGPathSegLinetoVerticalRel">SVGPathSegLinetoVerticalRel</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegLinetoVerticalRel">createSVGPathSegLinetoVerticalRel</a>(float y);
   <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);
   <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);
   <a class="idlinterface" href="paths.html#InterfaceSVGPathSegCurvetoQuadraticSmoothAbs">SVGPathSegCurvetoQuadraticSmoothAbs</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegCurvetoQuadraticSmoothAbs">createSVGPathSegCurvetoQuadraticSmoothAbs</a>(float x, float y);
   <a class="idlinterface" href="paths.html#InterfaceSVGPathSegCurvetoQuadraticSmoothRel">SVGPathSegCurvetoQuadraticSmoothRel</a> <a href="paths.html#__svg__SVGPathElement__createSVGPathSegCurvetoQuadraticSmoothRel">createSVGPathSegCurvetoQuadraticSmoothRel</a>(float x, float y);
 };
 
-<a>SVGPathElement</a> implements <a>SVGAnimatedPathData</a>;</pre><dl class="interface">
+<a>SVGPathElement</a> implements <a>SVGAnimatedPathData</a>;
+<a>SVGPathElement</a> implements <a>SVGMarkableElement</a>;</pre><dl class="interface">
 <dt class="attributes-header">Attributes:</dt>
 <dd>
 <dl class="attributes">
 
 <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>
 <dd class="attribute">
 <div>
 Corresponds to attribute <a>pathLength</a> on the given <a>'path'</a>
diff --git a/master/shapes.html b/master/shapes.html
--- a/master/shapes.html
+++ b/master/shapes.html
@@ -87,17 +87,17 @@ appropriate values for attributes <a>'rx
       <span class="attr-name"><a href="#RectElementHeightAttribute"><span>height</span></a></span>,
       <span class="attr-name"><a href="#RectElementRXAttribute"><span>rx</span></a></span>,
       <span class="attr-name"><a href="#RectElementRYAttribute"><span>ry</span></a></span>
     </td>
   </tr>
   <tr>
     <th>DOM Interface:</th>
     <td>
-<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGeometryElement</a> {
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__x">x</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__y">y</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__width">width</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__height">height</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__rx">rx</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__ry">ry</a>;
 };</pre>
     </td>
@@ -678,17 +678,17 @@ wsp:
 
 <h3 id="InterfaceSVGRectElement">Interface SVGRectElement</h3>
 
 
 <edit:with element='rect'>
 
 The <a>SVGRectElement</a> interface corresponds to the <a>'rect'</a>
 element.
-<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGRectElement</b> : <a>SVGGeometryElement</a> {
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__x">x</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__y">y</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__width">width</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__height">height</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__rx">rx</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGRectElement__ry">ry</a>;
 };</pre><dl class="interface">
 <dt class="attributes-header">Attributes:</dt>
@@ -751,17 +751,17 @@ Corresponds to attribute <a>'ry'</a> on 
 
 <h3 id="InterfaceSVGCircleElement">Interface SVGCircleElement</h3>
 
 
 <edit:with element='circle'>
 
 The <a>SVGCircleElement</a> interface corresponds to the <a>'circle'</a>
 element.
-<pre class="idl">interface <b>SVGCircleElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGCircleElement</b> : <a>SVGGeometryElement</a> {
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGCircleElement__cx">cx</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGCircleElement__cy">cy</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGCircleElement__r">r</a>;
 };</pre><dl class="interface">
 <dt class="attributes-header">Attributes:</dt>
 <dd>
 <dl class="attributes">
 
@@ -797,17 +797,17 @@ Corresponds to attribute <a>'r'</a> on t
 
 <h3 id="InterfaceSVGEllipseElement">Interface SVGEllipseElement</h3>
 
 
 <edit:with element='ellipse'>
 
 The <a>SVGEllipseElement</a> interface corresponds to the <a>'ellipse'</a>
 element.
-<pre class="idl">interface <b>SVGEllipseElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGEllipseElement</b> : <a>SVGGeometryElement</a> {
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__cx">cx</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__cy">cy</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__rx">rx</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGEllipseElement__ry">ry</a>;
 };</pre><dl class="interface">
 <dt class="attributes-header">Attributes:</dt>
 <dd>
 <dl class="attributes">
@@ -852,22 +852,24 @@ Corresponds to attribute <a>'ry'</a> on 
 
 <h3 id="InterfaceSVGLineElement">Interface SVGLineElement</h3>
 
 
 <edit:with element='line'>
 
 The <a>SVGLineElement</a> interface corresponds to the <a>'line'</a>
 element.
-<pre class="idl">interface <b>SVGLineElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGLineElement</b> : <a>SVGGeometryElement</a> {
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__x1">x1</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__y1">y1</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__x2">x2</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="shapes.html#__svg__SVGLineElement__y2">y2</a>;
-};</pre><dl class="interface">
+};
+
+<a>SVGLineElement</a> implements <a>SVGMarkableElement</a>;</pre><dl class="interface">
 <dt class="attributes-header">Attributes:</dt>
 <dd>
 <dl class="attributes">
 
 <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>
 <dd class="attribute">
 <div>
 Corresponds to attribute <a>'x1'</a> on the given <a>'line'</a> element.
@@ -957,31 +959,33 @@ currently being animated, contains the s
 
 
 <h3 id="InterfaceSVGPolylineElement">Interface SVGPolylineElement</h3>
 
 <edit:with element='polyline'>
 
 <p>The <a>SVGPolylineElement</a> interface corresponds to the <a>'polyline'</a> element.</p>
 
-<pre class="idl">interface <b>SVGPolylineElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGPolylineElement</b> : <a>SVGGeometryElement</a> {
 };
 
-<a>SVGPolylineElement</a> implements <a>SVGAnimatedPoints</a>;</pre>
+<a>SVGPolylineElement</a> implements <a>SVGAnimatedPoints</a>;
+<a>SVGPolylineElement</a> implements <a>SVGMarkableElement</a>;</pre>
 
 </edit:with>
 
 <h3 id="InterfaceSVGPolygonElement">Interface SVGPolygonElement</h3>
 
 
 <edit:with element='polygon'>
 
 <p>The <a>SVGPolygonElement</a> interface corresponds to the <a>'polygon'</a> element.</p>
 
-<pre class="idl">interface <b>SVGPolygonElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGPolygonElement</b> : <a>SVGGeometryElement</a> {
 };
 
-<a>SVGPolygonElement</a> implements <a>SVGAnimatedPoints</a>;</pre>
+<a>SVGPolygonElement</a> implements <a>SVGAnimatedPoints</a>;
+<a>SVGPolygonElement</a> implements <a>SVGMarkableElement</a>;</pre>
 
 </edit:with>
 
 </body>
 </html>
diff --git a/master/text.html b/master/text.html
--- a/master/text.html
+++ b/master/text.html
@@ -4754,17 +4754,17 @@ index to a UTF-16 code unit or a number 
 This is for consistency with DOM Level 2 Core, where methods on the
 <a>CharacterData</a> interface use UTF-16 code units as indexes and counts
 within the character data. Thus for example, if the text content of a
 <a>'text'</a> element is a single non-BMP character, such as U+10000, then
 invoking <a>SVGTextContentElement::getNumberOfChars</a> on that element
 will return 2 since there are two UTF-16 code units (the surrogate pair)
 used to represent that one character.
 </p>
-<pre class="idl">interface <b>SVGTextContentElement</b> : <a>SVGGraphicsElement</a> {
+<pre class="idl">interface <b>SVGTextContentElement</b> : <a>SVGGeometryElement</a> {
 
   // lengthAdjust Types
   const unsigned short <a href="text.html#__svg__SVGTextContentElement__LENGTHADJUST_UNKNOWN">LENGTHADJUST_UNKNOWN</a> = 0;
   const unsigned short <a href="text.html#__svg__SVGTextContentElement__LENGTHADJUST_SPACING">LENGTHADJUST_SPACING</a> = 1;
   const unsigned short <a href="text.html#__svg__SVGTextContentElement__LENGTHADJUST_SPACINGANDGLYPHS">LENGTHADJUST_SPACINGANDGLYPHS</a> = 2;
 
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedLength">SVGAnimatedLength</a> <a href="text.html#__svg__SVGTextContentElement__textLength">textLength</a>;
   readonly attribute <a class="idlinterface" href="types.html#InterfaceSVGAnimatedEnumeration">SVGAnimatedEnumeration</a> <a href="text.html#__svg__SVGTextContentElement__lengthAdjust">lengthAdjust</a>;
diff --git a/master/types.html b/master/types.html
--- a/master/types.html
+++ b/master/types.html
@@ -4485,16 +4485,83 @@ property.</p>
 is to directly render graphics into a group.</p>
 
 <pre class="idl">interface <b>SVGGraphicsElement</b> : <a>SVGTransformableElement</a> {
 };
 
 <a>SVGGraphicsElement</a> implements <a>SVGTests</a>;</pre>
 
 
+<div class="ready-for-wg-review">
+<h3 id="InterfaceSVGGeometryElement">Interface SVGGeometryElement</h3>
+
+<p>Interface <a>SVGGeometryElement</a> represents SVG elements whose rendering
+is defined by geometry and which can be filled and stroked.  This includes
+paths, text and the basic shapes.</p>
+
+<pre class="idl">interface <b>SVGGeometryElement</b> : <a>SVGGraphicsElement</a> {
+  bool isPointInFill(<a>SVGPoint</a> point);
+  bool isPointInStroke(<a>SVGPoint</a> point);
+};</pre>
+
+<dl class="interface">
+  <dt class="operations-header">Operations:</dt>
+  <dd>
+    <dl class="attributes">
+      <dt id="__svg__SVGGeometryElement__isPointInFill" class="operation first-child">bool <b>isPointInFill</b>(<a>SVGPoint</a> point)</dt>
+      <dd class="operation">
+        Returns whether the specified point is within the fill of the element.
+        Normal hit testing rules apply; the value of the <a>'pointer-events'</a>
+	property on the element determines whether a point is considered to be
+	within the fill.
+        <dl class="operation">
+          <dt class="parameters-header">Parameters</dt>
+          <dd>
+            <ol class="parameters">
+              <li class="parameter first-child">
+                <div><a>SVGPoint</a> <var>point</var></div>
+                <div>The point to check for intersection with the fill
+                of this element.  The <a>SVGPoint</a> is interpreted as a
+                as a point in the user space of this element.</div>
+              </li>
+            </ol>
+          </dd>
+          <dt class="returns-header">Returns</dt>
+          <dd>true if the point is within the fill of this shape,
+	  or false otherwise.</dd>
+        </dl>
+      </dd>
+      <dt id="__svg__SVGGeometryElement__isPointInStroke" class="operation">bool <b>isPointInStroke</b>(<a>SVGPoint</a> point)</dt>
+      <dd class="operation">
+        Returns whether the specified point is within the stroke of the element.
+        Normal hit testing rules apply; the value of the <a>'pointer-events'</a>
+	property on the element determines whether a point is considered to be
+	within the stroke.
+        <dl class="operation">
+          <dt class="parameters-header">Parameters</dt>
+          <dd>
+            <ol class="parameters">
+              <li class="parameter first-child">
+                <div><a>SVGPoint</a> <var>point</var></div>
+                <div>The point to check for intersection with the stroke
+                of this element.  The <a>SVGPoint</a> is interpreted as a
+                as a point in the user space of this element.</div>
+              </li>
+            </ol>
+          </dd>
+          <dt class="returns-header">Returns</dt>
+          <dd>true if the point is within the stroke of this shape,
+	  or false otherwise.</dd>
+        </dl>
+      </dd>
+    </dl>
+  </dd>
+</dl>
+</div>
+
 <h3 id="InterfaceSVGDefinitionElement">Interface SVGDefinitionElement</h3>
 
 <p>Interface <a>SVGGraphicsElement</a> represents SVG elements whose primary purpose
 is to define a reusable resource.</p>
 
 <pre class="idl">interface <b>SVGDefinitionElement</b> : <a>SVGElement</a> {
 };
 

Received on Friday, 14 September 2012 16:18:06 UTC