mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Auto merge of #7181 - pcwalton:input-button-margins, r=mbrubeck
layout: Stop double-counting inline margins on `<input type=button>` and friends. Improves the Google home page. r? @mbrubeck <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7181) <!-- Reviewable:end -->
This commit is contained in:
commit
94c8dcd575
5 changed files with 47 additions and 5 deletions
|
@ -673,11 +673,13 @@ impl<'a> FlowConstructor<'a> {
|
|||
fn build_flow_for_block_like(&mut self, flow: FlowRef, node: &ThreadSafeLayoutNode)
|
||||
-> ConstructionResult {
|
||||
let mut initial_fragments = IntermediateInlineFragments::new();
|
||||
if node.get_pseudo_element_type() != PseudoElementType::Normal ||
|
||||
let node_is_input_or_text_area =
|
||||
node.type_id() == Some(NodeTypeId::Element(ElementTypeId::HTMLElement(
|
||||
HTMLElementTypeId::HTMLInputElement))) ||
|
||||
node.type_id() == Some(NodeTypeId::Element(ElementTypeId::HTMLElement(
|
||||
HTMLElementTypeId::HTMLTextAreaElement))) {
|
||||
HTMLElementTypeId::HTMLTextAreaElement)));
|
||||
if node.get_pseudo_element_type() != PseudoElementType::Normal ||
|
||||
node_is_input_or_text_area {
|
||||
// A TextArea's text contents are displayed through the input text
|
||||
// box, so don't construct them.
|
||||
if node.type_id() == Some(NodeTypeId::Element(ElementTypeId::HTMLElement(
|
||||
|
@ -687,9 +689,12 @@ impl<'a> FlowConstructor<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
self.create_fragments_for_node_text_content(&mut initial_fragments,
|
||||
node,
|
||||
&*node.style());
|
||||
let mut style = node.style().clone();
|
||||
if node_is_input_or_text_area {
|
||||
properties::modify_style_for_input_text(&mut style);
|
||||
}
|
||||
|
||||
self.create_fragments_for_node_text_content(&mut initial_fragments, node, &style)
|
||||
}
|
||||
|
||||
self.build_flow_for_block_starting_with_fragments(flow, node, initial_fragments)
|
||||
|
|
|
@ -6518,6 +6518,19 @@ pub fn modify_style_for_text(style: &mut Arc<ComputedValues>) {
|
|||
}
|
||||
}
|
||||
|
||||
/// Adjusts the `margin` property as necessary to account for the text of an `input` element.
|
||||
///
|
||||
/// Margins apply to the `input` element itself, so including them in the text will cause them to
|
||||
/// be double-counted.
|
||||
pub fn modify_style_for_input_text(style: &mut Arc<ComputedValues>) {
|
||||
let mut style = Arc::make_unique(style);
|
||||
let margin_style = Arc::make_unique(&mut style.margin);
|
||||
margin_style.margin_top = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||
margin_style.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||
margin_style.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||
margin_style.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||
}
|
||||
|
||||
pub fn is_supported_property(property: &str) -> bool {
|
||||
match_ignore_ascii_case! { property,
|
||||
% for property in SHORTHANDS + LONGHANDS[:-1]:
|
||||
|
|
|
@ -170,6 +170,7 @@ experimental == iframe/size_attributes_vertical_writing_mode.html iframe/size_at
|
|||
# inline_text_align_a.html inline_text_align_b.html
|
||||
== inline_whitespace_a.html inline_whitespace_ref.html
|
||||
== inline_whitespace_b.html inline_whitespace_ref.html
|
||||
== input_button_margins_a.html input_button_margins_ref.html
|
||||
== input_button_size_a.html input_button_size_ref.html
|
||||
!= input_height_a.html input_height_ref.html
|
||||
== inset.html inset_ref.html
|
||||
|
|
11
tests/ref/input_button_margins_a.html
Normal file
11
tests/ref/input_button_margins_a.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
}
|
||||
input {
|
||||
margin-left: 64px;
|
||||
}
|
||||
</style>
|
||||
<input type=button value=Hello>
|
||||
|
12
tests/ref/input_button_margins_ref.html
Normal file
12
tests/ref/input_button_margins_ref.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
}
|
||||
input {
|
||||
position: absolute;
|
||||
left: 64px;
|
||||
}
|
||||
</style>
|
||||
<input type=button value=Hello>
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue