mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Addresses issues raised in #24465; removes redundancy in set_bitmap_dimensions
Removed passing test .ini files and moved euclid extensions to euclidext.rs to factor out redundant code
This commit is contained in:
parent
f7fb130a2a
commit
ec2961920b
32 changed files with 211 additions and 131 deletions
|
@ -13,7 +13,7 @@ use std::marker::PhantomData;
|
|||
use std::mem;
|
||||
use std::sync::Arc;
|
||||
use webrender::api::DirtyRect;
|
||||
use webrender_api::units::RectExt;
|
||||
use webrender_api::units::RectExt as RectExt_;
|
||||
|
||||
/// The canvas data stores a state machine for the current status of
|
||||
/// the path data and any relevant transformations that are
|
||||
|
@ -449,7 +449,7 @@ impl<'a> CanvasData<'a> {
|
|||
let source_rect = source_rect.ceil();
|
||||
// It discards the extra pixels (if any) that won't be painted
|
||||
let image_data = if Rect::from_size(image_size).contains_rect(&source_rect) {
|
||||
pixels::rgba8_get_rect(&image_data, image_size.to_u32(), source_rect.to_u32()).into()
|
||||
pixels::rgba8_get_rect(&image_data, image_size.to_u64(), source_rect.to_u64()).into()
|
||||
} else {
|
||||
image_data.into()
|
||||
};
|
||||
|
@ -927,10 +927,10 @@ impl<'a> CanvasData<'a> {
|
|||
self.backend.set_global_composition(op, &mut self.state);
|
||||
}
|
||||
|
||||
pub fn recreate(&mut self, size: Size2D<u32>) {
|
||||
pub fn recreate(&mut self, size: Size2D<u64>) {
|
||||
self.drawtarget = self
|
||||
.backend
|
||||
.create_drawtarget(Size2D::new(size.width as u64, size.height as u64));
|
||||
.create_drawtarget(Size2D::new(size.width, size.height));
|
||||
self.state = self.backend.recreate_paint_state(&self.state);
|
||||
self.saved_states.clear();
|
||||
// Webrender doesn't let images change size, so we clear the webrender image key.
|
||||
|
@ -997,7 +997,7 @@ impl<'a> CanvasData<'a> {
|
|||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata
|
||||
pub fn put_image_data(&mut self, mut imagedata: Vec<u8>, rect: Rect<u32>) {
|
||||
pub fn put_image_data(&mut self, mut imagedata: Vec<u8>, rect: Rect<u64>) {
|
||||
assert_eq!(imagedata.len() % 4, 0);
|
||||
assert_eq!(rect.size.area() as usize, imagedata.len() / 4);
|
||||
pixels::rgba8_byte_swap_and_premultiply_inplace(&mut imagedata);
|
||||
|
@ -1082,7 +1082,7 @@ impl<'a> CanvasData<'a> {
|
|||
/// canvas_size: The size of the canvas we're reading from
|
||||
/// read_rect: The area of the canvas we want to read from
|
||||
#[allow(unsafe_code)]
|
||||
pub fn read_pixels(&self, read_rect: Rect<u32>, canvas_size: Size2D<u32>) -> Vec<u8> {
|
||||
pub fn read_pixels(&self, read_rect: Rect<u64>, canvas_size: Size2D<u64>) -> Vec<u8> {
|
||||
let canvas_rect = Rect::from_size(canvas_size);
|
||||
if canvas_rect
|
||||
.intersection(&read_rect)
|
||||
|
@ -1092,7 +1092,7 @@ impl<'a> CanvasData<'a> {
|
|||
}
|
||||
|
||||
self.drawtarget.snapshot_data(&|bytes| {
|
||||
pixels::rgba8_get_rect(bytes, canvas_size.to_u32(), read_rect.to_u32()).into_owned()
|
||||
pixels::rgba8_get_rect(bytes, canvas_size, read_rect).into_owned()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -1189,3 +1189,35 @@ impl RectToi32 for Rect<f64> {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Size2DExt {
|
||||
fn to_u64(&self) -> Size2D<u64>;
|
||||
}
|
||||
|
||||
impl Size2DExt for Size2D<f64> {
|
||||
fn to_u64(&self) -> Size2D<u64> {
|
||||
self.cast()
|
||||
}
|
||||
}
|
||||
|
||||
impl Size2DExt for Size2D<u32> {
|
||||
fn to_u64(&self) -> Size2D<u64> {
|
||||
self.cast()
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RectExt {
|
||||
fn to_u64(&self) -> Rect<u64>;
|
||||
}
|
||||
|
||||
impl RectExt for Rect<f64> {
|
||||
fn to_u64(&self) -> Rect<u64> {
|
||||
self.cast()
|
||||
}
|
||||
}
|
||||
|
||||
impl RectExt for Rect<u32> {
|
||||
fn to_u64(&self) -> Rect<u64> {
|
||||
self.cast()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
) => {
|
||||
let image_data = self
|
||||
.canvas(canvas_id)
|
||||
.read_pixels(source_rect.to_u32(), image_size.to_u32());
|
||||
.read_pixels(source_rect.to_u64(), image_size.to_u64());
|
||||
self.canvas(other_canvas_id).draw_image(
|
||||
image_data.into(),
|
||||
source_rect.size,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue