nsIntRect SVGFECompositeElement::ComputeTargetBBox(const nsTArray<nsIntRect>& aSourceBBoxes, const nsSVGFilterInstance& aInstance) { uint16_t op = mEnumAttributes[OPERATOR].GetAnimValue(); if (op == SVG_FECOMPOSITE_OPERATOR_ARITHMETIC) { // "arithmetic" operator can produce non-zero alpha values even where // all input alphas are zero, so we can actually render outside the // union of the source bboxes. // XXX we could also check that k4 is nonzero and check for other // cases like k1/k2 or k1/k3 zero. return GetMaxRect(); } if (op == SVG_FECOMPOSITE_OPERATOR_IN || op == SVG_FECOMPOSITE_OPERATOR_ATOP) { // We will only draw where in2 has nonzero alpha, so it's a good // bounding box for us return aSourceBBoxes[1]; } // The regular Porter-Duff operators always compute zero alpha values // where all sources have zero alpha, so the union of their bounding // boxes is also a bounding box for our rendering return SVGFECompositeElementBase::ComputeTargetBBox(aSourceBBoxes, aInstance); }
nsIntRect SVGFEDisplacementMapElement::ComputeChangeBBox(const nsTArray<nsIntRect>& aSourceChangeBoxes, const nsSVGFilterInstance& aInstance) { // XXX we could do something clever here involving analysis of 'scale' // to figure out the maximum displacement return GetMaxRect(); }
nsIntRect SVGFEImageElement::ComputeTargetBBox(const nsTArray<nsIntRect>& aSourceBBoxes, const nsSVGFilterInstance& aInstance) { // XXX can do better here ... we could check what we know of the source // image bounds and compute an accurate bounding box for the filter // primitive result. return GetMaxRect(); }
nsIntRect SVGFEDisplacementMapElement::ComputeTargetBBox(const nsTArray<nsIntRect>& aSourceBBoxes, const nsSVGFilterInstance& aInstance) { // XXX we could do something clever here involving analysis of 'scale' // to figure out the maximum displacement, and then return mIn1's bounds // adjusted for the maximum displacement return GetMaxRect(); }
nsIntRect SVGFETurbulenceElement::ComputeTargetBBox(const nsTArray<nsIntRect>& aSourceBBoxes, const nsSVGFilterInstance& aInstance) { return GetMaxRect(); }