SVGFEPointLightElement.cpp (2783B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "mozilla/dom/SVGFEPointLightElement.h" 8 9 #include "mozilla/SVGFilterInstance.h" 10 #include "mozilla/dom/SVGFEPointLightElementBinding.h" 11 12 NS_IMPL_NS_NEW_SVG_ELEMENT(FEPointLight) 13 14 using namespace mozilla::gfx; 15 16 namespace mozilla::dom { 17 18 JSObject* SVGFEPointLightElement::WrapNode(JSContext* aCx, 19 JS::Handle<JSObject*> aGivenProto) { 20 return SVGFEPointLightElement_Binding::Wrap(aCx, this, aGivenProto); 21 } 22 23 SVGElement::NumberInfo SVGFEPointLightElement::sNumberInfo[3] = { 24 {nsGkAtoms::x, 0}, {nsGkAtoms::y, 0}, {nsGkAtoms::z, 0}}; 25 26 //---------------------------------------------------------------------- 27 // nsINode methods 28 29 NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEPointLightElement) 30 31 //---------------------------------------------------------------------- 32 // SVGFilterPrimitiveChildElement methods 33 34 bool SVGFEPointLightElement::AttributeAffectsRendering( 35 int32_t aNameSpaceID, nsAtom* aAttribute) const { 36 return aNameSpaceID == kNameSpaceID_None && 37 (aAttribute == nsGkAtoms::x || aAttribute == nsGkAtoms::y || 38 aAttribute == nsGkAtoms::z); 39 } 40 41 //---------------------------------------------------------------------- 42 43 LightType SVGFEPointLightElement::ComputeLightAttributes( 44 SVGFilterInstance* aInstance, nsTArray<float>& aFloatAttributes) { 45 Point3D lightPos; 46 GetAnimatedNumberValues(&lightPos.x, &lightPos.y, &lightPos.z, nullptr); 47 lightPos = aInstance->ConvertLocation(lightPos); 48 aFloatAttributes.SetLength(kPointLightNumAttributes); 49 aFloatAttributes[kPointLightPositionXIndex] = lightPos.x; 50 aFloatAttributes[kPointLightPositionYIndex] = lightPos.y; 51 aFloatAttributes[kPointLightPositionZIndex] = lightPos.z; 52 return LightType::Point; 53 } 54 55 already_AddRefed<DOMSVGAnimatedNumber> SVGFEPointLightElement::X() { 56 return mNumberAttributes[ATTR_X].ToDOMAnimatedNumber(this); 57 } 58 59 already_AddRefed<DOMSVGAnimatedNumber> SVGFEPointLightElement::Y() { 60 return mNumberAttributes[ATTR_Y].ToDOMAnimatedNumber(this); 61 } 62 63 already_AddRefed<DOMSVGAnimatedNumber> SVGFEPointLightElement::Z() { 64 return mNumberAttributes[ATTR_Z].ToDOMAnimatedNumber(this); 65 } 66 67 //---------------------------------------------------------------------- 68 // SVGElement methods 69 70 SVGElement::NumberAttributesInfo SVGFEPointLightElement::GetNumberInfo() { 71 return NumberAttributesInfo(mNumberAttributes, sNumberInfo, 72 std::size(sNumberInfo)); 73 } 74 75 } // namespace mozilla::dom