forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add ScreenPositionClient::ConvertNativePointToScreen.
This will be used to convert mouse location properly in RootWindow when X's native input is captured by a drag operation. BUG=148686 Review URL: https://chromiumcodereview.appspot.com/10911342 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157702 0039d316-1c4b-4281-b951-d872f2087c98
- Loading branch information
mazda@chromium.org
committed
Sep 20, 2012
1 parent
8c08ca5
commit 9737f8f
Showing
9 changed files
with
187 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "ash/display/screen_position_controller.h" | ||
|
||
#include "ash/display/display_controller.h" | ||
#include "ash/shell.h" | ||
#include "ash/test/ash_test_base.h" | ||
#include "ui/aura/env.h" | ||
#include "ui/aura/root_window.h" | ||
#include "ui/aura/test/test_window_delegate.h" | ||
#include "ui/base/layout.h" | ||
#include "ui/gfx/screen.h" | ||
|
||
namespace ash { | ||
namespace test { | ||
|
||
namespace { | ||
void SetSecondaryDisplayLayout(DisplayLayout::Position position) { | ||
DisplayController* display_controller = | ||
Shell::GetInstance()->display_controller(); | ||
DisplayLayout layout = display_controller->default_display_layout(); | ||
layout.position = position; | ||
display_controller->SetDefaultDisplayLayout(layout); | ||
} | ||
|
||
internal::ScreenPositionController* GetScreenPositionController() { | ||
Shell::TestApi test_api(Shell::GetInstance()); | ||
return test_api.screen_position_controller(); | ||
} | ||
|
||
class ScreenPositionControllerTest : public test::AshTestBase { | ||
public: | ||
ScreenPositionControllerTest() : window_(NULL) {} | ||
virtual ~ScreenPositionControllerTest() {} | ||
|
||
virtual void SetUp() OVERRIDE { | ||
AshTestBase::SetUp(); | ||
window_.reset(new aura::Window(&window_delegate_)); | ||
window_->SetType(aura::client::WINDOW_TYPE_NORMAL); | ||
window_->Init(ui::LAYER_NOT_DRAWN); | ||
window_->SetParent(NULL); | ||
window_->set_id(1); | ||
} | ||
|
||
virtual void TearDown() OVERRIDE { | ||
window_.reset(); | ||
AshTestBase::TearDown(); | ||
} | ||
|
||
// Converts a native point (x, y) to screen and returns its string | ||
// representation. | ||
std::string ConvertNativePointToScreen(int x, int y) const { | ||
gfx::Point point(x, y); | ||
GetScreenPositionController()->ConvertNativePointToScreen( | ||
window_.get(), &point); | ||
return point.ToString(); | ||
} | ||
|
||
protected: | ||
scoped_ptr<aura::Window> window_; | ||
aura::test::TestWindowDelegate window_delegate_; | ||
|
||
private: | ||
DISALLOW_COPY_AND_ASSIGN(ScreenPositionControllerTest); | ||
}; | ||
|
||
} // namespace | ||
|
||
TEST_F(ScreenPositionControllerTest, ConvertNativePointToScreen) { | ||
UpdateDisplay("100+100-200x200,100+500-200x200"); | ||
|
||
Shell::RootWindowList root_windows = | ||
Shell::GetInstance()->GetAllRootWindows(); | ||
EXPECT_EQ("100,100", root_windows[0]->GetHostOrigin().ToString()); | ||
EXPECT_EQ("200x200", root_windows[0]->GetHostSize().ToString()); | ||
EXPECT_EQ("100,500", root_windows[1]->GetHostOrigin().ToString()); | ||
EXPECT_EQ("200x200", root_windows[1]->GetHostSize().ToString()); | ||
|
||
const gfx::Point window_pos(100, 100); | ||
window_->SetBoundsInScreen(gfx::Rect(window_pos, gfx::Size(100, 100)), | ||
gfx::Screen::GetDisplayNearestPoint(window_pos)); | ||
SetSecondaryDisplayLayout(DisplayLayout::RIGHT); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,150", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("350,350", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("350,100", ConvertNativePointToScreen(50, 400)); | ||
|
||
SetSecondaryDisplayLayout(DisplayLayout::BOTTOM); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,150", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("350,350", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("150,300", ConvertNativePointToScreen(50, 400)); | ||
|
||
SetSecondaryDisplayLayout(DisplayLayout::LEFT); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,150", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("350,350", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("-50,100", ConvertNativePointToScreen(50, 400)); | ||
|
||
SetSecondaryDisplayLayout(DisplayLayout::TOP); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,150", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("350,350", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("150,-100", ConvertNativePointToScreen(50, 400)); | ||
|
||
|
||
SetSecondaryDisplayLayout(DisplayLayout::RIGHT); | ||
const gfx::Point window_pos2(300, 100); | ||
window_->SetBoundsInScreen(gfx::Rect(window_pos2, gfx::Size(100, 100)), | ||
gfx::Screen::GetDisplayNearestPoint(window_pos2)); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("350,150", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("550,350", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,100", ConvertNativePointToScreen(50, -400)); | ||
|
||
SetSecondaryDisplayLayout(DisplayLayout::BOTTOM); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("150,350", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("350,550", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,100", ConvertNativePointToScreen(50, -400)); | ||
|
||
SetSecondaryDisplayLayout(DisplayLayout::LEFT); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("-50,150", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("150,350", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,100", ConvertNativePointToScreen(50, -400)); | ||
|
||
SetSecondaryDisplayLayout(DisplayLayout::TOP); | ||
// The point is on the secondary display. | ||
EXPECT_EQ("150,-50", ConvertNativePointToScreen(50, 50)); | ||
// The point is out of the all root windows. | ||
EXPECT_EQ("350,150", ConvertNativePointToScreen(250, 250)); | ||
// The point is on the primary root window. | ||
EXPECT_EQ("150,100", ConvertNativePointToScreen(50, -400)); | ||
} | ||
|
||
} // namespace test | ||
} // namespace ash |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters