mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 11:22:45 +00:00 
			
		
		
		
	LibWeb: Implement CanvasRenderingContext2D.createPattern()
This is a first pass at implementing CRC2D.createPattern() and the associated CanvasPattern object. This implementation only works for a few of the required image sources [like CRC2D.drawImage()], and does not yet support transforms. Other than that it supports everything else (which is mainly the various repeat modes).
This commit is contained in:
		
							parent
							
								
									0c313c586b
								
							
						
					
					
						commit
						f74e2da875
					
				
					 8 changed files with 229 additions and 8 deletions
				
			
		
							
								
								
									
										60
									
								
								Userland/Libraries/LibWeb/HTML/CanvasPattern.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Userland/Libraries/LibWeb/HTML/CanvasPattern.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2023, MacDue <macdue@dueutil.tech> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <LibGfx/PaintStyle.h> | ||||
| #include <LibWeb/Bindings/PlatformObject.h> | ||||
| #include <LibWeb/HTML/Canvas/CanvasDrawImage.h> | ||||
| 
 | ||||
| namespace Web::HTML { | ||||
| 
 | ||||
| class CanvasPatternPaintStyle final : public Gfx::PaintStyle { | ||||
| public: | ||||
|     enum class Repetition { | ||||
|         Repeat, | ||||
|         RepeatX, | ||||
|         RepeatY, | ||||
|         NoRepeat | ||||
|     }; | ||||
| 
 | ||||
|     static NonnullRefPtr<CanvasPatternPaintStyle> create(Gfx::Bitmap const& bitmap, Repetition repetition) | ||||
|     { | ||||
|         return adopt_ref(*new CanvasPatternPaintStyle(bitmap, repetition)); | ||||
|     } | ||||
| 
 | ||||
|     virtual void paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const override; | ||||
| 
 | ||||
| private: | ||||
|     CanvasPatternPaintStyle(Gfx::Bitmap const& bitmap, Repetition repetition) | ||||
|         : m_bitmap(bitmap) | ||||
|         , m_repetition(repetition) | ||||
|     { | ||||
|     } | ||||
| 
 | ||||
|     NonnullRefPtr<Gfx::Bitmap const> m_bitmap; | ||||
|     Repetition m_repetition { Repetition::Repeat }; | ||||
| }; | ||||
| 
 | ||||
| class CanvasPattern final : public Bindings::PlatformObject { | ||||
|     WEB_PLATFORM_OBJECT(CanvasPattern, Bindings::PlatformObject); | ||||
| 
 | ||||
| public: | ||||
|     static WebIDL::ExceptionOr<JS::GCPtr<CanvasPattern>> create(JS::Realm&, CanvasImageSource const& image, StringView repetition); | ||||
| 
 | ||||
|     ~CanvasPattern(); | ||||
| 
 | ||||
|     NonnullRefPtr<Gfx::PaintStyle> to_gfx_paint_style() { return m_pattern; } | ||||
| 
 | ||||
| private: | ||||
|     CanvasPattern(JS::Realm&, CanvasPatternPaintStyle&); | ||||
| 
 | ||||
|     virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; | ||||
| 
 | ||||
|     NonnullRefPtr<CanvasPatternPaintStyle> m_pattern; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 MacDue
						MacDue