diff options
author | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-06-14 18:14:54 -0500 |
---|---|---|
committer | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-07-11 17:28:56 -0500 |
commit | ef033b8362b143f3671863313bcd792c4bf17f45 (patch) | |
tree | 24da8ea60c03dc7d8ed07a675dbff79135a07ba8 /components/script/dom/stylepropertymapreadonly.rs | |
parent | de331c6bc8f987521d600043285d32f42be07048 (diff) | |
download | servo-ef033b8362b143f3671863313bcd792c4bf17f45.tar.gz servo-ef033b8362b143f3671863313bcd792c4bf17f45.zip |
Implemented paint worklet properties.
Diffstat (limited to 'components/script/dom/stylepropertymapreadonly.rs')
-rw-r--r-- | components/script/dom/stylepropertymapreadonly.rs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/components/script/dom/stylepropertymapreadonly.rs b/components/script/dom/stylepropertymapreadonly.rs new file mode 100644 index 00000000000..323f5dae5a9 --- /dev/null +++ b/components/script/dom/stylepropertymapreadonly.rs @@ -0,0 +1,66 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use dom::bindings::codegen::Bindings::StylePropertyMapReadOnlyBinding::StylePropertyMapReadOnlyMethods; +use dom::bindings::codegen::Bindings::StylePropertyMapReadOnlyBinding::Wrap; +use dom::bindings::js::JS; +use dom::bindings::js::Root; +use dom::bindings::reflector::Reflector; +use dom::bindings::reflector::reflect_dom_object; +use dom::bindings::str::DOMString; +use dom::cssstylevalue::CSSStyleValue; +use dom::globalscope::GlobalScope; +use dom_struct::dom_struct; +use servo_atoms::Atom; +use std::collections::HashMap; +use std::iter::Iterator; + +#[dom_struct] +pub struct StylePropertyMapReadOnly { + reflector: Reflector, + entries: HashMap<Atom, JS<CSSStyleValue>>, +} + +impl StylePropertyMapReadOnly { + fn new_inherited<Entries>(entries: Entries) -> StylePropertyMapReadOnly where + Entries: IntoIterator<Item=(Atom, JS<CSSStyleValue>)> + { + StylePropertyMapReadOnly { + reflector: Reflector::new(), + entries: entries.into_iter().collect(), + } + } + + pub fn from_iter<Entries>(global: &GlobalScope, entries: Entries) -> Root<StylePropertyMapReadOnly> where + Entries: IntoIterator<Item=(Atom, String)>, + { + let mut keys = Vec::new(); + rooted_vec!(let mut values); + let iter = entries.into_iter(); + let (lo, _) = iter.size_hint(); + keys.reserve(lo); + values.reserve(lo); + for (key, value) in iter { + let value = CSSStyleValue::new(global, value); + keys.push(key); + values.push(JS::from_ref(&*value)); + } + let iter = keys.drain(..).zip(values.iter().cloned()); + reflect_dom_object(box StylePropertyMapReadOnly::new_inherited(iter), global, Wrap) + } +} + +impl StylePropertyMapReadOnlyMethods for StylePropertyMapReadOnly { + /// https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymapreadonly-get + fn Get(&self, property: DOMString) -> Option<Root<CSSStyleValue>> { + // TODO: avoid constructing an Atom + self.entries.get(&Atom::from(property)).map(|value| Root::from_ref(&**value)) + } + + /// https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymapreadonly-has + fn Has(&self, property: DOMString) -> bool { + // TODO: avoid constructing an Atom + self.entries.contains_key(&Atom::from(property)) + } +} |