OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "ui/compositor/paint_context.h" | 5 #include "ui/compositor/paint_context.h" |
6 | 6 |
7 #include "ui/gfx/canvas.h" | 7 #include "ui/gfx/canvas.h" |
| 8 #include "ui/gfx/geometry/vector2d_f.h" |
| 9 |
| 10 #include "base/debug/stack_trace.h" |
8 | 11 |
9 namespace ui { | 12 namespace ui { |
10 | 13 |
11 PaintContext::PaintContext(cc::DisplayItemList* list, | 14 PaintContext::PaintContext(cc::DisplayItemList* list, |
12 float device_scale_factor, | 15 float device_scale_factor, |
13 const gfx::Rect& invalidation) | 16 const gfx::Rect& invalidation) |
14 : list_(list), | 17 : list_(list), |
15 owned_recorder_(new cc::PaintRecorder), | 18 owned_recorder_(new cc::PaintRecorder), |
16 recorder_(owned_recorder_.get()), | 19 recorder_(owned_recorder_.get()), |
17 device_scale_factor_(device_scale_factor), | 20 invalidation_( |
18 invalidation_(invalidation) { | 21 gfx::ScaleToEnclosingRect(invalidation, device_scale_factor)), |
| 22 device_scale_factor_(device_scale_factor) { |
19 #if DCHECK_IS_ON() | 23 #if DCHECK_IS_ON() |
20 root_visited_ = nullptr; | 24 root_visited_ = nullptr; |
21 inside_paint_recorder_ = false; | 25 inside_paint_recorder_ = false; |
22 #endif | 26 #endif |
23 } | 27 } |
24 | 28 |
25 PaintContext::PaintContext(const PaintContext& other, | 29 PaintContext::PaintContext(const PaintContext& other, |
26 const gfx::Vector2d& offset) | 30 const gfx::Vector2d& offset) |
27 : list_(other.list_), | 31 : list_(other.list_), |
28 owned_recorder_(nullptr), | 32 owned_recorder_(nullptr), |
29 recorder_(other.recorder_), | 33 recorder_(other.recorder_), |
30 device_scale_factor_(other.device_scale_factor_), | |
31 invalidation_(other.invalidation_), | 34 invalidation_(other.invalidation_), |
32 offset_(other.offset_ + offset) { | 35 offset_(other.offset_ + offset), |
| 36 device_scale_factor_(other.device_scale_factor_) { |
33 #if DCHECK_IS_ON() | 37 #if DCHECK_IS_ON() |
34 root_visited_ = other.root_visited_; | 38 root_visited_ = other.root_visited_; |
35 inside_paint_recorder_ = other.inside_paint_recorder_; | 39 inside_paint_recorder_ = other.inside_paint_recorder_; |
36 #endif | 40 #endif |
37 } | 41 } |
38 | 42 |
39 PaintContext::PaintContext(const PaintContext& other, | 43 PaintContext::PaintContext(const PaintContext& other, |
40 CloneWithoutInvalidation c) | 44 CloneWithoutInvalidation c) |
41 : list_(other.list_), | 45 : list_(other.list_), |
42 owned_recorder_(nullptr), | 46 owned_recorder_(nullptr), |
43 recorder_(other.recorder_), | 47 recorder_(other.recorder_), |
44 device_scale_factor_(other.device_scale_factor_), | |
45 invalidation_(), | 48 invalidation_(), |
46 offset_(other.offset_) { | 49 offset_(other.offset_), |
| 50 device_scale_factor_(other.device_scale_factor_) { |
47 #if DCHECK_IS_ON() | 51 #if DCHECK_IS_ON() |
48 root_visited_ = other.root_visited_; | 52 root_visited_ = other.root_visited_; |
49 inside_paint_recorder_ = other.inside_paint_recorder_; | 53 inside_paint_recorder_ = other.inside_paint_recorder_; |
50 #endif | 54 #endif |
51 } | 55 } |
52 | 56 |
53 PaintContext::~PaintContext() { | 57 PaintContext::~PaintContext() { |
54 } | 58 } |
55 | 59 |
| 60 gfx::Vector2dF PaintContext::CanvasScale() const { |
| 61 return gfx::Vector2dF( |
| 62 (float)(pixel_size_.width()) / size_.width(), |
| 63 (float)(pixel_size_.height()) / size_.height()); |
| 64 } |
| 65 |
| 66 gfx::Rect PaintContext::GetPixelBounds(const gfx::Rect& child_bounds) const { |
| 67 float dsf = device_scale_factor(); |
| 68 |
| 69 int right = child_bounds.x() + child_bounds.width(); |
| 70 int bottom = child_bounds.y() + child_bounds.height(); |
| 71 |
| 72 int new_x = std::round(child_bounds.x() * dsf); |
| 73 int new_y = std::round(child_bounds.y() * dsf); |
| 74 |
| 75 int new_right; |
| 76 int new_bottom; |
| 77 |
| 78 if (right == size_.width()) { |
| 79 new_right = pixel_size_.width(); |
| 80 } else { |
| 81 new_right = std::round(right * dsf); |
| 82 } |
| 83 if (bottom == size_.height()) { |
| 84 new_bottom = pixel_size_.height(); |
| 85 } else { |
| 86 new_bottom = std::round(bottom * dsf); |
| 87 } |
| 88 return gfx::Rect(new_x, new_y, new_right - new_x, new_bottom - new_y); |
| 89 |
| 90 } |
| 91 |
| 92 void PaintContext::UpdateSizeAndDSF(const gfx::Size& pixel_size, |
| 93 const gfx::Size& size) { |
| 94 pixel_size_ = pixel_size; |
| 95 size_ = size; |
| 96 /* |
| 97 device_scale_factor_x_ = (float)pixel_size.width() / (float)size.width(); |
| 98 device_scale_factor_y_ = (float)pixel_size.height() / (float)size.height(); |
| 99 LOG(ERROR) << "UpdateSize:" << device_scale_factor_x_; |
| 100 if (device_scale_factor_x_ == 1.25) { |
| 101 base::debug::StackTrace().Print(); |
| 102 } |
| 103 */ |
| 104 } |
| 105 |
56 gfx::Rect PaintContext::ToLayerSpaceBounds( | 106 gfx::Rect PaintContext::ToLayerSpaceBounds( |
57 const gfx::Size& size_in_context) const { | 107 const gfx::Size& size_in_context) const { |
58 return gfx::Rect(size_in_context) + offset_; | 108 return gfx::Rect(size_in_context) + offset_; |
59 } | 109 } |
60 | 110 |
61 gfx::Rect PaintContext::ToLayerSpaceRect(const gfx::Rect& rect) const { | 111 gfx::Rect PaintContext::ToLayerSpaceRect(const gfx::Rect& rect) const { |
62 return rect + offset_; | 112 return rect + offset_; |
63 } | 113 } |
64 | 114 |
65 } // namespace ui | 115 } // namespace ui |
OLD | NEW |