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

Side by Side Diff: ui/aura/mus/window_port_mus.cc

Issue 2797263002: Aura-Mus: Implement gutter in the embedder. (Closed)
Patch Set: Addressed sadrul's comments Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "ui/aura/mus/window_port_mus.h" 5 #include "ui/aura/mus/window_port_mus.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "ui/aura/client/aura_constants.h" 8 #include "ui/aura/client/aura_constants.h"
9 #include "ui/aura/client/transient_window_client.h" 9 #include "ui/aura/client/transient_window_client.h"
10 #include "ui/aura/mus/client_surface_embedder.h" 10 #include "ui/aura/mus/client_surface_embedder.h"
(...skipping 26 matching lines...) Expand all
37 // static 37 // static
38 WindowMus* WindowMus::Get(Window* window) { 38 WindowMus* WindowMus::Get(Window* window) {
39 return WindowPortMus::Get(window); 39 return WindowPortMus::Get(window);
40 } 40 }
41 41
42 WindowPortMus::WindowPortMus(WindowTreeClient* client, 42 WindowPortMus::WindowPortMus(WindowTreeClient* client,
43 WindowMusType window_mus_type) 43 WindowMusType window_mus_type)
44 : WindowMus(window_mus_type), window_tree_client_(client) {} 44 : WindowMus(window_mus_type), window_tree_client_(client) {}
45 45
46 WindowPortMus::~WindowPortMus() { 46 WindowPortMus::~WindowPortMus() {
47 SetPrimarySurfaceInfo(cc::SurfaceInfo()); 47 client_surface_embedder_.reset();
48 48
49 // DESTROY is only scheduled from DestroyFromServer(), meaning if DESTROY is 49 // DESTROY is only scheduled from DestroyFromServer(), meaning if DESTROY is
50 // present then the server originated the change. 50 // present then the server originated the change.
51 const WindowTreeClient::Origin origin = 51 const WindowTreeClient::Origin origin =
52 RemoveChangeByTypeAndData(ServerChangeType::DESTROY, ServerChangeData()) 52 RemoveChangeByTypeAndData(ServerChangeType::DESTROY, ServerChangeData())
53 ? WindowTreeClient::Origin::SERVER 53 ? WindowTreeClient::Origin::SERVER
54 : WindowTreeClient::Origin::CLIENT; 54 : WindowTreeClient::Origin::CLIENT;
55 window_tree_client_->OnWindowMusDestroyed(this, origin); 55 window_tree_client_->OnWindowMusDestroyed(this, origin);
56 } 56 }
57 57
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 return local_surface_id_; 321 return local_surface_id_;
322 } 322 }
323 323
324 void WindowPortMus::SetPrimarySurfaceInfo(const cc::SurfaceInfo& surface_info) { 324 void WindowPortMus::SetPrimarySurfaceInfo(const cc::SurfaceInfo& surface_info) {
325 primary_surface_info_ = surface_info; 325 primary_surface_info_ = surface_info;
326 UpdateClientSurfaceEmbedder(); 326 UpdateClientSurfaceEmbedder();
327 } 327 }
328 328
329 void WindowPortMus::SetFallbackSurfaceInfo( 329 void WindowPortMus::SetFallbackSurfaceInfo(
330 const cc::SurfaceInfo& surface_info) { 330 const cc::SurfaceInfo& surface_info) {
331 DCHECK(client_surface_embedder_); 331 fallback_surface_info_ = surface_info;
332 client_surface_embedder_->SetFallbackSurfaceInfo(surface_info); 332 UpdateClientSurfaceEmbedder();
333 } 333 }
334 334
335 void WindowPortMus::DestroyFromServer() { 335 void WindowPortMus::DestroyFromServer() {
336 std::unique_ptr<ScopedServerChange> remove_from_parent_change; 336 std::unique_ptr<ScopedServerChange> remove_from_parent_change;
337 if (window_->parent()) { 337 if (window_->parent()) {
338 ServerChangeData data; 338 ServerChangeData data;
339 data.child_id = server_id(); 339 data.child_id = server_id();
340 WindowPortMus* parent = Get(window_->parent()); 340 WindowPortMus* parent = Get(window_->parent());
341 remove_from_parent_change = base::MakeUnique<ScopedServerChange>( 341 remove_from_parent_change = base::MakeUnique<ScopedServerChange>(
342 parent, ServerChangeType::REMOVE, data); 342 parent, ServerChangeType::REMOVE, data);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 change_data) == server_changes_.end()) { 470 change_data) == server_changes_.end()) {
471 window_tree_client_->OnWindowMusMoveChild(this, current_index, dest_index); 471 window_tree_client_->OnWindowMusMoveChild(this, current_index, dest_index);
472 } 472 }
473 } 473 }
474 474
475 void WindowPortMus::OnVisibilityChanged(bool visible) { 475 void WindowPortMus::OnVisibilityChanged(bool visible) {
476 ServerChangeData change_data; 476 ServerChangeData change_data;
477 change_data.visible = visible; 477 change_data.visible = visible;
478 if (!RemoveChangeByTypeAndData(ServerChangeType::VISIBLE, change_data)) 478 if (!RemoveChangeByTypeAndData(ServerChangeType::VISIBLE, change_data))
479 window_tree_client_->OnWindowMusSetVisible(this, visible); 479 window_tree_client_->OnWindowMusSetVisible(this, visible);
480 // We should only embed a client if its visible.
481 UpdateClientSurfaceEmbedder();
482 } 480 }
483 481
484 void WindowPortMus::OnDidChangeBounds(const gfx::Rect& old_bounds, 482 void WindowPortMus::OnDidChangeBounds(const gfx::Rect& old_bounds,
485 const gfx::Rect& new_bounds) { 483 const gfx::Rect& new_bounds) {
486 ServerChangeData change_data; 484 ServerChangeData change_data;
487 change_data.bounds_in_dip = new_bounds; 485 change_data.bounds_in_dip = new_bounds;
488 if (!RemoveChangeByTypeAndData(ServerChangeType::BOUNDS, change_data)) 486 if (!RemoveChangeByTypeAndData(ServerChangeType::BOUNDS, change_data))
489 window_tree_client_->OnWindowMusBoundsChanged(this, old_bounds, new_bounds); 487 window_tree_client_->OnWindowMusBoundsChanged(this, old_bounds, new_bounds);
488 if (client_surface_embedder_)
489 client_surface_embedder_->UpdateSizeAndGutters();
490 } 490 }
491 491
492 std::unique_ptr<ui::PropertyData> WindowPortMus::OnWillChangeProperty( 492 std::unique_ptr<ui::PropertyData> WindowPortMus::OnWillChangeProperty(
493 const void* key) { 493 const void* key) {
494 // |window_| is null if a property is set on the aura::Window before 494 // |window_| is null if a property is set on the aura::Window before
495 // Window::Init() is called. It's safe to ignore the change in this case as 495 // Window::Init() is called. It's safe to ignore the change in this case as
496 // once Window::Init() is called the Window is queried for the current set of 496 // once Window::Init() is called the Window is queried for the current set of
497 // properties. 497 // properties.
498 if (!window_) 498 if (!window_)
499 return nullptr; 499 return nullptr;
(...skipping 29 matching lines...) Expand all
529 return; 529 return;
530 530
531 primary_surface_info_ = 531 primary_surface_info_ =
532 cc::SurfaceInfo(cc::SurfaceId(frame_sink_id_, local_surface_id_), 532 cc::SurfaceInfo(cc::SurfaceId(frame_sink_id_, local_surface_id_),
533 ScaleFactorForDisplay(window_), last_surface_size_); 533 ScaleFactorForDisplay(window_), last_surface_size_);
534 534
535 UpdateClientSurfaceEmbedder(); 535 UpdateClientSurfaceEmbedder();
536 } 536 }
537 537
538 void WindowPortMus::UpdateClientSurfaceEmbedder() { 538 void WindowPortMus::UpdateClientSurfaceEmbedder() {
539 if (!client_surface_embedder_ && primary_surface_info_.is_valid()) 539 bool embeds_surface = window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM ||
540 client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>(window_); 540 window_mus_type() == WindowMusType::EMBED_IN_OWNER;
541 if (!embeds_surface)
542 return;
541 543
542 if (primary_surface_info_.is_valid() && window_->IsVisible()) 544 if (!client_surface_embedder_) {
543 client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_); 545 client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>(
544 else 546 window_, window_tree_client_->normal_client_area_insets_);
545 client_surface_embedder_.reset(); 547 }
548
549 client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_);
550 client_surface_embedder_->SetFallbackSurfaceInfo(fallback_surface_info_);
546 } 551 }
547 552
548 } // namespace aura 553 } // namespace aura
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698