mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
gfx: Add elliptical border radius support
This commit is contained in:
parent
7474b29510
commit
3e5fb49b6f
9 changed files with 603 additions and 305 deletions
|
@ -961,12 +961,44 @@ pub struct BorderDisplayItem {
|
|||
/// Information about the border radii.
|
||||
///
|
||||
/// TODO(pcwalton): Elliptical radii.
|
||||
#[derive(Clone, Default, PartialEq, Debug, Copy, HeapSizeOf, Deserialize, Serialize)]
|
||||
#[derive(Clone, PartialEq, Debug, Copy, HeapSizeOf, Deserialize, Serialize)]
|
||||
pub struct BorderRadii<T> {
|
||||
pub top_left: T,
|
||||
pub top_right: T,
|
||||
pub bottom_right: T,
|
||||
pub bottom_left: T,
|
||||
pub top_left: Size2D<T>,
|
||||
pub top_right: Size2D<T>,
|
||||
pub bottom_right: Size2D<T>,
|
||||
pub bottom_left: Size2D<T>,
|
||||
}
|
||||
|
||||
impl<T> Default for BorderRadii<T> where T: Default, T: Clone {
|
||||
fn default() -> Self {
|
||||
let top_left = Size2D::new(Default::default(),
|
||||
Default::default());
|
||||
let top_right = Size2D::new(Default::default(),
|
||||
Default::default());
|
||||
let bottom_left = Size2D::new(Default::default(),
|
||||
Default::default());
|
||||
let bottom_right = Size2D::new(Default::default(),
|
||||
Default::default());
|
||||
BorderRadii { top_left: top_left,
|
||||
top_right: top_right,
|
||||
bottom_left: bottom_left,
|
||||
bottom_right: bottom_right }
|
||||
}
|
||||
}
|
||||
|
||||
impl BorderRadii<Au> {
|
||||
// Scale the border radii by the specified factor
|
||||
pub fn scale_by(&self, s: f32) -> BorderRadii<Au> {
|
||||
BorderRadii { top_left: BorderRadii::scale_corner_by(self.top_left, s),
|
||||
top_right: BorderRadii::scale_corner_by(self.top_right, s),
|
||||
bottom_left: BorderRadii::scale_corner_by(self.bottom_left, s),
|
||||
bottom_right: BorderRadii::scale_corner_by(self.bottom_right, s) }
|
||||
}
|
||||
|
||||
// Scale the border corner radius by the specified factor
|
||||
pub fn scale_corner_by(corner: Size2D<Au>, s: f32) -> Size2D<Au> {
|
||||
Size2D { width: corner.width.scale_by(s), height: corner.height.scale_by(s) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> BorderRadii<T> where T: PartialEq + Zero {
|
||||
|
@ -982,10 +1014,10 @@ impl<T> BorderRadii<T> where T: PartialEq + Zero + Clone {
|
|||
/// Returns a set of border radii that all have the given value.
|
||||
pub fn all_same(value: T) -> BorderRadii<T> {
|
||||
BorderRadii {
|
||||
top_left: value.clone(),
|
||||
top_right: value.clone(),
|
||||
bottom_right: value.clone(),
|
||||
bottom_left: value.clone(),
|
||||
top_left: Size2D { width: value.clone(), height: value.clone() },
|
||||
top_right: Size2D { width: value.clone(), height: value.clone() },
|
||||
bottom_right: Size2D { width: value.clone(), height: value.clone() },
|
||||
bottom_left: Size2D { width: value.clone(), height: value.clone() },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue