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

Side by Side Diff: ash/content/display/screen_orientation_controller_chromeos.cc

Issue 1306453003: Update AccelerometerReader to support separate iio devices (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix missed tests Created 5 years, 3 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
« no previous file with comments | « no previous file | ash/content/display/screen_orientation_controller_chromeos_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/content/display/screen_orientation_controller_chromeos.h" 5 #include "ash/content/display/screen_orientation_controller_chromeos.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/display/display_info.h" 8 #include "ash/display/display_info.h"
9 #include "ash/display/display_manager.h" 9 #include "ash/display/display_manager.h"
10 #include "ash/rotator/screen_rotation_animator.h" 10 #include "ash/rotator/screen_rotation_animator.h"
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 gfx::Vector3dF lid_flattened(lid.x, lid.y, 0.0f); 337 gfx::Vector3dF lid_flattened(lid.x, lid.y, 0.0f);
338 float lid_flattened_length = lid_flattened.Length(); 338 float lid_flattened_length = lid_flattened.Length();
339 // When the lid is close to being flat, don't change rotation as it is too 339 // When the lid is close to being flat, don't change rotation as it is too
340 // sensitive to slight movements. 340 // sensitive to slight movements.
341 if (lid_flattened_length < kMinimumAccelerationScreenRotation) 341 if (lid_flattened_length < kMinimumAccelerationScreenRotation)
342 return; 342 return;
343 343
344 // The reference vector is the angle of gravity when the device is rotated 344 // The reference vector is the angle of gravity when the device is rotated
345 // clockwise by 45 degrees. Computing the angle between this vector and 345 // clockwise by 45 degrees. Computing the angle between this vector and
346 // gravity we can easily determine the expected display rotation. 346 // gravity we can easily determine the expected display rotation.
347 static const gfx::Vector3dF rotation_reference(-1.0f, -1.0f, 0.0f); 347 static const gfx::Vector3dF rotation_reference(-1.0f, 1.0f, 0.0f);
348 348
349 // Set the down vector to match the expected direction of gravity given the 349 // Set the down vector to match the expected direction of gravity given the
350 // last configured rotation. This is used to enforce a stickiness that the 350 // last configured rotation. This is used to enforce a stickiness that the
351 // user must overcome to rotate the display and prevents frequent rotations 351 // user must overcome to rotate the display and prevents frequent rotations
352 // when holding the device near 45 degrees. 352 // when holding the device near 45 degrees.
353 gfx::Vector3dF down(0.0f, 0.0f, 0.0f); 353 gfx::Vector3dF down(0.0f, 0.0f, 0.0f);
354 if (current_rotation_ == gfx::Display::ROTATE_0) 354 if (current_rotation_ == gfx::Display::ROTATE_0)
355 down.set_y(1.0f);
356 else if (current_rotation_ == gfx::Display::ROTATE_90)
357 down.set_x(1.0f);
358 else if (current_rotation_ == gfx::Display::ROTATE_180)
355 down.set_y(-1.0f); 359 down.set_y(-1.0f);
356 else if (current_rotation_ == gfx::Display::ROTATE_90) 360 else
357 down.set_x(-1.0f); 361 down.set_x(-1.0f);
358 else if (current_rotation_ == gfx::Display::ROTATE_180)
359 down.set_y(1.0f);
360 else
361 down.set_x(1.0f);
362 362
363 // Don't rotate if the screen has not passed the threshold. 363 // Don't rotate if the screen has not passed the threshold.
364 if (gfx::AngleBetweenVectorsInDegrees(down, lid_flattened) < 364 if (gfx::AngleBetweenVectorsInDegrees(down, lid_flattened) <
365 kDisplayRotationStickyAngleDegrees) { 365 kDisplayRotationStickyAngleDegrees) {
366 return; 366 return;
367 } 367 }
368 368
369 float angle = gfx::ClockwiseAngleBetweenVectorsInDegrees( 369 float angle = gfx::ClockwiseAngleBetweenVectorsInDegrees(
370 rotation_reference, lid_flattened, gfx::Vector3dF(0.0f, 0.0f, -1.0f)); 370 rotation_reference, lid_flattened, gfx::Vector3dF(0.0f, 0.0f, 1.0f));
371 371
372 gfx::Display::Rotation new_rotation = gfx::Display::ROTATE_90; 372 gfx::Display::Rotation new_rotation = gfx::Display::ROTATE_270;
373 if (angle < 90.0f) 373 if (angle < 90.0f)
374 new_rotation = gfx::Display::ROTATE_0; 374 new_rotation = gfx::Display::ROTATE_0;
375 else if (angle < 180.0f) 375 else if (angle < 180.0f)
376 new_rotation = gfx::Display::ROTATE_270; 376 new_rotation = gfx::Display::ROTATE_90;
377 else if (angle < 270.0f) 377 else if (angle < 270.0f)
378 new_rotation = gfx::Display::ROTATE_180; 378 new_rotation = gfx::Display::ROTATE_180;
379 379
380 if (new_rotation != current_rotation_ && 380 if (new_rotation != current_rotation_ &&
381 IsRotationAllowedInLockedState(new_rotation)) 381 IsRotationAllowedInLockedState(new_rotation)) {
382 SetDisplayRotation(new_rotation, 382 SetDisplayRotation(new_rotation,
383 gfx::Display::ROTATION_SOURCE_ACCELEROMETER); 383 gfx::Display::ROTATION_SOURCE_ACCELEROMETER);
384 }
384 } 385 }
385 386
386 void ScreenOrientationController::LoadDisplayRotationProperties() { 387 void ScreenOrientationController::LoadDisplayRotationProperties() {
387 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 388 DisplayManager* display_manager = Shell::GetInstance()->display_manager();
388 if (!display_manager->registered_internal_display_rotation_lock()) 389 if (!display_manager->registered_internal_display_rotation_lock())
389 return; 390 return;
390 SetDisplayRotation(display_manager->registered_internal_display_rotation(), 391 SetDisplayRotation(display_manager->registered_internal_display_rotation(),
391 gfx::Display::ROTATION_SOURCE_ACCELEROMETER); 392 gfx::Display::ROTATION_SOURCE_ACCELEROMETER);
392 SetRotationLocked(true); 393 SetRotationLocked(true);
393 } 394 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 } 433 }
433 434
434 bool ScreenOrientationController::CanRotateInLockedState() { 435 bool ScreenOrientationController::CanRotateInLockedState() {
435 return rotation_locked_orientation_ == 436 return rotation_locked_orientation_ ==
436 blink::WebScreenOrientationLockLandscape || 437 blink::WebScreenOrientationLockLandscape ||
437 rotation_locked_orientation_ == 438 rotation_locked_orientation_ ==
438 blink::WebScreenOrientationLockPortrait; 439 blink::WebScreenOrientationLockPortrait;
439 } 440 }
440 441
441 } // namespace ash 442 } // namespace ash
OLDNEW
« no previous file with comments | « no previous file | ash/content/display/screen_orientation_controller_chromeos_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698