mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	 0f6782fae6
			
		
	
	
		0f6782fae6
		
	
	
	
	
		
			
			This should allow us to add a Element::attribute which returns an Optional<String>. Eventually all callers should be ported to switch from the DeprecatedString version, but in the meantime, this should allow us to port some more IDL interfaces away from DeprecatedString.
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include <LibWeb/Bindings/ExceptionOrUtils.h>
 | |
| #include <LibWeb/Bindings/Intrinsics.h>
 | |
| #include <LibWeb/CSS/Parser/Parser.h>
 | |
| #include <LibWeb/Layout/BlockContainer.h>
 | |
| #include <LibWeb/SVG/AttributeNames.h>
 | |
| #include <LibWeb/SVG/SVGAnimatedLength.h>
 | |
| #include <LibWeb/SVG/SVGForeignObjectElement.h>
 | |
| #include <LibWeb/SVG/SVGLength.h>
 | |
| 
 | |
| namespace Web::SVG {
 | |
| 
 | |
| SVGForeignObjectElement::SVGForeignObjectElement(DOM::Document& document, DOM::QualifiedName qualified_name)
 | |
|     : SVGGraphicsElement(document, move(qualified_name))
 | |
| {
 | |
| }
 | |
| 
 | |
| SVGForeignObjectElement::~SVGForeignObjectElement() = default;
 | |
| 
 | |
| void SVGForeignObjectElement::initialize(JS::Realm& realm)
 | |
| {
 | |
|     Base::initialize(realm);
 | |
|     set_prototype(&Bindings::ensure_web_prototype<Bindings::SVGForeignObjectElementPrototype>(realm, "SVGForeignObjectElement"));
 | |
| 
 | |
|     // FIXME: These never actually get updated!
 | |
|     m_x = SVGAnimatedLength::create(realm, SVGLength::create(realm, 0, 0), SVGLength::create(realm, 0, 0));
 | |
|     m_y = SVGAnimatedLength::create(realm, SVGLength::create(realm, 0, 0), SVGLength::create(realm, 0, 0));
 | |
|     m_width = SVGAnimatedLength::create(realm, SVGLength::create(realm, 0, 0), SVGLength::create(realm, 0, 0));
 | |
|     m_height = SVGAnimatedLength::create(realm, SVGLength::create(realm, 0, 0), SVGLength::create(realm, 0, 0));
 | |
| }
 | |
| 
 | |
| void SVGForeignObjectElement::visit_edges(Cell::Visitor& visitor)
 | |
| {
 | |
|     Base::visit_edges(visitor);
 | |
|     visitor.visit(m_x);
 | |
|     visitor.visit(m_y);
 | |
|     visitor.visit(m_width);
 | |
|     visitor.visit(m_height);
 | |
| }
 | |
| 
 | |
| JS::GCPtr<Layout::Node> SVGForeignObjectElement::create_layout_node(NonnullRefPtr<CSS::StyleProperties> style)
 | |
| {
 | |
|     return heap().allocate_without_realm<Layout::BlockContainer>(document(), this, move(style));
 | |
| }
 | |
| 
 | |
| void SVGForeignObjectElement::apply_presentational_hints(CSS::StyleProperties& style) const
 | |
| {
 | |
|     Base::apply_presentational_hints(style);
 | |
|     auto parsing_context = CSS::Parser::ParsingContext { document() };
 | |
|     if (auto width_value = parse_css_value(parsing_context, deprecated_attribute(Web::HTML::AttributeNames::width), CSS::PropertyID::Width))
 | |
|         style.set_property(CSS::PropertyID::Width, width_value.release_nonnull());
 | |
| 
 | |
|     if (auto height_value = parse_css_value(parsing_context, deprecated_attribute(Web::HTML::AttributeNames::height), CSS::PropertyID::Height))
 | |
|         style.set_property(CSS::PropertyID::Height, height_value.release_nonnull());
 | |
| }
 | |
| 
 | |
| JS::NonnullGCPtr<SVG::SVGAnimatedLength> SVGForeignObjectElement::x()
 | |
| {
 | |
|     return *m_x;
 | |
| }
 | |
| 
 | |
| JS::NonnullGCPtr<SVG::SVGAnimatedLength> SVGForeignObjectElement::y()
 | |
| {
 | |
|     return *m_y;
 | |
| }
 | |
| 
 | |
| JS::NonnullGCPtr<SVG::SVGAnimatedLength> SVGForeignObjectElement::width()
 | |
| {
 | |
|     return *m_width;
 | |
| }
 | |
| 
 | |
| JS::NonnullGCPtr<SVG::SVGAnimatedLength> SVGForeignObjectElement::height()
 | |
| {
 | |
|     return *m_height;
 | |
| }
 | |
| 
 | |
| }
 |