Fix incremental reflow of text selection changes

Also replace force_relayout methods with direct Node::dirty calls, for
clarity.
This commit is contained in:
Matt Brubeck 2016-04-01 11:20:11 -07:00
parent 0397e2a24d
commit 776aae6399
5 changed files with 83 additions and 20 deletions

View file

@ -200,6 +200,7 @@ impl HTMLInputElement {
text_input.selection_begin = Some(text_input.get_text_point_for_absolute_point(start));
text_input.edit_point = text_input.get_text_point_for_absolute_point(end);
self.selection_direction.set(*direction);
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
}
@ -401,7 +402,7 @@ impl HTMLInputElementMethods for HTMLInputElement {
}
self.value_changed.set(true);
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
Ok(())
}
@ -586,11 +587,6 @@ fn in_same_group(other: &HTMLInputElement, owner: Option<&HTMLFormElement>,
}
impl HTMLInputElement {
fn force_relayout(&self) {
let doc = document_from_node(self);
doc.content_changed(self.upcast(), NodeDamage::OtherNodeDamage)
}
fn radio_group_updated(&self, group: Option<&Atom>) {
if self.Checked() {
broadcast_radio_checked(self, group);
@ -654,7 +650,7 @@ impl HTMLInputElement {
self.get_radio_group_name().as_ref());
}
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
//TODO: dispatch change event
}
@ -684,7 +680,7 @@ impl HTMLInputElement {
.expect("Failed to reset input value to default.");
self.value_dirty.set(false);
self.value_changed.set(false);
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
}
@ -889,11 +885,11 @@ impl VirtualMethods for HTMLInputElement {
ChangeEventRunnable::send(self.upcast::<Node>());
}
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
event.PreventDefault();
}
RedrawSelection => {
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
event.PreventDefault();
}
Nothing => (),

View file

@ -206,7 +206,7 @@ impl HTMLTextAreaElementMethods for HTMLTextAreaElement {
self.textinput.borrow_mut().set_content(value);
self.value_changed.set(true);
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
// https://html.spec.whatwg.org/multipage/#dom-lfe-labels
@ -230,13 +230,6 @@ impl HTMLTextAreaElement {
}
impl HTMLTextAreaElement {
fn force_relayout(&self) {
let doc = document_from_node(self);
doc.content_changed(self.upcast(), NodeDamage::OtherNodeDamage)
}
}
impl VirtualMethods for HTMLTextAreaElement {
fn super_type(&self) -> Option<&VirtualMethods> {
Some(self.upcast::<HTMLElement>() as &VirtualMethods)
@ -321,11 +314,11 @@ impl VirtualMethods for HTMLTextAreaElement {
ChangeEventRunnable::send(self.upcast::<Node>());
}
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
event.PreventDefault();
}
KeyReaction::RedrawSelection => {
self.force_relayout();
self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
event.PreventDefault();
}
KeyReaction::Nothing => (),