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 ASH_TOUCH_TOUCH_OBSERVER_HUD_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_TOUCH_TOUCH_OBSERVER_HUD_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/ash_export.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/display/display_controller.h"
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_handler.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/display_observer.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_observer.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS)
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/display/chromeos/display_configurator.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// An event filter which handles system level gesture events. Objects of this
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// class manage their own lifetime.
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ASH_EXPORT TouchObserverHUD : public ui::EventHandler,
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                    public views::WidgetObserver,
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                    public gfx::DisplayObserver,
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS)
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                    public ui::DisplayConfigurator::Observer,
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                    public DisplayController::Observer {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Called to clear touch points and traces from the screen. Default
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // implementation does nothing. Sub-classes should implement appropriately.
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void Clear();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Removes the HUD from the screen.
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void Remove();
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int64 display_id() const { return display_id_; }
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  explicit TouchObserverHUD(aura::Window* initial_root);
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~TouchObserverHUD();
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetHudForRootWindowController(
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      RootWindowController* controller) = 0;
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void UnsetHudForRootWindowController(
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      RootWindowController* controller) = 0;
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  views::Widget* widget() { return widget_; }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Overriden from ui::EventHandler.
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Overridden from views::WidgetObserver.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Overridden from gfx::DisplayObserver.
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnDisplayMetricsChanged(const gfx::Display& display,
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                       uint32_t metrics) OVERRIDE;
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS)
68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Overriden from ui::DisplayConfigurator::Observer.
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void OnDisplayModeChanged(
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      const ui::DisplayConfigurator::DisplayStateList& outputs) OVERRIDE;
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Overriden form DisplayController::Observer.
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void OnDisplaysInitialized() OVERRIDE;
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnDisplayConfigurationChanging() OVERRIDE;
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnDisplayConfigurationChanged() OVERRIDE;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  friend class TouchHudTestBase;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const int64 display_id_;
821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  aura::Window* root_window_;
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Widget* widget_;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TouchObserverHUD);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ASH_TOUCH_TOUCH_OBSERVER_HUD_H_
92