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

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

Issue 289583002: Lock rotation when screen is manually rotated. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Define sources for rotation Created 6 years, 7 months 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
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 <stdio.h> 5 #include <stdio.h>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/display/display_info.h" 9 #include "ash/display/display_info.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 149 }
150 } 150 }
151 display_modes[native_mode].native = true; 151 display_modes[native_mode].native = true;
152 } 152 }
153 153
154 if (id == gfx::Display::kInvalidDisplayID) 154 if (id == gfx::Display::kInvalidDisplayID)
155 id = synthesized_display_id++; 155 id = synthesized_display_id++;
156 DisplayInfo display_info( 156 DisplayInfo display_info(
157 id, base::StringPrintf("Display-%d", static_cast<int>(id)), has_overscan); 157 id, base::StringPrintf("Display-%d", static_cast<int>(id)), has_overscan);
158 display_info.set_device_scale_factor(device_scale_factor); 158 display_info.set_device_scale_factor(device_scale_factor);
159 display_info.set_rotation(rotation); 159 display_info.SetRotation(rotation, ui::USER);
160 display_info.set_configured_ui_scale(ui_scale); 160 display_info.set_configured_ui_scale(ui_scale);
161 display_info.SetBounds(bounds_in_native); 161 display_info.SetBounds(bounds_in_native);
162 display_info.set_display_modes(display_modes); 162 display_info.set_display_modes(display_modes);
163 163
164 // To test the overscan, it creates the default 5% overscan. 164 // To test the overscan, it creates the default 5% overscan.
165 if (has_overscan) { 165 if (has_overscan) {
166 int width = bounds_in_native.width() / device_scale_factor / 40; 166 int width = bounds_in_native.width() / device_scale_factor / 40;
167 int height = bounds_in_native.height() / device_scale_factor / 40; 167 int height = bounds_in_native.height() / device_scale_factor / 40;
168 display_info.SetOverscanInsets(gfx::Insets(height, width, height, width)); 168 display_info.SetOverscanInsets(gfx::Insets(height, width, height, width));
169 display_info.UpdateDisplaySize(); 169 display_info.UpdateDisplaySize();
170 } 170 }
171 171
172 DVLOG(1) << "DisplayInfoFromSpec info=" << display_info.ToString() 172 DVLOG(1) << "DisplayInfoFromSpec info=" << display_info.ToString()
173 << ", spec=" << spec; 173 << ", spec=" << spec;
174 return display_info; 174 return display_info;
175 } 175 }
176 176
177 DisplayInfo::DisplayInfo() 177 DisplayInfo::DisplayInfo()
178 : id_(gfx::Display::kInvalidDisplayID), 178 : id_(gfx::Display::kInvalidDisplayID),
179 has_overscan_(false), 179 has_overscan_(false),
180 rotation_(gfx::Display::ROTATE_0), 180 current_rotation_(gfx::Display::ROTATE_0),
181 touch_support_(gfx::Display::TOUCH_SUPPORT_UNKNOWN), 181 touch_support_(gfx::Display::TOUCH_SUPPORT_UNKNOWN),
182 touch_device_id_(0), 182 touch_device_id_(0),
183 device_scale_factor_(1.0f), 183 device_scale_factor_(1.0f),
184 overscan_insets_in_dip_(0, 0, 0, 0), 184 overscan_insets_in_dip_(0, 0, 0, 0),
185 configured_ui_scale_(1.0f), 185 configured_ui_scale_(1.0f),
186 native_(false), 186 native_(false),
187 color_profile_(ui::COLOR_PROFILE_STANDARD) { 187 color_profile_(ui::COLOR_PROFILE_STANDARD) {
188 } 188 }
189 189
190 DisplayInfo::DisplayInfo(int64 id, 190 DisplayInfo::DisplayInfo(int64 id,
191 const std::string& name, 191 const std::string& name,
192 bool has_overscan) 192 bool has_overscan)
193 : id_(id), 193 : id_(id),
194 name_(name), 194 name_(name),
195 has_overscan_(has_overscan), 195 has_overscan_(has_overscan),
196 rotation_(gfx::Display::ROTATE_0), 196 current_rotation_(gfx::Display::ROTATE_0),
197 touch_support_(gfx::Display::TOUCH_SUPPORT_UNKNOWN), 197 touch_support_(gfx::Display::TOUCH_SUPPORT_UNKNOWN),
198 touch_device_id_(0), 198 touch_device_id_(0),
199 device_scale_factor_(1.0f), 199 device_scale_factor_(1.0f),
200 overscan_insets_in_dip_(0, 0, 0, 0), 200 overscan_insets_in_dip_(0, 0, 0, 0),
201 configured_ui_scale_(1.0f), 201 configured_ui_scale_(1.0f),
202 native_(false), 202 native_(false),
203 color_profile_(ui::COLOR_PROFILE_STANDARD) { 203 color_profile_(ui::COLOR_PROFILE_STANDARD) {
204 } 204 }
205 205
206 DisplayInfo::~DisplayInfo() { 206 DisplayInfo::~DisplayInfo() {
(...skipping 16 matching lines...) Expand all
223 // cases which use "/o" annotation which sets the overscan inset 223 // cases which use "/o" annotation which sets the overscan inset
224 // to native, and that overscan has to be propagated. This does not 224 // to native, and that overscan has to be propagated. This does not
225 // happen on the real environment. 225 // happen on the real environment.
226 if (!native_info.overscan_insets_in_dip_.empty()) 226 if (!native_info.overscan_insets_in_dip_.empty())
227 overscan_insets_in_dip_ = native_info.overscan_insets_in_dip_; 227 overscan_insets_in_dip_ = native_info.overscan_insets_in_dip_;
228 228
229 // Rotation_ and ui_scale_ color_profile_ are given by preference, 229 // Rotation_ and ui_scale_ color_profile_ are given by preference,
230 // or unit tests. Don't copy if this native_info came from 230 // or unit tests. Don't copy if this native_info came from
231 // DisplayChangeObserver. 231 // DisplayChangeObserver.
232 if (!native_info.native()) { 232 if (!native_info.native()) {
233 rotation_ = native_info.rotation_; 233 current_rotation_ = native_info.current_rotation_;
234 rotations_ = native_info.rotations_;
234 configured_ui_scale_ = native_info.configured_ui_scale_; 235 configured_ui_scale_ = native_info.configured_ui_scale_;
235 color_profile_ = native_info.color_profile(); 236 color_profile_ = native_info.color_profile();
236 } 237 }
237 238
238 available_color_profiles_ = native_info.available_color_profiles(); 239 available_color_profiles_ = native_info.available_color_profiles();
239 240
240 // Don't copy insets as it may be given by preference. |rotation_| 241 // Don't copy insets as it may be given by preference. |rotation_|
241 // is treated as a native so that it can be specified in 242 // is treated as a native so that it can be specified in
242 // |CreateFromSpec|. 243 // |CreateFromSpec|.
243 } 244 }
244 245
245 void DisplayInfo::SetBounds(const gfx::Rect& new_bounds_in_native) { 246 void DisplayInfo::SetBounds(const gfx::Rect& new_bounds_in_native) {
246 bounds_in_native_ = new_bounds_in_native; 247 bounds_in_native_ = new_bounds_in_native;
247 size_in_pixel_ = new_bounds_in_native.size(); 248 size_in_pixel_ = new_bounds_in_native.size();
248 UpdateDisplaySize(); 249 UpdateDisplaySize();
249 } 250 }
250 251
252 gfx::Display::Rotation DisplayInfo::GetRotation(ui::RotationSource source) {
253 return rotations_[source];
254 }
255
256 void DisplayInfo::SetRotation(gfx::Display::Rotation rotation,
257 ui::RotationSource source) {
258 rotations_[source] = rotation;
259 current_rotation_ = rotation;
260 }
261
262
251 float DisplayInfo::GetEffectiveDeviceScaleFactor() const { 263 float DisplayInfo::GetEffectiveDeviceScaleFactor() const {
252 if (allow_upgrade_to_high_dpi && configured_ui_scale_ < 1.0f && 264 if (allow_upgrade_to_high_dpi && configured_ui_scale_ < 1.0f &&
253 device_scale_factor_ == 1.0f) { 265 device_scale_factor_ == 1.0f) {
254 return 2.0f; 266 return 2.0f;
255 } else if (device_scale_factor_ == 2.0f && configured_ui_scale_ == 2.0f) { 267 } else if (device_scale_factor_ == 2.0f && configured_ui_scale_ == 2.0f) {
256 return 1.0f; 268 return 1.0f;
257 } 269 }
258 return device_scale_factor_; 270 return device_scale_factor_;
259 } 271 }
260 272
(...skipping 10 matching lines...) Expand all
271 void DisplayInfo::UpdateDisplaySize() { 283 void DisplayInfo::UpdateDisplaySize() {
272 size_in_pixel_ = bounds_in_native_.size(); 284 size_in_pixel_ = bounds_in_native_.size();
273 if (!overscan_insets_in_dip_.empty()) { 285 if (!overscan_insets_in_dip_.empty()) {
274 gfx::Insets insets_in_pixel = 286 gfx::Insets insets_in_pixel =
275 overscan_insets_in_dip_.Scale(device_scale_factor_); 287 overscan_insets_in_dip_.Scale(device_scale_factor_);
276 size_in_pixel_.Enlarge(-insets_in_pixel.width(), -insets_in_pixel.height()); 288 size_in_pixel_.Enlarge(-insets_in_pixel.width(), -insets_in_pixel.height());
277 } else { 289 } else {
278 overscan_insets_in_dip_.Set(0, 0, 0, 0); 290 overscan_insets_in_dip_.Set(0, 0, 0, 0);
279 } 291 }
280 292
281 if (rotation_ == gfx::Display::ROTATE_90 || 293 if (current_rotation_ == gfx::Display::ROTATE_90 ||
282 rotation_ == gfx::Display::ROTATE_270) 294 current_rotation_ == gfx::Display::ROTATE_270)
283 size_in_pixel_.SetSize(size_in_pixel_.height(), size_in_pixel_.width()); 295 size_in_pixel_.SetSize(size_in_pixel_.height(), size_in_pixel_.width());
284 gfx::SizeF size_f(size_in_pixel_); 296 gfx::SizeF size_f(size_in_pixel_);
285 size_f.Scale(GetEffectiveUIScale()); 297 size_f.Scale(GetEffectiveUIScale());
286 size_in_pixel_ = gfx::ToFlooredSize(size_f); 298 size_in_pixel_ = gfx::ToFlooredSize(size_f);
287 } 299 }
288 300
289 void DisplayInfo::SetOverscanInsets(const gfx::Insets& insets_in_dip) { 301 void DisplayInfo::SetOverscanInsets(const gfx::Insets& insets_in_dip) {
290 overscan_insets_in_dip_ = insets_in_dip; 302 overscan_insets_in_dip_ = insets_in_dip;
291 } 303 }
292 304
293 gfx::Insets DisplayInfo::GetOverscanInsetsInPixel() const { 305 gfx::Insets DisplayInfo::GetOverscanInsetsInPixel() const {
294 return overscan_insets_in_dip_.Scale(device_scale_factor_); 306 return overscan_insets_in_dip_.Scale(device_scale_factor_);
295 } 307 }
296 308
297 std::string DisplayInfo::ToString() const { 309 std::string DisplayInfo::ToString() const {
298 int rotation_degree = static_cast<int>(rotation_) * 90; 310 int rotation_degree = static_cast<int>(current_rotation_) * 90;
299 return base::StringPrintf( 311 return base::StringPrintf(
300 "DisplayInfo[%lld] native bounds=%s, size=%s, scale=%f, " 312 "DisplayInfo[%lld] native bounds=%s, size=%s, scale=%f, "
301 "overscan=%s, rotation=%d, ui-scale=%f, touchscreen=%s, " 313 "overscan=%s, rotation=%d, ui-scale=%f, touchscreen=%s, "
302 "touch-device-id=%d", 314 "touch-device-id=%d",
303 static_cast<long long int>(id_), 315 static_cast<long long int>(id_),
304 bounds_in_native_.ToString().c_str(), 316 bounds_in_native_.ToString().c_str(),
305 size_in_pixel_.ToString().c_str(), 317 size_in_pixel_.ToString().c_str(),
306 device_scale_factor_, 318 device_scale_factor_,
307 overscan_insets_in_dip_.ToString().c_str(), 319 overscan_insets_in_dip_.ToString().c_str(),
308 rotation_degree, 320 rotation_degree,
(...skipping 29 matching lines...) Expand all
338 } 350 }
339 351
340 bool DisplayInfo::IsColorProfileAvailable( 352 bool DisplayInfo::IsColorProfileAvailable(
341 ui::ColorCalibrationProfile profile) const { 353 ui::ColorCalibrationProfile profile) const {
342 return std::find(available_color_profiles_.begin(), 354 return std::find(available_color_profiles_.begin(),
343 available_color_profiles_.end(), 355 available_color_profiles_.end(),
344 profile) != available_color_profiles_.end(); 356 profile) != available_color_profiles_.end();
345 } 357 }
346 358
347 } // namespace ash 359 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698