mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 21:22:46 +00:00 
			
		
		
		
	 f3d57e1157
			
		
	
	
		f3d57e1157
		
	
	
	
	
		
			
			Since handling overflow: hidden in PaintableBox::before_children_paint while following paint traversal order can't result in correctly computed clip rectangle for elements that create their own stacking context (because before_children_paint is called only for parent but overflow: hidden can be set somewhere deeper but not in direct ancestor), here introduced new function PaintableBox::clip_rect() that computes clip rectangle by looking into containing block. should_clip_overflow flag that disables clip for absolutely positioned elements in before_children_paint and after_children_paint is removed because after changing clip rectangle to be computed from not parent but containing block it is not needed anymore (absolutely positioned item is clipped if it's containing block has hidden overflow)
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include <LibWeb/Layout/ImageBox.h>
 | |
| #include <LibWeb/Painting/SVGGraphicsPaintable.h>
 | |
| 
 | |
| namespace Web::Painting {
 | |
| 
 | |
| SVGGraphicsPaintable::SVGGraphicsPaintable(Layout::SVGGraphicsBox const& layout_box)
 | |
|     : SVGPaintable(layout_box)
 | |
| {
 | |
| }
 | |
| 
 | |
| Layout::SVGGraphicsBox const& SVGGraphicsPaintable::layout_box() const
 | |
| {
 | |
|     return static_cast<Layout::SVGGraphicsBox const&>(layout_node());
 | |
| }
 | |
| 
 | |
| void SVGGraphicsPaintable::before_children_paint(PaintContext& context, PaintPhase phase) const
 | |
| {
 | |
|     SVGPaintable::before_children_paint(context, phase);
 | |
|     if (phase != PaintPhase::Foreground)
 | |
|         return;
 | |
| 
 | |
|     auto& graphics_element = layout_box().dom_node();
 | |
| 
 | |
|     if (graphics_element.fill_color().has_value())
 | |
|         context.svg_context().set_fill_color(graphics_element.fill_color().value());
 | |
|     if (graphics_element.stroke_color().has_value())
 | |
|         context.svg_context().set_stroke_color(graphics_element.stroke_color().value());
 | |
|     if (graphics_element.stroke_width().has_value())
 | |
|         context.svg_context().set_stroke_width(graphics_element.stroke_width().value());
 | |
| }
 | |
| 
 | |
| }
 |