aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/canvas_state.rs
diff options
context:
space:
mode:
authorUtsav Oza <utsavoza96@gmail.com>2020-06-03 15:47:44 +0530
committerUtsav Oza <utsavoza96@gmail.com>2020-06-10 22:10:44 +0530
commit15fd256302cc4401e0c4e2d154d473bfaa16223d (patch)
treed783cb77e558a34b9c67d06dc2def6a6341b501d /components/script/canvas_state.rs
parent5493424d9aacbdf1066e2e2c48ccbc2a98752509 (diff)
downloadservo-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.rs35
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