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

Side by Side Diff: mojo/services/view_manager/window_tree_host_impl.cc

Issue 534843002: Convert view manager to surfaces with uploading shim in client lib (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove overzealous shutdown check in cc/surfaces, add NON_EXPORTED_BASE for windows build, saturate… Created 6 years, 3 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
« no previous file with comments | « mojo/services/view_manager/window_tree_host_impl.h ('k') | mojo/shell/DEPS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "mojo/public/c/gles2/gles2.h"
6 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
7 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h"
8 #include "mojo/services/view_manager/connection_manager.h"
9 #include "mojo/services/view_manager/context_factory_impl.h"
10 #include "mojo/services/view_manager/window_tree_host_impl.h"
11 #include "ui/aura/env.h"
12 #include "ui/aura/layout_manager.h"
13 #include "ui/aura/window.h"
14 #include "ui/aura/window_event_dispatcher.h"
15 #include "ui/compositor/compositor.h"
16 #include "ui/events/event.h"
17 #include "ui/events/event_constants.h"
18 #include "ui/gfx/geometry/insets.h"
19 #include "ui/gfx/geometry/rect.h"
20
21 namespace mojo {
22 namespace service {
23
24 // TODO(sky): nuke this. It shouldn't be static.
25 // static
26 ContextFactoryImpl* WindowTreeHostImpl::context_factory_ = NULL;
27
28 ////////////////////////////////////////////////////////////////////////////////
29 // RootLayoutManager, layout management for the root window's (one) child
30
31 class RootLayoutManager : public aura::LayoutManager {
32 public:
33 RootLayoutManager() : child_(NULL) {}
34
35 // Overridden from aura::LayoutManager
36 virtual void OnWindowResized() OVERRIDE;
37 virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
38 virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE {}
39 virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE {}
40 virtual void OnChildWindowVisibilityChanged(aura::Window* child,
41 bool visible) OVERRIDE {}
42 virtual void SetChildBounds(aura::Window* child,
43 const gfx::Rect& requested_bounds) OVERRIDE;
44 private:
45 aura::Window* child_;
46
47 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager);
48 };
49
50 void RootLayoutManager::OnWindowResized() {
51 if (child_)
52 child_->SetBounds(gfx::Rect(child_->parent()->bounds().size()));
53 }
54
55 void RootLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
56 DCHECK(!child_);
57 child_ = child;
58 }
59
60 void RootLayoutManager::SetChildBounds(aura::Window* child,
61 const gfx::Rect& requested_bounds) {
62 SetChildBoundsDirect(child, gfx::Rect(requested_bounds.size()));
63 }
64
65 ////////////////////////////////////////////////////////////////////////////////
66 // WindowTreeHostImpl, public:
67
68 WindowTreeHostImpl::WindowTreeHostImpl(
69 NativeViewportPtr viewport,
70 GpuPtr gpu_service,
71 const gfx::Rect& bounds,
72 const Callback<void()>& compositor_created_callback,
73 const Callback<void()>& native_viewport_closed_callback,
74 const Callback<void(EventPtr)>& event_received_callback)
75 : native_viewport_(viewport.Pass()),
76 gpu_service_(gpu_service.Pass()),
77 widget_(gfx::kNullAcceleratedWidget),
78 compositor_created_callback_(compositor_created_callback),
79 native_viewport_closed_callback_(native_viewport_closed_callback),
80 event_received_callback_(event_received_callback),
81 bounds_(bounds) {
82 native_viewport_.set_client(this);
83 native_viewport_->Create(Rect::From(bounds));
84 native_viewport_->Show();
85
86 window()->SetLayoutManager(new RootLayoutManager());
87 }
88
89 WindowTreeHostImpl::~WindowTreeHostImpl() {
90 DestroyCompositor();
91 DestroyDispatcher();
92 delete context_factory_;
93 context_factory_ = NULL;
94 }
95
96 ////////////////////////////////////////////////////////////////////////////////
97 // WindowTreeHostImpl, aura::WindowTreeHost implementation:
98
99 ui::EventSource* WindowTreeHostImpl::GetEventSource() {
100 return this;
101 }
102
103 gfx::AcceleratedWidget WindowTreeHostImpl::GetAcceleratedWidget() {
104 return widget_;
105 }
106
107 void WindowTreeHostImpl::Show() {
108 window()->Show();
109 }
110
111 void WindowTreeHostImpl::Hide() {
112 native_viewport_->Hide();
113 window()->Hide();
114 }
115
116 gfx::Rect WindowTreeHostImpl::GetBounds() const {
117 return bounds_;
118 }
119
120 void WindowTreeHostImpl::SetBounds(const gfx::Rect& bounds) {
121 native_viewport_->SetBounds(Rect::From(bounds));
122 }
123
124 gfx::Point WindowTreeHostImpl::GetLocationOnNativeScreen() const {
125 return gfx::Point(0, 0);
126 }
127
128 void WindowTreeHostImpl::SetCapture() {
129 NOTIMPLEMENTED();
130 }
131
132 void WindowTreeHostImpl::ReleaseCapture() {
133 NOTIMPLEMENTED();
134 }
135
136 void WindowTreeHostImpl::PostNativeEvent(
137 const base::NativeEvent& native_event) {
138 NOTIMPLEMENTED();
139 }
140
141 void WindowTreeHostImpl::SetCursorNative(gfx::NativeCursor cursor) {
142 NOTIMPLEMENTED();
143 }
144
145 void WindowTreeHostImpl::MoveCursorToNative(const gfx::Point& location) {
146 NOTIMPLEMENTED();
147 }
148
149 void WindowTreeHostImpl::OnCursorVisibilityChangedNative(bool show) {
150 NOTIMPLEMENTED();
151 }
152
153 ////////////////////////////////////////////////////////////////////////////////
154 // WindowTreeHostImpl, ui::EventSource implementation:
155
156 ui::EventProcessor* WindowTreeHostImpl::GetEventProcessor() {
157 return dispatcher();
158 }
159
160 ////////////////////////////////////////////////////////////////////////////////
161 // WindowTreeHostImpl, NativeViewportClient implementation:
162
163 void WindowTreeHostImpl::OnCreated(uint64_t native_viewport_id) {
164 CommandBufferPtr cb;
165 // TODO(jamesr): Output to a surface instead.
166 gpu_service_->CreateOnscreenGLES2Context(
167 native_viewport_id, Size::From(bounds_.size()), Get(&cb));
168 widget_ = bit_cast<gfx::AcceleratedWidget>(
169 static_cast<uintptr_t>(native_viewport_id));
170
171 // The ContextFactory must exist before any Compositors are created.
172 if (context_factory_) {
173 delete context_factory_;
174 context_factory_ = NULL;
175 }
176 context_factory_ = new ContextFactoryImpl(cb.PassMessagePipe());
177 aura::Env::GetInstance()->set_context_factory(context_factory_);
178
179 CreateCompositor(gfx::kNullAcceleratedWidget);
180 compositor_created_callback_.Run();
181 }
182
183 void WindowTreeHostImpl::OnBoundsChanged(RectPtr bounds) {
184 bounds_ = bounds.To<gfx::Rect>();
185 if (context_factory_)
186 OnHostResized(bounds_.size());
187 }
188
189 void WindowTreeHostImpl::OnDestroyed() {
190 DestroyCompositor();
191 native_viewport_closed_callback_.Run();
192 // TODO(beng): quit the message loop once we are on our own thread.
193 }
194
195 void WindowTreeHostImpl::OnEvent(EventPtr event,
196 const mojo::Callback<void()>& callback) {
197 event_received_callback_.Run(event.Pass());
198 callback.Run();
199 };
200
201 } // namespace service
202 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/window_tree_host_impl.h ('k') | mojo/shell/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698