FloatRect RenderSVGResourceMasker::resourceBoundingBox(RenderObject* object) { SVGMaskElement* maskElement = static_cast<SVGMaskElement*>(node()); ASSERT(maskElement); FloatRect objectBoundingBox = object->objectBoundingBox(); FloatRect maskBoundaries = maskElement->maskBoundingBox(objectBoundingBox); // Resource was not layouted yet. Give back clipping rect of the mask. if (selfNeedsLayout()) return maskBoundaries; if (m_maskContentBoundaries.isEmpty()) calculateMaskContentRepaintRect(); FloatRect maskRect = m_maskContentBoundaries; if (maskElement->maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { AffineTransform transform; transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height()); maskRect = transform.mapRect(maskRect); } maskRect.intersect(maskBoundaries); return maskRect; }
FloatRect RenderSVGResourceMasker::resourceBoundingBox(RenderObject* object) { // Save the reference to the calling object for relayouting it on changing resource properties. if (!m_masker.contains(object)) m_masker.set(object, new MaskerData); // Resource was not layouted yet. Give back clipping rect of the mask. SVGMaskElement* maskElement = static_cast<SVGMaskElement*>(node()); FloatRect objectBoundingBox = object->objectBoundingBox(); FloatRect maskBoundaries = maskElement->maskBoundingBox(objectBoundingBox); if (selfNeedsLayout()) return maskBoundaries; if (m_maskBoundaries.isEmpty()) calculateMaskContentRepaintRect(); if (!maskElement) return FloatRect(); FloatRect maskRect = m_maskBoundaries; if (maskElement->maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { AffineTransform transform; transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height()); maskRect = transform.mapRect(maskRect); } maskRect.intersect(maskBoundaries); return maskRect; }
FloatRect LayoutSVGResourceMasker::resourceBoundingBox(const LayoutObject* object) { SVGMaskElement* maskElement = toSVGMaskElement(element()); ASSERT(maskElement); FloatRect objectBoundingBox = object->objectBoundingBox(); FloatRect maskBoundaries = SVGLengthContext::resolveRectangle<SVGMaskElement>(maskElement, maskElement->maskUnits()->currentValue()->enumValue(), objectBoundingBox); // Resource was not layouted yet. Give back clipping rect of the mask. if (selfNeedsLayout()) return maskBoundaries; if (m_maskContentBoundaries.isEmpty()) calculateMaskContentPaintInvalidationRect(); FloatRect maskRect = m_maskContentBoundaries; if (maskElement->maskContentUnits()->currentValue()->value() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { AffineTransform transform; transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height()); maskRect = transform.mapRect(maskRect); } maskRect.intersect(maskBoundaries); return maskRect; }
JSValue jsSVGMaskElementStyle(ExecState* exec, JSValue slotBase, const Identifier&) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(slotBase)); UNUSED_PARAM(exec); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(imp->style())); return result; }
JSValue jsSVGMaskElementXmlspace(ExecState* exec, JSValue slotBase, const Identifier&) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(slotBase)); UNUSED_PARAM(exec); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); JSValue result = jsString(exec, imp->xmlspace()); return result; }
JSValue jsSVGMaskElementClassName(ExecState* exec, JSValue slotBase, const Identifier&) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(slotBase)); UNUSED_PARAM(exec); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); RefPtr<SVGAnimatedString> obj = imp->classNameAnimated(); JSValue result = toJS(exec, castedThis->globalObject(), obj.get()); return result; }
JSValue jsSVGMaskElementExternalResourcesRequired(ExecState* exec, JSValue slotBase, const Identifier&) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(slotBase)); UNUSED_PARAM(exec); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); RefPtr<SVGAnimatedBoolean> obj = imp->externalResourcesRequiredAnimated(); JSValue result = toJS(exec, castedThis->globalObject(), obj.get()); return result; }
JSValue jsSVGMaskElementMaskContentUnits(ExecState* exec, JSValue slotBase, const Identifier&) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(slotBase)); UNUSED_PARAM(exec); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); RefPtr<SVGAnimatedEnumeration> obj = imp->maskContentUnitsAnimated(); JSValue result = toJS(exec, castedThis->globalObject(), obj.get()); return result; }
EncodedJSValue JSC_HOST_CALL jsSVGMaskElementPrototypeFunctionGetPresentationAttribute(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSSVGMaskElement::s_info)) return throwVMTypeError(exec); JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSSVGMaskElement::s_info); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); const String& name(ustringToString(exec->argument(0).toString(exec))); if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(imp->getPresentationAttribute(name))); return JSValue::encode(result); }
EncodedJSValue JSC_HOST_CALL jsSVGMaskElementPrototypeFunctionHasExtension(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSSVGMaskElement::s_info)) return throwVMTypeError(exec); JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSSVGMaskElement::s_info); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); const String& extension(ustringToString(exec->argument(0).toString(exec))); if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = jsBoolean(imp->hasExtension(extension)); return JSValue::encode(result); }
JSValue jsSVGMaskElementSystemLanguage(ExecState* exec, JSValue slotBase, const Identifier&) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(asObject(slotBase)); UNUSED_PARAM(exec); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(SVGStaticListPropertyTearOff<SVGStringList>::create(GetOwnerElementForType<SVGMaskElement, IsDerivedFromSVGElement<SVGMaskElement>::value>::ownerElement(imp), imp->systemLanguage()))); return result; }
FloatRect RenderSVGResourceMasker::resourceBoundingBox(const FloatRect& objectBoundingBox) { if (m_maskBoundaries.isEmpty()) calculateMaskContentRepaintRect(); SVGMaskElement* maskElement = static_cast<SVGMaskElement*>(node()); if (!maskElement) return FloatRect(); FloatRect maskRect = m_maskBoundaries; if (maskElement->maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { AffineTransform transform; transform.translate(objectBoundingBox.x(), objectBoundingBox.y()); transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height()); maskRect = transform.mapRect(maskRect); } maskRect.intersect(maskElement->maskBoundingBox(objectBoundingBox)); return maskRect; }
void setJSSVGMaskElementXmlspace(ExecState* exec, JSObject* thisObject, JSValue value) { JSSVGMaskElement* castedThis = static_cast<JSSVGMaskElement*>(thisObject); SVGMaskElement* imp = static_cast<SVGMaskElement*>(castedThis->impl()); imp->setXmlspace(ustringToString(value.toString(exec))); }