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, ¢er); 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