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