| OLD | NEW |
| 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/touch/touch_transformer_controller.h" | 5 #include "ash/touch/touch_transformer_controller.h" |
| 6 | 6 |
| 7 #include "ash/display/display_controller.h" | 7 #include "ash/display/display_controller.h" |
| 8 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" |
| 9 #include "ash/host/ash_window_tree_host.h" | 9 #include "ash/host/ash_window_tree_host.h" |
| 10 #include "ash/root_window_controller.h" | 10 #include "ash/root_window_controller.h" |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 | 190 |
| 191 DisplayController* display_controller = | 191 DisplayController* display_controller = |
| 192 Shell::GetInstance()->display_controller(); | 192 Shell::GetInstance()->display_controller(); |
| 193 ui::MultipleDisplayState display_state = | 193 ui::MultipleDisplayState display_state = |
| 194 Shell::GetInstance()->display_configurator()->display_state(); | 194 Shell::GetInstance()->display_configurator()->display_state(); |
| 195 if (display_state == ui::MULTIPLE_DISPLAY_STATE_INVALID || | 195 if (display_state == ui::MULTIPLE_DISPLAY_STATE_INVALID || |
| 196 display_state == ui::MULTIPLE_DISPLAY_STATE_HEADLESS) { | 196 display_state == ui::MULTIPLE_DISPLAY_STATE_HEADLESS) { |
| 197 return; | 197 return; |
| 198 } else if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR || | 198 } else if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR || |
| 199 display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED) { | 199 display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED) { |
| 200 // TODO(miletus) : Handle DUAL_EXTENDED with software mirroring. | |
| 201 DisplayIdPair id_pair = GetDisplayManager()->GetCurrentDisplayIdPair(); | 200 DisplayIdPair id_pair = GetDisplayManager()->GetCurrentDisplayIdPair(); |
| 202 display1_id = id_pair.first; | 201 display1_id = id_pair.first; |
| 203 display2_id = id_pair.second; | 202 display2_id = id_pair.second; |
| 204 DCHECK(display1_id != gfx::Display::kInvalidDisplayID && | 203 DCHECK(display1_id != gfx::Display::kInvalidDisplayID && |
| 205 display2_id != gfx::Display::kInvalidDisplayID); | 204 display2_id != gfx::Display::kInvalidDisplayID); |
| 206 display1 = GetDisplayManager()->GetDisplayInfo(display1_id); | 205 display1 = GetDisplayManager()->GetDisplayInfo(display1_id); |
| 207 display2 = GetDisplayManager()->GetDisplayInfo(display2_id); | 206 display2 = GetDisplayManager()->GetDisplayInfo(display2_id); |
| 208 device_manager->UpdateTouchRadiusScale(display1.touch_device_id(), | 207 device_manager->UpdateTouchRadiusScale(display1.touch_device_id(), |
| 209 GetTouchResolutionScale(display1)); | 208 GetTouchResolutionScale(display1)); |
| 210 device_manager->UpdateTouchRadiusScale(display2.touch_device_id(), | 209 device_manager->UpdateTouchRadiusScale(display2.touch_device_id(), |
| (...skipping 18 matching lines...) Expand all Loading... |
| 229 display1.touch_device_id(), | 228 display1.touch_device_id(), |
| 230 GetMirrorModeTouchTransformer(display1)); | 229 GetMirrorModeTouchTransformer(display1)); |
| 231 device_manager->UpdateTouchInfoForDisplay( | 230 device_manager->UpdateTouchInfoForDisplay( |
| 232 display2_id, | 231 display2_id, |
| 233 display2.touch_device_id(), | 232 display2.touch_device_id(), |
| 234 GetMirrorModeTouchTransformer(display2)); | 233 GetMirrorModeTouchTransformer(display2)); |
| 235 return; | 234 return; |
| 236 } | 235 } |
| 237 | 236 |
| 238 if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED) { | 237 if (display_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED) { |
| 239 // TODO(miletus) : Handle the case the state is DUAL_EXTENDED but it | |
| 240 // is actually doing software mirroring. | |
| 241 if (GetDisplayManager()->software_mirroring_enabled()) | |
| 242 return; | |
| 243 // In extended mode, each display is associated with one root window. | |
| 244 aura::Window* root1 = | |
| 245 display_controller->GetRootWindowForDisplayId(display1_id); | |
| 246 aura::Window* root2 = | |
| 247 display_controller->GetRootWindowForDisplayId(display2_id); | |
| 248 RootWindowController::ForWindow(root1)->ash_host()->UpdateDisplayID( | |
| 249 display1_id, gfx::Display::kInvalidDisplayID); | |
| 250 RootWindowController::ForWindow(root2)->ash_host()->UpdateDisplayID( | |
| 251 display2_id, gfx::Display::kInvalidDisplayID); | |
| 252 gfx::Size fb_size = | 238 gfx::Size fb_size = |
| 253 Shell::GetInstance()->display_configurator()->framebuffer_size(); | 239 Shell::GetInstance()->display_configurator()->framebuffer_size(); |
| 254 device_manager->UpdateTouchInfoForDisplay( | 240 // In extended but software mirroring mode, ther is only one X root window |
| 255 display1_id, | 241 // that associates with both displays. |
| 256 display1.touch_device_id(), | 242 if (GetDisplayManager()->software_mirroring_enabled()) { |
| 257 GetExtendedModeTouchTransformer(display1, fb_size)); | 243 aura::Window* root = display_controller->GetPrimaryRootWindow(); |
| 258 device_manager->UpdateTouchInfoForDisplay( | 244 RootWindowController::ForWindow(root)->ash_host()->UpdateDisplayID( |
| 259 display2_id, | 245 display1_id, display2_id); |
| 260 display2.touch_device_id(), | 246 DisplayInfo source_display = |
| 261 GetExtendedModeTouchTransformer(display2, fb_size)); | 247 gfx::Display::InternalDisplayId() == display1_id ? |
| 248 display1 : display2; |
| 249 // Mapping from framebuffer size to the source display's native |
| 250 // resolution. |
| 251 device_manager->UpdateTouchInfoForDisplay( |
| 252 display1_id, |
| 253 display1.touch_device_id(), |
| 254 GetExtendedModeTouchTransformer(source_display, fb_size)); |
| 255 device_manager->UpdateTouchInfoForDisplay( |
| 256 display2_id, |
| 257 display2.touch_device_id(), |
| 258 GetExtendedModeTouchTransformer(source_display, fb_size)); |
| 259 } else { |
| 260 // In actual extended mode, each display is associated with one root |
| 261 // window. |
| 262 aura::Window* root1 = |
| 263 display_controller->GetRootWindowForDisplayId(display1_id); |
| 264 aura::Window* root2 = |
| 265 display_controller->GetRootWindowForDisplayId(display2_id); |
| 266 RootWindowController::ForWindow(root1)->ash_host()->UpdateDisplayID( |
| 267 display1_id, gfx::Display::kInvalidDisplayID); |
| 268 RootWindowController::ForWindow(root2)->ash_host()->UpdateDisplayID( |
| 269 display2_id, gfx::Display::kInvalidDisplayID); |
| 270 // Mapping from framebuffer size to each display's native resolution. |
| 271 device_manager->UpdateTouchInfoForDisplay( |
| 272 display1_id, |
| 273 display1.touch_device_id(), |
| 274 GetExtendedModeTouchTransformer(display1, fb_size)); |
| 275 device_manager->UpdateTouchInfoForDisplay( |
| 276 display2_id, |
| 277 display2.touch_device_id(), |
| 278 GetExtendedModeTouchTransformer(display2, fb_size)); |
| 279 } |
| 262 return; | 280 return; |
| 263 } | 281 } |
| 264 | 282 |
| 265 // Single display mode. The root window has one associated display id. | 283 // Single display mode. The root window has one associated display id. |
| 266 aura::Window* root = | 284 aura::Window* root = |
| 267 display_controller->GetRootWindowForDisplayId(single_display.id()); | 285 display_controller->GetRootWindowForDisplayId(single_display.id()); |
| 268 RootWindowController::ForWindow(root)->ash_host()->UpdateDisplayID( | 286 RootWindowController::ForWindow(root)->ash_host()->UpdateDisplayID( |
| 269 single_display.id(), gfx::Display::kInvalidDisplayID); | 287 single_display.id(), gfx::Display::kInvalidDisplayID); |
| 270 device_manager->UpdateTouchInfoForDisplay(single_display_id, | 288 device_manager->UpdateTouchInfoForDisplay(single_display_id, |
| 271 single_display.touch_device_id(), | 289 single_display.touch_device_id(), |
| 272 gfx::Transform()); | 290 gfx::Transform()); |
| 273 } | 291 } |
| 274 | 292 |
| 275 void TouchTransformerController::OnDisplaysInitialized() { | 293 void TouchTransformerController::OnDisplaysInitialized() { |
| 276 UpdateTouchTransformer(); | 294 UpdateTouchTransformer(); |
| 277 } | 295 } |
| 278 | 296 |
| 279 void TouchTransformerController::OnDisplayConfigurationChanged() { | 297 void TouchTransformerController::OnDisplayConfigurationChanged() { |
| 280 UpdateTouchTransformer(); | 298 UpdateTouchTransformer(); |
| 281 } | 299 } |
| 282 | 300 |
| 283 } // namespace ash | 301 } // namespace ash |
| OLD | NEW |