device_data_manager.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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#include "ui/events/device_data_manager.h" 6 7#include "base/at_exit.h" 8#include "base/bind.h" 9#include "base/logging.h" 10#include "ui/gfx/display.h" 11#include "ui/gfx/geometry/point3_f.h" 12 13namespace ui { 14 15// static 16DeviceDataManager* DeviceDataManager::instance_ = NULL; 17 18DeviceDataManager::DeviceDataManager() { 19 CHECK(!instance_) << "Can not create multiple instances of DeviceDataManager"; 20 instance_ = this; 21 22 base::AtExitManager::RegisterTask( 23 base::Bind(&base::DeletePointer<DeviceDataManager>, this)); 24 25 for (int i = 0; i < kMaxDeviceNum; ++i) 26 touch_device_to_display_map_[i] = gfx::Display::kInvalidDisplayID; 27} 28 29DeviceDataManager::~DeviceDataManager() { 30 CHECK_EQ(this, instance_); 31 instance_ = NULL; 32} 33 34// static 35DeviceDataManager* DeviceDataManager::instance() { return instance_; } 36 37// static 38void DeviceDataManager::CreateInstance() { 39 if (instance()) 40 return; 41 42 new DeviceDataManager(); 43} 44 45// static 46DeviceDataManager* DeviceDataManager::GetInstance() { 47 CHECK(instance_) << "DeviceDataManager was not created."; 48 return instance_; 49} 50 51// static 52bool DeviceDataManager::HasInstance() { 53 return instance_ != NULL; 54} 55 56void DeviceDataManager::ClearTouchTransformerRecord() { 57 for (int i = 0; i < kMaxDeviceNum; i++) { 58 touch_device_transformer_map_[i] = gfx::Transform(); 59 touch_device_to_display_map_[i] = gfx::Display::kInvalidDisplayID; 60 } 61} 62 63bool DeviceDataManager::IsTouchDeviceIdValid(int touch_device_id) const { 64 return (touch_device_id > 0 && touch_device_id < kMaxDeviceNum); 65} 66 67void DeviceDataManager::UpdateTouchInfoForDisplay( 68 int64_t display_id, 69 int touch_device_id, 70 const gfx::Transform& touch_transformer) { 71 if (IsTouchDeviceIdValid(touch_device_id)) { 72 touch_device_to_display_map_[touch_device_id] = display_id; 73 touch_device_transformer_map_[touch_device_id] = touch_transformer; 74 } 75} 76 77void DeviceDataManager::ApplyTouchTransformer(int touch_device_id, 78 float* x, 79 float* y) { 80 if (IsTouchDeviceIdValid(touch_device_id)) { 81 gfx::Point3F point(*x, *y, 0.0); 82 const gfx::Transform& trans = 83 touch_device_transformer_map_[touch_device_id]; 84 trans.TransformPoint(&point); 85 *x = point.x(); 86 *y = point.y(); 87 } 88} 89 90int64_t DeviceDataManager::GetDisplayForTouchDevice(int touch_device_id) const { 91 if (IsTouchDeviceIdValid(touch_device_id)) 92 return touch_device_to_display_map_[touch_device_id]; 93 return gfx::Display::kInvalidDisplayID; 94} 95 96} // namespace ui 97