mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
style: Cleanup and fix interpolation of SVG lengths.
Instead of storing them as LengthPercentage | Number, always store as LengthPercentage, and use the unitless length quirk to parse numbers instead. Further cleanups to use the rust representation can happen as a followup, which will also get rid of the boolean argument (since we can poke at the rust length itself). That's why I didn't bother to convert it to an enum class yet. Differential Revision: https://phabricator.services.mozilla.com/D21804
This commit is contained in:
parent
9e0d38a64f
commit
f1b5d5c06a
7 changed files with 94 additions and 280 deletions
|
@ -6,8 +6,7 @@
|
|||
|
||||
use crate::values::computed::color::Color;
|
||||
use crate::values::computed::url::ComputedUrl;
|
||||
use crate::values::computed::{LengthPercentage, NonNegativeLengthPercentage};
|
||||
use crate::values::computed::{NonNegativeNumber, Number, Opacity};
|
||||
use crate::values::computed::{LengthPercentage, NonNegativeLengthPercentage, Opacity};
|
||||
use crate::values::generics::svg as generic;
|
||||
use crate::values::RGBA;
|
||||
use crate::Zero;
|
||||
|
@ -41,58 +40,31 @@ impl SVGPaint {
|
|||
}
|
||||
}
|
||||
|
||||
/// A value of <length> | <percentage> | <number> for stroke-dashoffset.
|
||||
/// <https://www.w3.org/TR/SVG11/painting.html#StrokeProperties>
|
||||
pub type SvgLengthPercentageOrNumber =
|
||||
generic::SvgLengthPercentageOrNumber<LengthPercentage, Number>;
|
||||
|
||||
/// <length> | <percentage> | <number> | context-value
|
||||
pub type SVGLength = generic::SVGLength<SvgLengthPercentageOrNumber>;
|
||||
pub type SVGLength = generic::SVGLength<LengthPercentage>;
|
||||
|
||||
impl SVGLength {
|
||||
/// `0px`
|
||||
pub fn zero() -> Self {
|
||||
generic::SVGLength::Length(generic::SvgLengthPercentageOrNumber::LengthPercentage(
|
||||
LengthPercentage::zero(),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
/// A value of <length> | <percentage> | <number> for stroke-width/stroke-dasharray.
|
||||
/// <https://www.w3.org/TR/SVG11/painting.html#StrokeProperties>
|
||||
pub type NonNegativeSvgLengthPercentageOrNumber =
|
||||
generic::SvgLengthPercentageOrNumber<NonNegativeLengthPercentage, NonNegativeNumber>;
|
||||
|
||||
// FIXME(emilio): This is really hacky, and can go away with a bit of work on
|
||||
// the clone_stroke_width code in gecko.mako.rs.
|
||||
impl Into<NonNegativeSvgLengthPercentageOrNumber> for SvgLengthPercentageOrNumber {
|
||||
fn into(self) -> NonNegativeSvgLengthPercentageOrNumber {
|
||||
match self {
|
||||
generic::SvgLengthPercentageOrNumber::LengthPercentage(lop) => {
|
||||
generic::SvgLengthPercentageOrNumber::LengthPercentage(lop.into())
|
||||
},
|
||||
generic::SvgLengthPercentageOrNumber::Number(num) => {
|
||||
generic::SvgLengthPercentageOrNumber::Number(num.into())
|
||||
},
|
||||
}
|
||||
generic::SVGLength::LengthPercentage(LengthPercentage::zero())
|
||||
}
|
||||
}
|
||||
|
||||
/// An non-negative wrapper of SVGLength.
|
||||
pub type SVGWidth = generic::SVGLength<NonNegativeSvgLengthPercentageOrNumber>;
|
||||
pub type SVGWidth = generic::SVGLength<NonNegativeLengthPercentage>;
|
||||
|
||||
impl SVGWidth {
|
||||
/// `1px`.
|
||||
pub fn one() -> Self {
|
||||
use crate::values::generics::NonNegative;
|
||||
generic::SVGLength::Length(generic::SvgLengthPercentageOrNumber::LengthPercentage(
|
||||
generic::SVGLength::LengthPercentage(
|
||||
NonNegative(LengthPercentage::one()),
|
||||
))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// [ <length> | <percentage> | <number> ]# | context-value
|
||||
pub type SVGStrokeDashArray = generic::SVGStrokeDashArray<NonNegativeSvgLengthPercentageOrNumber>;
|
||||
pub type SVGStrokeDashArray = generic::SVGStrokeDashArray<NonNegativeLengthPercentage>;
|
||||
|
||||
impl Default for SVGStrokeDashArray {
|
||||
fn default() -> Self {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue