mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 13:48:23 +02:00
The change to the EventTargetChainItem constructor is because we're changing mTarget to be const (to avoid taking extra stack refs to the EventTarget), so have to set it in the constructor instead of setting it after creating the object. Differential Revision: https://phabricator.services.mozilla.com/D25813 --HG-- extra : moz-landing-system : lando
106 lines
4 KiB
C++
106 lines
4 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* 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/. */
|
|
|
|
#ifndef nsMathMLElement_h
|
|
#define nsMathMLElement_h
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/dom/Element.h"
|
|
#include "nsMappedAttributeElement.h"
|
|
#include "Link.h"
|
|
#include "mozilla/dom/DOMRect.h"
|
|
|
|
class nsCSSValue;
|
|
|
|
typedef nsMappedAttributeElement nsMathMLElementBase;
|
|
|
|
namespace mozilla {
|
|
class EventChainPostVisitor;
|
|
class EventChainPreVisitor;
|
|
} // namespace mozilla
|
|
|
|
/*
|
|
* The base class for MathML elements.
|
|
*/
|
|
class nsMathMLElement final : public nsMathMLElementBase,
|
|
public mozilla::dom::Link {
|
|
public:
|
|
explicit nsMathMLElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
|
|
explicit nsMathMLElement(
|
|
already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
|
|
|
|
// Implementation of nsISupports is inherited from nsMathMLElementBase
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
|
|
nsresult BindToTree(Document* aDocument, nsIContent* aParent,
|
|
nsIContent* aBindingParent) override;
|
|
virtual void UnbindFromTree(bool aDeep = true,
|
|
bool aNullParent = true) override;
|
|
|
|
virtual bool ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
|
|
const nsAString& aValue,
|
|
nsIPrincipal* aMaybeScriptedPrincipal,
|
|
nsAttrValue& aResult) override;
|
|
|
|
NS_IMETHOD_(bool) IsAttributeMapped(const nsAtom* aAttribute) const override;
|
|
virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction()
|
|
const override;
|
|
|
|
enum {
|
|
PARSE_ALLOW_UNITLESS = 0x01, // unitless 0 will be turned into 0px
|
|
PARSE_ALLOW_NEGATIVE = 0x02,
|
|
PARSE_SUPPRESS_WARNINGS = 0x04,
|
|
CONVERT_UNITLESS_TO_PERCENT = 0x08
|
|
};
|
|
static bool ParseNamedSpaceValue(const nsString& aString,
|
|
nsCSSValue& aCSSValue, uint32_t aFlags);
|
|
|
|
static bool ParseNumericValue(const nsString& aString, nsCSSValue& aCSSValue,
|
|
uint32_t aFlags, Document* aDocument);
|
|
|
|
static void MapMathMLAttributesInto(const nsMappedAttributes* aAttributes,
|
|
mozilla::MappedDeclarations&);
|
|
|
|
void GetEventTargetParent(mozilla::EventChainPreVisitor& aVisitor) override;
|
|
MOZ_CAN_RUN_SCRIPT
|
|
nsresult PostHandleEvent(mozilla::EventChainPostVisitor& aVisitor) override;
|
|
nsresult Clone(mozilla::dom::NodeInfo*, nsINode** aResult) const override;
|
|
virtual mozilla::EventStates IntrinsicState() const override;
|
|
virtual bool IsNodeOfType(uint32_t aFlags) const override;
|
|
|
|
// Set during reflow as necessary. Does a style change notification,
|
|
// aNotify must be true.
|
|
void SetIncrementScriptLevel(bool aIncrementScriptLevel, bool aNotify);
|
|
bool GetIncrementScriptLevel() const { return mIncrementScriptLevel; }
|
|
|
|
virtual bool IsFocusableInternal(int32_t* aTabIndex,
|
|
bool aWithMouse) override;
|
|
virtual bool IsLink(nsIURI** aURI) const override;
|
|
virtual void GetLinkTarget(nsAString& aTarget) override;
|
|
virtual already_AddRefed<nsIURI> GetHrefURI() const override;
|
|
|
|
virtual void NodeInfoChanged(Document* aOldDoc) override {
|
|
ClearHasPendingLinkUpdate();
|
|
nsMathMLElementBase::NodeInfoChanged(aOldDoc);
|
|
}
|
|
|
|
protected:
|
|
virtual ~nsMathMLElement() {}
|
|
|
|
virtual JSObject* WrapNode(JSContext* aCx,
|
|
JS::Handle<JSObject*> aGivenProto) override;
|
|
|
|
virtual nsresult AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
|
const nsAttrValue* aValue,
|
|
const nsAttrValue* aOldValue,
|
|
nsIPrincipal* aSubjectPrincipal,
|
|
bool aNotify) override;
|
|
|
|
private:
|
|
bool mIncrementScriptLevel;
|
|
};
|
|
|
|
#endif // nsMathMLElement_h
|