15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_AURA_ENV_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_AURA_ENV_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/supports_user_data.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/aura_export.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_handler.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_target.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace ui { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ContextFactory; 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass PlatformEventSource; 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace test { 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class EnvTestHelper; 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EnvObserver; 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class InputStateLookup; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window; 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WindowTreeHost; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A singleton object that tracks general state within Aura. 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class AURA_EXPORT Env : public ui::EventTarget, public base::SupportsUserData { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Creates the single Env instance (if it hasn't been created yet). If 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // |create_event_source| is true a PlatformEventSource is created. 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(sky): nuke |create_event_source|. Only necessary while mojo's 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // nativeviewportservice lives in the same process as the viewmanager. 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static void CreateInstance(bool create_event_source); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Env* GetInstance(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void DeleteInstance(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(EnvObserver* observer); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(EnvObserver* observer); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const int mouse_button_flags() const { return mouse_button_flags_; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_mouse_button_flags(int mouse_button_flags) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_button_flags_ = mouse_button_flags; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Returns true if a mouse button is down. This may query the native OS, 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // otherwise it uses |mouse_button_flags_|. 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool IsMouseButtonDown() const; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/sets the last mouse location seen in a mouse event in the screen 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coordinates. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& last_mouse_location() const { return last_mouse_location_; } 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_last_mouse_location(const gfx::Point& last_mouse_location) { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_mouse_location_ = last_mouse_location; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether any touch device is currently down. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_touch_down() const { return is_touch_down_; } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_touch_down(bool value) { is_touch_down_ = value; } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void set_context_factory(ui::ContextFactory* context_factory) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_factory_ = context_factory; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ContextFactory* context_factory() { return context_factory_; } 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) friend class test::EnvTestHelper; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class Window; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend class WindowTreeHost; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Env(); 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~Env(); 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // See description of CreateInstance() for deatils of |create_event_source|. 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void Init(bool create_event_source); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the Window when it is initialized. Notifies observers. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyWindowInitialized(Window* window); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called by the WindowTreeHost when it is initialized. Notifies observers. 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void NotifyHostInitialized(WindowTreeHost* host); 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Invoked by WindowTreeHost when it is activated. Notifies observers. 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void NotifyHostActivated(WindowTreeHost* host); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ui::EventTarget: 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::EventTarget* GetParentTarget() OVERRIDE; 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<EnvObserver> observers_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_button_flags_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Location of last mouse event, in screen coordinates. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point last_mouse_location_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_touch_down_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<InputStateLookup> input_state_lookup_; 1030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<ui::PlatformEventSource> event_source_; 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ContextFactory* context_factory_; 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Env); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_AURA_ENV_H_ 113