Auto merge of #6035 - Jinwoo-Song:fix_background_image_position, r=pcwalton

According to CSS2.1 spec, background image should be positioned on padding box.
Spec: http://www.w3.org/TR/CSS21/colors.html#propdef-background-position

Fixes #6034.

r? @jdm 
cc @yichoi

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6035)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-05-13 20:40:33 -05:00
commit e25444c263
3 changed files with 49 additions and 2 deletions

View file

@ -435,8 +435,11 @@ impl FragmentDisplayListBuilding for Fragment {
let vertical_position = model::specified(background.background_position.vertical, let vertical_position = model::specified(background.background_position.vertical,
bounds.size.height - image_size.height); bounds.size.height - image_size.height);
let abs_x = virtual_origin_x + horizontal_position; // Background image should be positioned on the padding box basis.
let abs_y = virtual_origin_y + vertical_position; let border = style.logical_border_width().to_physical(style.writing_mode);
let abs_x = border.left + virtual_origin_x + horizontal_position;
let abs_y = border.top + virtual_origin_y + vertical_position;
// Adjust origin and size based on background-repeat // Adjust origin and size based on background-repeat
match background.background_repeat { match background.background_repeat {

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<style>
div {
background-image: url("test.jpeg");
width: 420px;
height: 298px;
border-width: 10px 20px 30px 40px;
border-style: solid;
border-color: red;
padding: 40px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 560px;
height: 418px;
background-color: red;
}
</style>
</head>
<body>
<div>
<!-- Image dimension is 500x378. -->
<img src="test.jpeg" style="position:relative; left:40px; top:10px;">
</div>
</body>
</html>