| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/events/x/device_data_manager.h" | 5 #include "ui/events/x/device_data_manager.h" |
| 6 | 6 |
| 7 #include <X11/extensions/XInput.h> | 7 #include <X11/extensions/XInput.h> |
| 8 #include <X11/extensions/XInput2.h> | 8 #include <X11/extensions/XInput2.h> |
| 9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
| 10 | 10 |
| (...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 return false; | 575 return false; |
| 576 if (valuator_lookup_[deviceid][type] >= 0) { | 576 if (valuator_lookup_[deviceid][type] >= 0) { |
| 577 *min = valuator_min_[deviceid][type]; | 577 *min = valuator_min_[deviceid][type]; |
| 578 *max = valuator_max_[deviceid][type]; | 578 *max = valuator_max_[deviceid][type]; |
| 579 return true; | 579 return true; |
| 580 } | 580 } |
| 581 return false; | 581 return false; |
| 582 } | 582 } |
| 583 | 583 |
| 584 void DeviceDataManager::SetDeviceListForTest( | 584 void DeviceDataManager::SetDeviceListForTest( |
| 585 const std::vector<unsigned int>& devices, | 585 const std::vector<unsigned int>& touchscreen, |
| 586 const std::vector<unsigned int>& cmt_devices, | 586 const std::vector<unsigned int>& cmt_devices) { |
| 587 const std::vector<unsigned int>& touchpads) { | |
| 588 for (int i = 0; i < kMaxDeviceNum; ++i) { | 587 for (int i = 0; i < kMaxDeviceNum; ++i) { |
| 589 valuator_count_[i] = 0; | 588 valuator_count_[i] = 0; |
| 590 valuator_lookup_[i].clear(); | 589 valuator_lookup_[i].clear(); |
| 591 data_type_lookup_[i].clear(); | 590 data_type_lookup_[i].clear(); |
| 592 valuator_min_[i].clear(); | 591 valuator_min_[i].clear(); |
| 593 valuator_max_[i].clear(); | 592 valuator_max_[i].clear(); |
| 594 for (int j = 0; j < kMaxSlotNum; j++) | 593 for (int j = 0; j < kMaxSlotNum; j++) |
| 595 last_seen_valuator_[i][j].clear(); | 594 last_seen_valuator_[i][j].clear(); |
| 596 } | 595 } |
| 597 | 596 |
| 598 for (size_t i = 0; i < devices.size(); i++) { | 597 for (size_t i = 0; i < touchscreen.size(); i++) { |
| 599 unsigned int deviceid = devices[i]; | 598 unsigned int deviceid = touchscreen[i]; |
| 600 valuator_lookup_[deviceid].resize(DT_LAST_ENTRY, -1); | 599 InitializeValuatorsForTest(deviceid, kTouchDataTypeStart, kTouchDataTypeEnd, |
| 601 data_type_lookup_[deviceid].resize(DT_LAST_ENTRY, DT_LAST_ENTRY); | 600 0, 1000); |
| 602 valuator_min_[deviceid].resize(DT_LAST_ENTRY, 0); | |
| 603 valuator_max_[deviceid].resize(DT_LAST_ENTRY, 0); | |
| 604 for (int j = 0; j < kMaxSlotNum; j++) | |
| 605 last_seen_valuator_[deviceid][j].resize(DT_LAST_ENTRY, 0); | |
| 606 } | 601 } |
| 607 | 602 |
| 608 cmt_devices_.reset(); | 603 cmt_devices_.reset(); |
| 609 for (size_t i = 0; i < cmt_devices.size(); ++i) { | 604 for (size_t i = 0; i < cmt_devices.size(); ++i) { |
| 610 unsigned int deviceid = devices[i]; | 605 unsigned int deviceid = cmt_devices[i]; |
| 611 cmt_devices_[deviceid] = true; | 606 cmt_devices_[deviceid] = true; |
| 612 } | |
| 613 | |
| 614 touchpads_.reset(); | |
| 615 for (size_t i = 0; i < touchpads.size(); ++i) { | |
| 616 unsigned int deviceid = devices[i]; | |
| 617 touchpads_[deviceid] = true; | 607 touchpads_[deviceid] = true; |
| 608 InitializeValuatorsForTest(deviceid, kCMTDataTypeStart, kCMTDataTypeEnd, |
| 609 -1000, 1000); |
| 618 } | 610 } |
| 619 } | 611 } |
| 620 | 612 |
| 621 void DeviceDataManager::SetDeviceValuatorForTest(int deviceid, | 613 void DeviceDataManager::SetValuatorDataForTest(XIDeviceEvent* xievent, |
| 622 int val_index, | 614 DataType type, |
| 623 DataType data_type, | 615 double value) { |
| 624 double min, | 616 int index = valuator_lookup_[xievent->deviceid][type]; |
| 625 double max) { | 617 CHECK(!XIMaskIsSet(xievent->valuators.mask, index)); |
| 626 valuator_lookup_[deviceid][data_type] = val_index; | 618 CHECK(index >= 0 && index < valuator_count_[xievent->deviceid]); |
| 627 data_type_lookup_[deviceid][val_index] = data_type; | 619 XISetMask(xievent->valuators.mask, index); |
| 628 valuator_min_[deviceid][data_type] = min; | |
| 629 valuator_max_[deviceid][data_type] = max; | |
| 630 | 620 |
| 631 // Recalulate the number of valuators for the device. | 621 double* valuators = xievent->valuators.values; |
| 632 valuator_count_[deviceid] = 0; | 622 for (int i = 0; i < index; ++i) { |
| 633 for (size_t i = 0; i < DT_LAST_ENTRY; ++i) { | 623 if (XIMaskIsSet(xievent->valuators.mask, i)) |
| 634 if (valuator_lookup_[deviceid][i] != -1) | 624 valuators++; |
| 635 valuator_count_[deviceid]++; | 625 } |
| 626 for (int i = valuators - xievent->valuators.values; |
| 627 i < DT_LAST_ENTRY - 1; ++i) |
| 628 xievent->valuators.values[i + 1] = xievent->valuators.values[i]; |
| 629 *valuators = value; |
| 630 } |
| 631 |
| 632 void DeviceDataManager::InitializeValuatorsForTest(int deviceid, |
| 633 int start_valuator, |
| 634 int end_valuator, |
| 635 double min_value, |
| 636 double max_value) { |
| 637 valuator_lookup_[deviceid].resize(DT_LAST_ENTRY, -1); |
| 638 data_type_lookup_[deviceid].resize(DT_LAST_ENTRY, DT_LAST_ENTRY); |
| 639 valuator_min_[deviceid].resize(DT_LAST_ENTRY, 0); |
| 640 valuator_max_[deviceid].resize(DT_LAST_ENTRY, 0); |
| 641 for (int j = 0; j < kMaxSlotNum; j++) |
| 642 last_seen_valuator_[deviceid][j].resize(DT_LAST_ENTRY, 0); |
| 643 for (int j = start_valuator; j <= end_valuator; ++j) { |
| 644 valuator_lookup_[deviceid][j] = valuator_count_[deviceid]; |
| 645 data_type_lookup_[deviceid][valuator_count_[deviceid]] = j; |
| 646 valuator_min_[deviceid][j] = min_value; |
| 647 valuator_max_[deviceid][j] = max_value; |
| 648 valuator_count_[deviceid]++; |
| 636 } | 649 } |
| 637 } | 650 } |
| 651 |
| 638 } // namespace ui | 652 } // namespace ui |
| OLD | NEW |