1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/wm/window_util.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/screen_util.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/ash_test_base.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ash/wm/window_state.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/aura/window.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ash { 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string GetAdjustedBounds(const gfx::Rect& visible, 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect to_be_adjusted) { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wm::AdjustBoundsToEnsureMinimumWindowVisibility(visible, &to_be_adjusted); 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return to_be_adjusted.ToString(); 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef test::AshTestBase WindowUtilTest; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WindowUtilTest, CenterWindow) { 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateDisplay("500x400, 600x400"); 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<aura::Window> window( 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(12, 20, 100, 100))); 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch wm::WindowState* window_state = wm::GetWindowState(window.get()); 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(window_state->bounds_changed_by_user()); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wm::CenterWindow(window.get()); 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Centring window is considered as a user's action. 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(window_state->bounds_changed_by_user()); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("200,126 100x100", window->bounds().ToString()); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("200,126 100x100", window->GetBoundsInScreen().ToString()); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) window->SetBoundsInScreen(gfx::Rect(600, 0, 100, 100), 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetSecondaryDisplay()); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wm::CenterWindow(window.get()); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("250,126 100x100", window->bounds().ToString()); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("750,126 100x100", window->GetBoundsInScreen().ToString()); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(WindowUtilTest, AdjustBoundsToEnsureMinimumVisibility) { 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect visible_bounds(0, 0, 100, 100); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("0,0 90x90", 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds, gfx::Rect(0, 0, 90, 90))); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("0,0 100x100", 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds, gfx::Rect(0, 0, 150, 150))); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("-50,0 100x100", 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds, gfx::Rect(-50, -50, 150, 150))); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("-90,10 100x100", 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds, gfx::Rect(-100, 10, 150, 150))); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("90,90 100x100", 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds, gfx::Rect(100, 100, 150, 150))); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect visible_bounds_right(200, 50, 100, 100); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "210,60 90x90", 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_right, gfx::Rect(210, 60, 90, 90))); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "210,60 100x100", 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_right, gfx::Rect(210, 60, 150, 150))); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "110,50 100x100", 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_right, gfx::Rect(0, 0, 150, 150))); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "290,50 100x100", 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_right, gfx::Rect(300, 20, 150, 150))); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "110,140 100x100", 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_right, gfx::Rect(-100, 150, 150, 150))); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect visible_bounds_left(-200, -50, 100, 100); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "-190,-40 90x90", 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_left, gfx::Rect(-190, -40, 90, 90))); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "-190,-40 100x100", 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_left, gfx::Rect(-190, -40, 150, 150))); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "-250,-40 100x100", 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_left, gfx::Rect(-250, -40, 150, 150))); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "-290,-50 100x100", 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_left, gfx::Rect(-400, -60, 150, 150))); 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "-110,0 100x100", 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAdjustedBounds(visible_bounds_left, gfx::Rect(0, 0, 150, 150))); 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ash 100