1. 導入
この節は規範的ではありません。
この仕様は、点、矩形、四角形、および3x2と4x4の次元を持つ変換行列を表現するためのいくつかのジオメトリインターフェースを記述します。
SVGインターフェイス SVGPoint、SVGRect、およびSVGMatrixは、
ここで定義されたインターフェイスをSVG、Canvas 2Dコンテキスト、CSSトランスフォームで共通して使用されるインターフェイスに合わせてエイリアスしています。[SVG11] [HTML] [CSS3-TRANSFORMS]
2. DOMPoint インターフェイス
2Dまたは3Dの点は、以下のWebIDLインターフェイスによって表すことができます。
[Exposed =(Window ,Worker ),Serializable ]interface {DOMPointReadOnly constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 1); [w NewObject ]static DOMPointReadOnly fromPoint (optional DOMPointInit = {});other readonly attribute unrestricted double x ;readonly attribute unrestricted double y ;readonly attribute unrestricted double z ;readonly attribute unrestricted double w ; [NewObject ]DOMPoint matrixTransform (optional DOMMatrixInit = {}); [matrix Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =]SVGPoint interface :DOMPoint DOMPointReadOnly {constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 1); [w NewObject ]static DOMPoint fromPoint (optional DOMPointInit = {});other inherit attribute unrestricted double x ;inherit attribute unrestricted double y ;inherit attribute unrestricted double z ;inherit attribute unrestricted double w ; };dictionary {DOMPointInit unrestricted double = 0;x unrestricted double = 0;y unrestricted double = 0;z unrestricted double = 1; };w
以下のアルゴリズムは、DOMPointReadOnly
オブジェクトが内部メンバー変数 x座標、y座標、z座標およびw遠近を持つことを前提としています。 DOMPointReadOnly
および継承インターフェイス DOMPointは、
これらの変数の値にアクセスし、設定できなければなりません。
属性や関数によって DOMPointReadOnly
オブジェクトを返すインターフェイスは、内部メンバー変数の値を変更できる場合があります。そのようなインターフェイスはこの能力を明示的に記述する必要があります。
内部メンバー変数は、いかなる方法でも公開してはなりません。
DOMPointReadOnly(x, y, z, w)
および DOMPoint(x, y, z, w)
コンストラクタを呼び出した際、以下の手順を実行しなければなりません:
-
pointを新しい
DOMPointReadOnlyまたはDOMPointオブジェクトとして初期化します。 -
pointを返します。
fromPoint(other) 静的メソッドは
DOMPointReadOnly
上で、辞書からDOMPointReadOnlyを作成
(other)を実行しなければなりません。
fromPoint(other) 静的メソッドは DOMPoint 上で、辞書からDOMPointを作成
(other)を実行しなければなりません。
辞書からDOMPointReadOnlyを作成
(other) または 辞書からDOMPointを作成
(other)の手順は以下の通りです:
-
pointを新しい
DOMPointReadOnlyまたはDOMPointとして初期化します。 -
pointの変数 x座標 を other の
x辞書メンバーに、y座標 を other のy辞書メンバーに、z座標 を other のz辞書メンバーに、w遠近を other のw辞書メンバーに設定します。 -
pointを返します。
x 属性は取得時、x座標
の値を返さなければなりません。 DOMPoint
インターフェイスの場合、x
属性を設定すると、x座標へ新しい値が設定されなければなりません。
y 属性は取得時、y座標 の値を返さなければなりません。 DOMPoint
インターフェイスの場合、y
属性を設定すると、y座標へ新しい値が設定されなければなりません。
z 属性は取得時、z座標 の値を返さなければなりません。 DOMPoint
インターフェイスの場合、z
属性を設定すると、z座標へ新しい値が設定されなければなりません。
w 属性は取得時、w遠近 の値を返さなければなりません。 DOMPoint
インターフェイスの場合、w
属性を設定すると、w遠近へ新しい値が設定されなければなりません。
matrixTransform(matrix)
メソッドを呼び出した場合、以下の手順を実行しなければなりません:
-
matrixObject を 辞書から
DOMMatrixを作成 (matrix)の結果とします。 -
現在の点と matrixObject を与えて 点を行列で変換 の結果を返します。現在の点は変更されません。
matrixTransform()
メソッドが DOMPoint
インスタンス上で呼ばれ、引数に DOMMatrix
インスタンスが渡されます。
var point = new DOMPoint( 5 , 4 );
var matrix = new DOMMatrix([ 2 , 0 , 0 , 2 , 10 , 10 ]);
var transformedPoint = point. matrixTransform( matrix);
point 変数は、新しい DOMPoint
オブジェクトとして設定され、x座標に5、y座標に4が初期値として与えられます。この新しい DOMPoint
は、matrix でスケールされ、平行移動されます。そうして得られた transformedPoint の x座標 は20、y座標
は18となります。
2.1. 点を行列で変換
点を行列で変換 するには、pointおよびmatrixに対して:
-
x を point の x座標 に設定します。
-
y を point の y座標 に設定します。
-
z を point の z座標 に設定します。
-
w を point の w遠近 に設定します。
-
pointVector を新しい列ベクトルとし、要素はそれぞれ x、y、z、wです。
-
pointVectorをmatrixで前乗します。
-
transformedPoint を新しい
DOMPointオブジェクトとします。 -
transformedPointの x座標 にpointVectorの1番目の要素を設定します。
-
transformedPointの y座標 にpointVectorの2番目の要素を設定します。
-
transformedPointの z座標 にpointVectorの3番目の要素を設定します。
-
transformedPointの w遠近 にpointVectorの4番目の要素を設定します。
-
transformedPointを返します。
※ matrix の is 2D が trueであり、point の z座標 が0 あるいは -0であり、point の w遠近 が 1 の場合は、2D変換です。それ以外の場合は3D変換です。
3. DOMRect インターフェイス
DOMRectReadOnly
インターフェイスを実装するオブジェクトは、矩形を表します。
矩形 は次の属性を持ちます:
- 原点
-
矩形の 幅寸法 がゼロ以上の場合、矩形の水平方向の原点は左端であり、それ以外の場合は右端です。同様に 高さ寸法 がゼロ以上の場合、矩形の垂直方向の原点は上端であり、それ以外の場合は下端です。
- x座標
-
矩形の 原点 までの、ビューポート左端からの水平方向の距離。
- y座標
-
矩形の 原点 までの、ビューポート上端からの垂直方向の距離。
- 幅寸法
-
矩形の幅。負になり得ます。
- 高さ寸法
-
矩形の高さ。負になり得ます。
[Exposed =(Window ,Worker ),Serializable ]interface {DOMRectReadOnly constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,width optional unrestricted double = 0); [height NewObject ]static DOMRectReadOnly fromRect (optional DOMRectInit = {});other readonly attribute unrestricted double ;x readonly attribute unrestricted double ;y readonly attribute unrestricted double ;width readonly attribute unrestricted double ;height readonly attribute unrestricted double ;top readonly attribute unrestricted double ;right readonly attribute unrestricted double ;bottom readonly attribute unrestricted double ; [left Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =]SVGRect interface :DOMRect DOMRectReadOnly {constructor (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,width optional unrestricted double = 0); [height NewObject ]static DOMRect fromRect (optional DOMRectInit = {});other inherit attribute unrestricted double ;x inherit attribute unrestricted double ;y inherit attribute unrestricted double ;width inherit attribute unrestricted double ; };height dictionary {DOMRectInit unrestricted double = 0;x unrestricted double = 0;y unrestricted double = 0;width unrestricted double = 0; };height
以下のアルゴリズムは、DOMRectReadOnly
オブジェクトが、内部メンバー変数 x座標、y座標、幅寸法、高さ寸法を持つことを前提とします。DOMRectReadOnly
および継承インターフェイス DOMRectは、これらの変数の値にアクセス・設定できなければなりません。
属性または関数によってDOMRectReadOnly
オブジェクトを返すインターフェイスは、内部メンバー変数の値を変更できる場合があります。このようなインターフェイスは、その能力について本文で明示する必要があります。
内部メンバー変数は、いかなる方法でも公開してはなりません。
DOMRectReadOnly(x, y, width, height)
および DOMRect(x, y, width, height)
コンストラクタを呼び出した際は、以下の手順を実行しなければなりません:
-
rect を新しい
DOMRectReadOnlyまたはDOMRectオブジェクトとして初期化します。 -
rect の変数 x座標 を xに、y座標 を yに、幅寸法 を widthに、高さ寸法 を heightに設定します。
-
rectを返します。
DOMRectReadOnly
上の静的メソッド fromRect(other) は、辞書からDOMRectReadOnlyを作成
(other) を実行しなければなりません。
DOMRect
上の静的メソッド fromRect(other) は、辞書からDOMRectを作成
(other)を実行しなければなりません。
辞書からDOMRectReadOnlyを作成
(other) または 辞書からDOMRectを作成
(other) の手順は以下の通りです:
-
rect を新しい
DOMRectReadOnlyまたはDOMRectとして初期化します。 -
rect の変数 x座標 を other の
x辞書メンバーに、y座標 を other のy辞書メンバーに、幅寸法 を other のwidth辞書メンバーに、高さ寸法 を other のheight辞書メンバーに設定します。 -
rect を返します。
x 属性は取得時、x座標 の値を返さなければなりません。DOMRect
インターフェイスの場合、x
属性を設定すると、x座標 に新しい値を設定しなければなりません。
y 属性は取得時、y座標 の値を返さなければなりません。DOMRect
インターフェイスの場合、y
属性を設定すると、y座標 に新しい値を設定しなければなりません。
width 属性は取得時、幅寸法 の値を返さなければなりません。DOMRect
インターフェイスの場合、width
属性を設定すると、幅寸法 に新しい値を設定しなければなりません。
height 属性は取得時、高さ寸法 の値を返さなければなりません。DOMRect
インターフェイスの場合、height
属性を設定すると、高さ寸法 に新しい値を設定しなければなりません。
top 属性は取得時、NaN安全な最小値(y座標
と、y座標に高さ寸法を加えた値)のうち小さい方を返さなければなりません。
right 属性は取得時、NaN安全な最大値(x座標
と、x座標に幅寸法を加えた値)のうち大きい方を返さなければなりません。
bottom 属性は取得時、NaN安全な最大値(y座標
と、y座標に高さ寸法を加えた値)のうち大きい方を返さなければなりません。
left 属性は取得時、NaN安全な最小値(x座標
と、x座標に幅寸法を加えた値)のうち小さい方を返さなければなりません。
4. DOMRectList インターフェイス
[Exposed =Window ]interface {DOMRectList readonly attribute unsigned long length ;getter DOMRect ?item (unsigned long ); };index
length 属性は、オブジェクトに紐づくDOMRectオブジェクトの総数を返さなければなりません。
item(index) メソッドは呼び出されたとき、index
がDOMRectオブジェクト総数以上の場合はnullを返さなければなりません。そうでない場合は、該当するDOMRectオブジェクトを返します。インデックスはゼロ始まりです。
DOMRectList
はレガシーWebコンテンツとの互換性のためだけに存在します。新しいAPIを定義する際は、DOMRectList
を使用してはなりません。代わりに sequence<DOMRect> を用いてください。[WEBIDL]
5. DOMQuad インターフェイス
DOMQuad
インターフェイスを実装するオブジェクトは 四辺形
を表します。
[Exposed =(Window ,Worker ),Serializable ]interface {DOMQuad constructor (optional DOMPointInit = {},p1 optional DOMPointInit = {},p2 optional DOMPointInit = {},p3 optional DOMPointInit = {}); [p4 NewObject ]static DOMQuad fromRect (optional DOMRectInit = {}); [other NewObject ]static DOMQuad fromQuad (optional DOMQuadInit = {}); [other SameObject ]readonly attribute DOMPoint p1 ; [SameObject ]readonly attribute DOMPoint p2 ; [SameObject ]readonly attribute DOMPoint p3 ; [SameObject ]readonly attribute DOMPoint p4 ; [NewObject ]DOMRect getBounds (); [Default ]object (); };toJSON dictionary {DOMQuadInit DOMPointInit ;p1 DOMPointInit ;p2 DOMPointInit ;p3 DOMPointInit ; };p4
以下のアルゴリズムは、DOMQuad
オブジェクトが内部メンバー変数 点1、点2、
点3、点4(いずれも DOMPoint
オブジェクト)を持つことを前提とします。DOMQuad
は、これら変数の値にアクセスし設定できなければなりません。
著者はこれらの DOMPoint
オブジェクトを修正することができ、これは四辺形に直接影響します。
属性や関数で DOMQuad
オブジェクトを返すインターフェイスは、内部メンバー変数の値を変更できる場合があります。そのようなインターフェイスはこの能力を本文で明示しなければなりません。
内部メンバー変数は、いかなる方法でも公開してはなりません。
DOMQuad(p1, p2, p3, p4)
コンストラクターを呼び出した場合、以下の手順を実行しなければなりません:
-
point1 を、新しい
DOMPointとして、属性値を p1 の同名辞書メンバーの値に設定します。 -
point2 を、新しい
DOMPointとして、属性値を p2 の同名辞書メンバーの値に設定します。 -
point3 を、新しい
DOMPointとして、属性値を p3 の同名辞書メンバーの値に設定します。 -
point4 を、新しい
DOMPointとして、属性値を p4 の同名辞書メンバーの値に設定します。 -
新しい
DOMQuadを返し、点1 に point1、 点2 に point2、 点3 に point3、 点4 に point4 を設定します。
※ DOMPoint/DOMPointReadOnly
型の引数も渡せます。渡された
引数は WebIDL の規則に従って内部的に適切なオブジェクト型へ変換されます。[WEBIDL]
DOMQuad 上の静的メソッド
fromRect(other) は、DOMRectInit 辞書から
DOMQuad を作成 (other) を実行しなければなりません。
DOMRectInit 辞書から
DOMQuad を作成 (other) の手順:
-
point1 を新しい
DOMPointとし、 x座標 を x、 y座標 を y、 z座標 を 0、 w遠近 を 1 に設定します。 -
point2 を新しい
DOMPointとし、 x座標 を x + width、 y座標 を y、 z座標 を 0、 w遠近 を 1 に設定します。 -
point3 を新しい
DOMPointとし、 x座標 を x + width、 y座標 を y + height、 z座標 を 0、 w遠近 を 1 に設定します。 -
point4 を新しい
DOMPointとし、 x座標 を x、 y座標 を y + height、 z座標 を 0、 w遠近 を 1 に設定します。 -
新しい
DOMQuadを返し、点1 に point1、 点2 に point2、 点3 に point3、点4 に point4 を設定します。
DOMQuad 上の静的メソッド
fromQuad(other) は、DOMQuadInit 辞書から
DOMQuad を作成 (other) を実行しなければなりません。
DOMQuadInit 辞書から
DOMQuad を作成 (other) の手順:
-
other の
p1辞書メンバーが存在すれば、辞書からDOMPointを作成 を呼び出して point1 を得ます。 -
other の
p2辞書メンバーが存在すれば、辞書からDOMPointを作成 を呼び出して point2 を得ます。 -
other の
p3辞書メンバーが存在すれば、辞書からDOMPointを作成 を呼び出して point3 を得ます。 -
other の
p4辞書メンバーが存在すれば、辞書からDOMPointを作成 を呼び出して point4 を得ます。 -
新しい
DOMQuadを返し、点1 に point1、点2 に point2、点3 に point3、点4 に point4 を設定します。
getBounds() メソッドは呼び出された際、以下のアルゴリズムを実行します:
-
bounds を
DOMRectオブジェクトに設定します。 -
left を NaN安全な最小値(点1 の x座標、点2 の x座標、点3 の x座標、点4 の x座標)に設定します。
-
right を NaN安全な最大値(点1 の x座標、点2 の x座標、点3 の x座標、点4 の x座標)に設定します。
-
bottom を NaN安全な最大値(点1 の y座標、点2 の y座標、点3 の y座標、点4 の y座標)に設定します。
-
bounds の x座標 を left に、y座標 を top に、幅寸法 を right - left に、高さ寸法 を bottom - top に設定します。
-
bounds を返します。
DOMQuad
コンストラクターが DOMPoint 型および
DOMPointInit
型の引数で呼び出されています。
どちらの引数も受け入れられ、使用できます。
var point = new DOMPoint( 2 , 0 );
var quad1 = new DOMQuad( point, { x: 12 , y: 0 }, { x: 12 , y: 10 }, { x: 2 , y: 10 });
上記の DOMQuad
quad1 の属性値は、以下の DOMQuad
quad2 の属性値と同等です:
var rect = new DOMRect( 2 , 0 , 10 , 10 );
var quad2 = DOMQuad. fromRect( rect);
new DOMQuad({ x: 40 , y: 25 }, { x: 180 , y: 8 }, { x: 210 , y: 150 }, { x: 10 , y: 180 });
DOMQuad
で表されます。
赤色で示された4つの円は、DOMPoint
の属性 p1
から p4
までを示します。
点線の矩形は getBounds()
メソッドによって得られるバウンディング矩形を表します(DOMQuad)。
6. DOMMatrix インターフェイス
DOMMatrix
および DOMMatrixReadOnly
インターフェイスは、いずれもグラフィカルなコンテキストでの変換を記述するための数学的な行列を表します。次のセクションでインターフェイスの詳細を説明します。
以下のセクションでは、用語の意味は次の通りです:
- 後乗
-
項 A を後乗するとは、A · B と等しいことを示します。
- 前乗
-
項 A を前乗するとは、B · A と等しいことを示します。
- 乗算
-
項 A に項 B を乗算するとは、A · B と等しいことを示します。
[Exposed =(Window ,Worker ),Serializable ]interface {DOMMatrixReadOnly constructor (optional (DOMString or sequence <unrestricted double >)); [init NewObject ]static DOMMatrixReadOnly fromMatrix (optional DOMMatrixInit = {}); [other NewObject ]static DOMMatrixReadOnly fromFloat32Array (Float32Array ); [array32 NewObject ]static DOMMatrixReadOnly fromFloat64Array (Float64Array ); // These attributes are simple aliases for certain elements of the 4x4 matrixarray64 readonly attribute unrestricted double a ;readonly attribute unrestricted double b ;readonly attribute unrestricted double c ;readonly attribute unrestricted double d ;readonly attribute unrestricted double e ;readonly attribute unrestricted double f ;readonly attribute unrestricted double m11 ;readonly attribute unrestricted double m12 ;readonly attribute unrestricted double m13 ;readonly attribute unrestricted double m14 ;readonly attribute unrestricted double m21 ;readonly attribute unrestricted double m22 ;readonly attribute unrestricted double m23 ;readonly attribute unrestricted double m24 ;readonly attribute unrestricted double m31 ;readonly attribute unrestricted double m32 ;readonly attribute unrestricted double m33 ;readonly attribute unrestricted double m34 ;readonly attribute unrestricted double m41 ;readonly attribute unrestricted double m42 ;readonly attribute unrestricted double m43 ;readonly attribute unrestricted double m44 ;readonly attribute boolean is2D ;readonly attribute boolean isIdentity ; // Immutable transform methods [NewObject ]DOMMatrix translate (optional unrestricted double = 0,tx optional unrestricted double = 0,ty optional unrestricted double = 0); [tz NewObject ]DOMMatrix scale (optional unrestricted double = 1,scaleX optional unrestricted double ,scaleY optional unrestricted double = 1,scaleZ optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0); [originZ NewObject ]DOMMatrix scaleNonUniform (optional unrestricted double = 1,scaleX optional unrestricted double = 1); [scaleY NewObject ]DOMMatrix scale3d (optional unrestricted double = 1,scale optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0); [originZ NewObject ]DOMMatrix rotate (optional unrestricted double = 0,rotX optional unrestricted double ,rotY optional unrestricted double ); [rotZ NewObject ]DOMMatrix rotateFromVector (optional unrestricted double = 0,x optional unrestricted double = 0); [y NewObject ]DOMMatrix rotateAxisAngle (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 0); [angle NewObject ]DOMMatrix skewX (optional unrestricted double = 0); [sx NewObject ]DOMMatrix skewY (optional unrestricted double = 0); [sy NewObject ]DOMMatrix multiply (optional DOMMatrixInit = {}); [other NewObject ]DOMMatrix flipX (); [NewObject ]DOMMatrix flipY (); [NewObject ]DOMMatrix inverse (); [NewObject ]DOMPoint transformPoint (optional DOMPointInit = {}); [point NewObject ]Float32Array toFloat32Array (); [NewObject ]Float64Array toFloat64Array (); [Exposed =Window ]stringifier ; [Default ]object (); }; [toJSON Exposed =(Window ,Worker ),Serializable ,LegacyWindowAlias =(,SVGMatrix )]WebKitCSSMatrix interface :DOMMatrix DOMMatrixReadOnly {constructor (optional (DOMString or sequence <unrestricted double >)); [init NewObject ]static DOMMatrix fromMatrix (optional DOMMatrixInit = {}); [other NewObject ]static DOMMatrix fromFloat32Array (Float32Array ); [array32 NewObject ]static DOMMatrix fromFloat64Array (Float64Array ); // These attributes are simple aliases for certain elements of the 4x4 matrixarray64 inherit attribute unrestricted double a ;inherit attribute unrestricted double b ;inherit attribute unrestricted double c ;inherit attribute unrestricted double d ;inherit attribute unrestricted double e ;inherit attribute unrestricted double f ;inherit attribute unrestricted double m11 ;inherit attribute unrestricted double m12 ;inherit attribute unrestricted double m13 ;inherit attribute unrestricted double m14 ;inherit attribute unrestricted double m21 ;inherit attribute unrestricted double m22 ;inherit attribute unrestricted double m23 ;inherit attribute unrestricted double m24 ;inherit attribute unrestricted double m31 ;inherit attribute unrestricted double m32 ;inherit attribute unrestricted double m33 ;inherit attribute unrestricted double m34 ;inherit attribute unrestricted double m41 ;inherit attribute unrestricted double m42 ;inherit attribute unrestricted double m43 ;inherit attribute unrestricted double m44 ; // Mutable transform methodsDOMMatrix multiplySelf (optional DOMMatrixInit = {});other DOMMatrix preMultiplySelf (optional DOMMatrixInit = {});other DOMMatrix translateSelf (optional unrestricted double = 0,tx optional unrestricted double = 0,ty optional unrestricted double = 0);tz DOMMatrix scaleSelf (optional unrestricted double = 1,scaleX optional unrestricted double ,scaleY optional unrestricted double = 1,scaleZ optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0);originZ DOMMatrix scale3dSelf (optional unrestricted double = 1,scale optional unrestricted double = 0,originX optional unrestricted double = 0,originY optional unrestricted double = 0);originZ DOMMatrix rotateSelf (optional unrestricted double = 0,rotX optional unrestricted double ,rotY optional unrestricted double );rotZ DOMMatrix rotateFromVectorSelf (optional unrestricted double = 0,x optional unrestricted double = 0);y DOMMatrix rotateAxisAngleSelf (optional unrestricted double = 0,x optional unrestricted double = 0,y optional unrestricted double = 0,z optional unrestricted double = 0);angle DOMMatrix skewXSelf (optional unrestricted double = 0);sx DOMMatrix skewYSelf (optional unrestricted double = 0);sy DOMMatrix invertSelf (); [Exposed =Window ]DOMMatrix setMatrixValue (DOMString ); };transformList dictionary {DOMMatrix2DInit unrestricted double ;a unrestricted double ;b unrestricted double ;c unrestricted double ;d unrestricted double ;e unrestricted double ;f unrestricted double ;m11 unrestricted double ;m12 unrestricted double ;m21 unrestricted double ;m22 unrestricted double ;m41 unrestricted double ; };m42 dictionary :DOMMatrixInit DOMMatrix2DInit {unrestricted double = 0;m13 unrestricted double = 0;m14 unrestricted double = 0;m23 unrestricted double = 0;m24 unrestricted double = 0;m31 unrestricted double = 0;m32 unrestricted double = 1;m33 unrestricted double = 0;m34 unrestricted double = 0;m43 unrestricted double = 1;m44 boolean ; };is2D
以下のアルゴリズムは、DOMMatrixReadOnly
オブジェクトが、内部メンバー変数 m11要素、m12要素、m13要素、m14要素、m21要素、m22要素、m23要素、m24要素、m31要素、m32要素、m33要素、m34要素、m41要素、m42要素、m43要素、m44要素とis 2Dを持つことを前提とします。DOMMatrixReadOnly
および継承インターフェイス DOMMatrixは、これらの変数の値にアクセス・設定できなければなりません。
属性や関数によってDOMMatrixReadOnly
オブジェクトを返すインターフェイスは、内部メンバー変数の値を変更できる場合があります。そのようなインターフェイスは、この能力について本文で明示する必要があります。
内部メンバー変数は、いかなる方法でも公開してはなりません。
DOMMatrix
および DOMMatrixReadOnly
インターフェイスは、SVG の SVGMatrix インターフェイスを置き換えます。[SVG11]
6.1. DOMMatrix2DInit および DOMMatrixInit 辞書
(2D の)検証と修正 を DOMMatrix2DInit
または DOMMatrixInit
辞書 dict に対して行うには、以下の手順を実行します:
-
dict に対して、次のいずれかが真の場合、
TypeError例外を投げて、これらの手順を中止します。-
aおよびm11の両方が存在し、SameValueZero(a,m11) がfalseとなる場合。 -
bおよびm12の両方が存在し、SameValueZero(b,m12) がfalseとなる場合。 -
cおよびm21の両方が存在し、SameValueZero(c,m21) がfalseとなる場合。 -
dおよびm22の両方が存在し、SameValueZero(d,m22) がfalseとなる場合。 -
eおよびm41の両方が存在し、SameValueZero(e,m41) がfalseとなる場合。 -
fおよびm42の両方が存在し、SameValueZero(f,m42) がfalseとなる場合。
-
※ SameValueZero 比較アルゴリズムは、二つの NaN 値、そして
0 と -0 に対して true を返します。[ECMA-262]
検証と修正 を DOMMatrixInit
辞書 dict に対して行う場合、以下の手順を実行します:
-
(2D の)検証と修正 を dict に行う。
-
is2Dがtrueかつ:m13、m14、m23、m24、m31、m32、m34、m43のいずれかが 0 または -0 以外で存在する場合、またはm33、m44のいずれかが 1 以外で存在する場合、TypeError例外を投げ、これらの手順を中止する。 -
is2Dが存在せず、かつm13、m14、m23、m24、m31、m32、m34、m43のいずれかが 0 または -0 以外で存在する場合、またはm33、m44のいずれかが 1 以外で存在する場合、is2Dをfalseに設定する。 -
is2Dが未設定の場合、trueに設定する。
テスト
6.2. 文字列から抽象行列へのパース
文字列から抽象行列をパースするとは、与えられた文字列 transformList に対して、以下の手順を実行することを意味します。処理は 4x4 抽象行列 とブール値 2dTransform のペア、または失敗を返します。
-
もし transformList が空文字列なら、"
matrix(1, 0, 0, 1, 0, 0)" という文字列に設定します。 -
パースを行い、transformList を CSS の transform プロパティの文法で parsedValue へ変換します。結果は <transform-list>、キーワード none、または失敗となります。もし parsedValue が失敗の場合や、<transform-function> に <length> 値が絶対長さ単位無しで使われている場合、または none 以外のキーワードが使われている場合は失敗を返します。[CSS3-SYNTAX] [CSS3-TRANSFORMS]
-
もし parsedValue が none なら、parsedValue を単一の単位行列を含む <transform-list> に設定します。
-
2dTransform に parsedValue の 2D/3D 寸法状態を記録します。
- もし parsedValue が 三次元変換関数 を含む場合
-
2dTransform に
falseを設定します。 - それ以外の場合
-
2dTransform に
trueを設定します。
-
すべての <transform-function> を “Transform 関数の数学的記述” に従って 4x4 抽象行列 に変換します。[CSS3-TRANSFORMS]
-
本節冒頭の図と同じ形式の 4x4 抽象行列 matrix を用意します。全ての行列を左から右へ 後乗 して、その積を matrix に設定します。
-
matrix と 2dTransform を返します。
6.3. DOMMatrixReadOnly と DOMMatrix オブジェクトの作成
2D行列を作成とは、type(DOMMatrixReadOnly
または DOMMatrix)型と、6要素のシーケンス
init が与えられた場合、次の手順を実行します:
-
matrix を type の新しいインスタンスとして作成します。
-
m11 要素、m12 要素、m21 要素、m22 要素、m41 要素、m42 要素 を、init のそれぞれの値順に設定します。
-
m13 要素、 m14 要素、 m23 要素、 m24 要素、 m31 要素、 m32 要素、 m34 要素、 m43 要素 を 0 に設定します。
-
is 2D を
trueに設定します。 -
matrix を返します。
3D行列を作成とは、type(DOMMatrixReadOnly
または DOMMatrix)型と、16要素のシーケンス
init が与えられた場合、次の手順を実行します:
-
matrix を type の新しいインスタンスとして作成します。
-
is 2D を
falseに設定します。 -
matrix を返します。
DOMMatrixReadOnly(init) と
DOMMatrix(init) のコンストラクターは、以下の手順に従わなければなりません:
- もし init が省略された場合
-
DOMMatrixReadOnlyまたはDOMMatrix型として、シーケンス [1, 0, 0, 1, 0, 0] で 2D行列を作成 の結果を返します。 - init が
DOMString型の場合 -
-
もし current global object が
Windowオブジェクトでない場合は、TypeError例外を投げる。 -
init を抽象行列へパースし、結果の matrix, 2dTransform を取得。失敗なら "
SyntaxError"DOMExceptionを投げる。
-
- init が6要素のシーケンスの場合
-
2D行列を作成 の結果を返す。
- init が16要素のシーケンスの場合
-
3D行列を作成 の結果を返す。
- それ以外の場合
-
TypeError例外を投げる。
fromMatrix(other) 静的メソッド(DOMMatrixReadOnly
上)では 辞書からDOMMatrixReadOnlyを作成
(other) を実行しなければなりません。
fromMatrix(other) 静的メソッド(DOMMatrix 上)では
辞書からDOMMatrixを作成
(other) を実行しなければなりません。
2D 辞書からDOMMatrixReadOnlyを作成
(other) または 2D 辞書からDOMMatrixを作成
(other) の手順は次の通りです:
-
(2D の)検証と修正を other に対し行う。
-
DOMMatrixReadOnlyまたはDOMMatrix型として、other のm11,m12,m21,m22,m41とm42の順で値を使い 2D行列を作成 を返す。
辞書からDOMMatrixReadOnlyを作成
(other) または 辞書からDOMMatrixを作成 (other)
の手順は次の通りです:
-
検証と修正 を other に対し行う。
fromFloat32Array(array32)
静的メソッド(DOMMatrixReadOnly
上)、および fromFloat32Array(array32) 静的メソッド(DOMMatrix
上)は以下の手順に従います:
- もし array32 が6要素の場合
-
DOMMatrixReadOnlyまたはDOMMatrix型で array32 から値を順に使い 2D行列を作成 を返す。 - array32 が16要素の場合
-
DOMMatrixReadOnlyまたはDOMMatrix型で array32 から値を順に使い 3D行列を作成 を返す。 - それ以外の場合
-
TypeError例外を投げる。
fromFloat64Array(array64)
静的メソッド(DOMMatrixReadOnly
上)、および fromFloat64Array(array64) 静的メソッド(DOMMatrix
上)は以下の手順に従います:
- もし array64 が6要素の場合
-
DOMMatrixReadOnlyまたはDOMMatrix型で array64 から値を順に使い 2D行列を作成 を返す。 - array64 が16要素の場合
-
DOMMatrixReadOnlyまたはDOMMatrix型で array64 から値を順に使い 3D行列を作成 を返す。 - それ以外の場合
-
TypeError例外を投げる。
6.4. DOMMatrix の属性
以下の属性 m11
から m44
までが、行列インターフェイスの16項目に対応します。
m11 および a を取得した場合、m11要素の値を返す必要があります。DOMMatrix
インターフェイスの場合、m11
または a
属性を設定すると、m11要素 が新しい値となります。
m12 および b を取得した場合、m12要素 の値を返します。DOMMatrix
インターフェイスの場合、m12
または b
属性を設定すると、m12要素 が新しい値となります。
m13
を取得した場合、m13要素
の値を返します。DOMMatrix
インターフェイスの場合、m13
属性を設定すると、m13要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m14
を取得した場合、m14要素
の値を返します。DOMMatrix
インターフェイスの場合、m14
属性を設定すると、m14要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m21 および c を取得した場合、m21要素 の値を返します。DOMMatrix
インターフェイスの場合、m21
または c
属性を設定すると、m21要素 が新しい値となります。
m22 および d を取得した場合、m22要素 の値を返します。DOMMatrix
インターフェイスの場合、m22
または d
属性を設定すると、m22要素 が新しい値となります。
m23
を取得した場合、m23要素
の値を返します。DOMMatrix
インターフェイスの場合、m23
属性を設定すると、m23要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m24
を取得した場合、m24要素
の値を返します。DOMMatrix
インターフェイスの場合、m24
属性を設定すると、m24要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m31
を取得した場合、m31要素
の値を返します。DOMMatrix
インターフェイスの場合、m31
属性を設定すると、m31要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m32
を取得した場合、m32要素
の値を返します。DOMMatrix
インターフェイスの場合、m32
属性を設定すると、m32要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m33
を取得した場合、m33要素
の値を返します。DOMMatrix
インターフェイスの場合、m33
属性を設定すると、m33要素 が新しい値となり、その値が 1
でなければ is 2D を
false に設定します。
m34
を取得した場合、m34要素
の値を返します。DOMMatrix
インターフェイスの場合、m34
属性を設定すると、m34要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m41 および e を取得した場合、m41要素 の値を返します。DOMMatrix
インターフェイスの場合、m41
または e
属性を設定すると、m41要素 が新しい値となります。
m42 および f を取得した場合、m42要素 の値を返します。DOMMatrix
インターフェイスの場合、m42
または f
属性を設定すると、m42要素 が新しい値となります。
m43
を取得した場合、m43要素
の値を返します。DOMMatrix
インターフェイスの場合、m43
属性を設定すると、m43要素 が新しい値となり、その値が 0
または -0 でなければ is 2D を false に設定します。
m44
を取得した場合、m44要素
の値を返します。DOMMatrix
インターフェイスの場合、m44
属性を設定すると、m44要素 が新しい値となり、その値が 1
でなければ is 2D を
false に設定します。
以下の属性は DOMMatrixReadOnly
の状態情報を提供します。
is2D 属性は is 2D の値を返しなければなりません。
isIdentity 属性は、
m12要素、m13要素、m14要素、m21要素、m23要素、m24要素、m31要素、m32要素、m34要素、m41要素、m42要素、m43要素 が 0 または -0 であり、m11要素、m22要素、m33要素、m44要素 が 1
である場合 true を返します。そうでない場合 false を返します。
全ての DOMMatrixReadOnly
オブジェクトは boolean の is 2D フラグを持たなければなりません。このフラグは以下を示します:
-
現在の行列が 2D 行列として初期化された。詳細は各 作成者 を参照してください。
-
2D 変換操作のみが行われた。各 mutable および immutable transformation method 毎に is 2D を
falseにするかどうかが定義されています。
※ is 2D は、一度 false になると、例外的に setMatrixValue()
メソッドを呼び出す場合以外、DOMMatrix
オブジェクト上で true には戻りません。
6.5. 不変変換メソッド
以下のメソッドは現在の行列を変更せず、新しい DOMMatrix
オブジェクトを返します。
translate(tx, ty, tz)-
-
result を現在の行列の値で初期化した結果行列とする。
-
result に tx, ty, tz を引数に
translateSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
scale(scaleX, scaleY, scaleZ, originX, originY, originZ)-
-
scaleY が省略された場合、scaleY に scaleX の値を設定する。
-
result を現在の行列の値で初期化した結果行列とする。
-
result に scaleX, scaleY, scaleZ, originX, originY, originZ を引数に
scaleSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
scaleNonUniform(scaleX, scaleY)-
※ レガシー互換(SVG 1.1の
SVGMatrix)のためにサポートされています。作者はscale()の使用を推奨します。-
result を現在の行列の値で初期化した結果行列とする。
-
result に scaleX, scaleY, 1, 0, 0, 0 を引数に
scaleSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
scale3d(scale, originX, originY, originZ)-
-
result を現在の行列の値で初期化した結果行列とする。
-
result に scale, originX, originY, originZ を引数に
scale3dSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
rotate(rotX, rotY, rotZ)-
-
result を現在の行列の値で初期化した結果行列とする。
-
result に rotX, rotY, rotZ を引数に
rotateSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
rotateFromVector(x, y)-
-
result を現在の行列の値で初期化した結果行列とする。
-
result に x, y を引数に
rotateFromVectorSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
rotateAxisAngle(x, y, z, angle)-
-
result を現在の行列の値で初期化した結果行列とする。
-
result に x, y, z, angle を引数に
rotateAxisAngleSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
skewX(sx)-
-
result を現在の行列の値で初期化した結果行列とする。
-
sx を引数に
skewXSelf()変換を result に実行します。 -
result を返す。
現在の行列は変更されません。
-
skewY(sy)-
-
result を現在の行列の値で初期化した結果行列とする。
-
sy を引数に
skewYSelf()変換を result に実行します。 -
result を返す。
現在の行列は変更されません。
-
multiply(other)-
-
result を現在の行列の値で初期化した結果行列とする。
-
other を引数に
multiplySelf()変換を結果に実行します。 -
result を返す。
現在の行列は変更されません。
-
flipX()-
-
result を現在の行列の値で初期化した結果行列とする。
-
result を
new DOMMatrix([-1, 0, 0, 1, 0, 0])で 後乗 変換する。 -
result を返す。
現在の行列は変更されません。
-
flipY()-
-
result を現在の行列の値で初期化した結果行列とする。
-
result を
new DOMMatrix([1, 0, 0, -1, 0, 0])で 後乗 変換する。 -
result を返す。
現在の行列は変更されません。
-
inverse()-
-
result を現在の行列の値で初期化した結果行列とする。
-
result に
invertSelf()変換を実行する。 -
result を返す。
現在の行列は変更されません。
-
以下のメソッドは現在の行列を変更しません。
transformPoint(point)-
pointObject を 辞書から
DOMPointを作成 (point) の結果とし、点を行列で変換 の結果(pointObject と現在の行列を引数に実行)を返します。渡した引数は変更されません。 toFloat32Array()-
現在の行列の
m11からm44までの16要素を、列優先順でFloat32Arrayでシリアライズして返します。 toFloat64Array()-
現在の行列の
m11からm44までの16要素を、列優先順でFloat64Arrayでシリアライズして返します。 - 文字列化挙動
-
-
m11要素 から m44要素 のいずれかが非有限値の場合、"
InvalidStateError"DOMExceptionを投げる。 -
string を空文字列とする。
-
is 2D が
trueなら:-
string に "
matrix(" を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
)" を追加する。
※ この文字列は CSS Transforms の <matrix()> 関数形式になります。[CSS3-TRANSFORMS]
-
-
それ以外の場合:
-
string に "
matrix3d(" を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
," を追加する。 -
string に "
)" を追加する。
※ この文字列は CSS Transforms の <matrix3d()> 関数形式になります。[CSS3-TRANSFORMS]
-
-
string を返す。
-
var matrix = new DOMMatrix();
matrix. scaleSelf( 2 );
matrix. translateSelf( 20 , 20 );
console. assert( matrix. toString() ===
"matrix(2, 0, 0, 2, 40, 40)" );
var matrix = new DOMMatrix();
matrix. scale3dSelf( 2 );
console. assert( matrix. toString() ===
"matrix3d(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1)" );
3D操作の場合、文字列化では3D行列を表す文字列になります。
var matrix = new DOMMatrix([ NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN , NaN ]);
var string = matrix + " Batman!" ;
6.6. 可変変換メソッド
以下のメソッドは現在の行列を変更しますので、それぞれのメソッドは呼び出し元の行列自身を返します。主な利点は、コンテンツ作成者がメソッド呼び出しをチェーンできることです。
var matrix = new DOMMatrix();
matrix. translateSelf( 20 , 20 );
matrix. scaleSelf( 2 );
matrix. translateSelf( - 20 , - 20 );
は、次のコードと等価です:
var matrix = new DOMMatrix();
matrix. translateSelf( 20 , 20 ). scaleSelf( 2 ). translateSelf( - 20 , - 20 );
※ メソッドチェーンを利用する場合は、可変変換メソッドを使うことで、中間的な DOMMatrix
オブジェクトの生成によるユーザーエージェントの不要なメモリ割り当てを避けられます。
multiplySelf(other)-
-
otherObject を 辞書から
DOMMatrixを作成 (other) の結果とする。 -
otherObject 行列を現在の行列に後乗する。
-
is 2D が otherObject で
falseの場合、現在の行列の is 2D をfalseに設定する。 -
現在の行列を返す。
-
preMultiplySelf(other)-
-
otherObject を 辞書から
DOMMatrixを作成 (other) の結果とする。 -
otherObject 行列を現在の行列に前乗する。
-
is 2D が otherObject で
falseの場合、現在の行列の is 2D をfalseに設定する。 -
現在の行列を返す。
-
translateSelf(tx, ty, tz)-
-
現在の行列に、3D平行移動変換を後乗する。3D平行移動行列はCSS Transformsで定義されています。[CSS3-TRANSFORMS]
-
tz が0または-0以外に指定された場合、現在の行列の is 2D を
falseに設定します。 -
現在の行列を返す。
-
scaleSelf(scaleX, scaleY, scaleZ, originX, originY, originZ)-
-
現在の行列に、originX, originY, originZ を引数に
translateSelf()変換を実行します。 -
scaleY が省略された場合、scaleY に scaleX の値を設定します。
-
現在の行列に、scaleX, scaleY, scaleZ を使い非均等スケール変換を 後乗する。3Dスケール行列はCSS Transformsで定義されており、sx = scaleX, sy = scaleY, sz = scaleZとなる。[CSS3-TRANSFORMS]
-
originX, originY, originZ の符号を反転する。
-
現在の行列に、-originX, -originY, -originZ を引数に
translateSelf()変換を実行します。 -
scaleZ が 1 でない場合、現在の行列の is 2D を
falseに設定します。 -
現在の行列を返す。
-
scale3dSelf(scale, originX, originY, originZ)-
-
現在の行列に、originX, originY, originZ を引数に
translateSelf()変換を実行します。 -
現在の行列に、3D一様スケール変換 (
m11=m22=m33= scale) を 後乗で適用する。3Dスケール行列はCSS Transformsで定義されており、sx = sy = sz = scaleとなる。[CSS3-TRANSFORMS] -
現在の行列に、-originX, -originY, -originZ を引数に
translateSelf()変換を実行します。 -
scale が 1 でない場合、現在の行列の is 2D を
falseに設定します。 -
現在の行列を返す。
-
rotateSelf(rotX, rotY, rotZ)-
-
rotY および rotZ の両方が省略された場合、rotZ に rotXの値を設定し、rotX および rotY は 0 に設定する。
-
さらに rotY が省略されていれば、rotY を 0 に設定する。
-
さらに rotZ が省略されていれば、rotZ を 0 に設定する。
-
rotX または rotY が 0 または -0 でなければ現在の行列の is 2D を
falseに設定する。 -
現在の行列に、ベクトル(0,0,1)周りに rotZ 度回転する変換を後乗する。3D回転行列はCSS Transformsで定義されていて alpha=rotZ度。[CSS3-TRANSFORMS]
-
現在の行列に、ベクトル(0,1,0)周りに rotY 度回転する変換を後乗する。3D回転行列はCSS Transformsで定義されていて alpha=rotY度。[CSS3-TRANSFORMS]
-
現在の行列に、ベクトル(1,0,0)周りに rotX 度回転する変換を後乗する。3D回転行列はCSS Transformsで定義されていて alpha=rotX度。[CSS3-TRANSFORMS]
-
現在の行列を返す。
-
rotateFromVectorSelf(x, y)-
-
現在の行列に、ベクトル(1,0)Tと(x,y)Tが成す時計回りの角度による回転変換を後乗する。xとyが両方とも0または-0なら、角度は0とする。2D回転行列はCSS Transformsで定義されていて、
alphaはこの角度(度単位)。[CSS3-TRANSFORMS] -
現在の行列を返す。
-
rotateAxisAngleSelf(x, y, z, angle)-
-
現在の行列に、指定されたベクトル x, y, z 周りに angle 度回転する回転変換を後乗する。3D回転行列はCSS Transformsで定義されていて alpha=angle度。[CSS3-TRANSFORMS]
-
x または y が 0 または -0 でなければ現在の行列の is 2D を
falseに設定する。 -
現在の行列を返す。
-
skewXSelf(sx)-
-
現在の行列に、sx度のskewX変換を後乗する。2D skewX行列はCSS Transformsで定義されていて alpha=sx度。[CSS3-TRANSFORMS]
-
現在の行列を返す。
-
skewYSelf(sy)-
-
現在の行列に、sy度のskewY変換を後乗する。2D skewY行列はCSS Transformsで定義されていて beta=sy度。[CSS3-TRANSFORMS]
-
現在の行列を返す。
-
invertSelf()setMatrixValue(transformList)-
-
transformListを抽象行列にパースし、結果の matrix と 2dTransform を取得。失敗なら "
SyntaxError"DOMExceptionを投げる。 -
is 2D に 2dTransform の値を設定する。
-
現在の行列を返す。
-
7. 構造化シリアル化
DOMPointReadOnly,
DOMPoint,
DOMRectReadOnly,
DOMRect,
DOMQuad,
DOMMatrixReadOnly,
DOMMatrix
オブジェクトは シリアル化可能オブジェクト です。[HTML]
DOMPointReadOnly
および DOMPoint の
シリアル化手順は、value と serialized が与えられたとき、以下の通りです:
-
serialized.[[X]] に value の x座標 を設定する。
-
serialized.[[Y]] に value の y座標 を設定する。
-
serialized.[[Z]] に value の z座標 を設定する。
-
serialized.[[W]] に value の w透視座標 を設定する。
これらの 逆シリアル化手順は、serialized および value が与えられたとき、以下の通りです:
-
value の x座標 に serialized.[[X]] を設定する。
-
value の y座標 に serialized.[[Y]] を設定する。
-
value の z座標 に serialized.[[Z]] を設定する。
-
value の w透視座標 に serialized.[[W]] を設定する。
DOMRectReadOnly
および DOMRect の シリアル化手順は、value と serialized
が与えられたとき、以下の通りです:
-
serialized.[[X]] に value の x座標 を設定する。
-
serialized.[[Y]] に value の y座標 を設定する。
-
serialized.[[Width]] に value の 幅寸法 を設定する。
-
serialized.[[Height]] に value の 高さ寸法 を設定する。
これらの 逆シリアル化手順は、serialized と value が与えられたとき、以下の通りです:
-
value の x座標 に serialized.[[X]] を設定する。
-
value の y座標 に serialized.[[Y]] を設定する。
-
value の 幅寸法 に serialized.[[Width]] を設定する。
-
value の 高さ寸法 に serialized.[[Height]] を設定する。
DOMQuad
の シリアル化手順は、value と serialized
が与えられた場合、以下の通りです:
これらの 逆シリアル化手順は、serialized と value が与えられた場合、以下の通りです:
DOMMatrixReadOnly
および DOMMatrix の シリアル化手順は、value と serialized が与えられた場合:
-
value の is 2D が
trueの場合:-
serialized.[[M11]] に value の m11要素 を設定する。
-
serialized.[[M12]] に value の m12要素 を設定する。
-
serialized.[[M21]] に value の m21要素 を設定する。
-
serialized.[[M22]] に value の m22要素 を設定する。
-
serialized.[[M41]] に value の m41要素 を設定する。
-
serialized.[[M42]] に value の m42要素 を設定する。
-
serialized.[[Is2D]] に
trueを設定する。
※ 2Dの
DOMMatrixやDOMMatrixReadOnlyの場合、一部の要素(例:m13要素)で -0 を持つ可能性がありますが、このアルゴリズムではラウンドトリップされません。 -
-
それ以外の場合:
-
serialized.[[M11]] に value の m11要素 を設定する。
-
serialized.[[M12]] に value の m12要素 を設定する。
-
serialized.[[M13]] に value の m13要素 を設定する。
-
serialized.[[M14]] に value の m14要素 を設定する。
-
serialized.[[M21]] に value の m21要素 を設定する。
-
serialized.[[M22]] に value の m22要素 を設定する。
-
serialized.[[M23]] に value の m23要素 を設定する。
-
serialized.[[M24]] に value の m24要素 を設定する。
-
serialized.[[M31]] に value の m31要素 を設定する。
-
serialized.[[M32]] に value の m32要素 を設定する。
-
serialized.[[M33]] に value の m33要素 を設定する。
-
serialized.[[M34]] に value の m34要素 を設定する。
-
serialized.[[M41]] に value の m41要素 を設定する。
-
serialized.[[M42]] に value の m42要素 を設定する。
-
serialized.[[M43]] に value の m43要素 を設定する。
-
serialized.[[M44]] に value の m44要素 を設定する。
-
serialized.[[Is2D]] に
falseを設定する。
これらの 逆シリアル化手順は、serialized および value が与えられた場合:
-
serialized.[[Is2D]] が
trueの場合:-
value の m11要素 に serialized.[[M11]] を設定する。
-
value の m12要素 に serialized.[[M12]] を設定する。
-
value の m13要素 に 0 を設定する。
-
value の m14要素 に 0 を設定する。
-
value の m21要素 に serialized.[[M21]] を設定する。
-
value の m22要素 に serialized.[[M22]] を設定する。
-
value の m23要素 に 0 を設定する。
-
value の m24要素 に 0 を設定する。
-
value の m31要素 に 0 を設定する。
-
value の m32要素 に 0 を設定する。
-
value の m33要素 に 1 を設定する。
-
value の m34要素 に 0 を設定する。
-
value の m41要素 に serialized.[[M41]] を設定する。
-
value の m42要素 に serialized.[[M42]] を設定する。
-
value の m43要素 に 0 を設定する。
-
value の m44要素 に 1 を設定する。
-
value の is 2D に
trueを設定する。
-
-
それ以外の場合:
-
value の m11要素 に serialized.[[M11]] を設定する。
-
value の m12要素 に serialized.[[M12]] を設定する。
-
value の m13要素 に serialized.[[M13]] を設定する。
-
value の m14要素 に serialized.[[M14]] を設定する。
-
value の m21要素 に serialized.[[M21]] を設定する。
-
value の m22要素 に serialized.[[M22]] を設定する。
-
value の m23要素 に serialized.[[M23]] を設定する。
-
value の m24要素 に serialized.[[M24]] を設定する。
-
value の m31要素 に serialized.[[M31]] を設定する。
-
value の m32要素 に serialized.[[M32]] を設定する。
-
value の m33要素 に serialized.[[M33]] を設定する。
-
value の m34要素 に serialized.[[M34]] を設定する。
-
value の m41要素 に serialized.[[M41]] を設定する。
-
value の m42要素 に serialized.[[M42]] を設定する。
-
value の m43要素 に serialized.[[M43]] を設定する。
-
value の m44要素 に serialized.[[M44]] を設定する。
-
value の is 2D に
falseを設定する。
-
-
8. セキュリティの考慮事項
DOMMatrix
および DOMMatrixReadOnly
インターフェイスは、CSS 構文による文字列のパースへのエントリーポイントを持ちます。したがって、CSS 構文仕様のセキュリティに関する考慮事項が適用されます。[CSS3-SYNTAX]
この仕様で定義されているインターフェイスには、他に既知のセキュリティまたはプライバシーへの影響はありません。しかし、この仕様で定義されたインターフェイスを使用する API を持つ他の仕様は、セキュリティまたはプライバシーの問題を引き起こす可能性があります。
9. プライバシーの考慮事項
getBoundingClientRect()
API は、DOMRect
を返し、特定のフォントのテキストを含むインライン要素のサイズを測定するために使用できます。これはユーザーがそのフォントをインストールしているかどうかについての情報を露呈します。その情報は、一般的なフォントを多数テストすることで、個人を特定できる情報となり得ます。[CSSOM-VIEW]
10. 歴史的事項
このセクションは規範的ではありません。
この仕様のインターフェイスは、過去の各種仕様で見られた同様のインターフェイスや、いくつかのユーザーエージェントで見られる独自のインターフェイスを置き換えることを意図しています。本セクションではそれらのインターフェイスを列挙しようとします。
10.1. CSSOM View
CSSOM View の以前の版では ClientRect インターフェイスが定義されていましたが、これは DOMRect
に置き換えられました。本仕様に準拠する実装は ClientRect をサポートしません。[CSSOM-VIEW]
10.2. SVG
SVG の以前の版では、SVGPoint、SVGRect、SVGMatrix
が定義されており、これは本仕様においてそれぞれ DOMPoint、DOMRect、DOMMatrix
のエイリアスとして定義されています。[SVG11]
10.3. 非標準
一部のユーザーエージェントは WebKitPoint インターフェイスをサポートしていました。本仕様に準拠する実装は WebKitPoint をサポートしません。
複数のユーザーエージェントは WebKitCSSMatrix
インターフェイスをサポートしており、これは Web で広く使用されています。本仕様では、DOMMatrix
のエイリアスとして定義されています。
一部のユーザーエージェントは MSCSSMatrix インターフェイスをサポートしていました。本仕様に準拠する実装は MSCSSMatrix をサポートしません。
文書上の慣習
空ではない unrestricted double
値のリストに対する NaN
を優先する最小値 は、リストのいずれかのメンバーが NaN の場合は NaN、そうでなければそのリストの最小値です。
同様に、空ではない unrestricted double
値のリストに対する NaN
を優先する最大値 は、リストのいずれかのメンバーが NaN の場合は NaN、そうでなければそのリストの最大値です。
前回の公開以降の変更点
このセクションは規範的ではありません。
2018 年 12 月 4 日の候補勧告以降に行われた変更は次の通りです。
-
最小値と最大値を NaN を優先するように定義 #222
-
新しい WebIDL コンストラクター定義を使用
-
辞書のデフォルト値を追加
-
本文の記述に合わせて matrixTransform に [NewObject] を追加
-
冗長な originZ チェックを削除 #350
-
DOMRectList に明示的な [Exposed] を追加
-
Web Platform Tests のカバレッジを追加
2014 年 11 月 25 日の候補勧告以降に行われた変更は次の通りです。
-
コンストラクションにおいて、過負荷コンストラクターの代わりに一般に特定の静的操作を使用するようインターフェイスを変更し、インターフェイスをより一貫性のあるものにしました。ただし、
DOMMatrixはWebKitCSSMatrixとの互換性のために過負荷コンストラクターを引き続き使用します。 -
DOMMatrixInit辞書を導入。 -
インターフェイスに JSON シリアライザーを追加。
-
DOMMatrixReadOnlyとDOMMatrixをWebKitCSSMatrixに互換的にするため:-
rotate()とrotateSelf()の引数を(angle, originX, originY)から(rotX, rotY, rotZ)に変更。 -
scale()およびscaleSelf()メソッドを、従来のscaleNonUniform()/scaleNonUniformSelf()メソッドにより近いものに変更し、scaleNonUniformSelf()メソッドを廃止。レガシーのためにscaleNonUniform()のサポートは維持。 -
DOMMatrix/DOMMatrixReadOnlyの各メソッドで、setMatrixValue()を除き、すべての引数をオプション化。 -
引数なしのコンストラクターを追加。
-
WebKitCSSMatrixをDOMMatrixのレガシーなウィンドウエイリアスとして定義。
-
-
Worker では、
DOMMatrixとDOMMatrixReadOnlyは CSS 構文によるパースや文字列化をサポートしません。 -
インターフェイスの構造化シリアル化を定義。
-
DOMQuadのライブなbounds属性を、非ライブなgetBounds()メソッドへ置換。併せて「関連するバウンディング矩形」の概念を削除。 -
DOMMatrixおよびDOMMatrixReadOnlyの文字列パーサーを、SVG の規則ではなく CSS の規則を用いるように変更。 -
DOMMatrixおよびDOMMatrixReadOnlyの文字列化は、非有限値がある場合に例外を投げ、それ以外の場合は ToString アルゴリズムを使用するように変更。[ECMA-262] -
比較において、0 と -0 を全体で等価として扱うように変更。
-
§ 9 プライバシーの考慮事項 と § 10 歴史的事項 のセクションを追加。
2014 年 9 月 18 日の作業草案以降に行われた変更は次の通りです。
-
DOMPointReadOnly、DOMPoint、DOMRectReadOnly、DOMRect、DOMQuad、DOMMatrixReadOnlyおよびDOMMatrixをWindowとWorkerに公開。インターフェイスのクローンを定義。
2014 年 6 月 26 日の最終コール公開作業草案以降に行われた変更は次の通りです。
-
DOMPointReadOnlyは 4 つの引数を取るコンストラクターを得ました。 -
DOMRectReadOnlyは 4 つの引数を取るコンストラクターを得ました。 -
DOMMatrixReadOnlyは数値のシーケンスを引数に取るコンストラクターを得ました。 -
DOMRectListは ArrayClass に変更。インターフェイスはレガシーインターフェイスにのみ使用可能。 -
DOMRectListをブラウザーからのフィードバック待ちのリスク対象に。 -
すべてのインターフェイスについて、読み取り専用/書き込み可能や継承の挙動を説明するため、内部要素の観点で記述。
-
IndexSizeError例外をTypeError例外に置き換え。
2014 年 5 月 22 日の初版公開作業草案以降に行われた変更は次の通りです。
-
可変変換メソッドの *By を *Self に改名。(例:
translateBy()はtranslateSelf()に改名。) -
invert()をinvertSelf()に改名。 -
変換リストを
DOMStringとして受け取るsetMatrixValue()を追加。 -
is2DおよびisIdentityは読み取り専用属性に。 -
DOMMatrixReadOnlyは、is2Dのために 3D 変換と属性設定を追跡するフラグを取得。 -
invertSelf()およびinverse()は例外を投げなくなりました。
謝辞
編集者は、本仕様への貢献に対して Robert O’Callahan に感謝いたします。 DOMMatrix の初期提案に対して Dean Jackson に多大な感謝を捧げます。 また、 Adenilson Cavalcanti、 Benoit Jacob、 Boris Zbarsky、 Brian Birtles、 Cameron McCormack、 Domenic Denicola、 Kari Pihkala、 Max Vujovic、 Mike Taylor、 Peter Hall、 Philip Jägenstedt、 Simon Fraser、 および Timothy Loh の綿密なレビュー、コメント、修正に感謝します。