diff options
Diffstat (limited to 'src/servo/gfx/renderer.rs')
-rw-r--r-- | src/servo/gfx/renderer.rs | 53 |
1 files changed, 22 insertions, 31 deletions
diff --git a/src/servo/gfx/renderer.rs b/src/servo/gfx/renderer.rs index ca36f51dfe7..07db811deaf 100644 --- a/src/servo/gfx/renderer.rs +++ b/src/servo/gfx/renderer.rs @@ -12,7 +12,8 @@ import dom::event::{Event, ResizeEvent}; import geom::size::Size2D; import geom::rect::Rect; import geom::point::Point2D; -import azure_hl::{AsAzureRect, Color, ColorPattern, DrawTarget}; +import azure_hl::{AsAzureRect, B8G8R8A8, Color, ColorPattern, DrawOptions, DrawSurfaceOptions}; +import azure_hl::{DrawTarget, Linear}; import ptr::addr_of; import std::arc::arc; import azure::cairo::{cairo_font_face_t, cairo_scaled_font_t}; @@ -102,25 +103,27 @@ fn draw_display_list(azure_draw_target: AzDrawTargetRef, display_list: dl::displ } } +trait ToAzureRect { + fn to_azure_rect() -> Rect<AzFloat>; +} + +impl Rect<au> : ToAzureRect { + fn to_azure_rect() -> Rect<AzFloat> { + Rect(Point2D(au_to_px(self.origin.x) as AzFloat, au_to_px(self.origin.y) as AzFloat), + Size2D(au_to_px(self.size.width) as AzFloat, au_to_px(self.size.height) as AzFloat)) + } +} + fn draw_solid_color(draw_target: &DrawTarget, item: dl::display_item, r: u8, g: u8, b: u8) { let color = Color(r.to_float() as AzFloat, g.to_float() as AzFloat, b.to_float() as AzFloat, 1f as AzFloat); - let pattern = ColorPattern(color); - - let rect = Rect(Point2D(au_to_px(item.bounds.origin.x) as AzFloat, - au_to_px(item.bounds.origin.y) as AzFloat), - Size2D(au_to_px(item.bounds.size.width) as AzFloat, - au_to_px(item.bounds.size.height) as AzFloat)); - - draw_target.fill_rect(rect, pattern); + draw_target.fill_rect(item.bounds.to_azure_rect(), ColorPattern(color)); } fn draw_image(draw_target: &DrawTarget, item: dl::display_item, image: arc<~Image>) unsafe { - let draw_target = draw_target.azure_draw_target; - let image = std::arc::get(&image); let size = Size2D(image.width as i32, image.height as i32); let stride = image.width * 4; @@ -138,27 +141,15 @@ fn draw_image(draw_target: &DrawTarget, item: dl::display_item, image: arc<~Imag } }; - let azure_surface = - AzDrawTargetCreateSourceSurfaceFromData(draw_target, - addr_of(data[0]), - unsafe::reinterpret_cast(addr_of(size)), - stride as i32, - 0u32); - let source_rect = Rect(Point2D(0.0f as AzFloat, 0.0f as AzFloat), + let azure_surface = draw_target.create_source_surface_from_data(data, size, stride as i32, + B8G8R8A8); + let source_rect = Rect(Point2D(0 as AzFloat, 0 as AzFloat), Size2D(image.width as AzFloat, image.height as AzFloat)); - let dest_rect = Rect(Point2D(au_to_px(item.bounds.origin.x) as AzFloat, - au_to_px(item.bounds.origin.y) as AzFloat), - Size2D(au_to_px(item.bounds.size.width) as AzFloat, - au_to_px(item.bounds.size.height) as AzFloat)); - let draw_surface_options = azure_hl::DrawSurfaceOptions(azure_hl::Linear, true); - let draw_options = azure_hl::DrawOptions(1.0f as AzFloat, 0); - AzDrawTargetDrawSurface(draw_target, - azure_surface, - addr_of(dest_rect.as_azure_rect()), - addr_of(source_rect.as_azure_rect()), - addr_of(draw_surface_options.as_azure_draw_surface_options()), - addr_of(draw_options.as_azure_draw_options())); - AzReleaseSourceSurface(azure_surface); + let dest_rect = item.bounds.to_azure_rect(); + let draw_surface_options = DrawSurfaceOptions(Linear, true); + let draw_options = DrawOptions(1.0f as AzFloat, 0); + draw_target.draw_surface(azure_surface, dest_rect, source_rect, draw_surface_options, + draw_options); } fn draw_text(draw_target: &DrawTarget, item: dl::display_item, text_run: TextRun) { |