mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-19 13:47:31 +09:00
Issue #2241 - Part 4.1: Get DOMPoint, DOMQuad, DOMRect, DOMMatrix a bit closer to spec.
Backported from Mozilla bug 1186265's part 1.
This commit is contained in:
parent
d2c3ea08eb
commit
60c88dd11b
14 changed files with 252 additions and 198 deletions
|
|
@ -22,6 +22,7 @@ namespace dom {
|
|||
class GlobalObject;
|
||||
class DOMMatrix;
|
||||
class DOMPoint;
|
||||
class StringOrUnrestrictedDoubleSequence;
|
||||
struct DOMPointInit;
|
||||
|
||||
class DOMMatrixReadOnly : public nsWrapperCache
|
||||
|
|
@ -51,6 +52,12 @@ public:
|
|||
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DOMMatrixReadOnly)
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(DOMMatrixReadOnly)
|
||||
|
||||
nsISupports* GetParentObject() const { return mParent; }
|
||||
virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
static already_AddRefed<DOMMatrixReadOnly>
|
||||
Constructor(const GlobalObject& aGlobal, const Optional<StringOrUnrestrictedDoubleSequence>& aArg, ErrorResult& aRv);
|
||||
|
||||
#define GetMatrixMember(entry2D, entry3D, default) \
|
||||
{ \
|
||||
if (mMatrix3D) { \
|
||||
|
|
@ -94,6 +101,51 @@ public:
|
|||
#undef GetMatrixMember
|
||||
#undef Get3DMatrixMember
|
||||
|
||||
// Defined here so we can construct DOMMatrixReadOnly objects.
|
||||
#define Set2DMatrixMember(entry2D, entry3D) \
|
||||
{ \
|
||||
if (mMatrix3D) { \
|
||||
mMatrix3D->entry3D = v; \
|
||||
} else { \
|
||||
mMatrix2D->entry2D = v; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define Set3DMatrixMember(entry3D, default) \
|
||||
{ \
|
||||
if (mMatrix3D || (v != default)) { \
|
||||
Ensure3DMatrix(); \
|
||||
mMatrix3D->entry3D = v; \
|
||||
} \
|
||||
}
|
||||
|
||||
void SetA(double v) Set2DMatrixMember(_11, _11)
|
||||
void SetB(double v) Set2DMatrixMember(_12, _12)
|
||||
void SetC(double v) Set2DMatrixMember(_21, _21)
|
||||
void SetD(double v) Set2DMatrixMember(_22, _22)
|
||||
void SetE(double v) Set2DMatrixMember(_31, _41)
|
||||
void SetF(double v) Set2DMatrixMember(_32, _42)
|
||||
|
||||
void SetM11(double v) Set2DMatrixMember(_11, _11)
|
||||
void SetM12(double v) Set2DMatrixMember(_12, _12)
|
||||
void SetM13(double v) Set3DMatrixMember(_13, 0)
|
||||
void SetM14(double v) Set3DMatrixMember(_14, 0)
|
||||
void SetM21(double v) Set2DMatrixMember(_21, _21)
|
||||
void SetM22(double v) Set2DMatrixMember(_22, _22)
|
||||
void SetM23(double v) Set3DMatrixMember(_23, 0)
|
||||
void SetM24(double v) Set3DMatrixMember(_24, 0)
|
||||
void SetM31(double v) Set3DMatrixMember(_31, 0)
|
||||
void SetM32(double v) Set3DMatrixMember(_32, 0)
|
||||
void SetM33(double v) Set3DMatrixMember(_33, 1.0)
|
||||
void SetM34(double v) Set3DMatrixMember(_34, 0)
|
||||
void SetM41(double v) Set2DMatrixMember(_31, _41)
|
||||
void SetM42(double v) Set2DMatrixMember(_32, _42)
|
||||
void SetM43(double v) Set3DMatrixMember(_43, 0)
|
||||
void SetM44(double v) Set3DMatrixMember(_44, 1.0)
|
||||
|
||||
#undef Set2DMatrixMember
|
||||
#undef Set3DMatrixMember
|
||||
|
||||
already_AddRefed<DOMMatrix> Translate(double aTx,
|
||||
double aTy,
|
||||
double aTz = 0) const;
|
||||
|
|
@ -143,6 +195,9 @@ protected:
|
|||
|
||||
virtual ~DOMMatrixReadOnly() {}
|
||||
|
||||
DOMMatrixReadOnly* SetMatrixValue(const nsAString& aTransformList, ErrorResult& aRv);
|
||||
void Ensure3DMatrix();
|
||||
|
||||
private:
|
||||
DOMMatrixReadOnly() = delete;
|
||||
DOMMatrixReadOnly(const DOMMatrixReadOnly&) = delete;
|
||||
|
|
@ -177,53 +232,8 @@ public:
|
|||
static already_AddRefed<DOMMatrix>
|
||||
Constructor(const GlobalObject& aGlobal, const Sequence<double>& aNumberSequence, ErrorResult& aRv);
|
||||
|
||||
nsISupports* GetParentObject() const { return mParent; }
|
||||
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
#define Set2DMatrixMember(entry2D, entry3D) \
|
||||
{ \
|
||||
if (mMatrix3D) { \
|
||||
mMatrix3D->entry3D = v; \
|
||||
} else { \
|
||||
mMatrix2D->entry2D = v; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define Set3DMatrixMember(entry3D, default) \
|
||||
{ \
|
||||
if (mMatrix3D || (v != default)) { \
|
||||
Ensure3DMatrix(); \
|
||||
mMatrix3D->entry3D = v; \
|
||||
} \
|
||||
}
|
||||
|
||||
void SetA(double v) Set2DMatrixMember(_11, _11)
|
||||
void SetB(double v) Set2DMatrixMember(_12, _12)
|
||||
void SetC(double v) Set2DMatrixMember(_21, _21)
|
||||
void SetD(double v) Set2DMatrixMember(_22, _22)
|
||||
void SetE(double v) Set2DMatrixMember(_31, _41)
|
||||
void SetF(double v) Set2DMatrixMember(_32, _42)
|
||||
|
||||
void SetM11(double v) Set2DMatrixMember(_11, _11)
|
||||
void SetM12(double v) Set2DMatrixMember(_12, _12)
|
||||
void SetM13(double v) Set3DMatrixMember(_13, 0)
|
||||
void SetM14(double v) Set3DMatrixMember(_14, 0)
|
||||
void SetM21(double v) Set2DMatrixMember(_21, _21)
|
||||
void SetM22(double v) Set2DMatrixMember(_22, _22)
|
||||
void SetM23(double v) Set3DMatrixMember(_23, 0)
|
||||
void SetM24(double v) Set3DMatrixMember(_24, 0)
|
||||
void SetM31(double v) Set3DMatrixMember(_31, 0)
|
||||
void SetM32(double v) Set3DMatrixMember(_32, 0)
|
||||
void SetM33(double v) Set3DMatrixMember(_33, 1.0)
|
||||
void SetM34(double v) Set3DMatrixMember(_34, 0)
|
||||
void SetM41(double v) Set2DMatrixMember(_31, _41)
|
||||
void SetM42(double v) Set2DMatrixMember(_32, _42)
|
||||
void SetM43(double v) Set3DMatrixMember(_43, 0)
|
||||
void SetM44(double v) Set3DMatrixMember(_44, 1.0)
|
||||
|
||||
#undef Set2DMatrixMember
|
||||
#undef Set3DMatrixMember
|
||||
|
||||
DOMMatrix* MultiplySelf(const DOMMatrix& aOther);
|
||||
DOMMatrix* PreMultiplySelf(const DOMMatrix& aOther);
|
||||
DOMMatrix* TranslateSelf(double aTx,
|
||||
|
|
@ -255,8 +265,6 @@ public:
|
|||
DOMMatrix* SkewYSelf(double aSy);
|
||||
DOMMatrix* InvertSelf();
|
||||
DOMMatrix* SetMatrixValue(const nsAString& aTransformList, ErrorResult& aRv);
|
||||
protected:
|
||||
void Ensure3DMatrix();
|
||||
|
||||
virtual ~DOMMatrix() {}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue