From 65fea92d7de42087eb74e578b48352c2e2ffec2a Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 27 Mar 2012 17:10:05 -0700 Subject: [PATCH] Implement image surfaces --- src/gfx/geom.rs | 6 ++++++ src/gfx/surface.rs | 25 +++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) 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) + } +} +