mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 07:42:43 +00:00 
			
		
		
		
	 81590b1804
			
		
	
	
		81590b1804
		
	
	
	
	
		
			
			Apparently it's not only replaced elements that can have intrinsic sizes, so let's move this concept from ReplacedBox to Box. To avoid bloating Box, we make the accessors virtual.
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include <LibGfx/Painter.h>
 | |
| #include <LibWeb/Layout/CanvasBox.h>
 | |
| 
 | |
| namespace Web::Layout {
 | |
| 
 | |
| CanvasBox::CanvasBox(DOM::Document& document, HTML::HTMLCanvasElement& element, NonnullRefPtr<CSS::StyleProperties> style)
 | |
|     : ReplacedBox(document, element, move(style))
 | |
| {
 | |
| }
 | |
| 
 | |
| CanvasBox::~CanvasBox()
 | |
| {
 | |
| }
 | |
| 
 | |
| void CanvasBox::prepare_for_replaced_layout()
 | |
| {
 | |
|     set_intrinsic_width(dom_node().width());
 | |
|     set_intrinsic_height(dom_node().height());
 | |
| }
 | |
| 
 | |
| void CanvasBox::paint(PaintContext& context, PaintPhase phase)
 | |
| {
 | |
|     if (!is_visible())
 | |
|         return;
 | |
| 
 | |
|     ReplacedBox::paint(context, phase);
 | |
| 
 | |
|     if (phase == PaintPhase::Foreground) {
 | |
|         // FIXME: This should be done at a different level. Also rect() does not include padding etc!
 | |
|         if (!context.viewport_rect().intersects(enclosing_int_rect(absolute_rect())))
 | |
|             return;
 | |
| 
 | |
|         if (dom_node().bitmap())
 | |
|             context.painter().draw_scaled_bitmap(rounded_int_rect(absolute_rect()), *dom_node().bitmap(), dom_node().bitmap()->rect(), 1.0f, Gfx::Painter::ScalingMode::BilinearBlend);
 | |
|     }
 | |
| }
 | |
| 
 | |
| }
 |