Bug 833446: Remove nsIDOMSVGGradientElement and subclasses r=peterv

This commit is contained in:
David Zbarsky 2013-02-02 15:23:16 -05:00
parent 789b05db43
commit e46ee1bca2
7 changed files with 21 additions and 260 deletions

View File

@ -14,13 +14,9 @@
#include "nsGkAtoms.h"
#include "nsIDOMMutationEvent.h"
#include "nsIDOMSVGAnimatedEnum.h"
#include "nsIDOMSVGGradientElement.h"
#include "nsIDOMSVGURIReference.h"
#include "nsSVGElement.h"
DOMCI_NODE_DATA(SVGRadialGradientElement, mozilla::dom::SVGRadialGradientElement)
DOMCI_NODE_DATA(SVGLinearGradientElement, mozilla::dom::SVGLinearGradientElement)
NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(LinearGradient)
NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(RadialGradient)
@ -30,9 +26,9 @@ namespace dom {
//--------------------- Gradients------------------------
nsSVGEnumMapping SVGGradientElement::sSpreadMethodMap[] = {
{&nsGkAtoms::pad, nsIDOMSVGGradientElement::SVG_SPREADMETHOD_PAD},
{&nsGkAtoms::reflect, nsIDOMSVGGradientElement::SVG_SPREADMETHOD_REFLECT},
{&nsGkAtoms::repeat, nsIDOMSVGGradientElement::SVG_SPREADMETHOD_REPEAT},
{&nsGkAtoms::pad, SVG_SPREADMETHOD_PAD},
{&nsGkAtoms::reflect, SVG_SPREADMETHOD_REFLECT},
{&nsGkAtoms::repeat, SVG_SPREADMETHOD_REPEAT},
{nullptr, 0}
};
@ -44,7 +40,7 @@ nsSVGElement::EnumInfo SVGGradientElement::sEnumInfo[2] =
},
{ &nsGkAtoms::spreadMethod,
sSpreadMethodMap,
nsIDOMSVGGradientElement::SVG_SPREADMETHOD_PAD
SVG_SPREADMETHOD_PAD
}
};
@ -90,22 +86,12 @@ SVGGradientElement::GetStringInfo()
ArrayLength(sStringInfo));
}
//----------------------------------------------------------------------
// nsIDOMSVGGradientElement methods
/* readonly attribute nsIDOMSVGAnimatedEnumeration gradientUnits; */
already_AddRefed<nsIDOMSVGAnimatedEnumeration>
SVGGradientElement::GradientUnits()
{
return mEnumAttributes[GRADIENTUNITS].ToDOMAnimatedEnum(this);
}
NS_IMETHODIMP SVGGradientElement::GetGradientUnits(nsIDOMSVGAnimatedEnumeration * *aGradientUnits)
{
*aGradientUnits = GradientUnits().get();
return NS_OK;
}
/* readonly attribute SVGAnimatedTransformList gradientTransform; */
already_AddRefed<DOMSVGAnimatedTransformList>
SVGGradientElement::GradientTransform()
@ -116,25 +102,12 @@ SVGGradientElement::GradientTransform()
GetAnimatedTransformList(DO_ALLOCATE), this);
}
NS_IMETHODIMP SVGGradientElement::GetGradientTransform(nsISupports * *aGradientTransform)
{
*aGradientTransform = GradientTransform().get();
return NS_OK;
}
/* readonly attribute nsIDOMSVGAnimatedEnumeration spreadMethod; */
already_AddRefed<nsIDOMSVGAnimatedEnumeration>
SVGGradientElement::SpreadMethod()
{
return mEnumAttributes[SPREADMETHOD].ToDOMAnimatedEnum(this);
}
NS_IMETHODIMP SVGGradientElement::GetSpreadMethod(nsIDOMSVGAnimatedEnumeration * *aSpreadMethod)
{
*aSpreadMethod = SpreadMethod().get();
return NS_OK;
}
//----------------------------------------------------------------------
// nsIDOMSVGURIReference methods:
@ -189,16 +162,9 @@ nsSVGElement::LengthInfo SVGLinearGradientElement::sLengthInfo[4] =
//----------------------------------------------------------------------
// nsISupports methods
NS_IMPL_ADDREF_INHERITED(SVGLinearGradientElement,SVGLinearGradientElementBase)
NS_IMPL_RELEASE_INHERITED(SVGLinearGradientElement,SVGLinearGradientElementBase)
NS_INTERFACE_TABLE_HEAD(SVGLinearGradientElement)
NS_NODE_INTERFACE_TABLE5(SVGLinearGradientElement, nsIDOMNode,
nsIDOMElement, nsIDOMSVGElement,
nsIDOMSVGGradientElement,
nsIDOMSVGLinearGradientElement)
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGLinearGradientElement)
NS_INTERFACE_MAP_END_INHERITING(SVGLinearGradientElementBase)
NS_IMPL_ISUPPORTS_INHERITED3(SVGLinearGradientElement, SVGLinearGradientElementBase,
nsIDOMNode,
nsIDOMElement, nsIDOMSVGElement)
//----------------------------------------------------------------------
// Implementation
@ -214,14 +180,6 @@ SVGLinearGradientElement::SVGLinearGradientElement(already_AddRefed<nsINodeInfo>
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGLinearGradientElement)
//----------------------------------------------------------------------
// nsIDOMSVGLinearGradientElement methods
/* readonly attribute nsIDOMSVGAnimatedLength x1; */
NS_IMETHODIMP SVGLinearGradientElement::GetX1(nsIDOMSVGAnimatedLength * *aX1)
{
*aX1 = X1().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGLinearGradientElement::X1()
@ -229,46 +187,24 @@ SVGLinearGradientElement::X1()
return mLengthAttributes[ATTR_X1].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength y1; */
NS_IMETHODIMP SVGLinearGradientElement::GetY1(nsIDOMSVGAnimatedLength * *aY1)
{
*aY1 = Y1().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGLinearGradientElement::Y1()
{
return mLengthAttributes[ATTR_Y1].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength x2; */
NS_IMETHODIMP SVGLinearGradientElement::GetX2(nsIDOMSVGAnimatedLength * *aX2)
{
*aX2 = X2().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGLinearGradientElement::X2()
{
return mLengthAttributes[ATTR_X2].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength y2; */
NS_IMETHODIMP SVGLinearGradientElement::GetY2(nsIDOMSVGAnimatedLength * *aY2)
{
*aY2 = Y2().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGLinearGradientElement::Y2()
{
return mLengthAttributes[ATTR_Y2].ToDOMAnimatedLength(this);
}
//----------------------------------------------------------------------
// nsSVGElement methods
@ -309,16 +245,9 @@ nsSVGElement::LengthInfo SVGRadialGradientElement::sLengthInfo[5] =
//----------------------------------------------------------------------
// nsISupports methods
NS_IMPL_ADDREF_INHERITED(SVGRadialGradientElement, SVGRadialGradientElementBase)
NS_IMPL_RELEASE_INHERITED(SVGRadialGradientElement, SVGRadialGradientElementBase)
NS_INTERFACE_TABLE_HEAD(SVGRadialGradientElement)
NS_NODE_INTERFACE_TABLE5(SVGRadialGradientElement, nsIDOMNode,
nsIDOMElement, nsIDOMSVGElement,
nsIDOMSVGGradientElement,
nsIDOMSVGRadialGradientElement)
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGRadialGradientElement)
NS_INTERFACE_MAP_END_INHERITING(SVGRadialGradientElementBase)
NS_IMPL_ISUPPORTS_INHERITED3(SVGRadialGradientElement, SVGRadialGradientElementBase,
nsIDOMNode,
nsIDOMElement, nsIDOMSVGElement)
//----------------------------------------------------------------------
// Implementation
@ -334,14 +263,6 @@ SVGRadialGradientElement::SVGRadialGradientElement(already_AddRefed<nsINodeInfo>
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGRadialGradientElement)
//----------------------------------------------------------------------
// nsIDOMSVGRadialGradientElement methods
/* readonly attribute nsIDOMSVGAnimatedLength cx; */
NS_IMETHODIMP SVGRadialGradientElement::GetCx(nsIDOMSVGAnimatedLength * *aCx)
{
*aCx = Cx().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGRadialGradientElement::Cx()
@ -349,52 +270,24 @@ SVGRadialGradientElement::Cx()
return mLengthAttributes[ATTR_CX].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength cy; */
NS_IMETHODIMP SVGRadialGradientElement::GetCy(nsIDOMSVGAnimatedLength * *aCy)
{
*aCy = Cy().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGRadialGradientElement::Cy()
{
return mLengthAttributes[ATTR_CY].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength r; */
NS_IMETHODIMP SVGRadialGradientElement::GetR(nsIDOMSVGAnimatedLength * *aR)
{
*aR = R().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGRadialGradientElement::R()
{
return mLengthAttributes[ATTR_R].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength fx; */
NS_IMETHODIMP SVGRadialGradientElement::GetFx(nsIDOMSVGAnimatedLength * *aFx)
{
*aFx = Fx().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGRadialGradientElement::Fx()
{
return mLengthAttributes[ATTR_FX].ToDOMAnimatedLength(this);
}
/* readonly attribute nsIDOMSVGAnimatedLength fy; */
NS_IMETHODIMP SVGRadialGradientElement::GetFy(nsIDOMSVGAnimatedLength * *aFy)
{
*aFy = Fy().get();
return NS_OK;
}
already_AddRefed<SVGAnimatedLength>
SVGRadialGradientElement::Fy()
{

View File

@ -7,7 +7,6 @@
#define __NS_SVGGRADIENTELEMENT_H__
#include "nsIDOMSVGURIReference.h"
#include "nsIDOMSVGGradientElement.h"
#include "nsIDOMSVGUnitTypes.h"
#include "nsSVGElement.h"
#include "nsSVGLength2.h"
@ -15,6 +14,11 @@
#include "nsSVGString.h"
#include "SVGAnimatedTransformList.h"
static const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
static const unsigned short SVG_SPREADMETHOD_PAD = 1;
static const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
static const unsigned short SVG_SPREADMETHOD_REPEAT = 3;
class nsSVGGradientFrame;
class nsSVGLinearGradientFrame;
class nsSVGRadialGradientFrame;
@ -51,9 +55,6 @@ public:
// interfaces:
NS_DECL_ISUPPORTS_INHERITED
// Gradient Element
NS_DECL_NSIDOMSVGGRADIENTELEMENT
// URI Reference
NS_DECL_NSIDOMSVGURIREFERENCE
@ -85,7 +86,7 @@ protected:
nsSVGString mStringAttributes[1];
static StringInfo sStringInfo[1];
// nsIDOMSVGGradientElement values
// SVGGradientElement values
nsAutoPtr<SVGAnimatedTransformList> mGradientTransform;
};
@ -94,7 +95,7 @@ protected:
typedef SVGGradientElement SVGLinearGradientElementBase;
class SVGLinearGradientElement : public SVGLinearGradientElementBase
, public nsIDOMSVGLinearGradientElement
, public nsIDOMSVGElement
{
friend class ::nsSVGLinearGradientFrame;
friend nsresult
@ -110,12 +111,6 @@ public:
// interfaces:
NS_DECL_ISUPPORTS_INHERITED
// Gradient Element
NS_FORWARD_NSIDOMSVGGRADIENTELEMENT(SVGLinearGradientElementBase::)
// Linear Gradient
NS_DECL_NSIDOMSVGLINEARGRADIENTELEMENT
// The Gradient Element base class implements these
NS_FORWARD_NSIDOMSVGELEMENT(SVGLinearGradientElementBase::)
@ -124,8 +119,6 @@ public:
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
virtual nsXPCClassInfo* GetClassInfo();
virtual nsIDOMNode* AsDOMNode() { return this; }
// WebIDL
@ -138,7 +131,6 @@ protected:
virtual LengthAttributesInfo GetLengthInfo();
// nsIDOMSVGLinearGradientElement values
enum { ATTR_X1, ATTR_Y1, ATTR_X2, ATTR_Y2 };
nsSVGLength2 mLengthAttributes[4];
static LengthInfo sLengthInfo[4];
@ -149,7 +141,7 @@ protected:
typedef SVGGradientElement SVGRadialGradientElementBase;
class SVGRadialGradientElement : public SVGRadialGradientElementBase
, public nsIDOMSVGRadialGradientElement
, public nsIDOMSVGElement
{
friend class ::nsSVGRadialGradientFrame;
friend nsresult
@ -166,12 +158,6 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Gradient Element
NS_FORWARD_NSIDOMSVGGRADIENTELEMENT(SVGRadialGradientElementBase::)
// Radial Gradient
NS_DECL_NSIDOMSVGRADIALGRADIENTELEMENT
// xxx I wish we could use virtual inheritance
NS_FORWARD_NSIDOMNODE_TO_NSINODE
NS_FORWARD_NSIDOMELEMENT_TO_GENERIC
@ -179,8 +165,6 @@ public:
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
virtual nsXPCClassInfo* GetClassInfo();
virtual nsIDOMNode* AsDOMNode() { return this; }
// WebIDL
@ -193,7 +177,6 @@ protected:
virtual LengthAttributesInfo GetLengthInfo();
// nsIDOMSVGRadialGradientElement values
enum { ATTR_CX, ATTR_CY, ATTR_R, ATTR_FX, ATTR_FY };
nsSVGLength2 mLengthAttributes[5];
static LengthInfo sLengthInfo[5];

View File

@ -324,7 +324,6 @@
#include "nsIDOMSVGEvent.h"
#include "nsIDOMSVGFilterElement.h"
#include "nsIDOMSVGFilters.h"
#include "nsIDOMSVGGradientElement.h"
#include "nsIDOMSVGImageElement.h"
#include "nsIDOMSVGLength.h"
#include "nsIDOMSVGLineElement.h"
@ -1118,8 +1117,6 @@ static nsDOMClassInfoData sClassInfoData[] = {
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGImageElement, nsElementSH,
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGLinearGradientElement, nsElementSH,
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGLineElement, nsElementSH,
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGMarkerElement, nsElementSH,
@ -1136,8 +1133,6 @@ static nsDOMClassInfoData sClassInfoData[] = {
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGPolylineElement, nsElementSH,
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGRadialGradientElement, nsElementSH,
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGRectElement, nsElementSH,
ELEMENT_SCRIPTABLE_FLAGS)
NS_DEFINE_CLASSINFO_DATA(SVGScriptElement, nsElementSH,
@ -3146,14 +3141,6 @@ nsDOMClassInfo::Init()
DOM_CLASSINFO_SVG_GRAPHIC_ELEMENT_MAP_ENTRIES
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(SVGLinearGradientElement, nsIDOMSVGLinearGradientElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGGradientElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGLinearGradientElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGURIReference)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGUnitTypes)
DOM_CLASSINFO_SVG_ELEMENT_MAP_ENTRIES
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(SVGLineElement, nsIDOMSVGLineElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGLineElement)
DOM_CLASSINFO_SVG_GRAPHIC_ELEMENT_MAP_ENTRIES
@ -3197,14 +3184,6 @@ nsDOMClassInfo::Init()
DOM_CLASSINFO_SVG_GRAPHIC_ELEMENT_MAP_ENTRIES
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(SVGRadialGradientElement, nsIDOMSVGRadialGradientElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGGradientElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGRadialGradientElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGURIReference)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGUnitTypes)
DOM_CLASSINFO_SVG_ELEMENT_MAP_ENTRIES
DOM_CLASSINFO_MAP_END
DOM_CLASSINFO_MAP_BEGIN(SVGRectElement, nsIDOMSVGRectElement)
DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGRectElement)
DOM_CLASSINFO_SVG_GRAPHIC_ELEMENT_MAP_ENTRIES

View File

@ -221,7 +221,6 @@ DOMCI_CLASS(SVGFETileElement)
DOMCI_CLASS(SVGFETurbulenceElement)
DOMCI_CLASS(SVGFilterElement)
DOMCI_CLASS(SVGImageElement)
DOMCI_CLASS(SVGLinearGradientElement)
DOMCI_CLASS(SVGLineElement)
DOMCI_CLASS(SVGMarkerElement)
DOMCI_CLASS(SVGMaskElement)
@ -230,7 +229,6 @@ DOMCI_CLASS(SVGPathElement)
DOMCI_CLASS(SVGPatternElement)
DOMCI_CLASS(SVGPolygonElement)
DOMCI_CLASS(SVGPolylineElement)
DOMCI_CLASS(SVGRadialGradientElement)
DOMCI_CLASS(SVGRectElement)
DOMCI_CLASS(SVGScriptElement)
DOMCI_CLASS(SVGStopElement)

View File

@ -30,7 +30,6 @@ XPIDLSRCS = \
nsIDOMSVGEvent.idl \
nsIDOMSVGFilterElement.idl \
nsIDOMSVGFilters.idl \
nsIDOMSVGGradientElement.idl \
nsIDOMSVGImageElement.idl \
nsIDOMSVGLength.idl \
nsIDOMSVGLineElement.idl \

View File

@ -1,91 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsIDOMSVGElement.idl"
/**
* The nsIDOMSVGGradientElement interface is the interface to an SVG
* gradient element.
*
* For more information on this interface please see
* http://www.w3.org/TR/SVG11/pservers.html
*
*/
interface nsIDOMSVGAnimatedEnumeration;
[scriptable, uuid(5056512E-2ACE-4B68-8F52-124E24CF0F55)]
interface nsIDOMSVGGradientElement
: nsIDOMSVGElement
/*
The SVG DOM makes use of multiple interface inheritance.
Since XPCOM only supports single interface inheritance,
the best thing that we can do is to promise that whenever
an object implements _this_ interface it will also
implement the following interfaces. (We then have to QI to
hop between them.)
nsIDOMSVGURIReference,
nsIDOMSVGStylable
*/
{
const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
const unsigned short SVG_SPREADMETHOD_PAD = 1;
const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
const unsigned short SVG_SPREADMETHOD_REPEAT = 3;
readonly attribute nsIDOMSVGAnimatedEnumeration gradientUnits;
// SVGAnimatedTransformList
readonly attribute nsISupports gradientTransform;
readonly attribute nsIDOMSVGAnimatedEnumeration spreadMethod;
};
/**
* The nsIDOMSVGLinearGradientElement interface is the interface to an SVG
* linear gradient element.
*
* For more information on this interface please see
* http://www.w3.org/TR/SVG11/pservers.html
*
*/
// Linear gradient
interface nsIDOMSVGAnimatedLength;
[scriptable, uuid(AC3E0464-5B49-4323-850D-563573F754EC)]
interface nsIDOMSVGLinearGradientElement
: nsIDOMSVGGradientElement
{
readonly attribute nsIDOMSVGAnimatedLength x1;
readonly attribute nsIDOMSVGAnimatedLength y1;
readonly attribute nsIDOMSVGAnimatedLength x2;
readonly attribute nsIDOMSVGAnimatedLength y2;
};
/**
* The nsIDOMSVGRadialGradientElement interface is the interface to an SVG
* radial gradient element.
*
* For more information on this interface please see
* http://www.w3.org/TR/SVG11/pservers.html
*
*/
// Radial gradient
interface nsIDOMSVGAnimatedLength;
[scriptable, uuid(7300FBAB-84AE-425E-BB3B-CF8C1E584CCD)]
interface nsIDOMSVGRadialGradientElement
: nsIDOMSVGGradientElement
{
readonly attribute nsIDOMSVGAnimatedLength cx;
readonly attribute nsIDOMSVGAnimatedLength cy;
readonly attribute nsIDOMSVGAnimatedLength r;
readonly attribute nsIDOMSVGAnimatedLength fx;
readonly attribute nsIDOMSVGAnimatedLength fy;
};

View File

@ -291,11 +291,11 @@ nsSVGGradientFrame::GetPaintServerPattern(nsIFrame *aSource,
return nullptr;
uint16_t aSpread = GetSpreadMethod();
if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_PAD)
if (aSpread == SVG_SPREADMETHOD_PAD)
gradient->SetExtend(gfxPattern::EXTEND_PAD);
else if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_REFLECT)
else if (aSpread == SVG_SPREADMETHOD_REFLECT)
gradient->SetExtend(gfxPattern::EXTEND_REFLECT);
else if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_REPEAT)
else if (aSpread == SVG_SPREADMETHOD_REPEAT)
gradient->SetExtend(gfxPattern::EXTEND_REPEAT);
gradient->SetMatrix(patternMatrix);