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