mirror of
https://github.com/servo/servo.git
synced 2025-08-01 19:50:30 +01:00
Auto merge of #11506 - nox:slither, r=emilio
Make canvas send their data themselves to other canvas <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11506) <!-- Reviewable:end -->
This commit is contained in:
commit
5a0c98afb2
7 changed files with 43 additions and 26 deletions
|
@ -20,7 +20,6 @@ tinyfiledialogs = {git = "https://github.com/jdm/tinyfiledialogs"}
|
|||
angle = {git = "https://github.com/servo/angle", branch = "servo"}
|
||||
app_units = {version = "0.2.3", features = ["plugins"]}
|
||||
bitflags = "0.7"
|
||||
canvas = {path = "../canvas"}
|
||||
canvas_traits = {path = "../canvas_traits"}
|
||||
caseless = "0.1.0"
|
||||
cssparser = {version = "0.5.4", features = ["heap_size", "serde-serialization"]}
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use canvas::canvas_paint_thread::RectToi32;
|
||||
use canvas_traits::{Canvas2dMsg, CanvasCommonMsg, CanvasMsg};
|
||||
use canvas_traits::{CompositionOrBlending, LineCapStyle, LineJoinStyle};
|
||||
use canvas_traits::{FillOrStrokeStyle, FillRule, LinearGradientStyle, RadialGradientStyle, RepetitionStyle};
|
||||
|
@ -363,36 +362,30 @@ impl CanvasRenderingContext2D {
|
|||
|
||||
let smoothing_enabled = self.state.borrow().image_smoothing_enabled;
|
||||
|
||||
// If the source and target canvas are the same
|
||||
let msg = if &*self.canvas == canvas {
|
||||
CanvasMsg::Canvas2d(Canvas2dMsg::DrawImageSelf(image_size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing_enabled))
|
||||
if &*self.canvas == canvas {
|
||||
let msg = CanvasMsg::Canvas2d(Canvas2dMsg::DrawImageSelf(
|
||||
image_size, dest_rect, source_rect, smoothing_enabled));
|
||||
self.ipc_renderer.send(msg).unwrap();
|
||||
} else {
|
||||
// Source and target canvases are different
|
||||
let context = match canvas.get_or_init_2d_context() {
|
||||
Some(context) => context,
|
||||
None => return Err(Error::InvalidState),
|
||||
};
|
||||
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
let msg = CanvasMsg::Canvas2d(Canvas2dMsg::DrawImageInOther(
|
||||
self.ipc_renderer.clone(),
|
||||
image_size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing_enabled,
|
||||
sender));
|
||||
|
||||
let renderer = context.get_ipc_renderer();
|
||||
let (sender, receiver) = ipc::channel::<Vec<u8>>().unwrap();
|
||||
// Reads pixels from source image
|
||||
renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::GetImageData(source_rect.to_i32(),
|
||||
image_size,
|
||||
sender)))
|
||||
.unwrap();
|
||||
let imagedata = receiver.recv().unwrap();
|
||||
// Writes pixels to destination canvas
|
||||
CanvasMsg::Canvas2d(Canvas2dMsg::DrawImage(imagedata,
|
||||
source_rect.size,
|
||||
dest_rect,
|
||||
source_rect,
|
||||
smoothing_enabled))
|
||||
renderer.send(msg).unwrap();
|
||||
receiver.recv().unwrap();
|
||||
};
|
||||
|
||||
self.ipc_renderer.send(msg).unwrap();
|
||||
self.mark_as_dirty();
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ extern crate app_units;
|
|||
#[allow(unused_extern_crates)]
|
||||
#[macro_use]
|
||||
extern crate bitflags;
|
||||
extern crate canvas;
|
||||
extern crate canvas_traits;
|
||||
extern crate caseless;
|
||||
extern crate core;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue