Bug 561654. nsSVGTextPositioningElement should be on the primary inheritance chain. r=longsonr

This commit is contained in:
Jonathan Watt 2010-05-24 16:58:24 +02:00
parent bebc96132a
commit 7de02fc132
8 changed files with 335 additions and 77 deletions

View File

@ -32,25 +32,22 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsSVGStylableElement.h"
#include "nsGkAtoms.h"
#include "nsIDOMSVGAltGlyphElement.h"
#include "nsIDOMSVGURIReference.h"
#include "nsSVGString.h"
#include "nsSVGTextPositioningElement.h"
typedef nsSVGStylableElement nsSVGAltGlyphElementBase;
typedef nsSVGTextPositioningElement nsSVGAltGlyphElementBase;
class nsSVGAltGlyphElement : public nsSVGAltGlyphElementBase,
class nsSVGAltGlyphElement : public nsSVGAltGlyphElementBase, // = nsIDOMSVGTextPositioningElement
public nsIDOMSVGAltGlyphElement,
public nsIDOMSVGURIReference,
public nsSVGTextPositioningElement // = nsIDOMSVGTextPositioningElement
public nsIDOMSVGURIReference
{
protected:
friend nsresult NS_NewSVGAltGlyphElement(nsIContent **aResult,
nsINodeInfo *aNodeInfo);
nsSVGAltGlyphElement(nsINodeInfo* aNodeInfo);
nsresult Init();
public:
// interfaces:
@ -64,8 +61,8 @@ public:
NS_FORWARD_NSIDOMNODE(nsSVGAltGlyphElementBase::)
NS_FORWARD_NSIDOMELEMENT(nsSVGAltGlyphElementBase::)
NS_FORWARD_NSIDOMSVGELEMENT(nsSVGAltGlyphElementBase::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGTextContentElement::)
NS_FORWARD_NSIDOMSVGTEXTPOSITIONINGELEMENT(nsSVGTextPositioningElement::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGAltGlyphElementBase::)
NS_FORWARD_NSIDOMSVGTEXTPOSITIONINGELEMENT(nsSVGAltGlyphElementBase::)
// nsIContent interface
NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
@ -73,9 +70,6 @@ public:
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
protected:
virtual nsSVGTextContainerFrame* GetTextContainerFrame() {
return do_QueryFrame(GetPrimaryFrame(Flush_Layout));
}
// nsSVGElement overrides
virtual StringAttributesInfo GetStringInfo();
@ -119,17 +113,6 @@ nsSVGAltGlyphElement::nsSVGAltGlyphElement(nsINodeInfo *aNodeInfo)
{
}
nsresult
nsSVGAltGlyphElement::Init()
{
nsresult rv = nsSVGAltGlyphElementBase::Init();
NS_ENSURE_SUCCESS(rv,rv);
rv = Initialise(this);
NS_ENSURE_SUCCESS(rv,rv);
return rv;
}
//----------------------------------------------------------------------
// nsIDOMNode methods

View File

@ -194,7 +194,6 @@ protected:
nsIAtom* aAttribute,
const nsAString& aValue);
friend class nsSVGTextPositioningElement;
// Hooks for subclasses
virtual PRBool IsEventName(nsIAtom* aName);

View File

@ -36,23 +36,20 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsSVGStylableElement.h"
#include "nsGkAtoms.h"
#include "nsIDOMSVGTSpanElement.h"
#include "nsSVGSVGElement.h"
#include "nsSVGTextPositioningElement.h"
typedef nsSVGStylableElement nsSVGTSpanElementBase;
typedef nsSVGTextPositioningElement nsSVGTSpanElementBase;
class nsSVGTSpanElement : public nsSVGTSpanElementBase,
public nsIDOMSVGTSpanElement,
public nsSVGTextPositioningElement // = nsIDOMSVGTextPositioningElement
class nsSVGTSpanElement : public nsSVGTSpanElementBase, // = nsIDOMSVGTextPositioningElement
public nsIDOMSVGTSpanElement
{
protected:
friend nsresult NS_NewSVGTSpanElement(nsIContent **aResult,
nsINodeInfo *aNodeInfo);
nsSVGTSpanElement(nsINodeInfo* aNodeInfo);
nsresult Init();
public:
// interfaces:
@ -65,8 +62,8 @@ public:
NS_FORWARD_NSIDOMNODE(nsSVGTSpanElementBase::)
NS_FORWARD_NSIDOMELEMENT(nsSVGTSpanElementBase::)
NS_FORWARD_NSIDOMSVGELEMENT(nsSVGTSpanElementBase::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGTextContentElement::)
NS_FORWARD_NSIDOMSVGTEXTPOSITIONINGELEMENT(nsSVGTextPositioningElement::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGTSpanElementBase::)
NS_FORWARD_NSIDOMSVGTEXTPOSITIONINGELEMENT(nsSVGTSpanElementBase::)
// nsIContent interface
NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
@ -74,9 +71,6 @@ public:
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
protected:
virtual nsSVGTextContainerFrame* GetTextContainerFrame() {
return do_QueryFrame(GetPrimaryFrame(Flush_Layout));
}
// nsSVGElement overrides
virtual PRBool IsEventName(nsIAtom* aName);
@ -112,18 +106,6 @@ nsSVGTSpanElement::nsSVGTSpanElement(nsINodeInfo *aNodeInfo)
}
nsresult
nsSVGTSpanElement::Init()
{
nsresult rv = nsSVGTSpanElementBase::Init();
NS_ENSURE_SUCCESS(rv,rv);
rv = Initialise(this);
NS_ENSURE_SUCCESS(rv,rv);
return rv;
}
//----------------------------------------------------------------------
// nsIDOMNode methods

