mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-25 09:30:01 +00:00 
			
		
		
		
	This reverts 0e3487b9ab.
Back when I made that change, I thought we could make our StyleValue
classes match the typed-om definitions directly. However, they have
different requirements. Typed-om types need to be mutable and GCed,
whereas StyleValues are immutable and ideally wouldn't require a JS VM.
While I was already making such a cataclysmic change, I've moved it into
the StyleValues directory, because it *not* being there has bothered me
for a long time. 😅
		
	
			
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2023, Andreas Kling <andreas@ladybird.org>
 | |
|  * Copyright (c) 2024-2025, Sam Atkins <sam@ladybird.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <LibWeb/CSS/CSSStyleDeclaration.h>
 | |
| #include <LibWeb/CSS/GeneratedCSSStyleProperties.h>
 | |
| #include <LibWeb/DOM/Node.h>
 | |
| 
 | |
| namespace Web::CSS {
 | |
| 
 | |
| // https://drafts.csswg.org/cssom/#cssstyleproperties
 | |
| class CSSStyleProperties
 | |
|     : public CSSStyleDeclaration
 | |
|     , public Bindings::GeneratedCSSStyleProperties {
 | |
|     WEB_PLATFORM_OBJECT(CSSStyleProperties, CSSStyleDeclaration);
 | |
|     GC_DECLARE_ALLOCATOR(CSSStyleProperties);
 | |
| 
 | |
| public:
 | |
|     [[nodiscard]] static GC::Ref<CSSStyleProperties> create(JS::Realm&, Vector<StyleProperty>, HashMap<FlyString, StyleProperty> custom_properties);
 | |
| 
 | |
|     [[nodiscard]] static GC::Ref<CSSStyleProperties> create_resolved_style(JS::Realm&, Optional<DOM::AbstractElement>);
 | |
|     [[nodiscard]] static GC::Ref<CSSStyleProperties> create_element_inline_style(DOM::AbstractElement, Vector<StyleProperty>, HashMap<FlyString, StyleProperty> custom_properties);
 | |
| 
 | |
|     virtual ~CSSStyleProperties() override = default;
 | |
|     virtual void initialize(JS::Realm&) override;
 | |
| 
 | |
|     virtual size_t length() const override;
 | |
|     virtual String item(size_t index) const override;
 | |
| 
 | |
|     Optional<StyleProperty> property(PropertyID) const;
 | |
|     Optional<StyleProperty const&> custom_property(FlyString const& custom_property_name) const;
 | |
| 
 | |
|     WebIDL::ExceptionOr<void> set_property(PropertyID, StringView css_text, StringView priority = ""sv);
 | |
|     WebIDL::ExceptionOr<String> remove_property(PropertyID);
 | |
| 
 | |
|     virtual WebIDL::ExceptionOr<void> set_property(StringView property_name, StringView css_text, StringView priority) override;
 | |
|     virtual WebIDL::ExceptionOr<String> remove_property(StringView property_name) override;
 | |
| 
 | |
|     virtual String get_property_value(StringView property_name) const override;
 | |
|     virtual StringView get_property_priority(StringView property_name) const override;
 | |
| 
 | |
|     Vector<StyleProperty> const& properties() const { return m_properties; }
 | |
|     HashMap<FlyString, StyleProperty> const& custom_properties() const { return m_custom_properties; }
 | |
| 
 | |
|     size_t custom_property_count() const { return m_custom_properties.size(); }
 | |
| 
 | |
|     String css_float() const;
 | |
|     WebIDL::ExceptionOr<void> set_css_float(StringView);
 | |
| 
 | |
|     virtual String serialized() const final override;
 | |
|     String serialize_a_css_value(StyleProperty const&) const;
 | |
|     String serialize_a_css_value(Vector<StyleProperty>) const;
 | |
|     virtual WebIDL::ExceptionOr<void> set_css_text(StringView) override;
 | |
| 
 | |
|     void set_declarations_from_text(StringView);
 | |
| 
 | |
|     // ^Bindings::GeneratedCSSStyleProperties
 | |
|     virtual CSSStyleProperties& generated_style_properties_to_css_style_properties() override { return *this; }
 | |
| 
 | |
| private:
 | |
|     CSSStyleProperties(JS::Realm&, Computed, Readonly, Vector<StyleProperty> properties, HashMap<FlyString, StyleProperty> custom_properties, Optional<DOM::AbstractElement>);
 | |
|     static Vector<StyleProperty> convert_declarations_to_specified_order(Vector<StyleProperty>&);
 | |
| 
 | |
|     virtual void visit_edges(Cell::Visitor&) override;
 | |
| 
 | |
|     RefPtr<StyleValue const> style_value_for_computed_property(Layout::NodeWithStyle const&, PropertyID) const;
 | |
|     Optional<StyleProperty> get_property_internal(PropertyID) const;
 | |
| 
 | |
|     bool set_a_css_declaration(PropertyID, NonnullRefPtr<StyleValue const>, Important);
 | |
|     void empty_the_declarations();
 | |
|     void set_the_declarations(Vector<StyleProperty> properties, HashMap<FlyString, StyleProperty> custom_properties);
 | |
| 
 | |
|     void invalidate_owners(DOM::StyleInvalidationReason);
 | |
| 
 | |
|     Vector<StyleProperty> m_properties;
 | |
|     HashMap<FlyString, StyleProperty> m_custom_properties;
 | |
| };
 | |
| 
 | |
| }
 |