diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 18 | ||||
-rw-r--r-- | components/script/dom/element.rs | 4 |
2 files changed, 7 insertions, 15 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 93d4981d2bb..1e2278e81ca 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -9,7 +9,6 @@ use canvas_traits::canvas::{RadialGradientStyle, RepetitionStyle, byte_swap_and_ use cssparser::{Parser, ParserInput, RGBA}; use cssparser::Color as CSSColor; use dom::bindings::cell::DomRefCell; -use dom::bindings::codegen::Bindings::CSSStyleDeclarationBinding::CSSStyleDeclarationMethods; use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding; use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasFillRule; use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasImageSource; @@ -17,7 +16,6 @@ use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasLin use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasLineJoin; use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasRenderingContext2DMethods; use dom::bindings::codegen::Bindings::ImageDataBinding::ImageDataMethods; -use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::codegen::UnionTypes::StringOrCanvasGradientOrCanvasPattern; use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::inheritance::Castable; @@ -27,6 +25,7 @@ use dom::bindings::root::{Dom, DomRoot, LayoutDom}; use dom::bindings::str::DOMString; use dom::canvasgradient::{CanvasGradient, CanvasGradientStyle, ToFillOrStrokeStyle}; use dom::canvaspattern::CanvasPattern; +use dom::element::Element; use dom::globalscope::GlobalScope; use dom::htmlcanvaselement::HTMLCanvasElement; use dom::imagedata::ImageData; @@ -543,18 +542,11 @@ impl CanvasRenderingContext2D { Some(ref canvas) => &**canvas, }; - let window = window_from_node(canvas); + let canvas_element = canvas.upcast::<Element>(); - let style = window.GetComputedStyle(canvas.upcast(), None); - - let element_not_rendered = - !canvas.upcast::<Node>().is_in_doc() || - style.GetPropertyValue(DOMString::from("display")) == "none"; - - if element_not_rendered { - Ok(RGBA::new(0, 0, 0, 255)) - } else { - self.parse_color(&style.GetPropertyValue(DOMString::from("color"))) + match canvas_element.style() { + Some(ref s) if canvas_element.has_css_layout_box() => Ok(s.get_color().color), + _ => Ok(RGBA::new(0, 0, 0, 255)) } }, _ => Err(()) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index ad050be3dda..761cf79641a 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -350,14 +350,14 @@ impl Element { /// style will be `None` for elements in a `display: none` subtree. otherwise, the element has a /// layout box iff it doesn't have `display: none`. - fn style(&self) -> Option<Arc<ComputedValues>> { + pub fn style(&self) -> Option<Arc<ComputedValues>> { window_from_node(self).style_query( self.upcast::<Node>().to_trusted_node_address() ) } // https://drafts.csswg.org/cssom-view/#css-layout-box - fn has_css_layout_box(&self) -> bool { + pub fn has_css_layout_box(&self) -> bool { self.style() .map_or(false, |s| !s.get_box().clone_display().is_none()) } |