View File

@ -41,14 +41,30 @@
#include "nsIDOMSVGTextContentElement.h"
#include "nsSVGTextContainerFrame.h"
#include "nsSVGStylableElement.h"
class nsSVGTextContentElement
typedef nsSVGStylableElement nsSVGTextContentElementBase;
/**
* Note that nsSVGTextElement does not inherit nsSVGTextPositioningElement, or
* this class - it reimplements us instead (see its documenting comment). The
* upshot is that any changes to this class also need to be made in
* nsSVGTextElement.
*/
class nsSVGTextContentElement : public nsSVGTextContentElementBase
{
public:
NS_DECL_NSIDOMSVGTEXTCONTENTELEMENT
protected:
virtual nsSVGTextContainerFrame* GetTextContainerFrame()=0;
nsSVGTextContentElement(nsINodeInfo *aNodeInfo)
: nsSVGTextContentElementBase(aNodeInfo)
{}
nsSVGTextContainerFrame* GetTextContainerFrame() {
return do_QueryFrame(GetPrimaryFrame(Flush_Layout));
}
};
#endif

View File

@ -44,12 +44,27 @@
#include "nsSVGTextPositioningElement.h"
#include "nsIFrame.h"
#include "nsDOMError.h"
#include "nsSVGLengthList.h"
#include "nsSVGAnimatedLengthList.h"
#include "nsSVGNumberList.h"
#include "nsSVGAnimatedNumberList.h"
typedef nsSVGGraphicElement nsSVGTextElementBase;
/**
* This class does not inherit nsSVGTextPositioningElement - it reimplements it
* instead.
*
* Ideally this class would inherit nsSVGTextPositioningElement in addition to
* nsSVGGraphicElement, but we don't want two instances of nsSVGStylableElement
* and all the classes it inherits. Instead we choose to inherit one of the
* classes (nsSVGGraphicElement) and reimplement the missing pieces from the
* other (nsSVGTextPositioningElement (and thus nsSVGTextContentElement)). Care
* must be taken when making changes to the reimplemented pieces to keep
* nsSVGTextPositioningElement in sync (and vice versa).
*/
class nsSVGTextElement : public nsSVGTextElementBase,
public nsIDOMSVGTextElement,
public nsSVGTextPositioningElement // = nsIDOMSVGTextPositioningElement
public nsIDOMSVGTextElement // nsIDOMSVGTextPositioningElement
{
protected:
friend nsresult NS_NewSVGTextElement(nsIContent **aResult,
@ -62,14 +77,14 @@ public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIDOMSVGTEXTELEMENT
NS_DECL_NSIDOMSVGTEXTPOSITIONINGELEMENT
NS_DECL_NSIDOMSVGTEXTCONTENTELEMENT
// xxx If xpcom allowed virtual inheritance we wouldn't need to
// forward here :-(
NS_FORWARD_NSIDOMNODE(nsSVGTextElementBase::)
NS_FORWARD_NSIDOMELEMENT(nsSVGTextElementBase::)
NS_FORWARD_NSIDOMSVGELEMENT(nsSVGTextElementBase::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGTextContentElement::)
NS_FORWARD_NSIDOMSVGTEXTPOSITIONINGELEMENT(nsSVGTextPositioningElement::)
// nsIContent interface
NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
@ -77,10 +92,16 @@ public:
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
protected:
virtual nsSVGTextContainerFrame* GetTextContainerFrame() {
nsSVGTextContainerFrame* GetTextContainerFrame() {
return do_QueryFrame(GetPrimaryFrame(Flush_Layout));
}
// nsIDOMSVGTextPositioning properties:
nsCOMPtr<nsIDOMSVGAnimatedLengthList> mX;
nsCOMPtr<nsIDOMSVGAnimatedLengthList> mY;
nsCOMPtr<nsIDOMSVGAnimatedLengthList> mdX;
nsCOMPtr<nsIDOMSVGAnimatedLengthList> mdY;
nsCOMPtr<nsIDOMSVGAnimatedNumberList> mRotate;
};
@ -118,8 +139,65 @@ nsSVGTextElement::Init()
nsresult rv = nsSVGTextElementBase::Init();
NS_ENSURE_SUCCESS(rv,rv);
rv = Initialise(this);
NS_ENSURE_SUCCESS(rv,rv);
// DOM property: nsIDOMSVGTextPositioningElement::x, #IMPLIED attrib: x
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::X);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mX),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = AddMappedSVGValue(nsGkAtoms::x, mX);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::y, #IMPLIED attrib: y
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::Y);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mY),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = AddMappedSVGValue(nsGkAtoms::y, mY);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::dx, #IMPLIED attrib: dx
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::X);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mdX),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = AddMappedSVGValue(nsGkAtoms::dx, mdX);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::dy, #IMPLIED attrib: dy
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::Y);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mdY),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = AddMappedSVGValue(nsGkAtoms::dy, mdY);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::rotate, #IMPLIED attrib: rotate
{
nsCOMPtr<nsIDOMSVGNumberList> numberList;
rv = NS_NewSVGNumberList(getter_AddRefs(numberList));
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedNumberList(getter_AddRefs(mRotate),
numberList);
NS_ENSURE_SUCCESS(rv,rv);
rv = AddMappedSVGValue(nsGkAtoms::rotate, mRotate);
NS_ENSURE_SUCCESS(rv,rv);
}
return rv;
}
@ -136,6 +214,195 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(nsSVGTextElement)
// - no methods -
//----------------------------------------------------------------------
// nsIDOMSVGTextPositioningElement methods
/* readonly attribute nsIDOMSVGAnimatedLengthList x; */
NS_IMETHODIMP
nsSVGTextElement::GetX(nsIDOMSVGAnimatedLengthList * *aX)
{
*aX = mX;
NS_IF_ADDREF(*aX);
return NS_OK;
}
/* readonly attribute nsIDOMSVGAnimatedLengthList y; */
NS_IMETHODIMP
nsSVGTextElement::GetY(nsIDOMSVGAnimatedLengthList * *aY)
{
*aY = mY;
NS_IF_ADDREF(*aY);
return NS_OK;
}
/* readonly attribute nsIDOMSVGAnimatedLengthList dx; */
NS_IMETHODIMP
nsSVGTextElement::GetDx(nsIDOMSVGAnimatedLengthList * *aDx)
{
*aDx = mdX;
NS_IF_ADDREF(*aDx);
return NS_OK;
}
/* readonly attribute nsIDOMSVGAnimatedLengthList dy; */
NS_IMETHODIMP
nsSVGTextElement::GetDy(nsIDOMSVGAnimatedLengthList * *aDy)
{
*aDy = mdY;
NS_IF_ADDREF(*aDy);
return NS_OK;
}
/* readonly attribute nsIDOMSVGAnimatedNumberList rotate; */
NS_IMETHODIMP
nsSVGTextElement::GetRotate(nsIDOMSVGAnimatedNumberList * *aRotate)
{
*aRotate = mRotate;
NS_IF_ADDREF(*aRotate);
return NS_OK;
}
//----------------------------------------------------------------------
// nsIDOMSVGTextContentElement methods
/* readonly attribute nsIDOMSVGAnimatedLength textLength; */
NS_IMETHODIMP
nsSVGTextElement::GetTextLength(nsIDOMSVGAnimatedLength * *aTextLength)
{
NS_NOTYETIMPLEMENTED("nsSVGTextElement::GetTextLength");
return NS_ERROR_NOT_IMPLEMENTED;
}
/* readonly attribute nsIDOMSVGAnimatedEnumeration lengthAdjust; */
NS_IMETHODIMP
nsSVGTextElement::GetLengthAdjust(nsIDOMSVGAnimatedEnumeration * *aLengthAdjust)
{
NS_NOTYETIMPLEMENTED("nsSVGTextElement::GetLengthAdjust");
return NS_ERROR_NOT_IMPLEMENTED;
}
/* long getNumberOfChars (); */
NS_IMETHODIMP
nsSVGTextElement::GetNumberOfChars(PRInt32 *_retval)
{
*_retval = 0;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (metrics)
*_retval = metrics->GetNumberOfChars();
return NS_OK;
}
/* float getComputedTextLength (); */
NS_IMETHODIMP
nsSVGTextElement::GetComputedTextLength(float *_retval)
{
*_retval = 0.0;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (metrics)
*_retval = metrics->GetComputedTextLength();
return NS_OK;
}
/* float getSubStringLength (in unsigned long charnum, in unsigned long nchars); */
NS_IMETHODIMP
nsSVGTextElement::GetSubStringLength(PRUint32 charnum, PRUint32 nchars, float *_retval)
{
*_retval = 0.0f;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (!metrics)
return NS_OK;
PRUint32 charcount = metrics->GetNumberOfChars();
if (charcount <= charnum || nchars > charcount - charnum)
return NS_ERROR_DOM_INDEX_SIZE_ERR;
if (nchars == 0)
return NS_OK;
*_retval = metrics->GetSubStringLength(charnum, nchars);
return NS_OK;
}
/* nsIDOMSVGPoint getStartPositionOfChar (in unsigned long charnum); */
NS_IMETHODIMP
nsSVGTextElement::GetStartPositionOfChar(PRUint32 charnum, nsIDOMSVGPoint **_retval)
{
*_retval = nsnull;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (!metrics) return NS_ERROR_FAILURE;
return metrics->GetStartPositionOfChar(charnum, _retval);
}
/* nsIDOMSVGPoint getEndPositionOfChar (in unsigned long charnum); */
NS_IMETHODIMP
nsSVGTextElement::GetEndPositionOfChar(PRUint32 charnum, nsIDOMSVGPoint **_retval)
{
*_retval = nsnull;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (!metrics) return NS_ERROR_FAILURE;
return metrics->GetEndPositionOfChar(charnum, _retval);
}
/* nsIDOMSVGRect getExtentOfChar (in unsigned long charnum); */
NS_IMETHODIMP
nsSVGTextElement::GetExtentOfChar(PRUint32 charnum, nsIDOMSVGRect **_retval)
{
*_retval = nsnull;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (!metrics) return NS_ERROR_FAILURE;
return metrics->GetExtentOfChar(charnum, _retval);
}
/* float getRotationOfChar (in unsigned long charnum); */
NS_IMETHODIMP
nsSVGTextElement::GetRotationOfChar(PRUint32 charnum, float *_retval)
{
*_retval = 0.0;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (!metrics) return NS_ERROR_FAILURE;
return metrics->GetRotationOfChar(charnum, _retval);
}
/* long getCharNumAtPosition (in nsIDOMSVGPoint point); */
NS_IMETHODIMP
nsSVGTextElement::GetCharNumAtPosition(nsIDOMSVGPoint *point, PRInt32 *_retval)
{
if (!point)
return NS_ERROR_DOM_SVG_WRONG_TYPE_ERR;
*_retval = -1;
nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
if (metrics)
*_retval = metrics->GetCharNumAtPosition(point);
return NS_OK;
}
/* void selectSubString (in unsigned long charnum, in unsigned long nchars); */
NS_IMETHODIMP
nsSVGTextElement::SelectSubString(PRUint32 charnum, PRUint32 nchars)
{
NS_NOTYETIMPLEMENTED("nsSVGTextElement::SelectSubString");
return NS_ERROR_NOT_IMPLEMENTED;
}
//----------------------------------------------------------------------
// nsIContent methods

View File

@ -43,12 +43,11 @@
#include "nsSVGString.h"
#include "nsSVGTextContentElement.h"
typedef nsSVGStylableElement nsSVGTextPathElementBase;
typedef nsSVGTextContentElement nsSVGTextPathElementBase;
class nsSVGTextPathElement : public nsSVGTextPathElementBase,
class nsSVGTextPathElement : public nsSVGTextPathElementBase, // = nsIDOMSVGTextContentElement
public nsIDOMSVGTextPathElement,
public nsIDOMSVGURIReference,
public nsSVGTextContentElement // = nsIDOMSVGTextContentElement
public nsIDOMSVGURIReference
{
friend class nsSVGTextPathFrame;
@ -69,7 +68,7 @@ public:
NS_FORWARD_NSIDOMNODE(nsSVGTextPathElementBase::)
NS_FORWARD_NSIDOMELEMENT(nsSVGTextPathElementBase::)
NS_FORWARD_NSIDOMSVGELEMENT(nsSVGTextPathElementBase::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGTextContentElement::)
NS_FORWARD_NSIDOMSVGTEXTCONTENTELEMENT(nsSVGTextPathElementBase::)
// nsIContent interface
NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
@ -78,10 +77,6 @@ public:
protected:
virtual nsSVGTextContainerFrame* GetTextContainerFrame() {
return do_QueryFrame(GetPrimaryFrame(Flush_Layout));
}
virtual LengthAttributesInfo GetLengthInfo();
virtual EnumAttributesInfo GetEnumInfo();
virtual StringAttributesInfo GetStringInfo();

View File

@ -40,56 +40,58 @@
#include "nsSVGNumberList.h"
nsresult
nsSVGTextPositioningElement::Initialise(nsSVGElement *aSVGElement)
nsSVGTextPositioningElement::Init()
{
nsresult rv;
nsresult rv = nsSVGTextPositioningElementBase::Init();
NS_ENSURE_SUCCESS(rv,rv);
// Create mapped properties:
// DOM property: nsIDOMSVGTextPositioningElement::x, #IMPLIED attrib: x
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), aSVGElement, nsSVGUtils::X);
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::X);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mX),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = aSVGElement->AddMappedSVGValue(nsGkAtoms::x, mX);
rv = AddMappedSVGValue(nsGkAtoms::x, mX);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::y, #IMPLIED attrib: y
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), aSVGElement, nsSVGUtils::Y);
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::Y);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mY),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = aSVGElement->AddMappedSVGValue(nsGkAtoms::y, mY);
rv = AddMappedSVGValue(nsGkAtoms::y, mY);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::dx, #IMPLIED attrib: dx
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), aSVGElement, nsSVGUtils::X);
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::X);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mdX),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = aSVGElement->AddMappedSVGValue(nsGkAtoms::dx, mdX);
rv = AddMappedSVGValue(nsGkAtoms::dx, mdX);
NS_ENSURE_SUCCESS(rv,rv);
}
// DOM property: nsIDOMSVGTextPositioningElement::dy, #IMPLIED attrib: dy
{
nsCOMPtr<nsIDOMSVGLengthList> lengthList;
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), aSVGElement, nsSVGUtils::Y);
rv = NS_NewSVGLengthList(getter_AddRefs(lengthList), this, nsSVGUtils::Y);
NS_ENSURE_SUCCESS(rv,rv);
rv = NS_NewSVGAnimatedLengthList(getter_AddRefs(mdY),
lengthList);
NS_ENSURE_SUCCESS(rv,rv);
rv = aSVGElement->AddMappedSVGValue(nsGkAtoms::dy, mdY);
rv = AddMappedSVGValue(nsGkAtoms::dy, mdY);
NS_ENSURE_SUCCESS(rv,rv);
}
@ -101,7 +103,7 @@ nsSVGTextPositioningElement::Initialise(nsSVGElement *aSVGElement)
rv = NS_NewSVGAnimatedNumberList(getter_AddRefs(mRotate),
numberList);
NS_ENSURE_SUCCESS(rv,rv);
rv = aSVGElement->AddMappedSVGValue(nsGkAtoms::rotate, mRotate);
rv = AddMappedSVGValue(nsGkAtoms::rotate, mRotate);
NS_ENSURE_SUCCESS(rv,rv);
}

View File

@ -41,13 +41,27 @@
#include "nsIDOMSVGAnimatedLengthList.h"
#include "nsIDOMSVGAnimatedNumberList.h"
class nsSVGTextPositioningElement : public nsSVGTextContentElement
class nsSVGElement;
typedef nsSVGTextContentElement nsSVGTextPositioningElementBase;
/**
* Note that nsSVGTextElement does not inherit this class - it reimplements it
* instead (see its documenting comment). The upshot is that any changes to
* this class also need to be made in nsSVGTextElement.
*/
class nsSVGTextPositioningElement : public nsSVGTextPositioningElementBase
{
public:
NS_DECL_NSIDOMSVGTEXTPOSITIONINGELEMENT
protected:
nsresult Initialise(nsSVGElement *aSVGElement);
nsSVGTextPositioningElement(nsINodeInfo *aNodeInfo)
: nsSVGTextPositioningElementBase(aNodeInfo)
{}
nsresult Init();
// nsIDOMSVGTextPositioning properties:
nsCOMPtr<nsIDOMSVGAnimatedLengthList> mX;