forked from mirrors/gecko-dev
		
	 330708cf53
			
		
	
	
		330708cf53
		
	
	
	
	
		
			
			The resulting failures are because we aren't doing origin-comparison correctly (I bet the image ends up with an empty hostname or something). We could probably hack around that if we care, but it should just go away when we get the origin checking right. r? @jdm Source-Repo: https://github.com/servo/servo Source-Revision: 82e73e7a5f5bc87aec4797c7a60b8ac160de134c
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| use canvas_traits::{FillOrStrokeStyle, RepetitionStyle, SurfaceStyle};
 | |
| use dom::bindings::codegen::Bindings::CanvasPatternBinding;
 | |
| use dom::bindings::global::GlobalRef;
 | |
| use dom::bindings::js::Root;
 | |
| use dom::bindings::reflector::{Reflector, reflect_dom_object};
 | |
| use dom::canvasgradient::ToFillOrStrokeStyle;
 | |
| use euclid::size::Size2D;
 | |
| 
 | |
| // https://html.spec.whatwg.org/multipage/#canvaspattern
 | |
| #[dom_struct]
 | |
| pub struct CanvasPattern {
 | |
|     reflector_: Reflector,
 | |
|     surface_data: Vec<u8>,
 | |
|     surface_size: Size2D<i32>,
 | |
|     repeat_x: bool,
 | |
|     repeat_y: bool,
 | |
|     origin_clean: bool,
 | |
| }
 | |
| 
 | |
| impl CanvasPattern {
 | |
|     fn new_inherited(surface_data: Vec<u8>,
 | |
|                      surface_size: Size2D<i32>,
 | |
|                      repeat: RepetitionStyle,
 | |
|                      origin_clean: bool)
 | |
|                      -> CanvasPattern {
 | |
|         let (x, y) = match repeat {
 | |
|             RepetitionStyle::Repeat => (true, true),
 | |
|             RepetitionStyle::RepeatX => (true, false),
 | |
|             RepetitionStyle::RepeatY => (false, true),
 | |
|             RepetitionStyle::NoRepeat => (false, false),
 | |
|         };
 | |
| 
 | |
|         CanvasPattern {
 | |
|             reflector_: Reflector::new(),
 | |
|             surface_data: surface_data,
 | |
|             surface_size: surface_size,
 | |
|             repeat_x: x,
 | |
|             repeat_y: y,
 | |
|             origin_clean: origin_clean,
 | |
|         }
 | |
|     }
 | |
|     pub fn new(global: GlobalRef,
 | |
|                surface_data: Vec<u8>,
 | |
|                surface_size: Size2D<i32>,
 | |
|                repeat: RepetitionStyle,
 | |
|                origin_clean: bool)
 | |
|                -> Root<CanvasPattern> {
 | |
|         reflect_dom_object(box CanvasPattern::new_inherited(surface_data, surface_size,
 | |
|                                                             repeat, origin_clean),
 | |
|                            global,
 | |
|                            CanvasPatternBinding::Wrap)
 | |
|     }
 | |
|     pub fn origin_is_clean(&self) -> bool {
 | |
|       self.origin_clean
 | |
|     }
 | |
| }
 | |
| 
 | |
| impl<'a> ToFillOrStrokeStyle for &'a CanvasPattern {
 | |
|     fn to_fill_or_stroke_style(self) -> FillOrStrokeStyle {
 | |
|         FillOrStrokeStyle::Surface(SurfaceStyle::new(self.surface_data.clone(),
 | |
|                                                      self.surface_size,
 | |
|                                                      self.repeat_x,
 | |
|                                                      self.repeat_y))
 | |
|     }
 | |
| }
 |