forked from mirrors/gecko-dev
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))
|
|
}
|
|
}
|