aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Zbarsky <dzbarsky@gmail.com>2015-08-08 05:00:37 -0400
committerDavid Zbarsky <dzbarsky@gmail.com>2015-08-08 05:00:37 -0400
commit9a88348978fb2a120f07eef669dd568fc0636704 (patch)
tree1bd64e9e3105833cb5a3128bed3223b5bde6555c
parent7bcb911cea63715541c6103773e4630d85455351 (diff)
downloadservo-9a88348978fb2a120f07eef669dd568fc0636704.tar.gz
servo-9a88348978fb2a120f07eef669dd568fc0636704.zip
Clean up dirty rect computation
-rw-r--r--components/canvas/canvas_paint_task.rs31
1 files changed, 13 insertions, 18 deletions
diff --git a/components/canvas/canvas_paint_task.rs b/components/canvas/canvas_paint_task.rs
index 2a3646bbaef..f5c2a05ed50 100644
--- a/components/canvas/canvas_paint_task.rs
+++ b/components/canvas/canvas_paint_task.rs
@@ -556,46 +556,41 @@ impl<'a> CanvasPaintTask<'a> {
// rgba -> bgra
byte_swap(&mut imagedata);
- // 1) If dirtyWidth is negative,
- // let dirtyX be dirtyX+dirtyWidth,
- // and let dirtyWidth be equal to the absolute magnitude of dirtyWidth.
+ let image_data_size = image_data_rect.size;
+
+ // Step 1. TODO (neutered data)
+
+ // Step 2.
if dirty_rect.size.width < 0.0f64 {
- dirty_rect.origin.x = dirty_rect.origin.x + dirty_rect.size.width;
+ dirty_rect.origin.x += dirty_rect.size.width;
dirty_rect.size.width = -dirty_rect.size.width;
}
- // 2) If dirtyHeight is negative, let dirtyY be dirtyY+dirtyHeight,
- // and let dirtyHeight be equal to the absolute magnitude of dirtyHeight.
if dirty_rect.size.height < 0.0f64 {
- dirty_rect.origin.y = dirty_rect.origin.y + dirty_rect.size.height;
+ dirty_rect.origin.y += dirty_rect.size.height;
dirty_rect.size.height = -dirty_rect.size.height;
}
- // 3) If dirtyX is negative, let dirtyWidth be dirtyWidth+dirtyX, and let dirtyX be zero.
+ // Step 3.
if dirty_rect.origin.x < 0.0f64 {
dirty_rect.size.width += dirty_rect.origin.x;
dirty_rect.origin.x = 0.0f64;
}
- // 3) If dirtyY is negative, let dirtyHeight be dirtyHeight+dirtyY, and let dirtyY be zero.
if dirty_rect.origin.y < 0.0f64 {
dirty_rect.size.height += dirty_rect.origin.y;
dirty_rect.origin.y = 0.0f64;
}
- // 4) If dirtyX+dirtyWidth is greater than the width attribute of the imagedata argument,
- // let dirtyWidth be the value of that width attribute, minus the value of dirtyX.
- if dirty_rect.origin.x + dirty_rect.size.width > image_data_rect.size.width {
- dirty_rect.size.width = image_data_rect.size.width - dirty_rect.origin.x;
+ // Step 4.
+ if dirty_rect.max_x() > image_data_size.width {
+ dirty_rect.size.width = image_data_size.width - dirty_rect.origin.x;
}
- // 4) If dirtyY+dirtyHeight is greater than the height attribute of the imagedata argument,
- // let dirtyHeight be the value of that height attribute, minus the value of dirtyY.
- if dirty_rect.origin.y + dirty_rect.size.height > image_data_rect.size.height {
- dirty_rect.size.height = image_data_rect.size.height - dirty_rect.origin.y;
+ if dirty_rect.max_y() > image_data_size.height {
+ dirty_rect.size.height = image_data_size.height - dirty_rect.origin.y;
}
-
// 5) If either dirtyWidth or dirtyHeight is negative or zero,
// stop without affecting any bitmaps
if dirty_rect.size.width <= 0.0 || dirty_rect.size.height <= 0.0 {