Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Side by Side Diff: ash/display/root_window_transformers.cc

Issue 37733003: Make GetRootWindow() return a Window instead of a RootWindow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "ash/display/root_window_transformers.h" 5 #include "ash/display/root_window_transformers.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "ash/display/display_info.h" 9 #include "ash/display/display_info.h"
10 #include "ash/display/display_manager.h" 10 #include "ash/display/display_manager.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 if (std::abs(SkMScalarToFloat(matrix.get(x, y))) < kEpsilon) 43 if (std::abs(SkMScalarToFloat(matrix.get(x, y))) < kEpsilon)
44 matrix.set(x, y, SkFloatToMScalar(0.0f)); 44 matrix.set(x, y, SkFloatToMScalar(0.0f));
45 } 45 }
46 } 46 }
47 } 47 }
48 48
49 // TODO(oshima): Transformers should be able to adjust itself 49 // TODO(oshima): Transformers should be able to adjust itself
50 // when the device scale factor is changed, instead of 50 // when the device scale factor is changed, instead of
51 // precalculating the transform using fixed value. 51 // precalculating the transform using fixed value.
52 52
53 gfx::Transform CreateRotationTransform(aura::RootWindow* root_window, 53 gfx::Transform CreateRotationTransform(aura::Window* root_window,
54 const gfx::Display& display) { 54 const gfx::Display& display) {
55 DisplayInfo info = 55 DisplayInfo info =
56 Shell::GetInstance()->display_manager()->GetDisplayInfo(display.id()); 56 Shell::GetInstance()->display_manager()->GetDisplayInfo(display.id());
57 57
58 // TODO(oshima): Add animation. (crossfade+rotation, or just cross-fade) 58 // TODO(oshima): Add animation. (crossfade+rotation, or just cross-fade)
59 #if defined(OS_WIN) 59 #if defined(OS_WIN)
60 // Windows 8 bots refused to resize the host window, and 60 // Windows 8 bots refused to resize the host window, and
61 // updating the transform results in incorrectly resizing 61 // updating the transform results in incorrectly resizing
62 // the root window. Don't apply the transform unless 62 // the root window. Don't apply the transform unless
63 // necessary so that unit tests pass on win8 bots. 63 // necessary so that unit tests pass on win8 bots.
(...skipping 21 matching lines...) Expand all
85 rotate.Translate(display.bounds().width() - one_pixel, 85 rotate.Translate(display.bounds().width() - one_pixel,
86 display.bounds().height() - one_pixel); 86 display.bounds().height() - one_pixel);
87 rotate.Rotate(180); 87 rotate.Rotate(180);
88 break; 88 break;
89 } 89 }
90 90
91 RoundNearZero(&rotate); 91 RoundNearZero(&rotate);
92 return rotate; 92 return rotate;
93 } 93 }
94 94
95 gfx::Transform CreateMagnifierTransform(aura::RootWindow* root_window) { 95 gfx::Transform CreateMagnifierTransform(aura::Window* root_window) {
96 MagnificationController* magnifier = 96 MagnificationController* magnifier =
97 Shell::GetInstance()->magnification_controller(); 97 Shell::GetInstance()->magnification_controller();
98 float magnifier_scale = 1.f; 98 float magnifier_scale = 1.f;
99 gfx::Point magnifier_offset; 99 gfx::Point magnifier_offset;
100 if (magnifier && magnifier->IsEnabled()) { 100 if (magnifier && magnifier->IsEnabled()) {
101 magnifier_scale = magnifier->GetScale(); 101 magnifier_scale = magnifier->GetScale();
102 magnifier_offset = magnifier->GetWindowPosition(); 102 magnifier_offset = magnifier->GetWindowPosition();
103 } 103 }
104 gfx::Transform transform; 104 gfx::Transform transform;
105 if (magnifier_scale != 1.f) { 105 if (magnifier_scale != 1.f) {
(...skipping 10 matching lines...) Expand all
116 if (insets.top() != 0 || insets.left() != 0) { 116 if (insets.top() != 0 || insets.left() != 0) {
117 float x_offset = insets.left() / device_scale_factor; 117 float x_offset = insets.left() / device_scale_factor;
118 float y_offset = insets.top() / device_scale_factor; 118 float y_offset = insets.top() / device_scale_factor;
119 transform.Translate(x_offset, y_offset); 119 transform.Translate(x_offset, y_offset);
120 } 120 }
121 float inverted_scale = 1.0f / ui_scale; 121 float inverted_scale = 1.0f / ui_scale;
122 transform.Scale(inverted_scale, inverted_scale); 122 transform.Scale(inverted_scale, inverted_scale);
123 return transform; 123 return transform;
124 } 124 }
125 125
126 gfx::Transform CreateOverscanAndUIScaleTransform(aura::RootWindow* root_window, 126 gfx::Transform CreateOverscanAndUIScaleTransform(aura::Window* root_window,
127 const gfx::Display& display) { 127 const gfx::Display& display) {
128 DisplayInfo info = 128 DisplayInfo info =
129 Shell::GetInstance()->display_manager()->GetDisplayInfo(display.id()); 129 Shell::GetInstance()->display_manager()->GetDisplayInfo(display.id());
130 return CreateInsetsAndScaleTransform( 130 return CreateInsetsAndScaleTransform(
131 info.GetOverscanInsetsInPixel(), 131 info.GetOverscanInsetsInPixel(),
132 ui::GetDeviceScaleFactor(root_window->layer()), 132 ui::GetDeviceScaleFactor(root_window->layer()),
133 info.ui_scale()); 133 info.ui_scale());
134 } 134 }
135 135
136 // RootWindowTransformer for ash environment. 136 // RootWindowTransformer for ash environment.
137 class AshRootWindowTransformer : public aura::RootWindowTransformer { 137 class AshRootWindowTransformer : public aura::RootWindowTransformer {
138 public: 138 public:
139 AshRootWindowTransformer(aura::RootWindow* root, 139 AshRootWindowTransformer(aura::Window* root,
140 const gfx::Display& display) 140 const gfx::Display& display)
141 : root_window_(root) { 141 : root_window_(root) {
142 root_window_bounds_transform_ = 142 root_window_bounds_transform_ =
143 CreateOverscanAndUIScaleTransform(root, display) * 143 CreateOverscanAndUIScaleTransform(root, display) *
144 CreateRotationTransform(root, display); 144 CreateRotationTransform(root, display);
145 transform_ = root_window_bounds_transform_ * CreateMagnifierTransform(root); 145 transform_ = root_window_bounds_transform_ * CreateMagnifierTransform(root);
146 CHECK(transform_.GetInverse(&invert_transform_)); 146 CHECK(transform_.GetInverse(&invert_transform_));
147 147
148 DisplayInfo info = Shell::GetInstance()->display_manager()-> 148 DisplayInfo info = Shell::GetInstance()->display_manager()->
149 GetDisplayInfo(display.id()); 149 GetDisplayInfo(display.id());
(...skipping 28 matching lines...) Expand all
178 return gfx::Rect(gfx::ToFlooredSize(new_bounds.size())); 178 return gfx::Rect(gfx::ToFlooredSize(new_bounds.size()));
179 } 179 }
180 180
181 virtual gfx::Insets GetHostInsets() const OVERRIDE { 181 virtual gfx::Insets GetHostInsets() const OVERRIDE {
182 return host_insets_; 182 return host_insets_;
183 } 183 }
184 184
185 private: 185 private:
186 virtual ~AshRootWindowTransformer() {} 186 virtual ~AshRootWindowTransformer() {}
187 187
188 aura::RootWindow* root_window_; 188 aura::Window* root_window_;
189 gfx::Transform transform_; 189 gfx::Transform transform_;
190 190
191 // The accurate representation of the inverse of the |transform_|. 191 // The accurate representation of the inverse of the |transform_|.
192 // This is used to avoid computation error caused by 192 // This is used to avoid computation error caused by
193 // |gfx::Transform::GetInverse|. 193 // |gfx::Transform::GetInverse|.
194 gfx::Transform invert_transform_; 194 gfx::Transform invert_transform_;
195 195
196 // The transform of the root window bounds. This is used to calculate 196 // The transform of the root window bounds. This is used to calculate
197 // the size of root window. 197 // the size of root window.
198 gfx::Transform root_window_bounds_transform_; 198 gfx::Transform root_window_bounds_transform_;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 gfx::Transform transform_; 270 gfx::Transform transform_;
271 gfx::Rect root_bounds_; 271 gfx::Rect root_bounds_;
272 gfx::Insets insets_; 272 gfx::Insets insets_;
273 273
274 DISALLOW_COPY_AND_ASSIGN(MirrorRootWindowTransformer); 274 DISALLOW_COPY_AND_ASSIGN(MirrorRootWindowTransformer);
275 }; 275 };
276 276
277 } // namespace 277 } // namespace
278 278
279 aura::RootWindowTransformer* CreateRootWindowTransformerForDisplay( 279 aura::RootWindowTransformer* CreateRootWindowTransformerForDisplay(
280 aura::RootWindow* root, 280 aura::Window* root,
281 const gfx::Display& display) { 281 const gfx::Display& display) {
282 return new AshRootWindowTransformer(root, display); 282 return new AshRootWindowTransformer(root, display);
283 } 283 }
284 284
285 aura::RootWindowTransformer* CreateRootWindowTransformerForMirroredDisplay( 285 aura::RootWindowTransformer* CreateRootWindowTransformerForMirroredDisplay(
286 const DisplayInfo& source_display_info, 286 const DisplayInfo& source_display_info,
287 const DisplayInfo& mirror_display_info) { 287 const DisplayInfo& mirror_display_info) {
288 return new MirrorRootWindowTransformer(source_display_info, 288 return new MirrorRootWindowTransformer(source_display_info,
289 mirror_display_info); 289 mirror_display_info);
290 } 290 }
291 291
292 } // namespace internal 292 } // namespace internal
293 } // namespace ash 293 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/root_window_transformers.h ('k') | ash/display/root_window_transformers_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698