mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Explicitly customise flags of new nodes where needed
Given codegen now generates the various TypeId enums, it seems pointless to still have to write their respective values in every DOM struct inheriting from Node just to set the initial IS_IN_DOC flag in Document and IN_ENABLED_STATE in form controls.
This commit is contained in:
parent
617fc08783
commit
7d6ea83479
79 changed files with 173 additions and 231 deletions
|
@ -163,22 +163,8 @@ bitflags! {
|
|||
}
|
||||
|
||||
impl NodeFlags {
|
||||
pub fn new(type_id: NodeTypeId) -> NodeFlags {
|
||||
let dirty = HAS_CHANGED | IS_DIRTY | HAS_DIRTY_SIBLINGS | HAS_DIRTY_DESCENDANTS;
|
||||
match type_id {
|
||||
NodeTypeId::Document => IS_IN_DOC | dirty,
|
||||
// The following elements are enabled by default.
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) |
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement)) |
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) |
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement)) |
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLOptGroupElement)) |
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLOptionElement)) |
|
||||
//NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLMenuItemElement)) |
|
||||
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFieldSetElement)) =>
|
||||
IN_ENABLED_STATE | dirty,
|
||||
_ => dirty,
|
||||
}
|
||||
pub fn new() -> NodeFlags {
|
||||
HAS_CHANGED | IS_DIRTY | HAS_DIRTY_SIBLINGS | HAS_DIRTY_DESCENDANTS
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1358,15 +1344,19 @@ impl Node {
|
|||
reflect_dom_object(node, GlobalRef::Window(window.r()), wrap_fn)
|
||||
}
|
||||
|
||||
pub fn new_inherited(type_id: NodeTypeId, doc: &Document) -> Node {
|
||||
Node::new_(type_id, Some(doc.clone()))
|
||||
pub fn new_inherited(doc: &Document) -> Node {
|
||||
Node::new_inherited_with_flags(NodeFlags::new(), doc)
|
||||
}
|
||||
|
||||
pub fn new_without_doc(type_id: NodeTypeId) -> Node {
|
||||
Node::new_(type_id, None)
|
||||
pub fn new_inherited_with_flags(flags: NodeFlags, doc: &Document) -> Node {
|
||||
Node::new_(flags, Some(doc))
|
||||
}
|
||||
|
||||
fn new_(type_id: NodeTypeId, doc: Option<&Document>) -> Node {
|
||||
pub fn new_document_node() -> Node {
|
||||
Node::new_(NodeFlags::new() | IS_IN_DOC, None)
|
||||
}
|
||||
|
||||
fn new_(flags: NodeFlags, doc: Option<&Document>) -> Node {
|
||||
Node {
|
||||
eventtarget: EventTarget::new_inherited(),
|
||||
|
||||
|
@ -1378,7 +1368,7 @@ impl Node {
|
|||
owner_doc: MutNullableHeap::new(doc.map(JS::from_ref)),
|
||||
child_list: Default::default(),
|
||||
children_count: Cell::new(0u32),
|
||||
flags: Cell::new(NodeFlags::new(type_id)),
|
||||
flags: Cell::new(flags),
|
||||
|
||||
layout_data: LayoutDataRef::new(),
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue