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

Side by Side Diff: mash/wm/window_manager_impl.cc

Issue 1639563003: Renames WindowManagerConfig to FrameDecorationValues and moves to Display (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 11 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "mash/wm/window_manager_impl.h" 5 #include "mash/wm/window_manager_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "components/mus/common/types.h" 10 #include "components/mus/common/types.h"
11 #include "components/mus/public/cpp/property_type_converters.h"
12 #include "components/mus/public/cpp/window.h" 11 #include "components/mus/public/cpp/window.h"
13 #include "components/mus/public/cpp/window_property.h" 12 #include "components/mus/public/cpp/window_property.h"
14 #include "components/mus/public/cpp/window_tree_connection.h" 13 #include "components/mus/public/cpp/window_tree_connection.h"
15 #include "components/mus/public/interfaces/input_events.mojom.h" 14 #include "components/mus/public/interfaces/input_events.mojom.h"
16 #include "components/mus/public/interfaces/mus_constants.mojom.h" 15 #include "components/mus/public/interfaces/mus_constants.mojom.h"
17 #include "components/mus/public/interfaces/window_manager.mojom.h" 16 #include "components/mus/public/interfaces/window_manager.mojom.h"
18 #include "mash/wm/non_client_frame_controller.h" 17 #include "mash/wm/non_client_frame_controller.h"
19 #include "mash/wm/property_util.h" 18 #include "mash/wm/property_util.h"
20 #include "mash/wm/public/interfaces/container.mojom.h" 19 #include "mash/wm/public/interfaces/container.mojom.h"
21 #include "mash/wm/window_manager_application.h" 20 #include "mash/wm/window_manager_application.h"
22 #include "mojo/converters/geometry/geometry_type_converters.h" 21 #include "mojo/converters/geometry/geometry_type_converters.h"
23 #include "mojo/shell/public/cpp/application_impl.h" 22 #include "mojo/shell/public/cpp/application_impl.h"
24 23
25 namespace mojo {
26
27 template <>
28 struct TypeConverter<const std::vector<uint8_t>, Array<uint8_t>> {
29 static const std::vector<uint8_t> Convert(const Array<uint8_t>& input) {
30 return input.storage();
31 }
32 };
33
34 } // namespace mojo
35
36 namespace mash { 24 namespace mash {
37 namespace wm { 25 namespace wm {
38 26
39 WindowManagerImpl::WindowManagerImpl() 27 WindowManagerImpl::WindowManagerImpl()
40 : state_(nullptr) {} 28 : state_(nullptr), window_manager_client_(nullptr) {}
41 29
42 WindowManagerImpl::~WindowManagerImpl() { 30 WindowManagerImpl::~WindowManagerImpl() {
43 if (!state_) 31 if (!state_)
44 return; 32 return;
45 for (auto container : state_->root()->children()) { 33 for (auto container : state_->root()->children()) {
46 container->RemoveObserver(this); 34 container->RemoveObserver(this);
47 for (auto child : container->children()) 35 for (auto child : container->children())
48 child->RemoveObserver(this); 36 child->RemoveObserver(this);
49 } 37 }
50 } 38 }
51 39
52 void WindowManagerImpl::Initialize(WindowManagerApplication* state) { 40 void WindowManagerImpl::Initialize(WindowManagerApplication* state) {
53 DCHECK(state); 41 DCHECK(state);
54 DCHECK(!state_); 42 DCHECK(!state_);
55 state_ = state; 43 state_ = state;
56 // The children of the root are considered containers. 44 // The children of the root are considered containers.
57 for (auto container : state_->root()->children()) { 45 for (auto container : state_->root()->children()) {
58 container->AddObserver(this); 46 container->AddObserver(this);
59 for (auto child : container->children()) 47 for (auto child : container->children())
60 child->AddObserver(this); 48 child->AddObserver(this);
61 } 49 }
50
51 // The insets are roughly what is needed by CustomFrameView. The expectation
52 // is at some point we'll write our own NonClientFrameView and get the insets
53 // from it.
54 mus::mojom::FrameDecorationValuesPtr frame_decoration_values =
55 mus::mojom::FrameDecorationValues::New();
56 const gfx::Insets client_area_insets =
57 NonClientFrameController::GetPreferredClientAreaInsets();
58 frame_decoration_values->normal_client_area_insets =
59 mojo::Insets::From(client_area_insets);
60 frame_decoration_values->maximized_client_area_insets =
61 mojo::Insets::From(client_area_insets);
62 frame_decoration_values->max_title_bar_button_width =
63 NonClientFrameController::GetMaxTitleBarButtonWidth();
64 window_manager_client_->SetFrameDecorationValues(
65 std::move(frame_decoration_values));
62 } 66 }
63 67
64 gfx::Rect WindowManagerImpl::CalculateDefaultBounds(mus::Window* window) const { 68 gfx::Rect WindowManagerImpl::CalculateDefaultBounds(mus::Window* window) const {
65 DCHECK(state_); 69 DCHECK(state_);
66 int width, height; 70 int width, height;
67 const gfx::Size pref = GetWindowPreferredSize(window); 71 const gfx::Size pref = GetWindowPreferredSize(window);
68 const mus::Window* root = state_->root(); 72 const mus::Window* root = state_->root();
69 if (pref.IsEmpty()) { 73 if (pref.IsEmpty()) {
70 width = root->bounds().width() - 240; 74 width = root->bounds().width() - 240;
71 height = root->bounds().height() - 240; 75 height = root->bounds().height() - 240;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 } 134 }
131 135
132 void WindowManagerImpl::OpenWindow( 136 void WindowManagerImpl::OpenWindow(
133 mus::mojom::WindowTreeClientPtr client, 137 mus::mojom::WindowTreeClientPtr client,
134 mojo::Map<mojo::String, mojo::Array<uint8_t>> transport_properties) { 138 mojo::Map<mojo::String, mojo::Array<uint8_t>> transport_properties) {
135 mus::Window::SharedProperties properties = 139 mus::Window::SharedProperties properties =
136 transport_properties.To<mus::Window::SharedProperties>(); 140 transport_properties.To<mus::Window::SharedProperties>();
137 NewTopLevelWindow(&properties, std::move(client)); 141 NewTopLevelWindow(&properties, std::move(client));
138 } 142 }
139 143
140 void WindowManagerImpl::GetConfig(const GetConfigCallback& callback) { 144 void WindowManagerImpl::SetWindowManagerClient(
141 DCHECK(state_); 145 mus::WindowManagerClient* client) {
142 mus::mojom::WindowManagerConfigPtr config( 146 window_manager_client_ = client;
143 mus::mojom::WindowManagerConfig::New());
144 config->displays = mojo::Array<mus::mojom::DisplayPtr>::New(1);
145 config->displays[0] = mus::mojom::Display::New();
146 config->displays[0]->id = 2001;
147 config->displays[0]->bounds = mojo::Rect::New();
148 config->displays[0]->bounds->y = 0;
149 config->displays[0]->bounds->width = state_->root()->bounds().width();
150 config->displays[0]->bounds->height = state_->root()->bounds().width();
151 config->displays[0]->work_area = config->displays[0]->bounds.Clone();
152 config->displays[0]->device_pixel_ratio =
153 state_->root()->viewport_metrics().device_pixel_ratio;
154
155 // The insets are roughly what is needed by CustomFrameView. The expectation
156 // is at some point we'll write our own NonClientFrameView and get the insets
157 // from it.
158 const gfx::Insets client_area_insets =
159 NonClientFrameController::GetPreferredClientAreaInsets();
160 config->normal_client_area_insets = mojo::Insets::From(client_area_insets);
161
162 config->maximized_client_area_insets = mojo::Insets::From(client_area_insets);
163
164 config->max_title_bar_button_width =
165 NonClientFrameController::GetMaxTitleBarButtonWidth();
166
167 callback.Run(std::move(config));
168 } 147 }
169 148
170 bool WindowManagerImpl::OnWmSetBounds(mus::Window* window, gfx::Rect* bounds) { 149 bool WindowManagerImpl::OnWmSetBounds(mus::Window* window, gfx::Rect* bounds) {
171 // By returning true the bounds of |window| is updated. 150 // By returning true the bounds of |window| is updated.
172 return true; 151 return true;
173 } 152 }
174 153
175 bool WindowManagerImpl::OnWmSetProperty( 154 bool WindowManagerImpl::OnWmSetProperty(
176 mus::Window* window, 155 mus::Window* window,
177 const std::string& name, 156 const std::string& name,
178 scoped_ptr<std::vector<uint8_t>>* new_data) { 157 scoped_ptr<std::vector<uint8_t>>* new_data) {
179 // TODO(sky): constrain this to set of keys we know about, and allowed 158 // TODO(sky): constrain this to set of keys we know about, and allowed
180 // values. 159 // values.
181 return name == mus::mojom::WindowManager::kShowState_Property || 160 return name == mus::mojom::WindowManager::kShowState_Property ||
182 name == mus::mojom::WindowManager::kPreferredSize_Property || 161 name == mus::mojom::WindowManager::kPreferredSize_Property ||
183 name == mus::mojom::WindowManager::kResizeBehavior_Property || 162 name == mus::mojom::WindowManager::kResizeBehavior_Property ||
184 name == mus::mojom::WindowManager::kWindowTitle_Property; 163 name == mus::mojom::WindowManager::kWindowTitle_Property;
185 } 164 }
186 165
187 mus::Window* WindowManagerImpl::OnWmCreateTopLevelWindow( 166 mus::Window* WindowManagerImpl::OnWmCreateTopLevelWindow(
188 std::map<std::string, std::vector<uint8_t>>* properties) { 167 std::map<std::string, std::vector<uint8_t>>* properties) {
189 return NewTopLevelWindow(properties, nullptr); 168 return NewTopLevelWindow(properties, nullptr);
190 } 169 }
191 170
192 } // namespace wm 171 } // namespace wm
193 } // namespace mash 172 } // namespace mash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698