diff options
author | Utsav Oza <utsavoza96@gmail.com> | 2020-05-28 00:28:42 +0530 |
---|---|---|
committer | Utsav Oza <utsavoza96@gmail.com> | 2020-06-10 22:10:42 +0530 |
commit | 7883718c125f2580490254efdf0aac952b50ce3d (patch) | |
tree | 866d431004f1e925d5d23919f4d6276f5fd92118 /components/script | |
parent | f161ab8e57b0149b368f892f11c83d953c55dd5a (diff) | |
download | servo-7883718c125f2580490254efdf0aac952b50ce3d.tar.gz servo-7883718c125f2580490254efdf0aac952b50ce3d.zip |
Query layout to resolve canvas font property value
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/canvas_state.rs | 10 | ||||
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 11 | ||||
-rw-r--r-- | components/script/dom/offscreencanvasrenderingcontext2d.rs | 11 | ||||
-rw-r--r-- | components/script/dom/webidls/CanvasRenderingContext2D.webidl | 2 | ||||
-rw-r--r-- | components/script/dom/window.rs | 19 |
5 files changed, 51 insertions, 2 deletions
diff --git a/components/script/canvas_state.rs b/components/script/canvas_state.rs index dac2bb04924..ab2f93b5baa 100644 --- a/components/script/canvas_state.rs +++ b/components/script/canvas_state.rs @@ -1006,6 +1006,16 @@ impl CanvasState { ) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-font + pub fn set_font(&self, _canvas: Option<&HTMLCanvasElement>, _value: DOMString) { + unimplemented!() + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-font + pub fn font(&self) -> DOMString { + unimplemented!() + } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-linewidth pub fn line_width(&self) -> f64 { self.state.borrow().line_width diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 4820a3bbfd7..3e0df6bb4b9 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -297,6 +297,17 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D { self.canvas_state.measure_text(&self.global(), text) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-font + fn Font(&self) -> DOMString { + self.canvas_state.font() + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-font + fn SetFont(&self, value: DOMString) { + self.canvas_state + .set_font(self.canvas.as_ref().map(|c| &**c), value) + } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage fn DrawImage(&self, image: CanvasImageSource, dx: f64, dy: f64) -> ErrorResult { self.canvas_state diff --git a/components/script/dom/offscreencanvasrenderingcontext2d.rs b/components/script/dom/offscreencanvasrenderingcontext2d.rs index a3a873250f1..d36785d71f6 100644 --- a/components/script/dom/offscreencanvasrenderingcontext2d.rs +++ b/components/script/dom/offscreencanvasrenderingcontext2d.rs @@ -257,6 +257,17 @@ impl OffscreenCanvasRenderingContext2DMethods for OffscreenCanvasRenderingContex self.canvas_state.measure_text(&self.global(), text) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-font + fn Font(&self) -> DOMString { + self.canvas_state.font() + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-font + fn SetFont(&self, value: DOMString) { + self.canvas_state + .set_font(self.htmlcanvas.as_ref().map(|c| &**c), value) + } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-linewidth fn LineWidth(&self) -> f64 { self.canvas_state.line_width() diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl index af88cfe9281..2267984ce2f 100644 --- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl +++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl @@ -211,7 +211,7 @@ interface mixin CanvasPathDrawingStyles { [Exposed=(PaintWorklet, Window, Worker)] interface mixin CanvasTextDrawingStyles { // text - //attribute DOMString font; // (default 10px sans-serif) + attribute DOMString font; // (default 10px sans-serif) //attribute CanvasTextAlign textAlign; // "start", "end", "left", "right", "center" (default: "start") //attribute CanvasTextBaseline textBaseline; // "top", "hanging", "middle", "alphabetic", // "ideographic", "bottom" (default: "alphabetic") diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index c050579918e..6209fb72d2f 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -118,6 +118,7 @@ use script_traits::{ }; use script_traits::{TimerSchedulerMsg, WebrenderIpcSender, WindowSizeData, WindowSizeType}; use selectors::attr::CaseSensitivity; +use servo_arc::Arc as ServoArc; use servo_geometry::{f32_rect_to_au_rect, MaxRect}; use servo_url::{ImmutableOrigin, MutableOrigin, ServoUrl}; use std::borrow::Cow; @@ -136,7 +137,7 @@ use style::dom::OpaqueNode; use style::error_reporting::{ContextualParseError, ParseErrorReporter}; use style::media_queries; use style::parser::ParserContext as CssParserContext; -use style::properties::PropertyId; +use style::properties::{ComputedValues, PropertyId, ShorthandId}; use style::selector_parser::PseudoElement; use style::str::HTML_SPACE_CHARACTERS; use style::stylesheets::CssRuleType; @@ -1847,6 +1848,21 @@ impl Window { ) } + pub fn parse_font_query(&self, node: &Node, value: String) -> Option<ServoArc<ComputedValues>> { + if !node.is_connected() { + return None; + } + let id = PropertyId::Shorthand(ShorthandId::Font); + if !self.layout_reflow(QueryMsg::ParseFontQuery( + node.to_trusted_node_address(), + id, + value, + )) { + return None; + } + self.layout_rpc.parsed_font() + } + pub fn layout(&self) -> &dyn LayoutRPC { &*self.layout_rpc } @@ -2504,6 +2520,7 @@ fn debug_reflow_events(id: PipelineId, reflow_goal: &ReflowGoal, reason: &Reflow &QueryMsg::StyleQuery => "\tStyleQuery", &QueryMsg::TextIndexQuery(..) => "\tTextIndexQuery", &QueryMsg::ElementInnerTextQuery(_) => "\tElementInnerTextQuery", + &QueryMsg::ParseFontQuery(..) => "\nParseFontQuery", &QueryMsg::InnerWindowDimensionsQuery(_) => "\tInnerWindowDimensionsQuery", }, }; |