From 0e863b3cef679738767267b3e61ef28511daaddb Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Fri, 9 Aug 2013 10:24:12 +0900 Subject: [PATCH] Implement asymmetric border colors --- src/components/gfx/display_list.rs | 2 +- src/components/gfx/render_context.rs | 11 +++++------ src/components/main/layout/box.rs | 28 ++++++++++++++++++++++------ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/components/gfx/display_list.rs b/src/components/gfx/display_list.rs index 8a5bb04d7a4..08e0557be77 100644 --- a/src/components/gfx/display_list.rs +++ b/src/components/gfx/display_list.rs @@ -104,7 +104,7 @@ pub struct BorderDisplayItem { border: SideOffsets2D, /// The color of the border. - color: Color, + color: SideOffsets2D, } impl DisplayItem { diff --git a/src/components/gfx/render_context.rs b/src/components/gfx/render_context.rs index d7e2242935e..e7b44a661e6 100644 --- a/src/components/gfx/render_context.rs +++ b/src/components/gfx/render_context.rs @@ -37,8 +37,7 @@ impl<'self> RenderContext<'self> { pub fn draw_border(&self, bounds: &Rect, border: SideOffsets2D, - color: Color) { - let pattern = ColorPattern(color); + color: SideOffsets2D) { let draw_opts = DrawOptions(1 as AzFloat, 0 as uint16_t); let stroke_fields = 2; // CAP_SQUARE let mut stroke_opts = StrokeOptions(0 as AzFloat, 10 as AzFloat, stroke_fields); @@ -53,28 +52,28 @@ impl<'self> RenderContext<'self> { let y = rect.origin.y + border.top * 0.5; let start = Point2D(rect.origin.x, y); let end = Point2D(rect.origin.x + rect.size.width, y); - self.canvas.draw_target.stroke_line(start, end, &pattern, &stroke_opts, &draw_opts); + self.canvas.draw_target.stroke_line(start, end, &ColorPattern(color.top), &stroke_opts, &draw_opts); // draw bottom border stroke_opts.line_width = border.bottom; let y = rect.origin.y + rect.size.height - border.bottom * 0.5; let start = Point2D(rect.origin.x, y); let end = Point2D(rect.origin.x + rect.size.width, y); - self.canvas.draw_target.stroke_line(start, end, &pattern, &stroke_opts, &draw_opts); + self.canvas.draw_target.stroke_line(start, end, &ColorPattern(color.bottom), &stroke_opts, &draw_opts); // draw left border stroke_opts.line_width = border.left; let x = rect.origin.x + border.left * 0.5; let start = Point2D(x, rect.origin.y); let end = Point2D(x, rect.origin.y + rect.size.height); - self.canvas.draw_target.stroke_line(start, end, &pattern, &stroke_opts, &draw_opts); + self.canvas.draw_target.stroke_line(start, end, &ColorPattern(color.left), &stroke_opts, &draw_opts); // draw right border stroke_opts.line_width = border.right; let x = rect.origin.x + rect.size.width - border.right * 0.5; let start = Point2D(x, rect.origin.y); let end = Point2D(x, rect.origin.y + rect.size.height); - self.canvas.draw_target.stroke_line(start, end, &pattern, &stroke_opts, &draw_opts); + self.canvas.draw_target.stroke_line(start, end, &ColorPattern(color.right), &stroke_opts, &draw_opts); } pub fn draw_image(&self, bounds: Rect, image: Arc<~Image>) { diff --git a/src/components/main/layout/box.rs b/src/components/main/layout/box.rs index ac37c30d9a8..c7d68310129 100644 --- a/src/components/main/layout/box.rs +++ b/src/components/main/layout/box.rs @@ -639,7 +639,11 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - color: rgb(0, 0, 200).to_gfx_color(), + color: SideOffsets2D::new(rgb(0, 0, 200).to_gfx_color(), + rgb(0, 0, 200).to_gfx_color(), + rgb(0, 0, 200).to_gfx_color(), + rgb(0, 0, 200).to_gfx_color()) + }; list.append_item(BorderDisplayItemClass(border_display_item)) } @@ -659,7 +663,11 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - color: rgb(0, 200, 0).to_gfx_color(), + color: SideOffsets2D::new(rgb(0, 200, 0).to_gfx_color(), + rgb(0, 200, 0).to_gfx_color(), + rgb(0, 200, 0).to_gfx_color(), + rgb(0, 200, 0).to_gfx_color()) + }; list.append_item(BorderDisplayItemClass(border_display_item)) } @@ -687,7 +695,11 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - color: rgb(0, 0, 200).to_gfx_color(), + color: SideOffsets2D::new(rgb(0, 0, 200).to_gfx_color(), + rgb(0, 0, 200).to_gfx_color(), + rgb(0, 0, 200).to_gfx_color(), + rgb(0, 0, 200).to_gfx_color()) + }; list.append_item(BorderDisplayItemClass(border_display_item)) } @@ -914,9 +926,10 @@ impl RenderBox { return } - // FIXME: all colors set to top color. this is obviously not right. let top_color = self.style().border_top_color(); - let color = top_color.to_gfx_color(); + let right_color = self.style().border_right_color(); + let bottom_color = self.style().border_bottom_color(); + let left_color = self.style().border_left_color(); // Append the border to the display list. do list.with_mut_ref |list| { @@ -929,7 +942,10 @@ impl RenderBox { border.right, border.bottom, border.left), - color: color, + color: SideOffsets2D::new(top_color.to_gfx_color(), + right_color.to_gfx_color(), + bottom_color.to_gfx_color(), + left_color.to_gfx_color()) }; list.append_item(BorderDisplayItemClass(border_display_item))