• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 CHROME_BROWSER_UI_PANELS_PANEL_MOUSE_WATCHER_H_
6 #define CHROME_BROWSER_UI_PANELS_PANEL_MOUSE_WATCHER_H_
7 
8 #include "base/gtest_prod_util.h"
9 #include "base/observer_list.h"
10 
11 namespace gfx {
12 class Point;
13 }
14 
15 class PanelMouseWatcherObserver;
16 
17 // This is the base class for functionality to watch for mouse movements.
18 // The specific implementation of this abstract class differ in how they
19 // track mouse movements.
20 class PanelMouseWatcher {
21  public:
22   // Returns an instance of the platform specific implementation.
23   static PanelMouseWatcher* Create();
24 
25   // clang gives an error asking for an out of line destructor.
26   virtual ~PanelMouseWatcher();
27 
28   void AddObserver(PanelMouseWatcherObserver* observer);
29   void RemoveObserver(PanelMouseWatcherObserver* observer);
30 
31   // Returns current mouse position. This may be different from the
32   // mouse position in NotifyMouseMovement.
33   virtual gfx::Point GetMousePosition() const = 0;
34 
35  protected:
36   PanelMouseWatcher();
37 
38   // |mouse_position| is in screen coordinates.
39   virtual void NotifyMouseMovement(const gfx::Point& mouse_position);
40 
41   // Returns true if watching mouse movements.
42   virtual bool IsActive() const = 0;
43 
44  private:
45   friend class PanelMouseWatcherTest;
46   FRIEND_TEST_ALL_PREFIXES(PanelMouseWatcherTest, StartStopWatching);
47   friend class BasePanelBrowserTest;
48 
49   // Start/stop tracking mouse movements.
50   virtual void Start() = 0;
51   virtual void Stop() = 0;
52 
53   ObserverList<PanelMouseWatcherObserver> observers_;
54 };
55 
56 #endif  // CHROME_BROWSER_UI_PANELS_PANEL_MOUSE_WATCHER_H_
57