Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ui / views / view_targeter.cc
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 "ui/views/view_targeter.h"
6
7 #include "ui/events/event_target.h"
8 #include "ui/views/focus/focus_manager.h"
9 #include "ui/views/view.h"
10
11 namespace views {
12
13 ViewTargeter::ViewTargeter() {}
14 ViewTargeter::~ViewTargeter() {}
15
16 ui::EventTarget* ViewTargeter::FindTargetForEvent(ui::EventTarget* root,
17                                                   ui::Event* event) {
18   View* view = static_cast<View*>(root);
19   if (event->IsKeyEvent())
20     return FindTargetForKeyEvent(view, *static_cast<ui::KeyEvent*>(event));
21   else if (event->IsScrollEvent())
22     return EventTargeter::FindTargetForEvent(root, event);
23
24   NOTREACHED() << "ViewTargeter does not yet support this event type.";
25   return NULL;
26 }
27
28 ui::EventTarget* ViewTargeter::FindNextBestTarget(
29     ui::EventTarget* previous_target,
30     ui::Event* event) {
31   return previous_target->GetParentTarget();
32 }
33
34 bool ViewTargeter::SubtreeCanAcceptEvent(
35     ui::EventTarget* target,
36     const ui::LocatedEvent& event) const {
37   views::View* view = static_cast<views::View*>(target);
38   if (!view->visible())
39     return false;
40   return true;
41 }
42
43 bool ViewTargeter::EventLocationInsideBounds(
44     ui::EventTarget* target,
45     const ui::LocatedEvent& event) const {
46   views::View* view = static_cast<views::View*>(target);
47   gfx::Rect rect(event.location(), gfx::Size(1, 1));
48   gfx::RectF rect_in_view_coords_f(rect);
49   if (view->parent())
50     View::ConvertRectToTarget(view->parent(), view, &rect_in_view_coords_f);
51   gfx::Rect rect_in_view_coords = gfx::ToEnclosingRect(rect_in_view_coords_f);
52
53   // TODO(tdanderson): Don't call into HitTestRect() directly here.
54   //                   See crbug.com/370579.
55   return view->HitTestRect(rect_in_view_coords);
56 }
57
58 View* ViewTargeter::FindTargetForKeyEvent(View* view, const ui::KeyEvent& key) {
59   if (view->GetFocusManager())
60     return view->GetFocusManager()->GetFocusedView();
61   return NULL;
62 }
63
64 }  // namespace aura