diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-15 12:23:03 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-15 12:23:03 +0000 |
commit | af5ed956eb6372a4cc64d26dbbc934ebd784adeb (patch) | |
tree | 1a1786b2efdb69b9bd7c50c215113dd7963a65c9 /ash/accelerators | |
parent | b6fd2de0da9846e36c45d49237b81066decbaf43 (diff) | |
download | chromium_src-af5ed956eb6372a4cc64d26dbbc934ebd784adeb.zip chromium_src-af5ed956eb6372a4cc64d26dbbc934ebd784adeb.tar.gz chromium_src-af5ed956eb6372a4cc64d26dbbc934ebd784adeb.tar.bz2 |
2nd try
Add shortcut keys to ui scaling
- Round root window size because it can be fractional size
when root_window_scale_ is specified.
- Remove scaling option from about:flags.
- Rotate display where the mouse is in.
BUG=179997,119268
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=188324
Review URL: https://codereview.chromium.org/12848004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188362 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/accelerators')
-rw-r--r-- | ash/accelerators/accelerator_controller.cc | 45 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.cc | 17 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.h | 2 |
3 files changed, 56 insertions, 8 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index 8194d90..a2656cf 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc @@ -154,7 +154,7 @@ bool HandleRotateActiveWindow() { return true; } -const gfx::Display::Rotation GetNextRotation(gfx::Display::Rotation current) { +gfx::Display::Rotation GetNextRotation(gfx::Display::Rotation current) { switch (current) { case gfx::Display::ROTATE_0: return gfx::Display::ROTATE_90; @@ -169,13 +169,40 @@ const gfx::Display::Rotation GetNextRotation(gfx::Display::Rotation current) { return gfx::Display::ROTATE_0; } +float GetNextScale(float scale, int next) { + // These scales are equivalent to 1024, 1280, 1600 and 1920 pixel width + // respectively on 2560 pixel width 2x density display. + static const float kScales[] = {0.8f, 1.0f, 1.25f, 1.5f}; + static const int kScaleTableSize = arraysize(kScales); + const float* location = std::find(kScales, kScales + kScaleTableSize, scale); + // Fallback to 1.0f if the |scale| wasn't in the list. + if (location == kScales + kScaleTableSize) + return 1.0f; + int index = std::distance(kScales, location) + next; + return kScales[std::min(kScaleTableSize - 1, std::max(0, index))]; +} + +bool HandleScaleUI(bool up) { + // UI Scaling is effective only on internal display. + int64 display_id = gfx::Display::InternalDisplayId(); +#if defined(OS_CHROMEOS) + // On linux desktop, allow ui scalacing on the first dislpay. + if (!base::chromeos::IsRunningOnChromeOS()) + display_id = Shell::GetInstance()->display_manager()->first_display_id(); +#endif + const gfx::Display& display = Shell::GetInstance()->display_manager()-> + GetDisplayForId(display_id); + const DisplayInfo& display_info = Shell::GetInstance()->display_manager()-> + GetDisplayInfo(display); + Shell::GetInstance()->display_manager()->SetDisplayUIScale( + display.id(), GetNextScale(display_info.ui_scale(), up ? 1 : -1)); + return true; +} + // Rotates the screen. bool HandleRotateScreen() { - aura::Window* active_window = wm::GetActiveWindow(); - if (!active_window) - return false; - const gfx::Display& display = - Shell::GetScreen()->GetDisplayNearestWindow(active_window); + gfx::Point point = Shell::GetScreen()->GetCursorScreenPoint(); + gfx::Display display = Shell::GetScreen()->GetDisplayNearestPoint(point); const DisplayInfo& display_info = Shell::GetInstance()->display_manager()->GetDisplayInfo(display); Shell::GetInstance()->display_manager()->SetDisplayRotation( @@ -758,6 +785,10 @@ bool AcceleratorController::PerformAction(int action, } break; } + case SCALE_UI_UP: + return HandleScaleUI(true /* up */); + case SCALE_UI_DOWN: + return HandleScaleUI(false /* down */); case ROTATE_WINDOW: return HandleRotateActiveWindow(); case ROTATE_SCREEN: @@ -767,7 +798,7 @@ bool AcceleratorController::PerformAction(int action, case TOGGLE_ROOT_WINDOW_FULL_SCREEN: return HandleToggleRootWindowFullScreen(); case DISPLAY_TOGGLE_SCALE: - internal::DisplayManager::ToggleDisplayScale(); + internal::DisplayManager::ToggleDisplayScaleFactor(); return true; case MAGNIFY_SCREEN_ZOOM_IN: return HandleMagnifyScreen(1); diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc index 54e4c5b..02de15d 100644 --- a/ash/accelerators/accelerator_table.cc +++ b/ash/accelerators/accelerator_table.cc @@ -77,7 +77,11 @@ const AcceleratorData kAcceleratorData[] = { // Extra shortcut to lock the screen on linux desktop. { true, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, LOCK_PRESSED }, { false, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, LOCK_RELEASED }, + // Extra shortcut to rotate/scale up/down the screen on linux desktop. { true, ui::VKEY_F3, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ROTATE_SCREEN }, + { true, ui::VKEY_F2, ui::EF_CONTROL_DOWN , SCALE_UI_UP }, + { true, ui::VKEY_F2, + ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, SCALE_UI_DOWN }, #endif // !defined(NDEBUG) { true, ui::VKEY_O, ui::EF_CONTROL_DOWN, OPEN_FILE_DIALOG }, { true, ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, @@ -101,6 +105,10 @@ const AcceleratorData kAcceleratorData[] = { NEW_INCOGNITO_WINDOW }, { true, ui::VKEY_N, ui::EF_CONTROL_DOWN, NEW_WINDOW }, { true, ui::VKEY_T, ui::EF_CONTROL_DOWN, NEW_TAB }, + { true, ui::VKEY_BROWSER_BACK, + ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, SCALE_UI_UP }, + { true, ui::VKEY_BROWSER_FORWARD, + ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, SCALE_UI_DOWN }, { true, ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, ROTATE_SCREEN }, { true, ui::VKEY_BROWSER_REFRESH, @@ -129,7 +137,8 @@ const AcceleratorData kAcceleratorData[] = { { true, ui::VKEY_F14, ui::EF_NONE, SHOW_KEYBOARD_OVERLAY }, { true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SHOW_MESSAGE_CENTER_BUBBLE }, - { true, ui::VKEY_BROWSER_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, + { true, ui::VKEY_BROWSER_BACK, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SHOW_OAK }, { true, ui::VKEY_S, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SHOW_SYSTEM_TRAY_BUBBLE }, @@ -228,6 +237,8 @@ const AcceleratorAction kActionsAllowedAtLoginOrLockScreen[] = { VOLUME_UP, ROTATE_SCREEN, ROTATE_WINDOW, + SCALE_UI_UP, + SCALE_UI_DOWN, #if !defined(NDEBUG) PRINT_LAYER_HIERARCHY, PRINT_VIEW_HIERARCHY, @@ -294,6 +305,8 @@ const AcceleratorAction kNonrepeatableActions[] = { CYCLE_FORWARD_MRU, ROTATE_SCREEN, ROTATE_WINDOW, + SCALE_UI_UP, + SCALE_UI_DOWN, TOGGLE_MAXIMIZED, WINDOW_MINIMIZE, }; @@ -321,6 +334,8 @@ const AcceleratorAction kActionsAllowedInAppMode[] = { POWER_RELEASED, PREVIOUS_IME, ROTATE_SCREEN, + SCALE_UI_UP, + SCALE_UI_DOWN, SWAP_PRIMARY_DISPLAY, SWITCH_IME, // Switch to another IME depending on the accelerator. TOGGLE_CAPS_LOCK, diff --git a/ash/accelerators/accelerator_table.h b/ash/accelerators/accelerator_table.h index f8d99ac..c95a048 100644 --- a/ash/accelerators/accelerator_table.h +++ b/ash/accelerators/accelerator_table.h @@ -47,6 +47,8 @@ enum AcceleratorAction { RESTORE_TAB, ROTATE_SCREEN, ROTATE_WINDOW, + SCALE_UI_DOWN, + SCALE_UI_UP, SELECT_LAST_WIN, SELECT_WIN_0, SELECT_WIN_1, |