aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-10-25 16:33:28 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-10-25 16:33:28 -0700
commit38fb01b43f379f075d158eb00d4a7c75de60a9bb (patch)
tree85c4398f30423e9c5349863dd57bb6c2cfbe78fc
parent5c373c21d83cfb537c79e854d72544c0835cec2e (diff)
downloadservo-38fb01b43f379f075d158eb00d4a7c75de60a9bb.tar.gz
servo-38fb01b43f379f075d158eb00d4a7c75de60a9bb.zip
gfx: Place rects in the layer buffers, not just sizes
-rw-r--r--src/servo/gfx/compositor.rs5
-rw-r--r--src/servo/gfx/png_compositor.rs26
-rw-r--r--src/servo/gfx/render_context.rs3
-rw-r--r--src/servo/gfx/render_layers.rs6
-rw-r--r--src/servo/platform/osmain.rs10
5 files changed, 29 insertions, 21 deletions
diff --git a/src/servo/gfx/compositor.rs b/src/servo/gfx/compositor.rs
index f704132dddf..8e6e3af3513 100644
--- a/src/servo/gfx/compositor.rs
+++ b/src/servo/gfx/compositor.rs
@@ -1,7 +1,7 @@
use azure::azure_hl::{DrawTarget};
use cairo::cairo_hl::ImageSurface;
use dom::event::Event;
-use geom::size::Size2D;
+use geom::rect::Rect;
struct LayerBuffer {
// TODO: We should not be coupled to Cairo this tightly. Instead we should pull the buffer out
@@ -10,7 +10,8 @@ struct LayerBuffer {
draw_target: DrawTarget,
- size: Size2D<uint>,
+ // The rect in the containing RenderLayer that this represents.
+ rect: Rect<uint>,
// NB: stride is in pixels, like OpenGL GL_UNPACK_ROW_LENGTH.
stride: uint
diff --git a/src/servo/gfx/png_compositor.rs b/src/servo/gfx/png_compositor.rs
index bd0f108feb2..bf0b62caa7f 100644
--- a/src/servo/gfx/png_compositor.rs
+++ b/src/servo/gfx/png_compositor.rs
@@ -5,29 +5,31 @@ Each time the renderer renders a frame the compositor will output a
`~[u8]` containing the frame in PNG format.
*/
-use libc::{c_int, c_uint, c_void, c_uchar};
+use azure::azure_hl::DrawTarget;
use azure_bg = azure::bindgen;
use azure_bg::{AzCreateDrawTargetForCairoSurface, AzReleaseDrawTarget};
-use azure::azure_hl::DrawTarget;
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 compositor::Compositor;
-use render_task::{RenderTask, RenderMsg};
-use task::spawn_listener;
-use comm::{Chan, Port};
use cast::reinterpret_cast;
-use ptr::addr_of;
+use comm::{Chan, Port};
+use compositor::Compositor;
+use core::io::BytesWriter;
+use display_list::DisplayList;
use dom::event::Event;
use dvec::DVec;
-use display_list::DisplayList;
-use std::cell::Cell;
-use core::io::BytesWriter;
-use gfx::compositor::{LayerBuffer, LayerBufferSet};
+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>;
@@ -53,7 +55,7 @@ pub fn PngCompositor(output: Chan<~[u8]>) -> PngCompositor {
let layer_buffer = LayerBuffer {
cairo_surface: cairo_surface.clone(),
draw_target: move draw_target,
- size: Size2D(800u, 600u),
+ rect: Rect(Point2D(0u, 0u), Size2D(800u, 600u)),
stride: 800
};
let layer_buffer_set = LayerBufferSet { buffers: ~[ move layer_buffer ] };
diff --git a/src/servo/gfx/render_context.rs b/src/servo/gfx/render_context.rs
index 148e7fd1551..efa0db3f366 100644
--- a/src/servo/gfx/render_context.rs
+++ b/src/servo/gfx/render_context.rs
@@ -79,7 +79,8 @@ impl RenderContext {
fn clear(&self) {
let pattern = ColorPattern(Color(1f as AzFloat, 1f as AzFloat, 1f as AzFloat, 1f as AzFloat));
let rect = Rect(Point2D(0 as AzFloat, 0 as AzFloat),
- Size2D(self.canvas.size.width as AzFloat, self.canvas.size.height as AzFloat));
+ Size2D(self.canvas.rect.size.width as AzFloat,
+ self.canvas.rect.size.height as AzFloat));
self.canvas.draw_target.fill_rect(&rect, &pattern);
}
}
diff --git a/src/servo/gfx/render_layers.rs b/src/servo/gfx/render_layers.rs
index 8d155a23cea..0ff648db60a 100644
--- a/src/servo/gfx/render_layers.rs
+++ b/src/servo/gfx/render_layers.rs
@@ -5,6 +5,8 @@ use azure::azure_hl::DrawTarget;
use cairo::CAIRO_FORMAT_RGB24;
use cairo::cairo_hl::ImageSurface;
use core::libc::c_int;
+use geom::point::Point2D;
+use geom::rect::Rect;
use geom::size::Size2D;
pub struct RenderLayer {
@@ -21,7 +23,7 @@ pub fn render_layers(layer: &RenderLayer,
f: &fn(layer: &RenderLayer, buffer: &LayerBuffer) -> bool) -> LayerBufferSet {
let mut buffers = match move buffer_set { LayerBufferSet { buffers: move b } => move b };
let mut buffer = buffers.pop();
- if buffer.size != layer.size {
+ if buffer.rect.size != layer.size {
// Create a new buffer.
// Round the width up the nearest 32 pixels for DMA on the Mac.
@@ -39,7 +41,7 @@ pub fn render_layers(layer: &RenderLayer,
buffer = LayerBuffer {
cairo_surface: move cairo_surface,
draw_target: move draw_target,
- size: copy layer.size,
+ rect: Rect(Point2D(0u, 0u), copy layer.size),
stride: stride
};
}
diff --git a/src/servo/platform/osmain.rs b/src/servo/platform/osmain.rs
index 0db894cdf05..b5053774004 100644
--- a/src/servo/platform/osmain.rs
+++ b/src/servo/platform/osmain.rs
@@ -7,6 +7,8 @@ use core::util::replace;
use dom::event::{Event, ResizeEvent};
use dvec::DVec;
use geom::matrix::{Matrix4, identity};
+use geom::point::Point2D;
+use geom::rect::Rect;
use geom::size::Size2D;
use gfx::compositor::{Compositor, LayerBuffer, LayerBufferSet};
use layers::ImageLayer;
@@ -122,8 +124,8 @@ fn mainloop(mode: Mode, po: comm::Port<Msg>, dom_event_chan: pipes::SharedChan<E
lend_surface(surfaces, move sender);
let buffers = &mut surfaces.front.layer_buffer_set.buffers;
- let width = buffers[0].size.width as uint;
- let height = buffers[0].size.height as uint;
+ let width = buffers[0].rect.size.width as uint;
+ let height = buffers[0].rect.size.height as uint;
let image_data = @CairoSurfaceImageData {
cairo_surface: buffers[0].cairo_surface.clone(),
@@ -226,7 +228,7 @@ fn lend_surface(surfaces: &SurfaceSet, receiver: pipes::Chan<LayerBufferSet>) {
let layer_buffer = LayerBuffer {
cairo_surface: layer_buffer.cairo_surface.clone(),
draw_target: draw_target_ref.clone(),
- size: copy layer_buffer.size,
+ rect: copy layer_buffer.rect,
stride: layer_buffer.stride
};
#debug("osmain: lending surface %?", layer_buffer);
@@ -271,7 +273,7 @@ fn Surface() -> Surface {
let layer_buffer = LayerBuffer {
cairo_surface: move cairo_surface,
draw_target: move draw_target,
- size: Size2D(800u, 600u),
+ rect: Rect(Point2D(0u, 0u), Size2D(800u, 600u)),
stride: 800
};
let layer_buffer_set = LayerBufferSet { buffers: ~[ move layer_buffer ] };