mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Reland Input type=text
Shadow DOM With Performance Improvement (#37483)
Depends on #37427. In addition to the changes introduced by https://github.com/servo/servo/pull/37065, there are several performance improvements and nits as follows: - Use the internal pseudo element for style matching, this will reduce the performance regression by ~66%. - Manual construction of the `Text` node inside a text container. This is followed by the modification of the inner `Text` node instead of using `SetTextContent` which is more expensive. - Use `implemented_pseudo_element` instead of `text_control_inner_editor` `NodeFlag` to handle the special cases that these elements should follow, specifically the: - focus delegation workaround; - selections; and - line height resolving. - More documentation. Servo's side of: https://github.com/servo/stylo/pull/217 Testing: No new unexpected WPT failure, except for the one introduced by https://github.com/servo/servo/pull/37065/. Fixes: #36307 #37205 --------- Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>
This commit is contained in:
parent
f523445fc3
commit
3cb16eb864
27 changed files with 710 additions and 85 deletions
|
@ -168,7 +168,8 @@ pub(crate) struct InlineFormattingContext {
|
|||
/// Whether or not this [`InlineFormattingContext`] contains floats.
|
||||
pub(super) contains_floats: bool,
|
||||
|
||||
/// Whether or not this is an [`InlineFormattingContext`] for a single line text input.
|
||||
/// Whether or not this is an [`InlineFormattingContext`] for a single line text input's inner
|
||||
/// text container.
|
||||
pub(super) is_single_line_text_input: bool,
|
||||
|
||||
/// Whether or not this is an [`InlineFormattingContext`] has right-to-left content, which
|
||||
|
@ -2237,8 +2238,9 @@ fn line_height(
|
|||
LineHeight::Length(length) => length.0.into(),
|
||||
};
|
||||
|
||||
// Single line text inputs line height is clamped to the size of `normal`. See
|
||||
// <https://github.com/whatwg/html/pull/5462>.
|
||||
// The line height of a single-line text input's inner text container is clamped to
|
||||
// the size of `normal`.
|
||||
// <https://html.spec.whatwg.org/multipage/#the-input-element-as-a-text-entry-widget>
|
||||
if is_single_line_text_input {
|
||||
line_height.max_assign(font_metrics.line_gap);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue