Line data Source code
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/SVGFEBlendElement.h"
8 : #include "mozilla/dom/SVGFEBlendElementBinding.h"
9 : #include "nsSVGUtils.h"
10 :
11 0 : NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(FEBlend)
12 :
13 : using namespace mozilla::gfx;
14 :
15 : namespace mozilla {
16 : namespace dom {
17 :
18 : JSObject*
19 0 : SVGFEBlendElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
20 : {
21 0 : return SVGFEBlendElementBinding::Wrap(aCx, this, aGivenProto);
22 : }
23 :
24 : nsSVGEnumMapping SVGFEBlendElement::sModeMap[] = {
25 : {&nsGkAtoms::normal, SVG_FEBLEND_MODE_NORMAL},
26 : {&nsGkAtoms::multiply, SVG_FEBLEND_MODE_MULTIPLY},
27 : {&nsGkAtoms::screen, SVG_FEBLEND_MODE_SCREEN},
28 : {&nsGkAtoms::darken, SVG_FEBLEND_MODE_DARKEN},
29 : {&nsGkAtoms::lighten, SVG_FEBLEND_MODE_LIGHTEN},
30 : {&nsGkAtoms::overlay, SVG_FEBLEND_MODE_OVERLAY},
31 : {&nsGkAtoms::colorDodge, SVG_FEBLEND_MODE_COLOR_DODGE},
32 : {&nsGkAtoms::colorBurn, SVG_FEBLEND_MODE_COLOR_BURN},
33 : {&nsGkAtoms::hardLight, SVG_FEBLEND_MODE_HARD_LIGHT},
34 : {&nsGkAtoms::softLight, SVG_FEBLEND_MODE_SOFT_LIGHT},
35 : {&nsGkAtoms::difference, SVG_FEBLEND_MODE_DIFFERENCE},
36 : {&nsGkAtoms::exclusion, SVG_FEBLEND_MODE_EXCLUSION},
37 : {&nsGkAtoms::hue, SVG_FEBLEND_MODE_HUE},
38 : {&nsGkAtoms::saturation, SVG_FEBLEND_MODE_SATURATION},
39 : {&nsGkAtoms::color, SVG_FEBLEND_MODE_COLOR},
40 : {&nsGkAtoms::luminosity, SVG_FEBLEND_MODE_LUMINOSITY},
41 : {nullptr, 0}
42 : };
43 :
44 : nsSVGElement::EnumInfo SVGFEBlendElement::sEnumInfo[1] =
45 : {
46 : { &nsGkAtoms::mode,
47 : sModeMap,
48 : SVG_FEBLEND_MODE_NORMAL
49 : }
50 : };
51 :
52 : nsSVGElement::StringInfo SVGFEBlendElement::sStringInfo[3] =
53 : {
54 : { &nsGkAtoms::result, kNameSpaceID_None, true },
55 : { &nsGkAtoms::in, kNameSpaceID_None, true },
56 : { &nsGkAtoms::in2, kNameSpaceID_None, true }
57 : };
58 :
59 : //----------------------------------------------------------------------
60 : // nsIDOMNode methods
61 :
62 0 : NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEBlendElement)
63 :
64 : //----------------------------------------------------------------------
65 : // nsIDOMSVGFEBlendElement methods
66 :
67 : already_AddRefed<SVGAnimatedString>
68 0 : SVGFEBlendElement::In1()
69 : {
70 0 : return mStringAttributes[IN1].ToDOMAnimatedString(this);
71 : }
72 :
73 : already_AddRefed<SVGAnimatedString>
74 0 : SVGFEBlendElement::In2()
75 : {
76 0 : return mStringAttributes[IN2].ToDOMAnimatedString(this);
77 : }
78 :
79 : already_AddRefed<SVGAnimatedEnumeration>
80 0 : SVGFEBlendElement::Mode()
81 : {
82 0 : return mEnumAttributes[MODE].ToDOMAnimatedEnum(this);
83 : }
84 :
85 : FilterPrimitiveDescription
86 0 : SVGFEBlendElement::GetPrimitiveDescription(nsSVGFilterInstance* aInstance,
87 : const IntRect& aFilterSubregion,
88 : const nsTArray<bool>& aInputsAreTainted,
89 : nsTArray<RefPtr<SourceSurface>>& aInputImages)
90 : {
91 0 : uint32_t mode = mEnumAttributes[MODE].GetAnimValue();
92 0 : FilterPrimitiveDescription descr(PrimitiveType::Blend);
93 0 : descr.Attributes().Set(eBlendBlendmode, mode);
94 0 : return descr;
95 : }
96 :
97 : bool
98 0 : SVGFEBlendElement::AttributeAffectsRendering(int32_t aNameSpaceID,
99 : nsIAtom* aAttribute) const
100 : {
101 0 : return SVGFEBlendElementBase::AttributeAffectsRendering(aNameSpaceID, aAttribute) ||
102 0 : (aNameSpaceID == kNameSpaceID_None &&
103 0 : (aAttribute == nsGkAtoms::in ||
104 0 : aAttribute == nsGkAtoms::in2 ||
105 0 : aAttribute == nsGkAtoms::mode));
106 : }
107 :
108 : void
109 0 : SVGFEBlendElement::GetSourceImageNames(nsTArray<nsSVGStringInfo>& aSources)
110 : {
111 0 : aSources.AppendElement(nsSVGStringInfo(&mStringAttributes[IN1], this));
112 0 : aSources.AppendElement(nsSVGStringInfo(&mStringAttributes[IN2], this));
113 0 : }
114 :
115 : //----------------------------------------------------------------------
116 : // nsSVGElement methods
117 :
118 : nsSVGElement::EnumAttributesInfo
119 0 : SVGFEBlendElement::GetEnumInfo()
120 : {
121 : return EnumAttributesInfo(mEnumAttributes, sEnumInfo,
122 0 : ArrayLength(sEnumInfo));
123 : }
124 :
125 : nsSVGElement::StringAttributesInfo
126 0 : SVGFEBlendElement::GetStringInfo()
127 : {
128 : return StringAttributesInfo(mStringAttributes, sStringInfo,
129 0 : ArrayLength(sStringInfo));
130 : }
131 :
132 : } // namespace dom
133 : } // namespace mozilla
|