diff options
author | Utsav Oza <utsavoza96@gmail.com> | 2020-06-03 15:47:44 +0530 |
---|---|---|
committer | Utsav Oza <utsavoza96@gmail.com> | 2020-06-10 22:10:44 +0530 |
commit | 15fd256302cc4401e0c4e2d154d473bfaa16223d (patch) | |
tree | d783cb77e558a34b9c67d06dc2def6a6341b501d /components/script/canvas_state.rs | |
parent | 5493424d9aacbdf1066e2e2c48ccbc2a98752509 (diff) | |
download | servo-15fd256302cc4401e0c4e2d154d473bfaa16223d.tar.gz servo-15fd256302cc4401e0c4e2d154d473bfaa16223d.zip |
Store resolved font style in canvas context state
Diffstat (limited to 'components/script/canvas_state.rs')
-rw-r--r-- | components/script/canvas_state.rs | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/components/script/canvas_state.rs b/components/script/canvas_state.rs index 5550ff10fc3..dc40ad3203d 100644 --- a/components/script/canvas_state.rs +++ b/components/script/canvas_state.rs @@ -49,6 +49,7 @@ use std::cell::Cell; use std::fmt; use std::str::FromStr; use std::sync::Arc; +use style::properties::style_structs::Font; #[unrooted_must_root_lint::must_root] #[derive(Clone, JSTraceable, MallocSizeOf)] @@ -86,6 +87,7 @@ pub(crate) struct CanvasContextState { shadow_offset_y: f64, shadow_blur: f64, shadow_color: RGBA, + font_style: Option<Font>, } impl CanvasContextState { @@ -106,6 +108,7 @@ impl CanvasContextState { shadow_offset_y: 0.0, shadow_blur: 0.0, shadow_color: RGBA::transparent(), + font_style: None, } } } @@ -987,9 +990,18 @@ impl CanvasState { } // https://html.spec.whatwg.org/multipage/#dom-context-2d-filltext - pub fn fill_text(&self, text: DOMString, x: f64, y: f64, max_width: Option<f64>) { - let is_max_width_finite = max_width.map_or(true, |max_width| max_width.is_finite()); - if !(x.is_finite() && y.is_finite() && is_max_width_finite) { + pub fn fill_text( + &self, + _canvas: Option<&HTMLCanvasElement>, + text: DOMString, + x: f64, + y: f64, + max_width: Option<f64>, + ) { + if !x.is_finite() || !y.is_finite() { + return; + } + if max_width.map_or(false, |max_width| !max_width.is_finite() || max_width <= 0.) { return; } @@ -1008,14 +1020,17 @@ impl CanvasState { // https://html.spec.whatwg.org/multipage/#dom-context-2d-font pub fn set_font(&self, canvas: Option<&HTMLCanvasElement>, value: DOMString) { - let _resolved_font = if let Some(element) = canvas { - let node = element.upcast::<Node>(); - let window = window_from_node(&*node); - window.parse_font_query(&node, value.to_string()) - } else { - None + let canvas = match canvas { + Some(element) => element, + None => return, }; - unimplemented!() + let node = canvas.upcast::<Node>(); + let window = window_from_node(&*canvas); + let font_style = match window.resolved_font_style_query(&node, value.to_string()) { + Some(value) => value, + None => return, // syntax error + }; + self.state.borrow_mut().font_style = Some((*font_style).clone()); } // https://html.spec.whatwg.org/multipage/#dom-context-2d-font |