aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/canvas_state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/canvas_state.rs')
-rw-r--r--components/script/canvas_state.rs50
1 files changed, 36 insertions, 14 deletions
diff --git a/components/script/canvas_state.rs b/components/script/canvas_state.rs
index b426c2a1551..0d5e934a5e4 100644
--- a/components/script/canvas_state.rs
+++ b/components/script/canvas_state.rs
@@ -737,8 +737,13 @@ impl CanvasState {
}
// https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowcolor
- pub fn set_shadow_color(&self, canvas: Option<&HTMLCanvasElement>, value: DOMString) {
- if let Ok(rgba) = parse_color(canvas, &value) {
+ pub fn set_shadow_color(
+ &self,
+ canvas: Option<&HTMLCanvasElement>,
+ value: DOMString,
+ can_gc: CanGc,
+ ) {
+ if let Ok(rgba) = parse_color(canvas, &value, can_gc) {
self.state.borrow_mut().shadow_color = rgba;
self.send_canvas_2d_msg(Canvas2dMsg::SetShadowColor(rgba))
}
@@ -766,10 +771,11 @@ impl CanvasState {
&self,
canvas: Option<&HTMLCanvasElement>,
value: StringOrCanvasGradientOrCanvasPattern,
+ can_gc: CanGc,
) {
match value {
StringOrCanvasGradientOrCanvasPattern::String(string) => {
- if let Ok(rgba) = parse_color(canvas, &string) {
+ if let Ok(rgba) = parse_color(canvas, &string, can_gc) {
self.state.borrow_mut().stroke_style = CanvasFillOrStrokeStyle::Color(rgba);
}
},
@@ -809,10 +815,11 @@ impl CanvasState {
&self,
canvas: Option<&HTMLCanvasElement>,
value: StringOrCanvasGradientOrCanvasPattern,
+ can_gc: CanGc,
) {
match value {
StringOrCanvasGradientOrCanvasPattern::String(string) => {
- if let Ok(rgba) = parse_color(canvas, &string) {
+ if let Ok(rgba) = parse_color(canvas, &string, can_gc) {
self.state.borrow_mut().fill_style = CanvasFillOrStrokeStyle::Color(rgba);
}
},
@@ -1002,6 +1009,7 @@ impl CanvasState {
x: f64,
y: f64,
max_width: Option<f64>,
+ can_gc: CanGc,
) {
if !x.is_finite() || !y.is_finite() {
return;
@@ -1010,7 +1018,11 @@ impl CanvasState {
return;
}
if self.state.borrow().font_style.is_none() {
- self.set_font(canvas, CanvasContextState::DEFAULT_FONT_STYLE.into())
+ self.set_font(
+ canvas,
+ CanvasContextState::DEFAULT_FONT_STYLE.into(),
+ can_gc,
+ )
}
let is_rtl = match self.state.borrow().direction {
@@ -1036,9 +1048,14 @@ impl CanvasState {
global: &GlobalScope,
canvas: Option<&HTMLCanvasElement>,
text: DOMString,
+ can_gc: CanGc,
) -> DomRoot<TextMetrics> {
if self.state.borrow().font_style.is_none() {
- self.set_font(canvas, CanvasContextState::DEFAULT_FONT_STYLE.into());
+ self.set_font(
+ canvas,
+ CanvasContextState::DEFAULT_FONT_STYLE.into(),
+ can_gc,
+ );
}
let (sender, receiver) = ipc::channel::<CanvasTextMetrics>().unwrap();
@@ -1063,17 +1080,18 @@ impl CanvasState {
}
// https://html.spec.whatwg.org/multipage/#dom-context-2d-font
- pub fn set_font(&self, canvas: Option<&HTMLCanvasElement>, value: DOMString) {
+ pub fn set_font(&self, canvas: Option<&HTMLCanvasElement>, value: DOMString, can_gc: CanGc) {
let canvas = match canvas {
Some(element) => element,
None => return, // offscreen canvas doesn't have a placeholder canvas
};
let node = canvas.upcast::<Node>();
let window = window_from_node(canvas);
- let resolved_font_style = match window.resolved_font_style_query(node, value.to_string()) {
- Some(value) => value,
- None => return, // syntax error
- };
+ let resolved_font_style =
+ match window.resolved_font_style_query(node, value.to_string(), can_gc) {
+ Some(value) => value,
+ None => return, // syntax error
+ };
self.state.borrow_mut().font_style = Some((*resolved_font_style).clone());
self.send_canvas_2d_msg(Canvas2dMsg::SetFont((*resolved_font_style).clone()));
}
@@ -1717,7 +1735,11 @@ impl CanvasState {
}
}
-pub fn parse_color(canvas: Option<&HTMLCanvasElement>, string: &str) -> Result<AbsoluteColor, ()> {
+pub fn parse_color(
+ canvas: Option<&HTMLCanvasElement>,
+ string: &str,
+ can_gc: CanGc,
+) -> Result<AbsoluteColor, ()> {
let mut input = ParserInput::new(string);
let mut parser = Parser::new(&mut input);
let url = Url::parse("about:blank").unwrap().into();
@@ -1745,8 +1767,8 @@ pub fn parse_color(canvas: Option<&HTMLCanvasElement>, string: &str) -> Result<A
None => AbsoluteColor::BLACK,
Some(canvas) => {
let canvas_element = canvas.upcast::<Element>();
- match canvas_element.style() {
- Some(ref s) if canvas_element.has_css_layout_box() => {
+ match canvas_element.style(can_gc) {
+ Some(ref s) if canvas_element.has_css_layout_box(can_gc) => {
s.get_inherited_text().color
},
_ => AbsoluteColor::BLACK,