aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/style/common_types.rs55
-rw-r--r--src/components/style/properties.rs.mako24
-rw-r--r--src/components/style/style.rc1
3 files changed, 40 insertions, 40 deletions
diff --git a/src/components/style/common_types.rs b/src/components/style/common_types.rs
index e7b54f0232b..48cbafa51ed 100644
--- a/src/components/style/common_types.rs
+++ b/src/components/style/common_types.rs
@@ -2,19 +2,20 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+pub use servo_util::geometry::Au;
+
pub type Float = f64;
-pub type Integer = i64;
pub mod specified {
use std::ascii::StrAsciiExt;
use cssparser::*;
- use super::{Integer, Float};
+ use super::{Au, Float};
pub use CSSColor = cssparser::Color;
#[deriving(Clone)]
pub enum Length {
- Au(Integer), // application units
+ Au_(Au), // application units
Em(Float),
Ex(Float),
// XXX uncomment when supported:
@@ -37,7 +38,7 @@ pub mod specified {
match input {
&Dimension(ref value, ref unit) if negative_ok || value.value >= 0.
=> Length::parse_dimension(value.value, unit.as_slice()),
- &Number(ref value) if value.value == 0. => Some(Au(0)),
+ &Number(ref value) if value.value == 0. => Some(Au_(Au(0))),
_ => None
}
}
@@ -50,11 +51,11 @@ pub mod specified {
pub fn parse_dimension(value: Float, unit: &str) -> Option<Length> {
match unit.to_ascii_lower().as_slice() {
"px" => Some(Length::from_px(value)),
- "in" => Some(Au((value * AU_PER_IN) as Integer)),
- "cm" => Some(Au((value * AU_PER_CM) as Integer)),
- "mm" => Some(Au((value * AU_PER_MM) as Integer)),
- "pt" => Some(Au((value * AU_PER_PT) as Integer)),
- "pc" => Some(Au((value * AU_PER_PC) as Integer)),
+ "in" => Some(Au_(Au((value * AU_PER_IN) as i32))),
+ "cm" => Some(Au_(Au((value * AU_PER_CM) as i32))),
+ "mm" => Some(Au_(Au((value * AU_PER_MM) as i32))),
+ "pt" => Some(Au_(Au((value * AU_PER_PT) as i32))),
+ "pc" => Some(Au_(Au((value * AU_PER_PC) as i32))),
"em" => Some(Em(value)),
"ex" => Some(Ex(value)),
_ => None
@@ -62,7 +63,7 @@ pub mod specified {
}
#[inline]
pub fn from_px(px_value: Float) -> Length {
- Au((px_value * AU_PER_PX) as Integer)
+ Au_(Au((px_value * AU_PER_PX) as i32))
}
}
@@ -79,7 +80,7 @@ pub mod specified {
=> Length::parse_dimension(value.value, unit.as_slice()).map_move(LP_Length),
&ast::Percentage(ref value) if negative_ok || value.value >= 0.
=> Some(LP_Percentage(value.value / 100.)),
- &Number(ref value) if value.value == 0. => Some(LP_Length(Au(0))),
+ &Number(ref value) if value.value == 0. => Some(LP_Length(Au_(Au(0)))),
_ => None
}
}
@@ -107,7 +108,7 @@ pub mod specified {
=> Length::parse_dimension(value.value, unit.as_slice()).map_move(LPA_Length),
&ast::Percentage(ref value) if negative_ok || value.value >= 0.
=> Some(LPA_Percentage(value.value / 100.)),
- &Number(ref value) if value.value == 0. => Some(LPA_Length(Au(0))),
+ &Number(ref value) if value.value == 0. => Some(LPA_Length(Au_(Au(0)))),
&Ident(ref value) if value.eq_ignore_ascii_case("auto") => Some(LPA_Auto),
_ => None
}
@@ -129,9 +130,11 @@ pub mod computed {
pub use compute_CSSColor = super::super::longhands::computed_as_specified;
use super::*;
use super::super::longhands;
+ pub use servo_util::geometry::Au;
+
pub struct Context {
current_color: cssparser::RGBA,
- font_size: Length,
+ font_size: Au,
font_weight: longhands::font_weight::ComputedValue,
position: longhands::position::SpecifiedValue,
float: longhands::float::SpecifiedValue,
@@ -142,48 +145,44 @@ pub mod computed {
has_border_left: bool,
// TODO, as needed: root font size, viewport size, etc.
}
- #[deriving(Clone)]
- pub struct Length(Integer); // in application units
- impl Length {
- pub fn times(self, factor: Float) -> Length {
- Length(((*self as Float) * factor) as Integer)
- }
- }
- pub fn compute_Length(value: specified::Length, context: &Context) -> Length {
+ #[inline]
+ fn mul(a: Au, b: Float) -> Au { Au(((*a as Float) * b) as i32) }
+
+ pub fn compute_Au(value: specified::Length, context: &Context) -> Au {
match value {
- specified::Au(value) => Length(value),
- specified::Em(value) => context.font_size.times(value),
+ specified::Au_(value) => value,
+ specified::Em(value) => mul(context.font_size, value),
specified::Ex(value) => {
let x_height = 0.5; // TODO: find that from the font
- context.font_size.times(value * x_height)
+ mul(context.font_size, value * x_height)
},
}
}
#[deriving(Clone)]
pub enum LengthOrPercentage {
- LP_Length(Length),
+ LP_Length(Au),
LP_Percentage(Float),
}
pub fn compute_LengthOrPercentage(value: specified::LengthOrPercentage, context: &Context)
-> LengthOrPercentage {
match value {
- specified::LP_Length(value) => LP_Length(compute_Length(value, context)),
+ specified::LP_Length(value) => LP_Length(compute_Au(value, context)),
specified::LP_Percentage(value) => LP_Percentage(value),
}
}
#[deriving(Clone)]
pub enum LengthOrPercentageOrAuto {
- LPA_Length(Length),
+ LPA_Length(Au),
LPA_Percentage(Float),
LPA_Auto,
}
pub fn compute_LengthOrPercentageOrAuto(value: specified::LengthOrPercentageOrAuto,
context: &Context) -> LengthOrPercentageOrAuto {
match value {
- specified::LPA_Length(value) => LPA_Length(compute_Length(value, context)),
+ specified::LPA_Length(value) => LPA_Length(compute_Au(value, context)),
specified::LPA_Percentage(value) => LPA_Percentage(value),
specified::LPA_Auto => LPA_Auto,
}
diff --git a/src/components/style/properties.rs.mako b/src/components/style/properties.rs.mako
index 871a6b34af2..b8ea608b212 100644
--- a/src/components/style/properties.rs.mako
+++ b/src/components/style/properties.rs.mako
@@ -146,14 +146,14 @@ pub mod longhands {
% for side in ["top", "right", "bottom", "left"]:
${predefined_type("margin-" + side, "LengthOrPercentageOrAuto",
- "computed::LPA_Length(computed::Length(0))")}
+ "computed::LPA_Length(Au(0))")}
% endfor
${new_style_struct("Padding")}
% for side in ["top", "right", "bottom", "left"]:
${predefined_type("padding-" + side, "LengthOrPercentage",
- "computed::LP_Length(computed::Length(0))",
+ "computed::LP_Length(Au(0))",
"parse_non_negative")}
% endfor
@@ -187,17 +187,17 @@ pub mod longhands {
% for side in ["top", "right", "bottom", "left"]:
<%self:longhand name="border-${side}-width">
pub type SpecifiedValue = specified::Length;
- pub type ComputedValue = computed::Length;
+ pub type ComputedValue = Au;
#[inline] pub fn get_initial_value() -> ComputedValue {
- computed::Length(3 * 60) // medium
+ Au::from_px(3) // medium
}
pub fn parse(input: &[ComponentValue]) -> Option<SpecifiedValue> {
one_component_value(input).chain(parse_border_width)
}
pub fn to_computed_value(value: SpecifiedValue, context: &computed::Context)
-> ComputedValue {
- if context.has_border_${side} { computed::compute_Length(value, context) }
- else { computed::Length(0) }
+ if context.has_border_${side} { computed::compute_Au(value, context) }
+ else { Au(0) }
}
</%self:longhand>
% endfor
@@ -252,7 +252,7 @@ pub mod longhands {
#[deriving(Clone)]
pub enum ComputedValue {
Normal,
- Length(computed::Length),
+ Length(Au),
Number(Float),
}
#[inline] pub fn get_initial_value() -> ComputedValue { Normal }
@@ -260,7 +260,7 @@ pub mod longhands {
-> ComputedValue {
match value {
SpecifiedNormal => Normal,
- SpecifiedLength(value) => Length(computed::compute_Length(value, context)),
+ SpecifiedLength(value) => Length(computed::compute_Au(value, context)),
SpecifiedNumber(value) => Number(value),
}
}
@@ -295,7 +295,7 @@ pub mod longhands {
% for keyword in vertical_align_keywords:
${to_rust_ident(keyword)},
% endfor
- Length(computed::Length),
+ Length(Au),
Percentage(Float),
}
#[inline] pub fn get_initial_value() -> ComputedValue { baseline }
@@ -502,11 +502,11 @@ pub mod longhands {
</%self:single_component_value>
<%self:single_component_value name="font-size" inherited="True">
- pub use to_computed_value = super::super::common_types::computed::compute_Length;
+ pub use to_computed_value = super::super::common_types::computed::compute_Au;
pub type SpecifiedValue = specified::Length; // Percentages are the same as em.
- pub type ComputedValue = computed::Length;
+ pub type ComputedValue = Au;
#[inline] pub fn get_initial_value() -> ComputedValue {
- computed::Length(16 * 60) // medium
+ Au::from_px(16) // medium
}
/// <length> | <percentage>
/// TODO: support <absolute-size> and <relative-size>
diff --git a/src/components/style/style.rc b/src/components/style/style.rc
index 90f59c5372e..d40d9d2e428 100644
--- a/src/components/style/style.rc
+++ b/src/components/style/style.rc
@@ -14,6 +14,7 @@
extern mod extra;
extern mod cssparser;
+extern mod servo_util (name = "util");
extern mod script;