| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/display/mirror_window_controller.h" | 5 #include "ash/display/mirror_window_controller.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #if defined(USE_X11) | 9 #if defined(USE_X11) |
| 10 #include <X11/extensions/XInput2.h> | 10 #include <X11/extensions/XInput2.h> |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 transformer.reset(CreateRootWindowTransformerForUnifiedDesktop( | 166 transformer.reset(CreateRootWindowTransformerForUnifiedDesktop( |
| 167 primary.bounds(), display)); | 167 primary.bounds(), display)); |
| 168 } else { | 168 } else { |
| 169 NOTREACHED(); | 169 NOTREACHED(); |
| 170 } | 170 } |
| 171 | 171 |
| 172 if (mirroring_host_info_map_.find(display_info.id()) == | 172 if (mirroring_host_info_map_.find(display_info.id()) == |
| 173 mirroring_host_info_map_.end()) { | 173 mirroring_host_info_map_.end()) { |
| 174 AshWindowTreeHostInitParams init_params; | 174 AshWindowTreeHostInitParams init_params; |
| 175 init_params.initial_bounds = display_info.bounds_in_native(); | 175 init_params.initial_bounds = display_info.bounds_in_native(); |
| 176 init_params.display_id = display_info.id(); |
| 177 init_params.device_scale_factor = display_info.device_scale_factor(); |
| 178 init_params.ui_scale_factor = display_info.configured_ui_scale(); |
| 176 MirroringHostInfo* host_info = new MirroringHostInfo; | 179 MirroringHostInfo* host_info = new MirroringHostInfo; |
| 177 host_info->ash_host = AshWindowTreeHost::Create(init_params); | 180 host_info->ash_host = AshWindowTreeHost::Create(init_params); |
| 178 mirroring_host_info_map_[display_info.id()] = host_info; | 181 mirroring_host_info_map_[display_info.id()] = host_info; |
| 179 | 182 |
| 180 aura::WindowTreeHost* host = host_info->ash_host->AsWindowTreeHost(); | 183 aura::WindowTreeHost* host = host_info->ash_host->AsWindowTreeHost(); |
| 181 host->SetSharedInputMethod( | 184 // TODO: Config::MUS should not install an InputMethod. |
| 182 Shell::Get()->window_tree_host_manager()->input_method()); | 185 // http://crbug.com/706913 |
| 186 if (!host->has_input_method()) { |
| 187 host->SetSharedInputMethod( |
| 188 Shell::Get()->window_tree_host_manager()->input_method()); |
| 189 } |
| 183 host->window()->SetName( | 190 host->window()->SetName( |
| 184 base::StringPrintf("MirrorRootWindow-%d", mirror_host_count++)); | 191 base::StringPrintf("MirrorRootWindow-%d", mirror_host_count++)); |
| 185 host->compositor()->SetBackgroundColor(SK_ColorBLACK); | 192 host->compositor()->SetBackgroundColor(SK_ColorBLACK); |
| 186 // No need to remove the observer because the WindowTreeHostManager | 193 // No need to remove the observer because the WindowTreeHostManager |
| 187 // outlives the host. | 194 // outlives the host. |
| 188 host->AddObserver(Shell::Get()->window_tree_host_manager()); | 195 host->AddObserver(Shell::Get()->window_tree_host_manager()); |
| 189 host->AddObserver(this); | 196 host->AddObserver(this); |
| 190 // TODO(oshima): TouchHUD is using idkey. | 197 // TODO(oshima): TouchHUD is using idkey. |
| 191 InitRootWindowSettings(host->window())->display_id = display_info.id(); | 198 InitRootWindowSettings(host->window())->display_id = display_info.id(); |
| 192 host->InitHost(); | 199 host->InitHost(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 215 | 222 |
| 216 aura::Window* mirror_window = host_info->mirror_window = | 223 aura::Window* mirror_window = host_info->mirror_window = |
| 217 new aura::Window(nullptr); | 224 new aura::Window(nullptr); |
| 218 mirror_window->Init(ui::LAYER_SOLID_COLOR); | 225 mirror_window->Init(ui::LAYER_SOLID_COLOR); |
| 219 host->window()->AddChild(mirror_window); | 226 host->window()->AddChild(mirror_window); |
| 220 host_info->ash_host->SetRootWindowTransformer(std::move(transformer)); | 227 host_info->ash_host->SetRootWindowTransformer(std::move(transformer)); |
| 221 mirror_window->SetBounds(host->window()->bounds()); | 228 mirror_window->SetBounds(host->window()->bounds()); |
| 222 mirror_window->Show(); | 229 mirror_window->Show(); |
| 223 if (reflector_) { | 230 if (reflector_) { |
| 224 reflector_->AddMirroringLayer(mirror_window->layer()); | 231 reflector_->AddMirroringLayer(mirror_window->layer()); |
| 225 } else { | 232 } else if (aura::Env::GetInstance()->context_factory_private()) { |
| 226 reflector_ = | 233 reflector_ = |
| 227 aura::Env::GetInstance() | 234 aura::Env::GetInstance() |
| 228 ->context_factory_private() | 235 ->context_factory_private() |
| 229 ->CreateReflector( | 236 ->CreateReflector( |
| 230 Shell::GetPrimaryRootWindow()->GetHost()->compositor(), | 237 Shell::GetPrimaryRootWindow()->GetHost()->compositor(), |
| 231 mirror_window->layer()); | 238 mirror_window->layer()); |
| 239 } else { |
| 240 // TODO: Config::MUS needs to support reflector. |
| 241 // http://crbug.com/601869. |
| 242 NOTIMPLEMENTED(); |
| 232 } | 243 } |
| 233 } else { | 244 } else { |
| 234 AshWindowTreeHost* ash_host = | 245 AshWindowTreeHost* ash_host = |
| 235 mirroring_host_info_map_[display_info.id()]->ash_host.get(); | 246 mirroring_host_info_map_[display_info.id()]->ash_host.get(); |
| 236 aura::WindowTreeHost* host = ash_host->AsWindowTreeHost(); | 247 aura::WindowTreeHost* host = ash_host->AsWindowTreeHost(); |
| 237 GetRootWindowSettings(host->window())->display_id = display_info.id(); | 248 GetRootWindowSettings(host->window())->display_id = display_info.id(); |
| 238 ash_host->SetRootWindowTransformer(std::move(transformer)); | 249 ash_host->SetRootWindowTransformer(std::move(transformer)); |
| 239 host->SetBoundsInPixels(display_info.bounds_in_native()); | 250 host->SetBoundsInPixels(display_info.bounds_in_native()); |
| 240 } | 251 } |
| 241 } | 252 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 } | 298 } |
| 288 } | 299 } |
| 289 | 300 |
| 290 void MirrorWindowController::OnHostResized(const aura::WindowTreeHost* host) { | 301 void MirrorWindowController::OnHostResized(const aura::WindowTreeHost* host) { |
| 291 for (auto& pair : mirroring_host_info_map_) { | 302 for (auto& pair : mirroring_host_info_map_) { |
| 292 MirroringHostInfo* info = pair.second; | 303 MirroringHostInfo* info = pair.second; |
| 293 if (info->ash_host->AsWindowTreeHost() == host) { | 304 if (info->ash_host->AsWindowTreeHost() == host) { |
| 294 if (info->mirror_window_host_size == host->GetBoundsInPixels().size()) | 305 if (info->mirror_window_host_size == host->GetBoundsInPixels().size()) |
| 295 return; | 306 return; |
| 296 info->mirror_window_host_size = host->GetBoundsInPixels().size(); | 307 info->mirror_window_host_size = host->GetBoundsInPixels().size(); |
| 297 reflector_->OnMirroringCompositorResized(); | 308 // TODO: |reflector_| should always be non-null here, but isn't in MUS |
| 309 // yet because of http://crbug.com/601869. |
| 310 if (reflector_) |
| 311 reflector_->OnMirroringCompositorResized(); |
| 298 // No need to update the transformer as new transformer is already set | 312 // No need to update the transformer as new transformer is already set |
| 299 // in UpdateWindow. | 313 // in UpdateWindow. |
| 300 Shell::Get() | 314 Shell::Get() |
| 301 ->window_tree_host_manager() | 315 ->window_tree_host_manager() |
| 302 ->cursor_window_controller() | 316 ->cursor_window_controller() |
| 303 ->UpdateLocation(); | 317 ->UpdateLocation(); |
| 304 return; | 318 return; |
| 305 } | 319 } |
| 306 } | 320 } |
| 307 } | 321 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 aura::client::SetScreenPositionClient(host->window(), nullptr); | 369 aura::client::SetScreenPositionClient(host->window(), nullptr); |
| 356 | 370 |
| 357 NoneCaptureClient* capture_client = static_cast<NoneCaptureClient*>( | 371 NoneCaptureClient* capture_client = static_cast<NoneCaptureClient*>( |
| 358 aura::client::GetCaptureClient(host->window())); | 372 aura::client::GetCaptureClient(host->window())); |
| 359 aura::client::SetCaptureClient(host->window(), nullptr); | 373 aura::client::SetCaptureClient(host->window(), nullptr); |
| 360 delete capture_client; | 374 delete capture_client; |
| 361 | 375 |
| 362 host->RemoveObserver(Shell::Get()->window_tree_host_manager()); | 376 host->RemoveObserver(Shell::Get()->window_tree_host_manager()); |
| 363 host->RemoveObserver(this); | 377 host->RemoveObserver(this); |
| 364 host_info->ash_host->PrepareForShutdown(); | 378 host_info->ash_host->PrepareForShutdown(); |
| 365 reflector_->RemoveMirroringLayer(host_info->mirror_window->layer()); | 379 // TODO: |reflector_| should always be non-null here, but isn't in MUS yet |
| 380 // because of http://crbug.com/601869. |
| 381 if (reflector_) |
| 382 reflector_->RemoveMirroringLayer(host_info->mirror_window->layer()); |
| 366 | 383 |
| 367 // EventProcessor may be accessed after this call if the mirroring window | 384 // EventProcessor may be accessed after this call if the mirroring window |
| 368 // was deleted as a result of input event (e.g. shortcut), so don't delete | 385 // was deleted as a result of input event (e.g. shortcut), so don't delete |
| 369 // now. | 386 // now. |
| 370 if (delay_host_deletion) | 387 if (delay_host_deletion) |
| 371 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, host_info); | 388 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, host_info); |
| 372 else | 389 else |
| 373 delete host_info; | 390 delete host_info; |
| 374 } | 391 } |
| 375 | 392 |
| 376 } // namespace ash | 393 } // namespace ash |
| OLD | NEW |