OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "pdf/paint_aggregator.h" | 5 #include "pdf/paint_aggregator.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 22 matching lines...) Expand all Loading... |
33 // We only support scrolling along one axis at a time. A diagonal scroll will | 33 // We only support scrolling along one axis at a time. A diagonal scroll will |
34 // therefore be treated as an invalidation. | 34 // therefore be treated as an invalidation. |
35 // ---------------------------------------------------------------------------- | 35 // ---------------------------------------------------------------------------- |
36 | 36 |
37 PaintAggregator::PaintUpdate::PaintUpdate() = default; | 37 PaintAggregator::PaintUpdate::PaintUpdate() = default; |
38 | 38 |
39 PaintAggregator::PaintUpdate::PaintUpdate(const PaintUpdate& that) = default; | 39 PaintAggregator::PaintUpdate::PaintUpdate(const PaintUpdate& that) = default; |
40 | 40 |
41 PaintAggregator::PaintUpdate::~PaintUpdate() = default; | 41 PaintAggregator::PaintUpdate::~PaintUpdate() = default; |
42 | 42 |
43 PaintAggregator::InternalPaintUpdate::InternalPaintUpdate() : | 43 PaintAggregator::InternalPaintUpdate::InternalPaintUpdate() |
44 synthesized_scroll_damage_rect_(false) { | 44 : synthesized_scroll_damage_rect_(false) {} |
45 } | |
46 | 45 |
47 PaintAggregator::InternalPaintUpdate::~InternalPaintUpdate() { | 46 PaintAggregator::InternalPaintUpdate::~InternalPaintUpdate() {} |
48 } | |
49 | 47 |
50 pp::Rect PaintAggregator::InternalPaintUpdate::GetScrollDamage() const { | 48 pp::Rect PaintAggregator::InternalPaintUpdate::GetScrollDamage() const { |
51 // Should only be scrolling in one direction at a time. | 49 // Should only be scrolling in one direction at a time. |
52 DCHECK(!(scroll_delta.x() && scroll_delta.y())); | 50 DCHECK(!(scroll_delta.x() && scroll_delta.y())); |
53 | 51 |
54 pp::Rect damaged_rect; | 52 pp::Rect damaged_rect; |
55 | 53 |
56 // Compute the region we will expose by scrolling, and paint that into a | 54 // Compute the region we will expose by scrolling, and paint that into a |
57 // shared memory section. | 55 // shared memory section. |
58 if (scroll_delta.x()) { | 56 if (scroll_delta.x()) { |
(...skipping 17 matching lines...) Expand all Loading... |
76 } else { | 74 } else { |
77 damaged_rect.set_y(scroll_rect.bottom() + dy); | 75 damaged_rect.set_y(scroll_rect.bottom() + dy); |
78 damaged_rect.set_height(-dy); | 76 damaged_rect.set_height(-dy); |
79 } | 77 } |
80 } | 78 } |
81 | 79 |
82 // In case the scroll offset exceeds the width/height of the scroll rect | 80 // In case the scroll offset exceeds the width/height of the scroll rect |
83 return scroll_rect.Intersect(damaged_rect); | 81 return scroll_rect.Intersect(damaged_rect); |
84 } | 82 } |
85 | 83 |
86 PaintAggregator::PaintAggregator() { | 84 PaintAggregator::PaintAggregator() {} |
87 } | |
88 | 85 |
89 bool PaintAggregator::HasPendingUpdate() const { | 86 bool PaintAggregator::HasPendingUpdate() const { |
90 return !update_.scroll_rect.IsEmpty() || !update_.paint_rects.empty(); | 87 return !update_.scroll_rect.IsEmpty() || !update_.paint_rects.empty(); |
91 } | 88 } |
92 | 89 |
93 void PaintAggregator::ClearPendingUpdate() { | 90 void PaintAggregator::ClearPendingUpdate() { |
94 update_ = InternalPaintUpdate(); | 91 update_ = InternalPaintUpdate(); |
95 } | 92 } |
96 | 93 |
97 PaintAggregator::PaintUpdate PaintAggregator::GetPendingUpdate() { | 94 PaintAggregator::PaintUpdate PaintAggregator::GetPendingUpdate() { |
(...skipping 16 matching lines...) Expand all Loading... |
114 ret.paint_rects.reserve(update_.paint_rects.size() + 1); | 111 ret.paint_rects.reserve(update_.paint_rects.size() + 1); |
115 ret.paint_rects.insert(ret.paint_rects.end(), update_.paint_rects.begin(), | 112 ret.paint_rects.insert(ret.paint_rects.end(), update_.paint_rects.begin(), |
116 update_.paint_rects.end()); | 113 update_.paint_rects.end()); |
117 | 114 |
118 return ret; | 115 return ret; |
119 } | 116 } |
120 | 117 |
121 void PaintAggregator::SetIntermediateResults( | 118 void PaintAggregator::SetIntermediateResults( |
122 const std::vector<ReadyRect>& ready, | 119 const std::vector<ReadyRect>& ready, |
123 const std::vector<pp::Rect>& pending) { | 120 const std::vector<pp::Rect>& pending) { |
124 update_.ready_rects.insert( | 121 update_.ready_rects.insert(update_.ready_rects.end(), ready.begin(), |
125 update_.ready_rects.end(), ready.begin(), ready.end()); | 122 ready.end()); |
126 update_.paint_rects = pending; | 123 update_.paint_rects = pending; |
127 } | 124 } |
128 | 125 |
129 std::vector<PaintAggregator::ReadyRect> PaintAggregator::GetReadyRects() const { | 126 std::vector<PaintAggregator::ReadyRect> PaintAggregator::GetReadyRects() const { |
130 return update_.ready_rects; | 127 return update_.ready_rects; |
131 } | 128 } |
132 | 129 |
133 void PaintAggregator::InvalidateRect(const pp::Rect& rect) { | 130 void PaintAggregator::InvalidateRect(const pp::Rect& rect) { |
134 InvalidateRectInternal(rect, true); | 131 InvalidateRectInternal(rect, true); |
135 } | 132 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 } | 273 } |
277 } | 274 } |
278 | 275 |
279 if (add_paint) { | 276 if (add_paint) { |
280 // Add a non-overlapping paint. | 277 // Add a non-overlapping paint. |
281 update_.paint_rects.push_back(rect); | 278 update_.paint_rects.push_back(rect); |
282 } | 279 } |
283 | 280 |
284 // If the new paint overlaps with a scroll, then also invalidate the rect in | 281 // If the new paint overlaps with a scroll, then also invalidate the rect in |
285 // its new position. | 282 // its new position. |
286 if (check_scroll && | 283 if (check_scroll && !update_.scroll_rect.IsEmpty() && |
287 !update_.scroll_rect.IsEmpty() && | |
288 update_.scroll_rect.Intersects(rect)) { | 284 update_.scroll_rect.Intersects(rect)) { |
289 InvalidateRectInternal(ScrollPaintRect(rect, update_.scroll_delta), false); | 285 InvalidateRectInternal(ScrollPaintRect(rect, update_.scroll_delta), false); |
290 } | 286 } |
291 } | 287 } |
OLD | NEW |