Home | History | Annotate | Download | only in touch
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef ASH_TOUCH_TOUCH_OBSERVER_HUD_H_
      6 #define ASH_TOUCH_TOUCH_OBSERVER_HUD_H_
      7 
      8 #include "ash/ash_export.h"
      9 #include "ash/display/display_controller.h"
     10 #include "ui/base/events/event_handler.h"
     11 #include "ui/gfx/display_observer.h"
     12 #include "ui/views/widget/widget_observer.h"
     13 
     14 #if defined(OS_CHROMEOS)
     15 #include "chromeos/display/output_configurator.h"
     16 #endif  // defined(OS_CHROMEOS)
     17 
     18 namespace views {
     19 class Widget;
     20 }
     21 
     22 namespace ash {
     23 namespace internal {
     24 
     25 // An event filter which handles system level gesture events. Objects of this
     26 // class manage their own lifetime.
     27 class ASH_EXPORT TouchObserverHUD
     28     : public ui::EventHandler,
     29       public views::WidgetObserver,
     30       public gfx::DisplayObserver,
     31 #if defined(OS_CHROMEOS)
     32       public chromeos::OutputConfigurator::Observer,
     33 #endif  // defined(OS_CHROMEOS)
     34       public DisplayController::Observer {
     35  public:
     36   // Called to clear touch points and traces from the screen. Default
     37   // implementation does nothing. Sub-classes should implement appropriately.
     38   virtual void Clear();
     39 
     40   // Removes the HUD from the screen.
     41   void Remove();
     42 
     43   int64 display_id() const { return display_id_; }
     44 
     45  protected:
     46   explicit TouchObserverHUD(aura::RootWindow* initial_root);
     47 
     48   virtual ~TouchObserverHUD();
     49 
     50   virtual void SetHudForRootWindowController(
     51       RootWindowController* controller) = 0;
     52   virtual void UnsetHudForRootWindowController(
     53       RootWindowController* controller) = 0;
     54 
     55   views::Widget* widget() { return widget_; }
     56 
     57   // Overriden from ui::EventHandler.
     58   virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
     59 
     60   // Overridden from views::WidgetObserver.
     61   virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
     62 
     63   // Overridden from gfx::DisplayObserver.
     64   virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE;
     65   virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
     66   virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
     67 
     68 #if defined(OS_CHROMEOS)
     69   // Overriden from chromeos::OutputConfigurator::Observer.
     70   virtual void OnDisplayModeChanged() OVERRIDE;
     71 #endif  // defined(OS_CHROMEOS)
     72 
     73   // Overriden form DisplayController::Observer.
     74   virtual void OnDisplayConfigurationChanging() OVERRIDE;
     75   virtual void OnDisplayConfigurationChanged() OVERRIDE;
     76 
     77  private:
     78   friend class TouchHudTest;
     79 
     80   const int64 display_id_;
     81   aura::RootWindow* root_window_;
     82 
     83   views::Widget* widget_;
     84 
     85   DISALLOW_COPY_AND_ASSIGN(TouchObserverHUD);
     86 };
     87 
     88 }  // namespace internal
     89 }  // namespace ash
     90 
     91 #endif  // ASH_TOUCH_TOUCH_OBSERVER_HUD_H_
     92