1// Copyright 2014 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_TRANSFORMER_CONTROLLER_H_
6#define ASH_TOUCH_TOUCH_TRANSFORMER_CONTROLLER_H_
7
8#include "ash/ash_export.h"
9#include "ash/display/display_controller.h"
10#include "ui/gfx/transform.h"
11
12namespace ash {
13
14// TouchTransformerController listens to display configuration change
15// and updates the touch transformation for touch displays.
16class ASH_EXPORT TouchTransformerController
17    : public DisplayController::Observer {
18 public:
19  TouchTransformerController();
20  virtual ~TouchTransformerController();
21
22  // Updates the TouchTransformer for touch device and pushes the new
23  // TouchTransformer into device manager.
24  void UpdateTouchTransformer() const;
25
26  // DisplayController::Observer:
27  virtual void OnDisplaysInitialized() OVERRIDE;
28  virtual void OnDisplayConfigurationChanged() OVERRIDE;
29
30 private:
31  FRIEND_TEST_ALL_PREFIXES(TouchTransformerControllerTest,
32                           TouchTransformerMirrorModeLetterboxing);
33  FRIEND_TEST_ALL_PREFIXES(TouchTransformerControllerTest,
34                           TouchTransformerMirrorModePillarboxing);
35  FRIEND_TEST_ALL_PREFIXES(TouchTransformerControllerTest,
36                           TouchTransformerExtendedMode);
37  FRIEND_TEST_ALL_PREFIXES(TouchTransformerControllerTest,
38                           TouchRadiusScale);
39
40  bool ShouldComputeMirrorModeTouchTransformer(
41      const DisplayInfo& touch_display) const ;
42
43  gfx::Transform GetMirrorModeTouchTransformer(
44      const DisplayInfo& touch_display) const;
45
46  gfx::Transform GetExtendedModeTouchTransformer(
47      const DisplayInfo& touch_display, const gfx::Size& fb_size) const;
48
49  double GetTouchResolutionScale(const DisplayInfo& touch_display) const;
50
51  // For unittests only.
52  bool force_compute_mirror_mode_touch_transformer_;
53
54  DISALLOW_COPY_AND_ASSIGN(TouchTransformerController);
55};
56
57}  // namespace ash
58
59#endif  // ASH_TOUCH_TOUCH_TRANSFORMER_CONTROLLER_H_
60