diff --git a/src/gfx/geom.rs b/src/gfx/geom.rs index 4e857ffc802..7d2623525e3 100644 --- a/src/gfx/geom.rs +++ b/src/gfx/geom.rs @@ -5,6 +5,12 @@ type rect = { mut origin: point, mut size: size }; enum au = int; +impl size for size { + fn area() -> int { + self.width * self.height + } +} + fn point(x: A, y: A) -> point { {mut x: x, mut y: y} } diff --git a/src/gfx/surface.rs b/src/gfx/surface.rs index ac64b2a0961..b6978b80ef4 100644 --- a/src/gfx/surface.rs +++ b/src/gfx/surface.rs @@ -1,9 +1,30 @@ +import gfx::geom; +import gfx::geom::size; + enum format { fo_rgba_8888 // TODO: RGB 565, others? } -type surface = { - format: format +type image_surface = { + size: geom::size, + format: format, + buffer: [u8] }; +impl format for format { + fn bpp() -> uint { + alt self { + fo_rgba_8888 { 32u } + } + } +} + +fn image_surface(size: geom::size, format: format) -> image_surface { + { + size: size, + format: format, + buffer: vec::from_elem((size.area() as uint) * format.bpp(), 0u8) + } +} +