mirror of
https://github.com/servo/servo.git
synced 2025-07-21 22:33:41 +01:00
Use IpcSharedMemory
for Canvas2dMsg::DrawImage
(#30544)
* Use `IpcSharedMemory` for `Canvas2DMsg::DrawImage` * Fix `Canvas2dMsg::DrawEmptyImage` crashes * Do not premultiply canvas image data * Move `image_data` back to its original position
This commit is contained in:
parent
66258bfbbd
commit
2d7dfb06c0
4 changed files with 37 additions and 25 deletions
|
@ -175,22 +175,27 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
.canvas(canvas_id)
|
||||
.is_point_in_path(x, y, fill_rule, chan),
|
||||
Canvas2dMsg::DrawImage(
|
||||
imagedata,
|
||||
ref image_data,
|
||||
image_size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing_enabled,
|
||||
) => {
|
||||
let data = imagedata.map_or_else(
|
||||
|| vec![0; image_size.width as usize * image_size.height as usize * 4],
|
||||
|bytes| bytes.into_vec(),
|
||||
);
|
||||
) => self.canvas(canvas_id).draw_image(
|
||||
&*image_data,
|
||||
image_size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing_enabled,
|
||||
true,
|
||||
),
|
||||
Canvas2dMsg::DrawEmptyImage(image_size, dest_rect, source_rect) => {
|
||||
self.canvas(canvas_id).draw_image(
|
||||
data,
|
||||
&vec![0; image_size.area() as usize * 4],
|
||||
image_size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing_enabled,
|
||||
false,
|
||||
false,
|
||||
)
|
||||
},
|
||||
Canvas2dMsg::DrawImageInOther(
|
||||
|
@ -204,11 +209,12 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
.canvas(canvas_id)
|
||||
.read_pixels(source_rect.to_u64(), image_size.to_u64());
|
||||
self.canvas(other_canvas_id).draw_image(
|
||||
image_data.into(),
|
||||
&image_data,
|
||||
source_rect.size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing,
|
||||
false,
|
||||
);
|
||||
},
|
||||
Canvas2dMsg::MoveTo(ref point) => self.canvas(canvas_id).move_to(point),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue