Remove unneeded input type information from layout.

This commit is contained in:
Josh Matthews 2014-09-29 16:13:12 -04:00
parent ca5d4633c2
commit 5794da904e
2 changed files with 13 additions and 29 deletions

View file

@ -31,8 +31,8 @@ use fragment::{InlineBlockFragment, InlineBlockFragmentInfo, InputFragment};
use fragment::{Fragment, GenericFragment, IframeFragment, IframeFragmentInfo}; use fragment::{Fragment, GenericFragment, IframeFragment, IframeFragmentInfo};
use fragment::{ImageFragment, ImageFragmentInfo, SpecificFragmentInfo, TableFragment}; use fragment::{ImageFragment, ImageFragmentInfo, SpecificFragmentInfo, TableFragment};
use fragment::{TableCellFragment, TableColumnFragment, TableColumnFragmentInfo}; use fragment::{TableCellFragment, TableColumnFragment, TableColumnFragmentInfo};
use fragment::{TableRowFragment, TableWrapperFragment, UnscannedTextFragment, InputRadioButton}; use fragment::{TableRowFragment, TableWrapperFragment, UnscannedTextFragment};
use fragment::{UnscannedTextFragmentInfo, InputCheckbox, InputButton, InputText, InputFile}; use fragment::{UnscannedTextFragmentInfo, InputFragmentInfo};
use inline::{InlineFragments, InlineFlow}; use inline::{InlineFragments, InlineFlow};
use parallel; use parallel;
use table_wrapper::TableWrapperFlow; use table_wrapper::TableWrapperFlow;
@ -226,14 +226,14 @@ impl<'a> FlowConstructor<'a> {
// value? definitely for string comparisons. // value? definitely for string comparisons.
let elem = node.as_element(); let elem = node.as_element();
let data = match elem.get_attr(&ns!(""), "type") { let data = match elem.get_attr(&ns!(""), "type") {
Some("checkbox") => InputCheckbox, Some("checkbox") | Some("radio") => None,
Some("button") | Some("submit") | Some("reset") => Some("button") | Some("submit") | Some("reset") =>
InputButton(node.get_input_value().len() as u32), Some(node.get_input_value().len() as u32),
Some("radio") => InputRadioButton, Some("file") => Some(node.get_input_size()),
Some("file") => InputFile(node.get_input_size()), _ => Some(node.get_input_size()),
_ => InputText(node.get_input_size()),
}; };
InputFragment(data) data.map(|size| InputFragment(InputFragmentInfo { size: size }))
.unwrap_or(GenericFragment)
} }
/// Builds specific `Fragment` info for the given node. /// Builds specific `Fragment` info for the given node.

View file

@ -158,33 +158,17 @@ impl InlineBlockFragmentInfo {
/// A fragment that represents a displayable form element /// A fragment that represents a displayable form element
#[deriving(Clone)] #[deriving(Clone)]
pub enum InputFragmentInfo { pub struct InputFragmentInfo {
InputButton(u32), pub size: u32,
InputText(u32),
InputCheckbox,
InputRadioButton,
InputFile(u32),
} }
impl InputFragmentInfo { impl InputFragmentInfo {
fn size(&self) -> Option<u32> {
match self {
&InputText(size) | &InputFile(size) | &InputButton(size) => Some(size),
_ => None,
}
}
/// Returns the original inline-size of the input. /// Returns the original inline-size of the input.
fn input_inline_size(&self, font_style: &FontStyle, layout_context: &LayoutContext) -> Au { fn input_inline_size(&self, font_style: &FontStyle, layout_context: &LayoutContext) -> Au {
match self.size() { let metrics = text::font_metrics_for_style(layout_context.font_context(), font_style);
Some(size) => {
let metrics = text::font_metrics_for_style(layout_context.font_context(), font_style);
// https://html.spec.whatwg.org/#converting-a-character-width-to-pixels // https://html.spec.whatwg.org/#converting-a-character-width-to-pixels
metrics.average_advance * (size as i32 - 1) + metrics.max_advance metrics.average_advance * (self.size as i32 - 1) + metrics.max_advance
}
None => Au::from_px(10)
}
} }
} }