From 0e863b3cef679738767267b3e61ef28511daaddb Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Fri, 9 Aug 2013 10:24:12 +0900 Subject: [PATCH 1/4] 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)) From 3616c033d63cef6695e765331a1536f744320275 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Fri, 16 Aug 2013 10:52:53 +0900 Subject: [PATCH 2/4] Use new_all_same with same value instead of new --- src/components/main/layout/box.rs | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/src/components/main/layout/box.rs b/src/components/main/layout/box.rs index c7d68310129..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,10 +637,7 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - 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()) + color: SideOffsets2D::new_all_same(rgb(0, 0, 200).to_gfx_color()) }; list.append_item(BorderDisplayItemClass(border_display_item)) @@ -663,10 +658,7 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - 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()) + color: SideOffsets2D::new_all_same(rgb(0, 200, 0).to_gfx_color()) }; list.append_item(BorderDisplayItemClass(border_display_item)) @@ -683,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 { @@ -695,10 +684,7 @@ impl RenderBox { extra: ExtraDisplayListData::new(*self), }, border: debug_border, - 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()) + color: SideOffsets2D::new_all_same(rgb(0, 0, 200).to_gfx_color()) }; list.append_item(BorderDisplayItemClass(border_display_item)) From 3e74538b8bbbd3a5326afec2197a4b08044efa36 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Tue, 20 Aug 2013 08:54:52 +0900 Subject: [PATCH 3/4] Test file for asymmetric border color --- src/test/html/test_asymmetric_border_color.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/test/html/test_asymmetric_border_color.html 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. + + From 858cd0717e03b5465962fed11f3fbd509fd64297 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Tue, 20 Aug 2013 08:56:46 +0900 Subject: [PATCH 4/4] Update submodules --- src/support/azure/rust-azure | 2 +- src/support/geom/rust-geom | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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