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

Unified Diff: ash/touch/touch_transformer_controller.cc

Issue 922843002: Fix software mirror mode on Ozone part 2/2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: ash/touch/touch_transformer_controller.cc
diff --git a/ash/touch/touch_transformer_controller.cc b/ash/touch/touch_transformer_controller.cc
index d88416e6feb9146f2729ed1a597df3d2ece1993c..93b64385bb5f4c8813bc98e080a574e690b87121 100644
--- a/ash/touch/touch_transformer_controller.cc
+++ b/ash/touch/touch_transformer_controller.cc
@@ -18,10 +18,6 @@ namespace ash {
namespace {
-DisplayManager* GetDisplayManager() {
- return Shell::GetInstance()->display_manager();
-}
-
ui::TouchscreenDevice FindTouchscreenById(unsigned int id) {
const std::vector<ui::TouchscreenDevice>& touchscreens =
ui::DeviceDataManager::GetInstance()->touchscreen_devices();
@@ -126,7 +122,7 @@ TouchTransformerController::~TouchTransformerController() {
void TouchTransformerController::UpdateTouchTransformer() const {
ui::DeviceDataManager* device_manager = ui::DeviceDataManager::GetInstance();
- device_manager->ClearTouchTransformerRecord();
+ device_manager->ClearTouchDeviceAssociations();
// Display IDs and DisplayInfo for mirror or extended mode.
int64 display1_id = gfx::Display::kInvalidDisplayID;
@@ -139,6 +135,8 @@ void TouchTransformerController::UpdateTouchTransformer() const {
DisplayController* display_controller =
Shell::GetInstance()->display_controller();
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+
ui::MultipleDisplayState display_state =
Shell::GetInstance()->display_configurator()->display_state();
if (display_state == ui::MULTIPLE_DISPLAY_STATE_INVALID ||
@@ -146,13 +144,13 @@ void TouchTransformerController::UpdateTouchTransformer() const {
return;
} else if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR ||
display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED) {
- DisplayIdPair id_pair = GetDisplayManager()->GetCurrentDisplayIdPair();
+ DisplayIdPair id_pair = display_manager->GetCurrentDisplayIdPair();
display1_id = id_pair.first;
display2_id = id_pair.second;
DCHECK(display1_id != gfx::Display::kInvalidDisplayID &&
display2_id != gfx::Display::kInvalidDisplayID);
- display1 = GetDisplayManager()->GetDisplayInfo(display1_id);
- display2 = GetDisplayManager()->GetDisplayInfo(display2_id);
+ display1 = display_manager->GetDisplayInfo(display1_id);
+ display2 = display_manager->GetDisplayInfo(display2_id);
device_manager->UpdateTouchRadiusScale(
display1.touch_device_id(),
GetTouchResolutionScale(
@@ -164,9 +162,9 @@ void TouchTransformerController::UpdateTouchTransformer() const {
display2,
FindTouchscreenById(display2.touch_device_id())));
} else {
- single_display_id = GetDisplayManager()->first_display_id();
+ single_display_id = display_manager->first_display_id();
DCHECK(single_display_id != gfx::Display::kInvalidDisplayID);
- single_display = GetDisplayManager()->GetDisplayInfo(single_display_id);
+ single_display = display_manager->GetDisplayInfo(single_display_id);
device_manager->UpdateTouchRadiusScale(
single_display.touch_device_id(),
GetTouchResolutionScale(
@@ -178,18 +176,17 @@ void TouchTransformerController::UpdateTouchTransformer() const {
Shell::GetInstance()->display_configurator()->framebuffer_size();
if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR) {
- // In mirror mode, both displays share the same root window so
- // both display ids are associated with the root window.
- aura::Window* root = display_controller->GetPrimaryRootWindow();
- RootWindowController::ForWindow(root)->ash_host()->UpdateDisplayID(
- display1_id, display2_id);
+ // In mirror mode, there is just one WindowTreeHost and two displays. Make
+ // the WindowTreeHost accept touch events from both displays.
device_manager->UpdateTouchInfoForDisplay(
- display1_id, display1.touch_device_id(),
+ display_manager->GetDisplayForId(display1_id),
+ display1.touch_device_id(),
GetTouchTransform(display1, display1,
FindTouchscreenById(display1.touch_device_id()),
fb_size));
device_manager->UpdateTouchInfoForDisplay(
- display2_id, display2.touch_device_id(),
+ display_manager->GetDisplayForId(display2_id),
+ display2.touch_device_id(),
GetTouchTransform(display2, display2,
FindTouchscreenById(display2.touch_device_id()),
fb_size));
@@ -197,46 +194,40 @@ void TouchTransformerController::UpdateTouchTransformer() const {
}
if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED) {
- // In extended but software mirroring mode, ther is only one X root window
- // that associates with both displays.
- if (GetDisplayManager()->software_mirroring_enabled()) {
- aura::Window* root = display_controller->GetPrimaryRootWindow();
- RootWindowController::ForWindow(root)->ash_host()->UpdateDisplayID(
- display1_id, display2_id);
+ // In extended but software mirroring mode, there is a WindowTreeHost for
+ // each display, but all touches are forwarded to the primary root window's
+ // WindowTreeHost.
+ if (display_manager->software_mirroring_enabled()) {
DisplayInfo source_display =
display_controller->GetPrimaryDisplayId() == display1_id ? display1
: display2;
// Mapping from framebuffer size to the source display's native
// resolution.
device_manager->UpdateTouchInfoForDisplay(
- display1_id, display1.touch_device_id(),
+ display_manager->GetDisplayForId(display1_id),
+ display1.touch_device_id(),
GetTouchTransform(source_display, display1,
FindTouchscreenById(display1.touch_device_id()),
fb_size));
device_manager->UpdateTouchInfoForDisplay(
- display2_id, display2.touch_device_id(),
+ display_manager->GetDisplayForId(display2_id),
+ display2.touch_device_id(),
GetTouchTransform(source_display, display2,
FindTouchscreenById(display2.touch_device_id()),
fb_size));
} else {
- // In actual extended mode, each display is associated with one root
- // window.
- aura::Window* root1 =
- display_controller->GetRootWindowForDisplayId(display1_id);
- aura::Window* root2 =
- display_controller->GetRootWindowForDisplayId(display2_id);
- RootWindowController::ForWindow(root1)->ash_host()->UpdateDisplayID(
- display1_id, gfx::Display::kInvalidDisplayID);
- RootWindowController::ForWindow(root2)->ash_host()->UpdateDisplayID(
- display2_id, gfx::Display::kInvalidDisplayID);
+ // In actual extended mode, each display is associated with one
+ // WindowTreeHost.
// Mapping from framebuffer size to each display's native resolution.
device_manager->UpdateTouchInfoForDisplay(
- display1_id, display1.touch_device_id(),
+ display_manager->GetDisplayForId(display1_id),
+ display1.touch_device_id(),
GetTouchTransform(display1, display1,
FindTouchscreenById(display1.touch_device_id()),
fb_size));
device_manager->UpdateTouchInfoForDisplay(
- display2_id, display2.touch_device_id(),
+ display_manager->GetDisplayForId(display2_id),
+ display2.touch_device_id(),
GetTouchTransform(display2, display2,
FindTouchscreenById(display2.touch_device_id()),
fb_size));
@@ -244,13 +235,10 @@ void TouchTransformerController::UpdateTouchTransformer() const {
return;
}
- // Single display mode. The root window has one associated display id.
- aura::Window* root =
- display_controller->GetRootWindowForDisplayId(single_display.id());
- RootWindowController::ForWindow(root)->ash_host()->UpdateDisplayID(
- single_display.id(), gfx::Display::kInvalidDisplayID);
+ // Single display mode. The WindowTreeHost has one associated display id.
device_manager->UpdateTouchInfoForDisplay(
- single_display_id, single_display.touch_device_id(),
+ display_manager->GetDisplayForId(single_display_id),
+ single_display.touch_device_id(),
GetTouchTransform(single_display, single_display,
FindTouchscreenById(single_display.touch_device_id()),
fb_size));

Powered by Google App Engine
This is Rietveld 408576698