diff --git a/Libraries/LibWeb/DOM/HTMLImageElement.cpp b/Libraries/LibWeb/DOM/HTMLImageElement.cpp
index 91d48622d1..52d9601d17 100644
--- a/Libraries/LibWeb/DOM/HTMLImageElement.cpp
+++ b/Libraries/LibWeb/DOM/HTMLImageElement.cpp
@@ -87,9 +87,4 @@ const Gfx::Bitmap* HTMLImageElement::bitmap() const
return m_image_loader.bitmap();
}
-void HTMLImageElement::set_visible_in_viewport(Badge, bool visible_in_viewport)
-{
- m_image_loader.set_visible_in_viewport(visible_in_viewport);
-}
-
}
diff --git a/Libraries/LibWeb/DOM/HTMLImageElement.h b/Libraries/LibWeb/DOM/HTMLImageElement.h
index aa14947f9e..a981bb432c 100644
--- a/Libraries/LibWeb/DOM/HTMLImageElement.h
+++ b/Libraries/LibWeb/DOM/HTMLImageElement.h
@@ -51,8 +51,6 @@ public:
const Gfx::Bitmap* bitmap() const;
const Gfx::ImageDecoder* image_decoder() const;
- void set_visible_in_viewport(Badge, bool);
-
private:
void animate();
diff --git a/Libraries/LibWeb/Layout/LayoutDocument.cpp b/Libraries/LibWeb/Layout/LayoutDocument.cpp
index 75c5eace8e..e49807e82f 100644
--- a/Libraries/LibWeb/Layout/LayoutDocument.cpp
+++ b/Libraries/LibWeb/Layout/LayoutDocument.cpp
@@ -71,8 +71,7 @@ void LayoutDocument::did_set_viewport_rect(Badge, const Gfx::IntRect& a_v
{
Gfx::FloatRect viewport_rect(a_viewport_rect.x(), a_viewport_rect.y(), a_viewport_rect.width(), a_viewport_rect.height());
for_each_in_subtree_of_type([&](auto& layout_image) {
- if (is(layout_image.node()))
- const_cast(to(layout_image.node())).set_visible_in_viewport({}, viewport_rect.intersects(layout_image.absolute_rect()));
+ const_cast(layout_image).set_visible_in_viewport({}, viewport_rect.intersects(layout_image.absolute_rect()));
return IterationDecision::Continue;
});
}
diff --git a/Libraries/LibWeb/Layout/LayoutImage.cpp b/Libraries/LibWeb/Layout/LayoutImage.cpp
index c4200faa9e..3e27608574 100644
--- a/Libraries/LibWeb/Layout/LayoutImage.cpp
+++ b/Libraries/LibWeb/Layout/LayoutImage.cpp
@@ -108,4 +108,9 @@ bool LayoutImage::renders_as_alt_text() const
return false;
}
+void LayoutImage::set_visible_in_viewport(Badge, bool visible_in_viewport)
+{
+ m_image_loader.set_visible_in_viewport(visible_in_viewport);
+}
+
}
diff --git a/Libraries/LibWeb/Layout/LayoutImage.h b/Libraries/LibWeb/Layout/LayoutImage.h
index a972d51167..f7d59dac72 100644
--- a/Libraries/LibWeb/Layout/LayoutImage.h
+++ b/Libraries/LibWeb/Layout/LayoutImage.h
@@ -45,6 +45,8 @@ public:
bool renders_as_alt_text() const;
+ void set_visible_in_viewport(Badge, bool);
+
private:
virtual const char* class_name() const override { return "LayoutImage"; }
virtual bool is_image() const override { return true; }
diff --git a/Libraries/LibWeb/Loader/ImageLoader.cpp b/Libraries/LibWeb/Loader/ImageLoader.cpp
index e3e3502805..a6b3ecae58 100644
--- a/Libraries/LibWeb/Loader/ImageLoader.cpp
+++ b/Libraries/LibWeb/Loader/ImageLoader.cpp
@@ -44,7 +44,7 @@ void ImageLoader::load(const URL& url)
set_resource(ResourceLoader::the().load_resource(Resource::Type::Image, request));
}
-void ImageLoader::set_visible_in_viewport(bool visible_in_viewport)
+void ImageLoader::set_visible_in_viewport(bool visible_in_viewport) const
{
if (m_visible_in_viewport == visible_in_viewport)
return;
@@ -54,7 +54,7 @@ void ImageLoader::set_visible_in_viewport(bool visible_in_viewport)
// the whole document, updating "is visible in viewport" flags, and this could lead
// to the same bitmap being marked volatile back and forth unnecessarily.
if (resource())
- resource()->update_volatility();
+ const_cast(resource())->update_volatility();
}
void ImageLoader::resource_did_load()
diff --git a/Libraries/LibWeb/Loader/ImageLoader.h b/Libraries/LibWeb/Loader/ImageLoader.h
index 14c8cd3288..71cd48ff64 100644
--- a/Libraries/LibWeb/Loader/ImageLoader.h
+++ b/Libraries/LibWeb/Loader/ImageLoader.h
@@ -41,7 +41,7 @@ public:
const Gfx::Bitmap* bitmap() const;
const Gfx::ImageDecoder* image_decoder() const;
- void set_visible_in_viewport(bool);
+ void set_visible_in_viewport(bool) const;
Function on_load;
Function on_fail;
@@ -57,7 +57,7 @@ private:
void animate();
RefPtr m_decoder;
- bool m_visible_in_viewport { false };
+ mutable bool m_visible_in_viewport { false };
size_t m_current_frame_index { 0 };
size_t m_loops_completed { 0 };