mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
LibWeb: Compensate scroll offset translation before clip rect is applied
Position where box clip rect is applied should not be affected by current scroll offset.
This commit is contained in:
parent
cdf8b9e943
commit
1b63095271
2 changed files with 9 additions and 0 deletions
|
@ -59,6 +59,9 @@ public:
|
||||||
|
|
||||||
double device_pixels_per_css_pixel() const { return m_device_pixels_per_css_pixel; }
|
double device_pixels_per_css_pixel() const { return m_device_pixels_per_css_pixel; }
|
||||||
|
|
||||||
|
CSSPixelPoint scroll_offset() const { return m_scroll_offset; }
|
||||||
|
void translate_scroll_offset_by(CSSPixelPoint offset) { m_scroll_offset.translate_by(offset); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Gfx::Painter& m_painter;
|
Gfx::Painter& m_painter;
|
||||||
Palette m_palette;
|
Palette m_palette;
|
||||||
|
@ -66,6 +69,7 @@ private:
|
||||||
DevicePixelRect m_device_viewport_rect;
|
DevicePixelRect m_device_viewport_rect;
|
||||||
bool m_should_show_line_box_borders { false };
|
bool m_should_show_line_box_borders { false };
|
||||||
bool m_focus { false };
|
bool m_focus { false };
|
||||||
|
CSSPixelPoint m_scroll_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -432,12 +432,14 @@ Optional<CSSPixelRect> PaintableBox::calculate_overflow_clipped_rect() const
|
||||||
void PaintableBox::before_children_paint(PaintContext& context, PaintPhase) const
|
void PaintableBox::before_children_paint(PaintContext& context, PaintPhase) const
|
||||||
{
|
{
|
||||||
auto scroll_offset = -this->scroll_offset();
|
auto scroll_offset = -this->scroll_offset();
|
||||||
|
context.translate_scroll_offset_by(scroll_offset);
|
||||||
context.painter().translate({ context.enclosing_device_pixels(scroll_offset.x()), context.enclosing_device_pixels(scroll_offset.y()) });
|
context.painter().translate({ context.enclosing_device_pixels(scroll_offset.x()), context.enclosing_device_pixels(scroll_offset.y()) });
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaintableBox::after_children_paint(PaintContext& context, PaintPhase) const
|
void PaintableBox::after_children_paint(PaintContext& context, PaintPhase) const
|
||||||
{
|
{
|
||||||
auto scroll_offset = this->scroll_offset();
|
auto scroll_offset = this->scroll_offset();
|
||||||
|
context.translate_scroll_offset_by(scroll_offset);
|
||||||
context.painter().translate({ context.enclosing_device_pixels(scroll_offset.x()), context.enclosing_device_pixels(scroll_offset.y()) });
|
context.painter().translate({ context.enclosing_device_pixels(scroll_offset.x()), context.enclosing_device_pixels(scroll_offset.y()) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,7 +458,10 @@ void PaintableBox::apply_clip_overflow_rect(PaintContext& context, PaintPhase ph
|
||||||
|
|
||||||
if (!m_clipping_overflow) {
|
if (!m_clipping_overflow) {
|
||||||
context.painter().save();
|
context.painter().save();
|
||||||
|
auto scroll_offset = context.scroll_offset();
|
||||||
|
context.painter().translate({ -context.enclosing_device_pixels(scroll_offset.x()), -context.enclosing_device_pixels(scroll_offset.y()) });
|
||||||
context.painter().add_clip_rect(context.enclosing_device_rect(*clip_rect).to_type<int>());
|
context.painter().add_clip_rect(context.enclosing_device_rect(*clip_rect).to_type<int>());
|
||||||
|
context.painter().translate({ context.enclosing_device_pixels(scroll_offset.x()), context.enclosing_device_pixels(scroll_offset.y()) });
|
||||||
m_clipping_overflow = true;
|
m_clipping_overflow = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue