env.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/aura_export.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_handler.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_target.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/device_list_updater_aurax11.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace test { 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class EnvTestHelper; 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EnvObserver; 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class InputStateLookup; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WindowTreeHost; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A singleton object that tracks general state within Aura. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AURA_EXPORT Env : public ui::EventTarget { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Env(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Env(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static void CreateInstance(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Env* GetInstance(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void DeleteInstance(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(EnvObserver* observer); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(EnvObserver* observer); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_mouse_button_flags(int mouse_button_flags) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_button_flags_ = mouse_button_flags; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Returns true if a mouse button is down. This may query the native OS, 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // otherwise it uses |mouse_button_flags_|. 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool IsMouseButtonDown() const; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/sets the last mouse location seen in a mouse event in the screen 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coordinates. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& last_mouse_location() const { return last_mouse_location_; } 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_last_mouse_location(const gfx::Point& last_mouse_location) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_mouse_location_ = last_mouse_location; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether any touch device is currently down. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_touch_down() const { return is_touch_down_; } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_touch_down(bool value) { is_touch_down_ = value; } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) friend class test::EnvTestHelper; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class Window; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend class WindowTreeHost; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the Window when it is initialized. Notifies observers. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyWindowInitialized(Window* window); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called by the WindowTreeHost when it is initialized. Notifies observers. 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void NotifyHostInitialized(WindowTreeHost* host); 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Invoked by WindowTreeHost when it is activated. Notifies observers. 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void NotifyHostActivated(WindowTreeHost* host); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ui::EventTarget: 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::EventTarget* GetParentTarget() OVERRIDE; 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<EnvObserver> observers_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Env* instance_; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_button_flags_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Location of last mouse event, in screen coordinates. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point last_mouse_location_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_touch_down_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceListUpdaterAuraX11 device_list_updater_aurax11_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<InputStateLookup> input_state_lookup_; 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Env); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_AURA_ENV_H_ 103