LibWeb: Add fast_is<T> for hotly dynamic_cast'ed things on imdb.com

This commit is contained in:
Andreas Kling 2025-09-25 12:06:12 +02:00 committed by Andreas Kling
parent 2fcacd21f5
commit 989f6ddb42
5 changed files with 28 additions and 1 deletions

View File

@ -177,9 +177,11 @@ public:
virtual bool is_svg_script_element() const { return false; } virtual bool is_svg_script_element() const { return false; }
virtual bool is_svg_style_element() const { return false; } virtual bool is_svg_style_element() const { return false; }
virtual bool is_svg_svg_element() const { return false; } virtual bool is_svg_svg_element() const { return false; }
virtual bool is_svg_symbol_element() const { return false; }
virtual bool is_svg_use_element() const { return false; } virtual bool is_svg_use_element() const { return false; }
virtual bool is_svg_view_element() const { return false; } virtual bool is_svg_view_element() const { return false; }
virtual bool is_svg_a_element() const { return false; } virtual bool is_svg_a_element() const { return false; }
virtual bool is_svg_g_element() const { return false; }
virtual bool is_svg_foreign_object_element() const { return false; } virtual bool is_svg_foreign_object_element() const { return false; }
bool in_a_document_tree() const; bool in_a_document_tree() const;

View File

@ -108,6 +108,7 @@ public:
virtual bool is_viewport() const { return false; } virtual bool is_viewport() const { return false; }
virtual bool is_svg_box() const { return false; } virtual bool is_svg_box() const { return false; }
virtual bool is_svg_geometry_box() const { return false; } virtual bool is_svg_geometry_box() const { return false; }
virtual bool is_svg_clip_box() const { return false; }
virtual bool is_svg_mask_box() const { return false; } virtual bool is_svg_mask_box() const { return false; }
virtual bool is_svg_svg_box() const { return false; } virtual bool is_svg_svg_box() const { return false; }
virtual bool is_svg_graphics_box() const { return false; } virtual bool is_svg_graphics_box() const { return false; }

View File

@ -12,7 +12,7 @@
namespace Web::Layout { namespace Web::Layout {
class SVGClipBox : public SVGBox { class SVGClipBox final : public SVGBox {
GC_CELL(SVGClipBox, SVGBox); GC_CELL(SVGClipBox, SVGBox);
GC_DECLARE_ALLOCATOR(SVGClipBox); GC_DECLARE_ALLOCATOR(SVGClipBox);
@ -24,6 +24,12 @@ public:
SVG::SVGClipPathElement const& dom_node() const { return as<SVG::SVGClipPathElement>(SVGBox::dom_node()); } SVG::SVGClipPathElement const& dom_node() const { return as<SVG::SVGClipPathElement>(SVGBox::dom_node()); }
virtual GC::Ptr<Painting::Paintable> create_paintable() const override; virtual GC::Ptr<Painting::Paintable> create_paintable() const override;
private:
virtual bool is_svg_clip_box() const final { return true; }
}; };
template<>
inline bool Node::fast_is<SVGClipBox>() const { return is_svg_clip_box(); }
} }

View File

@ -20,9 +20,18 @@ public:
virtual GC::Ptr<Layout::Node> create_layout_node(GC::Ref<CSS::ComputedProperties>) override; virtual GC::Ptr<Layout::Node> create_layout_node(GC::Ref<CSS::ComputedProperties>) override;
private: private:
virtual bool is_svg_g_element() const final { return true; }
SVGGElement(DOM::Document&, DOM::QualifiedName); SVGGElement(DOM::Document&, DOM::QualifiedName);
virtual void initialize(JS::Realm&) override; virtual void initialize(JS::Realm&) override;
}; };
} }
namespace Web::DOM {
template<>
inline bool Node::fast_is<SVG::SVGGElement>() const { return is_svg_g_element(); }
}

View File

@ -23,6 +23,8 @@ public:
virtual void apply_presentational_hints(GC::Ref<CSS::CascadedProperties>) const override; virtual void apply_presentational_hints(GC::Ref<CSS::CascadedProperties>) const override;
private: private:
virtual bool is_svg_symbol_element() const final { return true; }
SVGSymbolElement(DOM::Document&, DOM::QualifiedName); SVGSymbolElement(DOM::Document&, DOM::QualifiedName);
virtual void initialize(JS::Realm&) override; virtual void initialize(JS::Realm&) override;
@ -36,3 +38,10 @@ private:
}; };
} }
namespace Web::DOM {
template<>
inline bool Node::fast_is<SVG::SVGSymbolElement>() const { return is_svg_symbol_element(); }
}