From 778acf8699729eac6371e3e42918ad32b1fb7169 Mon Sep 17 00:00:00 2001 From: "longsonr@gmail.com" Date: Fri, 27 Apr 2007 01:42:51 -0700 Subject: [PATCH] Bug 378857 - Simplify clipPath frame access to units. r=tor,sr=roc --- .../svg/content/src/nsSVGClipPathElement.cpp | 40 +--------- .../svg/content/src/nsSVGClipPathElement.h | 77 +++++++++++++++++++ layout/svg/base/src/nsSVGClipPathFrame.cpp | 14 ++-- 3 files changed, 84 insertions(+), 47 deletions(-) create mode 100755 content/svg/content/src/nsSVGClipPathElement.h diff --git a/content/svg/content/src/nsSVGClipPathElement.cpp b/content/svg/content/src/nsSVGClipPathElement.cpp index 358cdc1c758d..6c3166d8fb63 100644 --- a/content/svg/content/src/nsSVGClipPathElement.cpp +++ b/content/svg/content/src/nsSVGClipPathElement.cpp @@ -34,50 +34,12 @@ * * ***** END LICENSE BLOCK ***** */ -#include "nsSVGGraphicElement.h" -#include "nsIDOMSVGClipPathElement.h" +#include "nsSVGClipPathElement.h" #include "nsGkAtoms.h" -#include "nsSVGAnimatedEnumeration.h" #include "nsSVGEnum.h" -typedef nsSVGGraphicElement nsSVGClipPathElementBase; - -class nsSVGClipPathElement : public nsSVGClipPathElementBase, - public nsIDOMSVGClipPathElement -{ -protected: - friend nsresult NS_NewSVGClipPathElement(nsIContent **aResult, - nsINodeInfo *aNodeInfo); - nsSVGClipPathElement(nsINodeInfo *aNodeInfo); - nsresult Init(); - -public: - // interfaces: - - NS_DECL_ISUPPORTS_INHERITED - NS_DECL_NSIDOMSVGCLIPPATHELEMENT - - // xxx I wish we could use virtual inheritance - NS_FORWARD_NSIDOMNODE(nsSVGClipPathElementBase::) - NS_FORWARD_NSIDOMELEMENT(nsSVGClipPathElementBase::) - NS_FORWARD_NSIDOMSVGELEMENT(nsSVGClipPathElementBase::) - - virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const; - -protected: - - // nsIDOMSVGClipPathElement values - nsCOMPtr mClipPathUnits; - -}; - -//////////////////////////////////////////////////////////////////////// -// implementation - - NS_IMPL_NS_NEW_SVG_ELEMENT(ClipPath) - //---------------------------------------------------------------------- // nsISupports methods diff --git a/content/svg/content/src/nsSVGClipPathElement.h b/content/svg/content/src/nsSVGClipPathElement.h new file mode 100755 index 000000000000..176d84e883cc --- /dev/null +++ b/content/svg/content/src/nsSVGClipPathElement.h @@ -0,0 +1,77 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Mozilla SVG project. + * + * The Initial Developer of the Original Code is IBM Corporation. + * Portions created by the Initial Developer are Copyright (C) 2004 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __NS_SVGCLIPPATHELEMENT_H__ +#define __NS_SVGCLIPPATHELEMENT_H__ + +#include "nsSVGGraphicElement.h" +#include "nsIDOMSVGClipPathElement.h" +#include "nsSVGAnimatedEnumeration.h" + +typedef nsSVGGraphicElement nsSVGClipPathElementBase; + +class nsSVGClipPathElement : public nsSVGClipPathElementBase, + public nsIDOMSVGClipPathElement +{ + friend class nsSVGClipPathFrame; + +protected: + friend nsresult NS_NewSVGClipPathElement(nsIContent **aResult, + nsINodeInfo *aNodeInfo); + nsSVGClipPathElement(nsINodeInfo *aNodeInfo); + nsresult Init(); + +public: + // interfaces: + + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIDOMSVGCLIPPATHELEMENT + + // xxx I wish we could use virtual inheritance + NS_FORWARD_NSIDOMNODE(nsSVGClipPathElementBase::) + NS_FORWARD_NSIDOMELEMENT(nsSVGClipPathElementBase::) + NS_FORWARD_NSIDOMSVGELEMENT(nsSVGClipPathElementBase::) + + virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const; + +protected: + + // nsIDOMSVGClipPathElement values + nsCOMPtr mClipPathUnits; + +}; + +#endif diff --git a/layout/svg/base/src/nsSVGClipPathFrame.cpp b/layout/svg/base/src/nsSVGClipPathFrame.cpp index 7c6ce0a0d62a..2ac27a03792b 100644 --- a/layout/svg/base/src/nsSVGClipPathFrame.cpp +++ b/layout/svg/base/src/nsSVGClipPathFrame.cpp @@ -41,7 +41,7 @@ #include "nsIDOMSVGAnimatedEnum.h" #include "nsGkAtoms.h" #include "nsSVGUtils.h" -#include "nsSVGGraphicElement.h" +#include "nsSVGClipPathElement.h" #include "gfxContext.h" #include "nsIDOMSVGRect.h" @@ -198,9 +198,10 @@ nsSVGClipPathFrame::GetCanvasTM() { NS_ASSERTION(mClipParentMatrix, "null parent matrix"); - nsSVGGraphicElement *element = - NS_STATIC_CAST(nsSVGGraphicElement*, mContent); - nsCOMPtr localTM = element->GetLocalTransformMatrix(); + nsSVGClipPathElement *clipPath = NS_STATIC_CAST(nsSVGClipPathElement*, + mContent); + + nsCOMPtr localTM = clipPath->GetLocalTransformMatrix(); nsCOMPtr canvasTM; @@ -211,10 +212,7 @@ nsSVGClipPathFrame::GetCanvasTM() /* object bounding box? */ PRUint16 units; - nsCOMPtr path = do_QueryInterface(mContent); - nsCOMPtr aEnum; - path->GetClipPathUnits(getter_AddRefs(aEnum)); - aEnum->GetAnimVal(&units); + clipPath->mClipPathUnits->GetAnimVal(&units); if (mClipParent && units == nsIDOMSVGClipPathElement::SVG_CPUNITS_OBJECTBOUNDINGBOX) {