LibWeb: Get rid of PaintableBox::is_viewport()

This function used layout node pointer to check if it's corresponding to
viewport. There is no need for that, since `is_viewport_paintable()`
does exactly the same check without going through layout node.
This commit is contained in:
Aliaksandr Kalenik 2025-10-13 16:58:57 +02:00 committed by Alexander Kalenik
parent 1ffb0ca311
commit 81aeee3fb4
Notes: github-actions[bot] 2025-10-14 09:25:05 +00:00
5 changed files with 9 additions and 11 deletions

View file

@ -1245,7 +1245,7 @@ Vector<CSSPixelRect> Element::get_client_rects() const
Vector<CSSPixelRect> rects; Vector<CSSPixelRect> rects;
if (auto const* paintable_box = this->paintable_box()) { if (auto const* paintable_box = this->paintable_box()) {
transform = Gfx::extract_2d_affine_transform(paintable_box->transform()); transform = Gfx::extract_2d_affine_transform(paintable_box->transform());
for (auto const* containing_block = paintable->containing_block(); !containing_block->is_viewport(); containing_block = containing_block->containing_block()) { for (auto const* containing_block = paintable->containing_block(); !containing_block->is_viewport_paintable(); containing_block = containing_block->containing_block()) {
transform = Gfx::extract_2d_affine_transform(containing_block->transform()).multiply(transform); transform = Gfx::extract_2d_affine_transform(containing_block->transform()).multiply(transform);
} }

View file

@ -167,7 +167,7 @@ void paint_background(DisplayListRecordingContext& context, PaintableBox const&
background_positioning_area.set_location(paintable_box.layout_node().root().navigable()->viewport_scroll_offset()); background_positioning_area.set_location(paintable_box.layout_node().root().navigable()->viewport_scroll_offset());
break; break;
case CSS::BackgroundAttachment::Local: case CSS::BackgroundAttachment::Local:
if (!paintable_box.is_viewport()) { if (!paintable_box.is_viewport_paintable()) {
auto scroll_offset = paintable_box.scroll_offset(); auto scroll_offset = paintable_box.scroll_offset();
background_positioning_area.translate_by(-scroll_offset.x(), -scroll_offset.y()); background_positioning_area.translate_by(-scroll_offset.x(), -scroll_offset.y());
} }

View file

@ -95,7 +95,7 @@ PaintableWithLines::~PaintableWithLines()
CSSPixelPoint PaintableBox::scroll_offset() const CSSPixelPoint PaintableBox::scroll_offset() const
{ {
if (is_viewport()) { if (is_viewport_paintable()) {
auto navigable = document().navigable(); auto navigable = document().navigable();
VERIFY(navigable); VERIFY(navigable);
return navigable->viewport_scroll_offset(); return navigable->viewport_scroll_offset();
@ -361,7 +361,7 @@ bool PaintableBox::could_be_scrolled_by_wheel_event(ScrollDirection direction) c
auto scrollable_overflow_size = direction == ScrollDirection::Horizontal ? scrollable_overflow_rect->width() : scrollable_overflow_rect->height(); auto scrollable_overflow_size = direction == ScrollDirection::Horizontal ? scrollable_overflow_rect->width() : scrollable_overflow_rect->height();
auto scrollport_size = direction == ScrollDirection::Horizontal ? absolute_padding_box_rect().width() : absolute_padding_box_rect().height(); auto scrollport_size = direction == ScrollDirection::Horizontal ? absolute_padding_box_rect().width() : absolute_padding_box_rect().height();
auto overflow_value_allows_scrolling = overflow == CSS::Overflow::Auto || overflow == CSS::Overflow::Scroll; auto overflow_value_allows_scrolling = overflow == CSS::Overflow::Auto || overflow == CSS::Overflow::Scroll;
if ((is_viewport() && overflow != CSS::Overflow::Hidden) || overflow_value_allows_scrolling) if ((is_viewport_paintable() && overflow != CSS::Overflow::Hidden) || overflow_value_allows_scrolling)
return scrollable_overflow_size > scrollport_size; return scrollable_overflow_size > scrollport_size;
return false; return false;
} }
@ -488,7 +488,7 @@ void PaintableBox::paint(DisplayListRecordingContext& context, PaintPhase phase)
} }
} }
if (phase == PaintPhase::Overlay && (g_paint_viewport_scrollbars || !is_viewport()) && computed_values().scrollbar_width() != CSS::ScrollbarWidth::None) { if (phase == PaintPhase::Overlay && (g_paint_viewport_scrollbars || !is_viewport_paintable()) && computed_values().scrollbar_width() != CSS::ScrollbarWidth::None) {
auto scrollbar_colors = computed_values().scrollbar_color(); auto scrollbar_colors = computed_values().scrollbar_color();
if (auto scrollbar_data = compute_scrollbar_data(ScrollDirection::Vertical); scrollbar_data.has_value()) { if (auto scrollbar_data = compute_scrollbar_data(ScrollDirection::Vertical); scrollbar_data.has_value()) {
auto gutter_rect = context.rounded_device_rect(scrollbar_data->gutter_rect).to_type<int>(); auto gutter_rect = context.rounded_device_rect(scrollbar_data->gutter_rect).to_type<int>();
@ -1153,10 +1153,10 @@ void PaintableBox::scroll_to_mouse_position(CSSPixelPoint position)
auto scroll_position_in_pixels = CSSPixels::nearest_value_for(scroll_position * (scrollable_overflow_size - padding_size)); auto scroll_position_in_pixels = CSSPixels::nearest_value_for(scroll_position * (scrollable_overflow_size - padding_size));
// Set the new scroll offset. // Set the new scroll offset.
auto new_scroll_offset = is_viewport() ? document().navigable()->viewport_scroll_offset() : scroll_offset(); auto new_scroll_offset = is_viewport_paintable() ? document().navigable()->viewport_scroll_offset() : scroll_offset();
new_scroll_offset.set_primary_offset_for_orientation(orientation, scroll_position_in_pixels); new_scroll_offset.set_primary_offset_for_orientation(orientation, scroll_position_in_pixels);
if (is_viewport()) if (is_viewport_paintable())
document().navigable()->perform_scroll_of_viewport(new_scroll_offset); document().navigable()->perform_scroll_of_viewport(new_scroll_offset);
else else
(void)set_scroll_offset(new_scroll_offset); (void)set_scroll_offset(new_scroll_offset);
@ -1213,7 +1213,7 @@ TraversalDecision PaintableBox::hit_test(CSSPixelPoint position, HitTestType typ
if (hit_test_scrollbars(position, callback) == TraversalDecision::Break) if (hit_test_scrollbars(position, callback) == TraversalDecision::Break)
return TraversalDecision::Break; return TraversalDecision::Break;
if (is_viewport()) { if (is_viewport_paintable()) {
auto& viewport_paintable = const_cast<ViewportPaintable&>(static_cast<ViewportPaintable const&>(*this)); auto& viewport_paintable = const_cast<ViewportPaintable&>(static_cast<ViewportPaintable const&>(*this));
viewport_paintable.build_stacking_context_tree_if_needed(); viewport_paintable.build_stacking_context_tree_if_needed();
viewport_paintable.document().update_paint_and_hit_testing_properties_if_needed(); viewport_paintable.document().update_paint_and_hit_testing_properties_if_needed();

View file

@ -213,8 +213,6 @@ public:
Optional<CSSPixelRect> get_clip_rect() const; Optional<CSSPixelRect> get_clip_rect() const;
bool is_viewport() const { return layout_node_with_style_and_box_metrics().is_viewport(); }
virtual bool wants_mouse_events() const override; virtual bool wants_mouse_events() const override;
CSSPixelRect transform_box_rect() const; CSSPixelRect transform_box_rect() const;

View file

@ -139,7 +139,7 @@ void ViewportPaintable::assign_clip_frames()
paintable_box.set_own_clip_frame(clip_frame.value()); paintable_box.set_own_clip_frame(clip_frame.value());
} }
} }
for (auto block = paintable.containing_block(); !block->is_viewport(); block = block->containing_block()) { for (auto block = paintable.containing_block(); !block->is_viewport_paintable(); block = block->containing_block()) {
if (auto clip_frame = clip_state.get(block); clip_frame.has_value()) { if (auto clip_frame = clip_state.get(block); clip_frame.has_value()) {
if (paintable.is_paintable_box()) { if (paintable.is_paintable_box()) {
auto& paintable_box = static_cast<PaintableBox&>(paintable); auto& paintable_box = static_cast<PaintableBox&>(paintable);