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

Unified Diff: components/mus/ws/server_window.cc

Issue 2119963002: Move mus to //services/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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
« no previous file with comments | « components/mus/ws/server_window.h ('k') | components/mus/ws/server_window_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/ws/server_window.cc
diff --git a/components/mus/ws/server_window.cc b/components/mus/ws/server_window.cc
deleted file mode 100644
index f6a9304a03b4b8f516244e08fc22082d1f28de7c..0000000000000000000000000000000000000000
--- a/components/mus/ws/server_window.cc
+++ /dev/null
@@ -1,470 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/mus/ws/server_window.h"
-
-#include <inttypes.h>
-#include <stddef.h>
-
-#include "base/strings/stringprintf.h"
-#include "components/mus/common/transient_window_utils.h"
-#include "components/mus/public/interfaces/window_manager.mojom.h"
-#include "components/mus/ws/server_window_delegate.h"
-#include "components/mus/ws/server_window_observer.h"
-#include "components/mus/ws/server_window_surface_manager.h"
-
-namespace mus {
-
-namespace ws {
-
-ServerWindow::ServerWindow(ServerWindowDelegate* delegate, const WindowId& id)
- : ServerWindow(delegate, id, Properties()) {}
-
-ServerWindow::ServerWindow(ServerWindowDelegate* delegate,
- const WindowId& id,
- const Properties& properties)
- : delegate_(delegate),
- id_(id),
- parent_(nullptr),
- stacking_target_(nullptr),
- transient_parent_(nullptr),
- is_modal_(false),
- visible_(false),
- cursor_id_(mojom::Cursor::CURSOR_NULL),
- non_client_cursor_id_(mojom::Cursor::CURSOR_NULL),
- opacity_(1),
- can_focus_(true),
- properties_(properties),
- // Don't notify newly added observers during notification. This causes
- // problems for code that adds an observer as part of an observer
- // notification (such as ServerWindowDrawTracker).
- observers_(
- base::ObserverList<ServerWindowObserver>::NOTIFY_EXISTING_ONLY) {
- DCHECK(delegate); // Must provide a delegate.
-}
-
-ServerWindow::~ServerWindow() {
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_, OnWindowDestroying(this));
-
- if (transient_parent_)
- transient_parent_->RemoveTransientWindow(this);
-
- // Destroy transient children, only after we've removed ourselves from our
- // parent, as destroying an active transient child may otherwise attempt to
- // refocus us.
- Windows transient_children(transient_children_);
- STLDeleteElements(&transient_children);
- DCHECK(transient_children_.empty());
-
- while (!children_.empty())
- children_.front()->parent()->Remove(children_.front());
-
- if (parent_)
- parent_->Remove(this);
-
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_, OnWindowDestroyed(this));
-}
-
-void ServerWindow::AddObserver(ServerWindowObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void ServerWindow::RemoveObserver(ServerWindowObserver* observer) {
- DCHECK(observers_.HasObserver(observer));
- observers_.RemoveObserver(observer);
-}
-
-void ServerWindow::CreateSurface(mojom::SurfaceType surface_type,
- mojo::InterfaceRequest<mojom::Surface> request,
- mojom::SurfaceClientPtr client) {
- GetOrCreateSurfaceManager()->CreateSurface(surface_type, std::move(request),
- std::move(client));
-}
-
-void ServerWindow::Add(ServerWindow* child) {
- // We assume validation checks happened already.
- DCHECK(child);
- DCHECK(child != this);
- DCHECK(!child->Contains(this));
- if (child->parent() == this) {
- if (children_.size() == 1)
- return; // Already in the right position.
- child->Reorder(children_.back(), mojom::OrderDirection::ABOVE);
- return;
- }
-
- ServerWindow* old_parent = child->parent();
- FOR_EACH_OBSERVER(ServerWindowObserver, child->observers_,
- OnWillChangeWindowHierarchy(child, this, old_parent));
-
- if (child->parent())
- child->parent()->RemoveImpl(child);
-
- child->parent_ = this;
- children_.push_back(child);
-
- // Stack the child properly if it is a transient child of a sibling.
- if (child->transient_parent_ && child->transient_parent_->parent() == this)
- RestackTransientDescendants(child->transient_parent_, &GetStackingTarget,
- &ReorderImpl);
-
- FOR_EACH_OBSERVER(ServerWindowObserver, child->observers_,
- OnWindowHierarchyChanged(child, this, old_parent));
-}
-
-void ServerWindow::Remove(ServerWindow* child) {
- // We assume validation checks happened else where.
- DCHECK(child);
- DCHECK(child != this);
- DCHECK(child->parent() == this);
-
- FOR_EACH_OBSERVER(ServerWindowObserver, child->observers_,
- OnWillChangeWindowHierarchy(child, nullptr, this));
- RemoveImpl(child);
-
- // Stack the child properly if it is a transient child of a sibling.
- if (child->transient_parent_ && child->transient_parent_->parent() == this)
- RestackTransientDescendants(child->transient_parent_, &GetStackingTarget,
- &ReorderImpl);
-
- FOR_EACH_OBSERVER(ServerWindowObserver, child->observers_,
- OnWindowHierarchyChanged(child, nullptr, this));
-}
-
-void ServerWindow::Reorder(ServerWindow* relative,
- mojom::OrderDirection direction) {
- ReorderImpl(this, relative, direction);
-}
-
-void ServerWindow::StackChildAtBottom(ServerWindow* child) {
- // There's nothing to do if the child is already at the bottom.
- if (children_.size() <= 1 || child == children_.front())
- return;
- child->Reorder(children_.front(), mojom::OrderDirection::BELOW);
-}
-
-void ServerWindow::StackChildAtTop(ServerWindow* child) {
- // There's nothing to do if the child is already at the top.
- if (children_.size() <= 1 || child == children_.back())
- return;
- child->Reorder(children_.back(), mojom::OrderDirection::ABOVE);
-}
-
-void ServerWindow::SetBounds(const gfx::Rect& bounds) {
- if (bounds_ == bounds)
- return;
-
- // TODO(fsamuel): figure out how will this work with CompositorFrames.
-
- const gfx::Rect old_bounds = bounds_;
- bounds_ = bounds;
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnWindowBoundsChanged(this, old_bounds, bounds));
-}
-
-void ServerWindow::SetClientArea(
- const gfx::Insets& insets,
- const std::vector<gfx::Rect>& additional_client_areas) {
- if (client_area_ == insets &&
- additional_client_areas == additional_client_areas_) {
- return;
- }
-
- additional_client_areas_ = additional_client_areas;
- client_area_ = insets;
- FOR_EACH_OBSERVER(
- ServerWindowObserver, observers_,
- OnWindowClientAreaChanged(this, insets, additional_client_areas));
-}
-
-void ServerWindow::SetHitTestMask(const gfx::Rect& mask) {
- hit_test_mask_.reset(new gfx::Rect(mask));
-}
-
-void ServerWindow::ClearHitTestMask() {
- hit_test_mask_.reset();
-}
-
-const ServerWindow* ServerWindow::GetRoot() const {
- return delegate_->GetRootWindow(this);
-}
-
-std::vector<const ServerWindow*> ServerWindow::GetChildren() const {
- std::vector<const ServerWindow*> children;
- children.reserve(children_.size());
- for (size_t i = 0; i < children_.size(); ++i)
- children.push_back(children_[i]);
- return children;
-}
-
-std::vector<ServerWindow*> ServerWindow::GetChildren() {
- // TODO(sky): rename to children() and fix return type.
- return children_;
-}
-
-ServerWindow* ServerWindow::GetChildWindow(const WindowId& window_id) {
- if (id_ == window_id)
- return this;
-
- for (ServerWindow* child : children_) {
- ServerWindow* window = child->GetChildWindow(window_id);
- if (window)
- return window;
- }
-
- return nullptr;
-}
-
-bool ServerWindow::AddTransientWindow(ServerWindow* child) {
- // A system modal window cannot become a transient child.
- if (child->is_modal() && !child->transient_parent())
- return false;
-
- if (child->transient_parent())
- child->transient_parent()->RemoveTransientWindow(child);
-
- DCHECK(std::find(transient_children_.begin(), transient_children_.end(),
- child) == transient_children_.end());
- transient_children_.push_back(child);
- child->transient_parent_ = this;
-
- // Restack |child| properly above its transient parent, if they share the same
- // parent.
- if (child->parent() == parent())
- RestackTransientDescendants(this, &GetStackingTarget, &ReorderImpl);
-
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnTransientWindowAdded(this, child));
- return true;
-}
-
-void ServerWindow::RemoveTransientWindow(ServerWindow* child) {
- Windows::iterator i =
- std::find(transient_children_.begin(), transient_children_.end(), child);
- DCHECK(i != transient_children_.end());
- transient_children_.erase(i);
- DCHECK_EQ(this, child->transient_parent());
- child->transient_parent_ = nullptr;
-
- // If |child| and its former transient parent share the same parent, |child|
- // should be restacked properly so it is not among transient children of its
- // former parent, anymore.
- if (parent() == child->parent())
- RestackTransientDescendants(this, &GetStackingTarget, &ReorderImpl);
-
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnTransientWindowRemoved(this, child));
-}
-
-void ServerWindow::SetModal() {
- is_modal_ = true;
-}
-
-bool ServerWindow::Contains(const ServerWindow* window) const {
- for (const ServerWindow* parent = window; parent; parent = parent->parent_) {
- if (parent == this)
- return true;
- }
- return false;
-}
-
-void ServerWindow::SetVisible(bool value) {
- if (visible_ == value)
- return;
-
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnWillChangeWindowVisibility(this));
- visible_ = value;
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnWindowVisibilityChanged(this));
-}
-
-void ServerWindow::SetOpacity(float value) {
- if (value == opacity_)
- return;
- float old_opacity = opacity_;
- opacity_ = value;
- delegate_->OnScheduleWindowPaint(this);
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnWindowOpacityChanged(this, old_opacity, opacity_));
-}
-
-void ServerWindow::SetPredefinedCursor(mus::mojom::Cursor value) {
- if (value == cursor_id_)
- return;
- cursor_id_ = value;
- FOR_EACH_OBSERVER(
- ServerWindowObserver, observers_,
- OnWindowPredefinedCursorChanged(this, static_cast<int32_t>(value)));
-}
-
-void ServerWindow::SetNonClientCursor(mus::mojom::Cursor value) {
- if (value == non_client_cursor_id_)
- return;
- non_client_cursor_id_ = value;
- FOR_EACH_OBSERVER(
- ServerWindowObserver, observers_,
- OnWindowNonClientCursorChanged(this, static_cast<int32_t>(value)));
-}
-
-void ServerWindow::SetTransform(const gfx::Transform& transform) {
- if (transform_ == transform)
- return;
-
- transform_ = transform;
- delegate_->OnScheduleWindowPaint(this);
-}
-
-void ServerWindow::SetProperty(const std::string& name,
- const std::vector<uint8_t>* value) {
- auto it = properties_.find(name);
- if (it != properties_.end()) {
- if (value && it->second == *value)
- return;
- } else if (!value) {
- // This property isn't set in |properties_| and |value| is nullptr, so
- // there's
- // no change.
- return;
- }
-
- if (value) {
- properties_[name] = *value;
- } else if (it != properties_.end()) {
- properties_.erase(it);
- }
-
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnWindowSharedPropertyChanged(this, name, value));
-}
-
-std::string ServerWindow::GetName() const {
- auto it = properties_.find(mojom::WindowManager::kName_Property);
- if (it == properties_.end())
- return std::string();
- return std::string(it->second.begin(), it->second.end());
-}
-
-void ServerWindow::SetTextInputState(const ui::TextInputState& state) {
- const bool changed = !(text_input_state_ == state);
- if (changed) {
- text_input_state_ = state;
- // keyboard even if the state is not changed. So we have to notify
- // |observers_|.
- FOR_EACH_OBSERVER(ServerWindowObserver, observers_,
- OnWindowTextInputStateChanged(this, state));
- }
-}
-
-bool ServerWindow::IsDrawn() const {
- const ServerWindow* root = delegate_->GetRootWindow(this);
- if (!root || !root->visible())
- return false;
- const ServerWindow* window = this;
- while (window && window != root && window->visible())
- window = window->parent();
- return root == window;
-}
-
-void ServerWindow::DestroySurfacesScheduledForDestruction() {
- if (!surface_manager_)
- return;
- ServerWindowSurface* surface = surface_manager_->GetDefaultSurface();
- if (surface)
- surface->DestroySurfacesScheduledForDestruction();
-
- surface = surface_manager_->GetUnderlaySurface();
- if (surface)
- surface->DestroySurfacesScheduledForDestruction();
-}
-
-ServerWindowSurfaceManager* ServerWindow::GetOrCreateSurfaceManager() {
- if (!surface_manager_.get())
- surface_manager_.reset(new ServerWindowSurfaceManager(this));
- return surface_manager_.get();
-}
-
-void ServerWindow::SetUnderlayOffset(const gfx::Vector2d& offset) {
- if (offset == underlay_offset_)
- return;
-
- underlay_offset_ = offset;
- delegate_->OnScheduleWindowPaint(this);
-}
-
-#if !defined(NDEBUG)
-std::string ServerWindow::GetDebugWindowHierarchy() const {
- std::string result;
- BuildDebugInfo(std::string(), &result);
- return result;
-}
-
-void ServerWindow::BuildDebugInfo(const std::string& depth,
- std::string* result) const {
- std::string name = GetName();
- *result += base::StringPrintf(
- "%sid=%d,%d visible=%s bounds=%d,%d %dx%d %s\n", depth.c_str(),
- static_cast<int>(id_.client_id), static_cast<int>(id_.window_id),
- visible_ ? "true" : "false", bounds_.x(), bounds_.y(), bounds_.width(),
- bounds_.height(), !name.empty() ? name.c_str() : "(no name)");
- for (const ServerWindow* child : children_)
- child->BuildDebugInfo(depth + " ", result);
-}
-#endif
-
-void ServerWindow::RemoveImpl(ServerWindow* window) {
- window->parent_ = nullptr;
- children_.erase(std::find(children_.begin(), children_.end(), window));
-}
-
-void ServerWindow::OnStackingChanged() {
- if (stacking_target_) {
- Windows::const_iterator window_i = std::find(
- parent()->children().begin(), parent()->children().end(), this);
- DCHECK(window_i != parent()->children().end());
- if (window_i != parent()->children().begin() &&
- (*(window_i - 1) == stacking_target_)) {
- return;
- }
- }
- RestackTransientDescendants(this, &GetStackingTarget, &ReorderImpl);
-}
-
-// static
-void ServerWindow::ReorderImpl(ServerWindow* window,
- ServerWindow* relative,
- mojom::OrderDirection direction) {
- DCHECK(relative);
- DCHECK_NE(window, relative);
- DCHECK_EQ(window->parent(), relative->parent());
-
- if (!AdjustStackingForTransientWindows(&window, &relative, &direction,
- window->stacking_target_))
- return;
-
- window->parent_->children_.erase(std::find(window->parent_->children_.begin(),
- window->parent_->children_.end(),
- window));
- Windows::iterator i = std::find(window->parent_->children_.begin(),
- window->parent_->children_.end(), relative);
- if (direction == mojom::OrderDirection::ABOVE) {
- DCHECK(i != window->parent_->children_.end());
- window->parent_->children_.insert(++i, window);
- } else if (direction == mojom::OrderDirection::BELOW) {
- DCHECK(i != window->parent_->children_.end());
- window->parent_->children_.insert(i, window);
- }
- FOR_EACH_OBSERVER(ServerWindowObserver, window->observers_,
- OnWindowReordered(window, relative, direction));
- window->OnStackingChanged();
-}
-
-// static
-ServerWindow** ServerWindow::GetStackingTarget(ServerWindow* window) {
- return &window->stacking_target_;
-}
-
-} // namespace ws
-
-} // namespace mus
« no previous file with comments | « components/mus/ws/server_window.h ('k') | components/mus/ws/server_window_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698