Further changes required by Servo

This commit is contained in:
Oriol Brufau 2023-08-16 23:29:27 +02:00 committed by Martin Robinson
parent 1ce75ff7dd
commit 6c3f92cb85
27 changed files with 266 additions and 91 deletions

View file

@ -38,7 +38,6 @@ use servo_atoms::Atom;
use style::applicable_declarations::ApplicableDeclarationBlock;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
use style::context::QuirksMode;
use style::element_state::ElementState;
use style::invalidation::element::restyle_hints::RestyleHint;
use style::properties::longhands::{
self, background_image, border_spacing, font_family, font_size,
@ -58,6 +57,7 @@ use style::stylesheets::CssRuleType;
use style::values::generics::NonNegative;
use style::values::{computed, specified, AtomIdent, AtomString, CSSFloat};
use style::{dom_apis, thread_state, CaseSensitivityExt};
use style_traits::dom::ElementState;
use xml5ever::serialize as xmlSerialize;
use xml5ever::serialize::TraversalScope::{
ChildrenOnly as XmlChildrenOnly, IncludeNode as XmlIncludeNode,
@ -351,7 +351,7 @@ impl Element {
CustomElementState::Uncustomized | CustomElementState::Custom => true,
_ => false,
};
self.set_state(ElementState::IN_DEFINED_STATE, in_defined_state)
self.set_state(ElementState::DEFINED, in_defined_state)
}
pub fn get_custom_element_state(&self) -> CustomElementState {
@ -637,12 +637,7 @@ pub trait LayoutElementHelpers<'dom> {
impl<'dom> LayoutDom<'dom, Element> {
#[allow(unsafe_code)]
pub(super) fn focus_state(self) -> bool {
unsafe {
self.unsafe_get()
.state
.get()
.contains(ElementState::IN_FOCUS_STATE)
}
unsafe { self.unsafe_get().state.get().contains(ElementState::FOCUS) }
}
}
@ -3523,7 +3518,7 @@ impl Element {
/// <https://html.spec.whatwg.org/multipage/#concept-selector-active>
pub fn set_active_state(&self, value: bool) {
self.set_state(ElementState::IN_ACTIVE_STATE, value);
self.set_state(ElementState::ACTIVE, value);
if let Some(parent) = self.upcast::<Node>().GetParentElement() {
parent.set_active_state(value);
@ -3531,65 +3526,63 @@ impl Element {
}
pub fn focus_state(&self) -> bool {
self.state.get().contains(ElementState::IN_FOCUS_STATE)
self.state.get().contains(ElementState::FOCUS)
}
pub fn set_focus_state(&self, value: bool) {
self.set_state(ElementState::IN_FOCUS_STATE, value);
self.set_state(ElementState::FOCUS, value);
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
pub fn hover_state(&self) -> bool {
self.state.get().contains(ElementState::IN_HOVER_STATE)
self.state.get().contains(ElementState::HOVER)
}
pub fn set_hover_state(&self, value: bool) {
self.set_state(ElementState::IN_HOVER_STATE, value)
self.set_state(ElementState::HOVER, value)
}
pub fn enabled_state(&self) -> bool {
self.state.get().contains(ElementState::IN_ENABLED_STATE)
self.state.get().contains(ElementState::ENABLED)
}
pub fn set_enabled_state(&self, value: bool) {
self.set_state(ElementState::IN_ENABLED_STATE, value)
self.set_state(ElementState::ENABLED, value)
}
pub fn disabled_state(&self) -> bool {
self.state.get().contains(ElementState::IN_DISABLED_STATE)
self.state.get().contains(ElementState::DISABLED)
}
pub fn set_disabled_state(&self, value: bool) {
self.set_state(ElementState::IN_DISABLED_STATE, value)
self.set_state(ElementState::DISABLED, value)
}
pub fn read_write_state(&self) -> bool {
self.state.get().contains(ElementState::IN_READWRITE_STATE)
self.state.get().contains(ElementState::READWRITE)
}
pub fn set_read_write_state(&self, value: bool) {
self.set_state(ElementState::IN_READWRITE_STATE, value)
self.set_state(ElementState::READWRITE, value)
}
pub fn placeholder_shown_state(&self) -> bool {
self.state
.get()
.contains(ElementState::IN_PLACEHOLDER_SHOWN_STATE)
self.state.get().contains(ElementState::PLACEHOLDER_SHOWN)
}
pub fn set_placeholder_shown_state(&self, value: bool) {
if self.placeholder_shown_state() != value {
self.set_state(ElementState::IN_PLACEHOLDER_SHOWN_STATE, value);
self.set_state(ElementState::PLACEHOLDER_SHOWN, value);
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
}
pub fn set_target_state(&self, value: bool) {
self.set_state(ElementState::IN_TARGET_STATE, value)
self.set_state(ElementState::URLTARGET, value)
}
pub fn set_fullscreen_state(&self, value: bool) {
self.set_state(ElementState::IN_FULLSCREEN_STATE, value)
self.set_state(ElementState::FULLSCREEN, value)
}
/// <https://dom.spec.whatwg.org/#connected>

View file

@ -8,7 +8,7 @@ use std::default::Default;
use dom_struct::dom_struct;
use html5ever::{local_name, namespace_url, LocalName, Prefix};
use js::rust::HandleObject;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::activation::Activatable;
use crate::dom::attr::Attr;
@ -56,7 +56,7 @@ impl HTMLButtonElement {
) -> HTMLButtonElement {
HTMLButtonElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE,
ElementState::ENABLED,
local_name,
prefix,
document,

View file

@ -11,7 +11,7 @@ use html5ever::{local_name, namespace_url, ns, LocalName, Prefix};
use js::rust::HandleObject;
use script_layout_interface::message::QueryMsg;
use style::attr::AttrValue;
use style::element_state::*;
use style_traits::dom::ElementState;
use crate::dom::activation::Activatable;
use crate::dom::attr::Attr;

View file

@ -7,7 +7,7 @@ use std::default::Default;
use dom_struct::dom_struct;
use html5ever::{local_name, LocalName, Prefix};
use js::rust::HandleObject;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::attr::Attr;
use crate::dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding::HTMLFieldSetElementMethods;
@ -40,7 +40,7 @@ impl HTMLFieldSetElement {
) -> HTMLFieldSetElement {
HTMLFieldSetElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE | ElementState::IN_VALID_STATE,
ElementState::ENABLED | ElementState::VALID,
local_name,
prefix,
document,
@ -81,9 +81,9 @@ impl HTMLFieldSetElement {
});
self.upcast::<Element>()
.set_state(ElementState::IN_VALID_STATE, !has_invalid_child);
.set_state(ElementState::VALID, !has_invalid_child);
self.upcast::<Element>()
.set_state(ElementState::IN_INVALID_STATE, has_invalid_child);
.set_state(ElementState::INVALID, has_invalid_child);
}
}

View file

@ -18,8 +18,8 @@ use script_traits::{HistoryEntryReplacement, LoadData, LoadOrigin};
use servo_atoms::Atom;
use servo_rand::random;
use style::attr::AttrValue;
use style::element_state::ElementState;
use style::str::split_html_space_chars;
use style_traits::dom::ElementState;
use time::{now, Duration, Tm};
use super::bindings::trace::{HashMapTracedValues, NoTrace};
@ -107,7 +107,7 @@ impl HTMLFormElement {
) -> HTMLFormElement {
HTMLFormElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_VALID_STATE,
ElementState::VALID,
local_name,
prefix,
document,
@ -693,9 +693,9 @@ impl HTMLFormElement {
});
self.upcast::<Element>()
.set_state(ElementState::IN_VALID_STATE, !is_any_invalid);
.set_state(ElementState::VALID, !is_any_invalid);
self.upcast::<Element>()
.set_state(ElementState::IN_INVALID_STATE, is_any_invalid);
.set_state(ElementState::INVALID, is_any_invalid);
}
/// [Form submission](https://html.spec.whatwg.org/multipage/#concept-form-submit)

View file

@ -30,8 +30,8 @@ use script_layout_interface::rpc::TextIndexResponse;
use script_traits::ScriptToConstellationChan;
use servo_atoms::Atom;
use style::attr::AttrValue;
use style::element_state::ElementState;
use style::str::{split_commas, str_join};
use style_traits::dom::ElementState;
use unicode_bidi::{bidi_class, BidiClass};
use url::Url;
@ -299,7 +299,7 @@ impl HTMLInputElement {
.clone();
HTMLInputElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE | ElementState::IN_READWRITE_STATE,
ElementState::ENABLED | ElementState::READWRITE,
local_name,
prefix,
document,
@ -1089,13 +1089,13 @@ impl<'dom> LayoutHTMLInputElementHelpers<'dom> for LayoutDom<'dom, HTMLInputElem
fn checked_state_for_layout(self) -> bool {
self.upcast::<Element>()
.get_state_for_layout()
.contains(ElementState::IN_CHECKED_STATE)
.contains(ElementState::CHECKED)
}
fn indeterminate_state_for_layout(self) -> bool {
self.upcast::<Element>()
.get_state_for_layout()
.contains(ElementState::IN_INDETERMINATE_STATE)
.contains(ElementState::INDETERMINATE)
}
}
@ -1201,7 +1201,7 @@ impl HTMLInputElementMethods for HTMLInputElement {
fn Checked(&self) -> bool {
self.upcast::<Element>()
.state()
.contains(ElementState::IN_CHECKED_STATE)
.contains(ElementState::CHECKED)
}
// https://html.spec.whatwg.org/multipage/#dom-input-checked
@ -1499,13 +1499,13 @@ impl HTMLInputElementMethods for HTMLInputElement {
fn Indeterminate(&self) -> bool {
self.upcast::<Element>()
.state()
.contains(ElementState::IN_INDETERMINATE_STATE)
.contains(ElementState::INDETERMINATE)
}
// https://html.spec.whatwg.org/multipage/#dom-input-indeterminate
fn SetIndeterminate(&self, val: bool) {
self.upcast::<Element>()
.set_state(ElementState::IN_INDETERMINATE_STATE, val)
.set_state(ElementState::INDETERMINATE, val)
}
// https://html.spec.whatwg.org/multipage/#dom-lfe-labels
@ -1803,7 +1803,7 @@ impl HTMLInputElement {
fn update_checked_state(&self, checked: bool, dirty: bool) {
self.upcast::<Element>()
.set_state(ElementState::IN_CHECKED_STATE, checked);
.set_state(ElementState::CHECKED, checked);
if dirty {
self.checked_changed.set(true);
@ -2651,7 +2651,7 @@ impl VirtualMethods for HTMLInputElement {
elem.value_dirty.set(self.value_dirty.get());
elem.checked_changed.set(self.checked_changed.get());
elem.upcast::<Element>()
.set_state(ElementState::IN_CHECKED_STATE, self.Checked());
.set_state(ElementState::CHECKED, self.Checked());
elem.textinput
.borrow_mut()
.set_content(self.textinput.borrow().get_content());

View file

@ -5,7 +5,7 @@
use dom_struct::dom_struct;
use html5ever::{local_name, LocalName, Prefix};
use js::rust::HandleObject;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::attr::Attr;
use crate::dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding::HTMLOptGroupElementMethods;
@ -34,7 +34,7 @@ impl HTMLOptGroupElement {
) -> HTMLOptGroupElement {
HTMLOptGroupElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE,
ElementState::ENABLED,
local_name,
prefix,
document,

View file

@ -8,8 +8,8 @@ use std::convert::TryInto;
use dom_struct::dom_struct;
use html5ever::{local_name, namespace_url, ns, LocalName, Prefix, QualName};
use js::rust::HandleObject;
use style::element_state::ElementState;
use style::str::{split_html_space_chars, str_join};
use style_traits::dom::ElementState;
use crate::dom::attr::Attr;
use crate::dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods;
@ -55,7 +55,7 @@ impl HTMLOptionElement {
) -> HTMLOptionElement {
HTMLOptionElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE,
ElementState::ENABLED,
local_name,
prefix,
document,

View file

@ -9,7 +9,7 @@ use dom_struct::dom_struct;
use html5ever::{local_name, LocalName, Prefix};
use js::rust::HandleObject;
use style::attr::AttrValue;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::attr::Attr;
use crate::dom::bindings::codegen::Bindings::ElementBinding::ElementMethods;
@ -79,7 +79,7 @@ impl HTMLSelectElement {
) -> HTMLSelectElement {
HTMLSelectElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE | ElementState::IN_VALID_STATE,
ElementState::ENABLED | ElementState::VALID,
local_name,
prefix,
document,

View file

@ -11,7 +11,7 @@ use html5ever::{local_name, namespace_url, ns, LocalName, Prefix};
use js::rust::HandleObject;
use script_traits::ScriptToConstellationChan;
use style::attr::AttrValue;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::attr::Attr;
use crate::dom::bindings::cell::DomRefCell;
@ -151,7 +151,7 @@ impl HTMLTextAreaElement {
.clone();
HTMLTextAreaElement {
htmlelement: HTMLElement::new_inherited_with_state(
ElementState::IN_ENABLED_STATE | ElementState::IN_READWRITE_STATE,
ElementState::ENABLED | ElementState::READWRITE,
local_name,
prefix,
document,

View file

@ -5,7 +5,7 @@
use dom_struct::dom_struct;
use html5ever::{namespace_url, ns, LocalName, Prefix};
use js::rust::HandleObject;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::bindings::codegen::Bindings::SVGElementBinding::SVGElementMethods;
use crate::dom::bindings::inheritance::Castable;

View file

@ -4,7 +4,7 @@
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::document::Document;

View file

@ -8,7 +8,7 @@ use std::fmt;
use bitflags::bitflags;
use dom_struct::dom_struct;
use itertools::Itertools;
use style::element_state::ElementState;
use style_traits::dom::ElementState;
use crate::dom::bindings::cell::{DomRefCell, Ref};
use crate::dom::bindings::codegen::Bindings::ValidityStateBinding::ValidityStateMethods;
@ -137,14 +137,11 @@ impl ValidityState {
if let Some(validatable) = self.element.as_maybe_validatable() {
if validatable.is_instance_validatable() {
let is_valid = self.invalid_flags.get().is_empty();
self.element
.set_state(ElementState::IN_VALID_STATE, is_valid);
self.element
.set_state(ElementState::IN_INVALID_STATE, !is_valid);
self.element.set_state(ElementState::VALID, is_valid);
self.element.set_state(ElementState::INVALID, !is_valid);
} else {
self.element.set_state(ElementState::IN_VALID_STATE, false);
self.element
.set_state(ElementState::IN_INVALID_STATE, false);
self.element.set_state(ElementState::VALID, false);
self.element.set_state(ElementState::INVALID, false);
}
}