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..bee12968afd 100644 --- a/src/components/main/layout/box.rs +++ b/src/components/main/layout/box.rs @@ -628,10 +628,8 @@ impl RenderBox { // should have a real `SERVO_DEBUG` system. debug!("%?", { // Compute the text box bounds and draw a border surrounding them. - let debug_border = SideOffsets2D::new(Au::from_px(1), - Au::from_px(1), - Au::from_px(1), - Au::from_px(1)); + let debug_border = SideOffsets2D::new_all_same(Au::from_px(1)); + do list.with_mut_ref |list| { let border_display_item = ~BorderDisplayItem { base: BaseDisplayItem { @@ -639,7 +637,8 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - color: rgb(0, 0, 200).to_gfx_color(), + color: SideOffsets2D::new_all_same(rgb(0, 0, 200).to_gfx_color()) + }; list.append_item(BorderDisplayItemClass(border_display_item)) } @@ -659,7 +658,8 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - color: rgb(0, 200, 0).to_gfx_color(), + color: SideOffsets2D::new_all_same(rgb(0, 200, 0).to_gfx_color()) + }; list.append_item(BorderDisplayItemClass(border_display_item)) } @@ -675,10 +675,7 @@ impl RenderBox { // FIXME(pcwalton): This is a bit of an abuse of the logging infrastructure. We // should have a real `SERVO_DEBUG` system. debug!("%?", { - let debug_border = SideOffsets2D::new(Au::from_px(1), - Au::from_px(1), - Au::from_px(1), - Au::from_px(1)); + let debug_border = SideOffsets2D::new_all_same(Au::from_px(1)); do list.with_mut_ref |list| { let border_display_item = ~BorderDisplayItem { @@ -687,7 +684,8 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - color: rgb(0, 0, 200).to_gfx_color(), + color: SideOffsets2D::new_all_same(rgb(0, 0, 200).to_gfx_color()) + }; list.append_item(BorderDisplayItemClass(border_display_item)) } @@ -914,9 +912,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 +928,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)) diff --git a/src/support/azure/rust-azure b/src/support/azure/rust-azure index a54b840d446..cb2c8b0e28b 160000 --- a/src/support/azure/rust-azure +++ b/src/support/azure/rust-azure @@ -1 +1 @@ -Subproject commit a54b840d4468e7af8d0808d443daf646e7562b0b +Subproject commit cb2c8b0e28b9e5bd957217109709f2603d7a5e78 diff --git a/src/support/geom/rust-geom b/src/support/geom/rust-geom index fb352cf57ca..43a9dbb81bb 160000 --- a/src/support/geom/rust-geom +++ b/src/support/geom/rust-geom @@ -1 +1 @@ -Subproject commit fb352cf57ca59c16816a96408a3b3f6d4eaead00 +Subproject commit 43a9dbb81bbd4fb3eb130484f87848a701ecf79e diff --git a/src/test/html/test_asymmetric_border_color.html b/src/test/html/test_asymmetric_border_color.html new file mode 100644 index 00000000000..1ab1b8ea4ce --- /dev/null +++ b/src/test/html/test_asymmetric_border_color.html @@ -0,0 +1,15 @@ + + + Examples of margins, padding, and borders + + + +
  • Second element of list is a bit longer to illustrate wrapping. + +