mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Remove PngCompositor. Will need a different solution
This commit is contained in:
parent
ddd3065c0b
commit
21cd748269
3 changed files with 5 additions and 108 deletions
|
@ -1,107 +0,0 @@
|
|||
/*!
|
||||
A graphics compositor that renders to PNG format buffers
|
||||
|
||||
Each time the renderer renders a frame the compositor will output a
|
||||
`~[u8]` containing the frame in PNG format.
|
||||
*/
|
||||
|
||||
use azure::azure_hl::DrawTarget;
|
||||
use azure_bg = azure::bindgen;
|
||||
use azure_bg::{AzCreateDrawTargetForCairoSurface, AzReleaseDrawTarget};
|
||||
use cairo::cairo_hl::ImageSurface;
|
||||
use cairo::{CAIRO_FORMAT_ARGB32, cairo_surface_t, cairo_status_t, CAIRO_STATUS_SUCCESS};
|
||||
use cairo_bg = cairo::bindgen;
|
||||
use cairo_bg::{cairo_image_surface_create, cairo_surface_destroy};
|
||||
use cairo_bg::{cairo_surface_write_to_png_stream};
|
||||
use cast::reinterpret_cast;
|
||||
use comm::{Chan, Port};
|
||||
use compositor::Compositor;
|
||||
use core::io::BytesWriter;
|
||||
use display_list::DisplayList;
|
||||
use dom::event::Event;
|
||||
use dvec::DVec;
|
||||
use geom::point::Point2D;
|
||||
use geom::rect::Rect;
|
||||
use geom::size::Size2D;
|
||||
use gfx::compositor::{LayerBuffer, LayerBufferSet};
|
||||
use gfx::render_layers::RenderLayer;
|
||||
use libc::{c_int, c_uint, c_void, c_uchar};
|
||||
use ptr::addr_of;
|
||||
use render_task::{RenderTask, RenderMsg};
|
||||
use std::cell::Cell;
|
||||
use task::spawn_listener;
|
||||
|
||||
pub type PngCompositor = Chan<Msg>;
|
||||
|
||||
pub enum Msg {
|
||||
BeginDrawing(pipes::Chan<LayerBufferSet>),
|
||||
Draw(pipes::Chan<LayerBufferSet>, LayerBufferSet),
|
||||
Exit
|
||||
}
|
||||
|
||||
impl Chan<Msg> : Compositor {
|
||||
fn begin_drawing(next_dt: pipes::Chan<LayerBufferSet>) {
|
||||
self.send(BeginDrawing(move next_dt))
|
||||
}
|
||||
fn draw(next_dt: pipes::Chan<LayerBufferSet>, draw_me: LayerBufferSet) {
|
||||
self.send(Draw(move next_dt, move draw_me))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn PngCompositor(output: Chan<~[u8]>) -> PngCompositor {
|
||||
do spawn_listener |po: Port<Msg>| {
|
||||
let cairo_surface = ImageSurface(CAIRO_FORMAT_ARGB32, 800, 600);
|
||||
let draw_target = DrawTarget(&cairo_surface);
|
||||
let layer_buffer = LayerBuffer {
|
||||
cairo_surface: cairo_surface.clone(),
|
||||
draw_target: move draw_target,
|
||||
rect: Rect(Point2D(0u, 0u), Size2D(800u, 600u)),
|
||||
stride: 800
|
||||
};
|
||||
let layer_buffer_set = LayerBufferSet { buffers: ~[ move layer_buffer ] };
|
||||
let layer_buffer_set = Cell(move layer_buffer_set);
|
||||
|
||||
loop {
|
||||
match po.recv() {
|
||||
BeginDrawing(sender) => {
|
||||
debug!("png_compositor: begin_drawing");
|
||||
sender.send(layer_buffer_set.take());
|
||||
}
|
||||
Draw(move sender, move layer_buffer_set) => {
|
||||
debug!("png_compositor: draw");
|
||||
do_draw(move sender, move layer_buffer_set, output, &cairo_surface);
|
||||
}
|
||||
Exit => break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn do_draw(sender: pipes::Chan<LayerBufferSet>,
|
||||
layer_buffer_set: LayerBufferSet,
|
||||
output: Chan<~[u8]>,
|
||||
cairo_surface: &ImageSurface) {
|
||||
let buffer = BytesWriter();
|
||||
cairo_surface.write_to_png_stream(&buffer);
|
||||
output.send(buffer.bytes.get());
|
||||
|
||||
// Send the next draw target to the renderer
|
||||
sender.send(move layer_buffer_set);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sanity_check() {
|
||||
do listen |self_channel| {
|
||||
let compositor = PngCompositor(self_channel);
|
||||
let renderer = RenderTask(compositor);
|
||||
|
||||
let dlist : DisplayList = DVec();
|
||||
let render_layer = RenderLayer { display_list: move dlist, size: Size2D(800u, 600u) };
|
||||
renderer.send(RenderMsg(move render_layer));
|
||||
let (exit_chan, exit_response_from_engine) = pipes::stream();
|
||||
renderer.send(render_task::ExitMsg(move exit_chan));
|
||||
exit_response_from_engine.recv();
|
||||
|
||||
compositor.send(Exit)
|
||||
}
|
||||
}
|
|
@ -77,7 +77,6 @@ pub mod gfx {
|
|||
pub mod surface;
|
||||
pub mod render_task;
|
||||
pub mod compositor;
|
||||
pub mod png_compositor;
|
||||
pub mod display_list;
|
||||
pub mod render_layers;
|
||||
priv mod render_context;
|
||||
|
|
|
@ -69,6 +69,11 @@ fn run_pipeline_screen(urls: &[~str]) {
|
|||
osmain.send(osmain::Exit);
|
||||
}
|
||||
|
||||
fn run_pipeline_png(_url: ~str, _outfile: &str) {
|
||||
fail ~"PNG compositor is broken";
|
||||
}
|
||||
|
||||
#[cfg(broken)]
|
||||
fn run_pipeline_png(url: ~str, outfile: &str) {
|
||||
// Use a PNG encoder as the graphics compositor
|
||||
use gfx::png_compositor;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue