mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Update to euclid 0.8
This commit is contained in:
parent
b7facf41cb
commit
6259df5e2d
56 changed files with 538 additions and 558 deletions
|
@ -14,7 +14,7 @@ path = "lib.rs"
|
|||
app_units = "0.2.5"
|
||||
azure = {git = "https://github.com/servo/rust-azure", features = ["plugins"]}
|
||||
bitflags = "0.7"
|
||||
euclid = "0.7.1"
|
||||
euclid = "0.8.2"
|
||||
fnv = "1.0"
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
harfbuzz-sys = "0.1"
|
||||
|
@ -59,7 +59,7 @@ core-text = "1.1"
|
|||
|
||||
[target.'cfg(any(target_os = "linux", target_os = "android", target_os = "windows"))'.dependencies]
|
||||
freetype = {git = "https://github.com/servo/rust-freetype"}
|
||||
servo-fontconfig = "0.2"
|
||||
servo-fontconfig = "0.2.1"
|
||||
|
||||
[target.'cfg(any(target_arch = "x86_64", target_arch = "aarch64"))'.dependencies]
|
||||
simd = {git = "https://github.com/huonw/simd"}
|
||||
|
|
|
@ -45,7 +45,7 @@ use style::computed_values::{border_style, filter, image_rendering, mix_blend_mo
|
|||
use style_traits::cursor::Cursor;
|
||||
use text::TextRun;
|
||||
use text::glyph::ByteIndex;
|
||||
use util::geometry::{self, MAX_RECT, ScreenPx};
|
||||
use util::geometry::{self, max_rect, ScreenPx};
|
||||
use webrender_traits::{self, WebGLContextId};
|
||||
|
||||
pub use style::dom::OpaqueNode;
|
||||
|
@ -530,7 +530,7 @@ impl DisplayList {
|
|||
}
|
||||
}
|
||||
|
||||
fn transformed_tile_rect(tile_rect: TypedRect<ScreenPx, usize>, transform: &Matrix4D<f32>) -> Rect<Au> {
|
||||
fn transformed_tile_rect(tile_rect: TypedRect<usize, ScreenPx>, transform: &Matrix4D<f32>) -> Rect<Au> {
|
||||
// Invert the current transform, then use this to back transform
|
||||
// the tile rect (placed at the origin) into the space of this
|
||||
// stacking context.
|
||||
|
@ -884,7 +884,7 @@ impl ClippingRegion {
|
|||
#[inline]
|
||||
pub fn max() -> ClippingRegion {
|
||||
ClippingRegion {
|
||||
main: MAX_RECT,
|
||||
main: max_rect(),
|
||||
complex: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
@ -1176,7 +1176,7 @@ impl BorderRadii<Au> {
|
|||
|
||||
// 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) }
|
||||
Size2D::new(corner.width.scale_by(s), corner.height.scale_by(s))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1193,10 +1193,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: 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() },
|
||||
top_left: Size2D::new(value.clone(), value.clone()),
|
||||
top_right: Size2D::new(value.clone(), value.clone()),
|
||||
bottom_right: Size2D::new(value.clone(), value.clone()),
|
||||
bottom_left: Size2D::new(value.clone(), value.clone()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,16 +35,16 @@ use style::computed_values::{border_style, filter, image_rendering, mix_blend_mo
|
|||
use style_traits::PagePx;
|
||||
use text::TextRun;
|
||||
use text::glyph::ByteIndex;
|
||||
use util::geometry::{self, MAX_RECT, ScreenPx};
|
||||
use util::geometry::{self, max_rect, ScreenPx};
|
||||
use util::opts;
|
||||
|
||||
pub struct PaintContext<'a> {
|
||||
pub draw_target: DrawTarget,
|
||||
pub font_context: &'a mut Box<FontContext>,
|
||||
/// The rectangle that this context encompasses in page coordinates.
|
||||
pub page_rect: TypedRect<PagePx, f32>,
|
||||
pub page_rect: TypedRect<f32, PagePx>,
|
||||
/// The rectangle that this context encompasses in screen coordinates (pixels).
|
||||
pub screen_rect: TypedRect<ScreenPx, usize>,
|
||||
pub screen_rect: TypedRect<usize, ScreenPx>,
|
||||
/// The clipping rect for the stacking context as a whole.
|
||||
pub clip_rect: Option<Rect<Au>>,
|
||||
/// The current transient clipping region, if any. A "transient clipping region" is the
|
||||
|
@ -126,8 +126,8 @@ impl<'a> PaintContext<'a> {
|
|||
rect.translate(&self.subpixel_offset).to_nearest_azure_rect(self.screen_pixels_per_px())
|
||||
}
|
||||
|
||||
pub fn screen_pixels_per_px(&self) -> ScaleFactor<PagePx, ScreenPx, f32> {
|
||||
self.screen_rect.as_f32().size.width / self.page_rect.size.width
|
||||
pub fn screen_pixels_per_px(&self) -> ScaleFactor<f32, PagePx, ScreenPx> {
|
||||
ScaleFactor::new(self.screen_rect.as_f32().size.width / self.page_rect.size.width)
|
||||
}
|
||||
|
||||
pub fn draw_target(&self) -> &DrawTarget {
|
||||
|
@ -1539,7 +1539,7 @@ impl<'a> PaintContext<'a> {
|
|||
match clip_mode {
|
||||
BoxShadowClipMode::Inset => {
|
||||
path = temporary_draw_target.draw_target
|
||||
.create_rectangular_border_path(&MAX_RECT,
|
||||
.create_rectangular_border_path(&max_rect(),
|
||||
&shadow_bounds,
|
||||
pixels_per_px);
|
||||
self.draw_target.push_clip(
|
||||
|
@ -1549,7 +1549,7 @@ impl<'a> PaintContext<'a> {
|
|||
path = temporary_draw_target.draw_target.create_rectangular_path(&shadow_bounds,
|
||||
pixels_per_px);
|
||||
self.draw_target.push_clip(
|
||||
&self.draw_target.create_rectangular_border_path(&MAX_RECT, box_bounds,
|
||||
&self.draw_target.create_rectangular_border_path(&max_rect(), box_bounds,
|
||||
pixels_per_px))
|
||||
}
|
||||
BoxShadowClipMode::None => {
|
||||
|
@ -1644,12 +1644,12 @@ impl<'a> PaintContext<'a> {
|
|||
}
|
||||
|
||||
pub trait ToAzurePoint {
|
||||
fn to_nearest_azure_point(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Point2D<AzFloat>;
|
||||
fn to_nearest_azure_point(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Point2D<AzFloat>;
|
||||
fn to_azure_point(&self) -> Point2D<AzFloat>;
|
||||
}
|
||||
|
||||
impl ToAzurePoint for Point2D<Au> {
|
||||
fn to_nearest_azure_point(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Point2D<AzFloat> {
|
||||
fn to_nearest_azure_point(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Point2D<AzFloat> {
|
||||
Point2D::new(self.x.to_nearest_pixel(pixels_per_px.get()) as AzFloat,
|
||||
self.y.to_nearest_pixel(pixels_per_px.get()) as AzFloat)
|
||||
}
|
||||
|
@ -1659,15 +1659,15 @@ impl ToAzurePoint for Point2D<Au> {
|
|||
}
|
||||
|
||||
pub trait ToAzureRect {
|
||||
fn to_nearest_azure_rect(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Rect<AzFloat>;
|
||||
fn to_nearest_non_empty_azure_rect(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Rect<AzFloat>;
|
||||
fn to_nearest_azure_rect(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Rect<AzFloat>;
|
||||
fn to_nearest_non_empty_azure_rect(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Rect<AzFloat>;
|
||||
fn to_azure_rect(&self) -> Rect<AzFloat>;
|
||||
}
|
||||
|
||||
impl ToAzureRect for Rect<Au> {
|
||||
/// Round rects to pixel coordinates, maintaining the invariant of non-overlap,
|
||||
/// assuming that before rounding rects don't overlap.
|
||||
fn to_nearest_azure_rect(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Rect<AzFloat> {
|
||||
fn to_nearest_azure_rect(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Rect<AzFloat> {
|
||||
// Rounding the top left corner to the nearest pixel with the size rounded
|
||||
// to the nearest pixel multiple would violate the non-overlap condition,
|
||||
// e.g.
|
||||
|
@ -1687,7 +1687,7 @@ impl ToAzureRect for Rect<Au> {
|
|||
/// 10px×0.6px at 0px,28.56px -> 10px×0px at 0px,29px
|
||||
/// Instead round the top left to the nearest pixel and the size to the nearest pixel
|
||||
/// multiple. It's possible for non-overlapping rects after this rounding to overlap.
|
||||
fn to_nearest_non_empty_azure_rect(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Rect<AzFloat> {
|
||||
fn to_nearest_non_empty_azure_rect(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Rect<AzFloat> {
|
||||
Rect::new(self.origin.to_nearest_azure_point(pixels_per_px),
|
||||
self.size.to_nearest_azure_size(pixels_per_px))
|
||||
}
|
||||
|
@ -1698,11 +1698,11 @@ impl ToAzureRect for Rect<Au> {
|
|||
}
|
||||
|
||||
pub trait ToNearestAzureSize {
|
||||
fn to_nearest_azure_size(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Size2D<AzFloat>;
|
||||
fn to_nearest_azure_size(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Size2D<AzFloat>;
|
||||
}
|
||||
|
||||
impl ToNearestAzureSize for Size2D<Au> {
|
||||
fn to_nearest_azure_size(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Size2D<AzFloat> {
|
||||
fn to_nearest_azure_size(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Size2D<AzFloat> {
|
||||
Size2D::new(self.width.to_nearest_pixel(pixels_per_px.get()) as AzFloat,
|
||||
self.height.to_nearest_pixel(pixels_per_px.get()) as AzFloat)
|
||||
}
|
||||
|
@ -1735,11 +1735,11 @@ impl ToAzureIntSize for Size2D<AzFloat> {
|
|||
}
|
||||
|
||||
trait ToSideOffsetsPixels {
|
||||
fn to_float_pixels(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> SideOffsets2D<AzFloat>;
|
||||
fn to_float_pixels(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> SideOffsets2D<AzFloat>;
|
||||
}
|
||||
|
||||
impl ToSideOffsetsPixels for SideOffsets2D<Au> {
|
||||
fn to_float_pixels(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> SideOffsets2D<AzFloat> {
|
||||
fn to_float_pixels(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> SideOffsets2D<AzFloat> {
|
||||
SideOffsets2D::new(self.top.to_nearest_pixel(pixels_per_px.get()) as AzFloat,
|
||||
self.right.to_nearest_pixel(pixels_per_px.get()) as AzFloat,
|
||||
self.bottom.to_nearest_pixel(pixels_per_px.get()) as AzFloat,
|
||||
|
@ -1748,24 +1748,24 @@ impl ToSideOffsetsPixels for SideOffsets2D<Au> {
|
|||
}
|
||||
|
||||
trait ToRadiiPixels {
|
||||
fn to_radii_pixels(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> BorderRadii<AzFloat>;
|
||||
fn to_radii_pixels(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> BorderRadii<AzFloat>;
|
||||
}
|
||||
|
||||
impl ToRadiiPixels for BorderRadii<Au> {
|
||||
fn to_radii_pixels(&self, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> BorderRadii<AzFloat> {
|
||||
fn to_radii_pixels(&self, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> BorderRadii<AzFloat> {
|
||||
let to_nearest_px = |x: Au| -> AzFloat {
|
||||
x.to_nearest_pixel(pixels_per_px.get()) as AzFloat
|
||||
};
|
||||
|
||||
BorderRadii {
|
||||
top_left: Size2D { width: to_nearest_px(self.top_left.width),
|
||||
height: to_nearest_px(self.top_left.height) },
|
||||
top_right: Size2D { width: to_nearest_px(self.top_right.width),
|
||||
height: to_nearest_px(self.top_right.height) },
|
||||
bottom_left: Size2D { width: to_nearest_px(self.bottom_left.width),
|
||||
height: to_nearest_px(self.bottom_left.height) },
|
||||
bottom_right: Size2D { width: to_nearest_px(self.bottom_right.width),
|
||||
height: to_nearest_px(self.bottom_right.height) },
|
||||
top_left: Size2D::new(to_nearest_px(self.top_left.width),
|
||||
to_nearest_px(self.top_left.height)),
|
||||
top_right: Size2D::new(to_nearest_px(self.top_right.width),
|
||||
to_nearest_px(self.top_right.height)),
|
||||
bottom_left: Size2D::new(to_nearest_px(self.bottom_left.width),
|
||||
to_nearest_px(self.bottom_left.height)),
|
||||
bottom_right: Size2D::new(to_nearest_px(self.bottom_right.width),
|
||||
to_nearest_px(self.bottom_right.height)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1863,17 +1863,17 @@ trait DrawTargetExtensions {
|
|||
fn create_rectangular_border_path(&self,
|
||||
outer_rect: &Rect<Au>,
|
||||
inner_rect: &Rect<Au>,
|
||||
pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Path;
|
||||
pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Path;
|
||||
|
||||
/// Creates and returns a path that represents a rectangle.
|
||||
fn create_rectangular_path(&self, rect: &Rect<Au>, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Path;
|
||||
fn create_rectangular_path(&self, rect: &Rect<Au>, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Path;
|
||||
}
|
||||
|
||||
impl DrawTargetExtensions for DrawTarget {
|
||||
fn create_rectangular_border_path(&self,
|
||||
outer_rect: &Rect<Au>,
|
||||
inner_rect: &Rect<Au>,
|
||||
pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Path {
|
||||
pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Path {
|
||||
// +-----------+
|
||||
// |2 |1
|
||||
// | |
|
||||
|
@ -1902,7 +1902,7 @@ impl DrawTargetExtensions for DrawTarget {
|
|||
path_builder.finish()
|
||||
}
|
||||
|
||||
fn create_rectangular_path(&self, rect: &Rect<Au>, pixels_per_px: ScaleFactor<PagePx, ScreenPx, f32>) -> Path {
|
||||
fn create_rectangular_path(&self, rect: &Rect<Au>, pixels_per_px: ScaleFactor<f32, PagePx, ScreenPx>) -> Path {
|
||||
// Explicitly round to the nearest non-empty rect because when drawing
|
||||
// box-shadow the rect height can be between 0.5px & 1px and could
|
||||
// otherwise round to an empty rect.
|
||||
|
|
|
@ -11,7 +11,7 @@ use display_list::{DisplayItem, DisplayList, DisplayListTraversal};
|
|||
use display_list::{LayerInfo, StackingContext, StackingContextType};
|
||||
use euclid::Matrix4D;
|
||||
use euclid::point::Point2D;
|
||||
use euclid::rect::Rect;
|
||||
use euclid::rect::{Rect, TypedRect};
|
||||
use euclid::size::Size2D;
|
||||
use font_cache_thread::FontCacheThread;
|
||||
use font_context::FontContext;
|
||||
|
@ -684,8 +684,8 @@ impl WorkerThread {
|
|||
let mut paint_context = PaintContext {
|
||||
draw_target: draw_target.clone(),
|
||||
font_context: &mut self.font_context,
|
||||
page_rect: Rect::from_untyped(&tile.page_rect.translate(&paint_layer.display_list_origin)),
|
||||
screen_rect: Rect::from_untyped(&tile.screen_rect),
|
||||
page_rect: TypedRect::from_untyped(&tile.page_rect.translate(&paint_layer.display_list_origin)),
|
||||
screen_rect: TypedRect::from_untyped(&tile.screen_rect),
|
||||
clip_rect: None,
|
||||
transient_clip: None,
|
||||
layer_kind: layer_kind,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue