mirror of
https://github.com/servo/servo.git
synced 2025-08-09 07:25:35 +01:00
Refactor Position
A specified position is now a struct made of two values of different types, the first one being PositionComponent<X>, and the second one PositionComponent<Y>. A position component is represented by the new enum PositionComponent<Side>, with the three values Center, Length(LengthOrPercentage), and Side(Side, Option<LengthOrPercentage>). Side keywords are represented by the X and Y enums, which don't include a value for the center keyword anymore. They are accompanied by the Side trait, which allows us to determine whether a side keyword is "left" or "top". This refactor simplified the parsing and serialisation code and exposed bugs in it, where it would reject valid <position> values followed by arbitrary tokens, and where it would fail to prefer "left" to "right" when serialising positions in basic shapes.
This commit is contained in:
parent
0040160b38
commit
70ec61cf01
22 changed files with 484 additions and 887 deletions
|
@ -307,8 +307,8 @@ impl nsStyleImage {
|
|||
},
|
||||
}
|
||||
unsafe {
|
||||
(*gecko_gradient).mBgPosX.set(position.horizontal.0);
|
||||
(*gecko_gradient).mBgPosY.set(position.vertical.0);
|
||||
(*gecko_gradient).mBgPosX.set(position.horizontal);
|
||||
(*gecko_gradient).mBgPosY.set(position.vertical);
|
||||
}
|
||||
|
||||
gecko_gradient
|
||||
|
@ -372,7 +372,6 @@ pub mod basic_shape {
|
|||
use values::computed::position;
|
||||
use values::generics::BorderRadiusSize as GenericBorderRadiusSize;
|
||||
use values::generics::basic_shape::FillRule;
|
||||
use values::generics::position::{HorizontalPosition, VerticalPosition};
|
||||
|
||||
// using Borrow so that we can have a non-moving .into()
|
||||
impl<T: Borrow<StyleBasicShape>> From<T> for BasicShape {
|
||||
|
@ -483,8 +482,8 @@ pub mod basic_shape {
|
|||
impl From<position::Position> for structs::Position {
|
||||
fn from(other: position::Position) -> Self {
|
||||
structs::Position {
|
||||
mXPosition: other.horizontal.0.into(),
|
||||
mYPosition: other.vertical.0.into()
|
||||
mXPosition: other.horizontal.into(),
|
||||
mYPosition: other.vertical.into()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -501,8 +500,8 @@ pub mod basic_shape {
|
|||
fn from(other: T) -> Self {
|
||||
let other = other.borrow();
|
||||
position::Position {
|
||||
horizontal: HorizontalPosition(other.mXPosition.into()),
|
||||
vertical: VerticalPosition(other.mYPosition.into()),
|
||||
horizontal: other.mXPosition.into(),
|
||||
vertical: other.mYPosition.into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue