event_generator_delegate_aura.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/aura/test/event_generator_delegate_aura.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/screen_position_client.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/window_tree_host.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace aura {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass DefaultEventGeneratorDelegate : public EventGeneratorDelegateAura {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  explicit DefaultEventGeneratorDelegate(Window* root_window)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : root_window_(root_window) {}
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~DefaultEventGeneratorDelegate() {}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // EventGeneratorDelegateAura overrides:
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual WindowTreeHost* GetHostAt(const gfx::Point& point) const OVERRIDE {
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return root_window_->GetHost();
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual client::ScreenPositionClient* GetScreenPositionClient(
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const aura::Window* window) const OVERRIDE {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  Window* root_window_;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DefaultEventGeneratorDelegate);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst Window* WindowFromTarget(const ui::EventTarget* event_target) {
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return static_cast<const Window*>(event_target);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
43116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEventGeneratorDelegateAura::EventGeneratorDelegateAura() {
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
46116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEventGeneratorDelegateAura::~EventGeneratorDelegateAura() {
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdochui::EventTarget* EventGeneratorDelegateAura::GetTargetAt(
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const gfx::Point& location) {
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return GetHostAt(location)->window();
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdochui::EventSource* EventGeneratorDelegateAura::GetEventSource(
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ui::EventTarget* target) {
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return static_cast<Window*>(target)->GetHost()->GetEventSource();
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdochgfx::Point EventGeneratorDelegateAura::CenterOfTarget(
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const ui::EventTarget* target) const {
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Point center =
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      gfx::Rect(WindowFromTarget(target)->bounds().size()).CenterPoint();
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ConvertPointFromTarget(target, &center);
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return center;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdochgfx::Point EventGeneratorDelegateAura::CenterOfWindow(
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    gfx::NativeWindow window) const {
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return CenterOfTarget(window);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EventGeneratorDelegateAura::ConvertPointFromTarget(
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const ui::EventTarget* event_target,
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    gfx::Point* point) const {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(point);
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const Window* target = WindowFromTarget(event_target);
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  aura::client::ScreenPositionClient* client = GetScreenPositionClient(target);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (client)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    client->ConvertPointToScreen(target, point);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::Window::ConvertPointToTarget(target, target->GetRootWindow(), point);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EventGeneratorDelegateAura::ConvertPointToTarget(
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const ui::EventTarget* event_target,
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    gfx::Point* point) const {
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(point);
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const Window* target = WindowFromTarget(event_target);
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  aura::client::ScreenPositionClient* client = GetScreenPositionClient(target);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (client)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    client->ConvertPointFromScreen(target, point);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::Window::ConvertPointToTarget(target->GetRootWindow(), target, point);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EventGeneratorDelegateAura::ConvertPointFromHost(
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const ui::EventTarget* hosted_target,
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    gfx::Point* point) const {
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const Window* window = WindowFromTarget(hosted_target);
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  window->GetHost()->ConvertPointFromHost(point);
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace test
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace aura
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace ui {
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test {
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
110116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEventGeneratorDelegate* EventGenerator::CreateDefaultPlatformDelegate(
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EventGenerator* owner,
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    gfx::NativeWindow root_window,
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    gfx::NativeWindow window) {
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return new aura::test::DefaultEventGeneratorDelegate(root_window);
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace ui
119