| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org> | 
					
						
							| 
									
										
										
										
											2024-06-06 19:58:47 +01:00
										 |  |  |  * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org> | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-21 21:05:36 -06:00
										 |  |  | #include <LibJS/Runtime/Set.h>
 | 
					
						
							|  |  |  | #include <LibJS/Runtime/SetIterator.h>
 | 
					
						
							| 
									
										
										
										
											2024-05-13 13:55:43 -06:00
										 |  |  | #include <LibWeb/Bindings/FontFaceSetPrototype.h>
 | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | #include <LibWeb/Bindings/PlatformObject.h>
 | 
					
						
							|  |  |  | #include <LibWeb/CSS/FontFace.h>
 | 
					
						
							| 
									
										
										
										
											2024-06-06 19:55:53 +01:00
										 |  |  | #include <LibWeb/DOM/EventTarget.h>
 | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Web::CSS { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-06 19:55:53 +01:00
										 |  |  | class FontFaceSet final : public DOM::EventTarget { | 
					
						
							|  |  |  |     WEB_PLATFORM_OBJECT(FontFaceSet, DOM::EventTarget); | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     GC_DECLARE_ALLOCATOR(FontFaceSet); | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     [[nodiscard]] static GC::Ref<FontFaceSet> construct_impl(JS::Realm&, Vector<GC::Root<FontFace>> const& initial_faces); | 
					
						
							|  |  |  |     [[nodiscard]] static GC::Ref<FontFaceSet> create(JS::Realm&); | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  |     virtual ~FontFaceSet() override = default; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     GC::Ref<JS::Set> set_entries() const { return m_set_entries; } | 
					
						
							| 
									
										
										
										
											2024-05-21 21:05:36 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     WebIDL::ExceptionOr<GC::Ref<FontFaceSet>> add(GC::Root<FontFace>); | 
					
						
							|  |  |  |     bool delete_(GC::Root<FontFace>); | 
					
						
							| 
									
										
										
										
											2024-05-21 21:05:36 -06:00
										 |  |  |     void clear(); | 
					
						
							| 
									
										
										
										
											2024-06-06 19:58:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void set_onloading(WebIDL::CallbackType*); | 
					
						
							|  |  |  |     WebIDL::CallbackType* onloading(); | 
					
						
							| 
									
										
										
										
											2024-06-06 20:01:39 +01:00
										 |  |  |     void set_onloadingdone(WebIDL::CallbackType*); | 
					
						
							|  |  |  |     WebIDL::CallbackType* onloadingdone(); | 
					
						
							| 
									
										
										
										
											2024-06-06 20:02:55 +01:00
										 |  |  |     void set_onloadingerror(WebIDL::CallbackType*); | 
					
						
							|  |  |  |     WebIDL::CallbackType* onloadingerror(); | 
					
						
							| 
									
										
										
										
											2024-06-06 19:58:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     JS::ThrowCompletionOr<GC::Ref<WebIDL::Promise>> load(String const& font, String const& text); | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     GC::Ref<WebIDL::Promise> ready() const; | 
					
						
							| 
									
										
										
										
											2024-05-13 13:55:43 -06:00
										 |  |  |     Bindings::FontFaceSetLoadStatus status() const { return m_status; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-29 23:38:49 +02:00
										 |  |  |     void resolve_ready_promise(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-04 15:15:46 +01:00
										 |  |  |     void on_set_modified_from_js(Badge<Bindings::FontFaceSetPrototype>) { } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     FontFaceSet(JS::Realm&, GC::Ref<WebIDL::Promise> ready_promise, GC::Ref<JS::Set> set_entries); | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtual void initialize(JS::Realm&) override; | 
					
						
							| 
									
										
										
										
											2024-05-13 13:55:43 -06:00
										 |  |  |     virtual void visit_edges(Cell::Visitor&) override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     GC::Ref<JS::Set> m_set_entries; | 
					
						
							|  |  |  |     GC::Ref<WebIDL::Promise> m_ready_promise; // [[ReadyPromise]]
 | 
					
						
							| 
									
										
										
										
											2024-05-21 21:05:36 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     Vector<GC::Ref<FontFace>> m_loading_fonts {}; // [[LoadingFonts]]
 | 
					
						
							|  |  |  |     Vector<GC::Ref<FontFace>> m_loaded_fonts {};  // [[LoadedFonts]]
 | 
					
						
							|  |  |  |     Vector<GC::Ref<FontFace>> m_failed_fonts {};  // [[FailedFonts]]
 | 
					
						
							| 
									
										
										
										
											2024-09-26 10:52:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-13 13:55:43 -06:00
										 |  |  |     Bindings::FontFaceSetLoadStatus m_status { Bindings::FontFaceSetLoadStatus::Loading }; | 
					
						
							| 
									
										
										
										
											2024-05-07 14:49:31 -06:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |