1// Copyright 2013 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_HUD_DEBUG_H_
6#define ASH_TOUCH_TOUCH_HUD_DEBUG_H_
7
8#include <map>
9
10#include "ash/ash_export.h"
11#include "ash/touch/touch_observer_hud.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/values.h"
14
15namespace views {
16class Label;
17class View;
18}
19
20namespace ash {
21class TouchHudCanvas;
22class TouchLog;
23
24// A heads-up display to show touch traces on the screen and log touch events.
25// As a derivative of TouchObserverHUD, objects of this class manage their own
26// lifetime.
27class ASH_EXPORT TouchHudDebug : public TouchObserverHUD {
28 public:
29  enum Mode {
30    FULLSCREEN,
31    REDUCED_SCALE,
32    INVISIBLE,
33  };
34
35  explicit TouchHudDebug(aura::Window* initial_root);
36
37  // Returns the log of touch events for all displays as a dictionary mapping id
38  // of each display to its touch log.
39  static scoped_ptr<base::DictionaryValue> GetAllAsDictionary();
40
41  // Changes the display mode (e.g. scale, visibility). Calling this repeatedly
42  // cycles between a fixed number of display modes.
43  void ChangeToNextMode();
44
45  // Returns log of touch events as a list value. Each item in the list is a
46  // trace of one touch point.
47  scoped_ptr<base::ListValue> GetLogAsList() const;
48
49  Mode mode() const { return mode_; }
50
51  // Overriden from TouchObserverHUD.
52  virtual void Clear() OVERRIDE;
53
54 private:
55  virtual ~TouchHudDebug();
56
57  void SetMode(Mode mode);
58
59  void UpdateTouchPointLabel(int index);
60
61  // Overriden from TouchObserverHUD.
62  virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
63  virtual void OnDisplayMetricsChanged(const gfx::Display& display,
64                                       uint32_t metrics) OVERRIDE;
65  virtual void SetHudForRootWindowController(
66      RootWindowController* controller) OVERRIDE;
67  virtual void UnsetHudForRootWindowController(
68      RootWindowController* controller) OVERRIDE;
69
70  static const int kMaxTouchPoints = 32;
71
72  Mode mode_;
73
74  scoped_ptr<TouchLog> touch_log_;
75
76  TouchHudCanvas* canvas_;
77  views::View* label_container_;
78  views::Label* touch_labels_[kMaxTouchPoints];
79
80  DISALLOW_COPY_AND_ASSIGN(TouchHudDebug);
81};
82
83}  // namespace ash
84
85#endif  // ASH_TOUCH_TOUCH_HUD_DEBUG_H_
86