Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Snap rectangles to nearest pixels consistently. #7161

Merged
merged 1 commit into from Aug 11, 2015
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Snap rectangles to nearest pixels consistently.

Snapping the top-left and bottom-right corners separately can cause a
rectangle to change size when offset by a subpixel amount.  Instead, this
patch snaps the top-left corner, then rounds the size to a whole pixel amount,
so any rectangle of a given size will always have the same snapped size.

Fixes #7152.
  • Loading branch information
mbrubeck committed Aug 11, 2015
commit 3b6dc09e474a02d3724e8aa8a0c52653c59862f8
@@ -1171,16 +1171,10 @@ pub trait ToAzureRect {

impl ToAzureRect for Rect<Au> {
fn to_nearest_azure_rect(&self) -> Rect<AzFloat> {
let top_left = self.origin.to_nearest_azure_point();
let bottom_right = self.bottom_right().to_nearest_azure_point();
Rect::new(top_left,
Size2D::new((bottom_right.x - top_left.x) as AzFloat,
(bottom_right.y - top_left.y) as AzFloat))

Rect::new(self.origin.to_nearest_azure_point(), self.size.to_nearest_azure_size())
}
fn to_azure_rect(&self) -> Rect<AzFloat> {
Rect::new(self.origin.to_azure_point(), Size2D::new(self.size.width.to_f32_px(),
self.size.height.to_f32_px()))
Rect::new(self.origin.to_azure_point(), self.size.to_azure_size())
}
}

@@ -1382,11 +1376,12 @@ impl DrawTargetExtensions for DrawTarget {
}

fn create_rectangular_path(&self, rect: &Rect<Au>) -> Path {
let rect = rect.to_nearest_azure_rect();
let path_builder = self.create_path_builder();
path_builder.move_to(rect.origin.to_nearest_azure_point());
path_builder.line_to(Point2D::new(rect.max_x(), rect.origin.y).to_nearest_azure_point());
path_builder.line_to(Point2D::new(rect.max_x(), rect.max_y()).to_nearest_azure_point());
path_builder.line_to(Point2D::new(rect.origin.x, rect.max_y()).to_nearest_azure_point());
path_builder.move_to(rect.origin);
path_builder.line_to(Point2D::new(rect.max_x(), rect.origin.y));
path_builder.line_to(Point2D::new(rect.max_x(), rect.max_y()));
path_builder.line_to(Point2D::new(rect.origin.x, rect.max_y()));
path_builder.finish()
}
}
@@ -314,6 +314,7 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html
== text_decoration_cached.html text_decoration_cached_ref.html
# text_decoration_propagation_a.html text_decoration_propagation_b.html
!= text_decoration_smoke_a.html text_decoration_smoke_ref.html
!= text_decoration_underline_subpx_a.html text_decoration_underline_subpx_ref.html
== text_indent_a.html text_indent_ref.html
== text_justify_none_a.html text_justify_none_ref.html
!= text_overflow_a.html text_overflow_ref.html
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Underline test</title>
<style>
p {
font: 14px "Times New Roman";
text-decoration: underline;
}
</style>
</head>
<body>
<p>Hello</p>
</body>
</html>
@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Underline test</title>
<style>
p {
font: 14px "Times New Roman";
}
</style>
</head>
<body>
<p>Hello</p>
</body>
</html>
@@ -1,3 +1,4 @@
[position-relative-035.htm]
type: reftest
expected: FAIL
expected:
if os == "mac": FAIL
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.