OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/view_manager/focus_controller.h" | |
6 | |
7 #include "components/view_manager/focus_controller_delegate.h" | |
8 #include "components/view_manager/server_view.h" | |
9 #include "components/view_manager/server_view_drawn_tracker.h" | |
10 | |
11 namespace view_manager { | |
12 | |
13 FocusController::FocusController(FocusControllerDelegate* delegate) | |
14 : delegate_(delegate) { | |
15 } | |
16 | |
17 FocusController::~FocusController() { | |
18 } | |
19 | |
20 void FocusController::SetFocusedView(ServerView* view) { | |
21 if (GetFocusedView() == view) | |
22 return; | |
23 | |
24 SetFocusedViewImpl(view, CHANGE_SOURCE_EXPLICIT); | |
25 } | |
26 | |
27 ServerView* FocusController::GetFocusedView() { | |
28 return drawn_tracker_ ? drawn_tracker_->view() : nullptr; | |
29 } | |
30 | |
31 void FocusController::SetFocusedViewImpl(ServerView* view, | |
32 ChangeSource change_source) { | |
33 ServerView* old = GetFocusedView(); | |
34 | |
35 DCHECK(!view || view->IsDrawn()); | |
36 | |
37 if (view) | |
38 drawn_tracker_.reset(new ServerViewDrawnTracker(view, this)); | |
39 else | |
40 drawn_tracker_.reset(); | |
41 | |
42 if (change_source == CHANGE_SOURCE_DRAWN_STATE_CHANGED) | |
43 delegate_->OnFocusChanged(old, view); | |
44 } | |
45 | |
46 void FocusController::OnDrawnStateChanged(ServerView* ancestor, | |
47 ServerView* view, | |
48 bool is_drawn) { | |
49 DCHECK(!is_drawn); // We only observe when drawn. | |
50 SetFocusedViewImpl(ancestor, CHANGE_SOURCE_DRAWN_STATE_CHANGED); | |
51 } | |
52 | |
53 } // namespace view_manager | |
OLD | NEW |