From 6f5a0bd5de9310785b659f6b218f7ff709690d15 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 26 Feb 2024 09:38:52 +0100 Subject: [PATCH] LibWeb: Save image provider in ImagePaintable Refactoring towards making paintable be independant from layout nodes. No behaviour change intended. --- Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp | 11 +++++++++-- Userland/Libraries/LibWeb/Painting/ImagePaintable.h | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp index 063d88921d..e2aa43c5ce 100644 --- a/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp @@ -28,10 +28,17 @@ ImagePaintable::ImagePaintable(Layout::ImageBox const& layout_box, String alt_te : PaintableBox(layout_box) , m_renders_as_alt_text(layout_box.renders_as_alt_text()) , m_alt_text(move(alt_text)) + , m_image_provider(layout_box.image_provider()) { const_cast(layout_box.document()).register_viewport_client(*this); } +void ImagePaintable::visit_edges(JS::Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_image_provider.to_html_element()); +} + void ImagePaintable::finalize() { Base::finalize(); @@ -59,7 +66,7 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const auto enclosing_rect = context.enclosing_device_rect(absolute_rect()).to_type(); context.recording_painter().paint_frame(enclosing_rect, context.palette(), Gfx::FrameStyle::SunkenContainer); context.recording_painter().draw_text(enclosing_rect, m_alt_text, Platform::FontPlugin::the().default_font(), Gfx::TextAlignment::Center, computed_values().color(), Gfx::TextElision::Right); - } else if (auto bitmap = layout_box().image_provider().current_image_bitmap(image_rect.size().to_type())) { + } else if (auto bitmap = m_image_provider.current_image_bitmap(image_rect.size().to_type())) { ScopedCornerRadiusClip corner_clip { context, image_rect, normalized_border_radii_data(ShrinkRadiiForBorders::Yes) }; auto image_int_rect = image_rect.to_type(); auto bitmap_rect = bitmap->rect(); @@ -180,7 +187,7 @@ void ImagePaintable::paint(PaintContext& context, PaintPhase phase) const void ImagePaintable::did_set_viewport_rect(CSSPixelRect const& viewport_rect) { - const_cast(layout_box().image_provider()).set_visible_in_viewport(viewport_rect.intersects(absolute_rect())); + const_cast(m_image_provider).set_visible_in_viewport(viewport_rect.intersects(absolute_rect())); } } diff --git a/Userland/Libraries/LibWeb/Painting/ImagePaintable.h b/Userland/Libraries/LibWeb/Painting/ImagePaintable.h index d7956d735f..5dc12a1da8 100644 --- a/Userland/Libraries/LibWeb/Painting/ImagePaintable.h +++ b/Userland/Libraries/LibWeb/Painting/ImagePaintable.h @@ -25,6 +25,7 @@ public: private: // ^JS::Cell + virtual void visit_edges(Visitor&) override; virtual void finalize() override; // ^Document::ViewportClient @@ -34,6 +35,8 @@ private: bool m_renders_as_alt_text { false }; String m_alt_text; + + Layout::ImageProvider const& m_image_provider; }; }