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

Side by Side Diff: examples/wm_flow/wm/frame_controller.cc

Issue 1397563003: Remove wm_flow, browser, nesting_app examples (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 2 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
(Empty)
1 // Copyright 2014 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 "examples/wm_flow/wm/frame_controller.h"
6
7 #include "base/macros.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "mojo/converters/geometry/geometry_type_converters.h"
10 #include "mojo/public/interfaces/application/service_provider.mojom.h"
11 #include "mojo/services/view_manager/cpp/view.h"
12 #include "mojo/services/view_manager/cpp/view_manager.h"
13 #include "services/window_manager/capture_controller.h"
14 #include "services/window_manager/window_manager_root.h"
15 #include "url/gurl.h"
16
17 ////////////////////////////////////////////////////////////////////////////////
18 // FrameController, public:
19
20 FrameController::FrameController(
21 const GURL& frame_app_url,
22 mojo::View* view,
23 mojo::View** app_view,
24 window_manager::WindowManagerRoot* window_manager_root)
25 : view_(view),
26 app_view_(view->view_manager()->CreateView()),
27 maximized_(false),
28 window_manager_root_(window_manager_root),
29 binding_(this) {
30 view_->AddObserver(this);
31 view_->SetVisible(true); // FIXME: This should not be our responsibility?
32 *app_view = app_view_;
33
34 viewer_services_impl_.AddService(this);
35 mojo::ServiceProviderPtr viewer_services;
36 viewer_services_impl_.Bind(GetProxy(&viewer_services));
37
38 view_->Embed(frame_app_url.spec(), nullptr, viewer_services.Pass());
39
40 // We weren't observing when our initial bounds was set:
41 OnViewBoundsChanged(view, view->bounds(), view->bounds());
42
43 // Add the child view after embedding sky, since embed clears children.
44 view_->AddChild(app_view_);
45 app_view_->SetVisible(true);
46 }
47
48 FrameController::~FrameController() {}
49
50 void FrameController::Create(
51 mojo::ApplicationConnection* connection,
52 mojo::InterfaceRequest<examples::WindowFrameHost> request) {
53 binding_.Bind(request.Pass());
54 }
55
56 void FrameController::CloseWindow() {
57 // This destroys |app_view_| as it is a child of |view_|.
58 view_->Destroy();
59 }
60
61 void FrameController::ToggleMaximize() {
62 if (!maximized_)
63 restored_bounds_ = view_->bounds().To<gfx::Rect>();
64 maximized_ = !maximized_;
65 if (maximized_)
66 view_->SetBounds(view_->parent()->bounds());
67 else
68 view_->SetBounds(*mojo::Rect::From(restored_bounds_));
69 }
70
71 void FrameController::ActivateWindow() {
72 window_manager_root_->focus_controller()->ActivateView(view_);
73 }
74
75 void FrameController::SetCapture(bool frame_has_capture) {
76 if (frame_has_capture)
77 window_manager_root_->capture_controller()->SetCapture(view_);
78 else
79 window_manager_root_->capture_controller()->ReleaseCapture(view_);
80 }
81
82 ////////////////////////////////////////////////////////////////////////////////
83 // FrameController, mojo::ViewObserver implementation:
84
85 void FrameController::OnViewDestroyed(mojo::View* view) {
86 view_->RemoveObserver(this);
87 delete this;
88 }
89
90 void FrameController::OnViewBoundsChanged(mojo::View* view,
91 const mojo::Rect& old_bounds,
92 const mojo::Rect& new_bounds) {
93 CHECK(view == view_);
94 // Statically size the embedded view. Unclear if we should use a
95 // sky iframe to participate in sky layout or not.
96 const int kTopControlsAdditionalInset = 15;
97 const int kDefaultInset = 25;
98 mojo::Rect bounds;
99 bounds.x = bounds.y = kDefaultInset;
100 bounds.y += kTopControlsAdditionalInset;
101 bounds.width = view_->bounds().width - kDefaultInset * 2;
102 bounds.height =
103 view_->bounds().height - kDefaultInset * 2 - kTopControlsAdditionalInset;
104 app_view_->SetBounds(bounds);
105 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698