| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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 "components/mus/ws/event_matcher.h" | |
| 6 | |
| 7 namespace mus { | |
| 8 namespace ws { | |
| 9 | |
| 10 EventMatcher::EventMatcher(const mojom::EventMatcher& matcher) | |
| 11 : fields_to_match_(NONE), | |
| 12 event_type_(ui::ET_UNKNOWN), | |
| 13 event_flags_(ui::EF_NONE), | |
| 14 ignore_event_flags_(ui::EF_NONE), | |
| 15 keyboard_code_(ui::VKEY_UNKNOWN), | |
| 16 pointer_type_(ui::EventPointerType::POINTER_TYPE_UNKNOWN) { | |
| 17 if (matcher.type_matcher) { | |
| 18 fields_to_match_ |= TYPE; | |
| 19 switch (matcher.type_matcher->type) { | |
| 20 case ui::mojom::EventType::POINTER_DOWN: | |
| 21 event_type_ = ui::ET_POINTER_DOWN; | |
| 22 break; | |
| 23 case ui::mojom::EventType::POINTER_MOVE: | |
| 24 event_type_ = ui::ET_POINTER_MOVED; | |
| 25 break; | |
| 26 case ui::mojom::EventType::MOUSE_EXIT: | |
| 27 event_type_ = ui::ET_POINTER_EXITED; | |
| 28 break; | |
| 29 case ui::mojom::EventType::POINTER_UP: | |
| 30 event_type_ = ui::ET_POINTER_UP; | |
| 31 break; | |
| 32 case ui::mojom::EventType::POINTER_CANCEL: | |
| 33 event_type_ = ui::ET_POINTER_CANCELLED; | |
| 34 break; | |
| 35 case ui::mojom::EventType::KEY_PRESSED: | |
| 36 event_type_ = ui::ET_KEY_PRESSED; | |
| 37 break; | |
| 38 case ui::mojom::EventType::KEY_RELEASED: | |
| 39 event_type_ = ui::ET_KEY_RELEASED; | |
| 40 break; | |
| 41 default: | |
| 42 NOTREACHED(); | |
| 43 } | |
| 44 } | |
| 45 if (matcher.flags_matcher) { | |
| 46 fields_to_match_ |= FLAGS; | |
| 47 event_flags_ = matcher.flags_matcher->flags; | |
| 48 if (matcher.ignore_flags_matcher) | |
| 49 ignore_event_flags_ = matcher.ignore_flags_matcher->flags; | |
| 50 } | |
| 51 if (matcher.key_matcher) { | |
| 52 fields_to_match_ |= KEYBOARD_CODE; | |
| 53 keyboard_code_ = static_cast<uint16_t>(matcher.key_matcher->keyboard_code); | |
| 54 } | |
| 55 if (matcher.pointer_kind_matcher) { | |
| 56 fields_to_match_ |= POINTER_KIND; | |
| 57 switch (matcher.pointer_kind_matcher->pointer_kind) { | |
| 58 case ui::mojom::PointerKind::MOUSE: | |
| 59 pointer_type_ = ui::EventPointerType::POINTER_TYPE_MOUSE; | |
| 60 break; | |
| 61 case ui::mojom::PointerKind::TOUCH: | |
| 62 pointer_type_ = ui::EventPointerType::POINTER_TYPE_TOUCH; | |
| 63 break; | |
| 64 default: | |
| 65 NOTREACHED(); | |
| 66 } | |
| 67 } | |
| 68 if (matcher.pointer_location_matcher) { | |
| 69 fields_to_match_ |= POINTER_LOCATION; | |
| 70 pointer_region_ = matcher.pointer_location_matcher->region; | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 EventMatcher::~EventMatcher() {} | |
| 75 | |
| 76 bool EventMatcher::MatchesEvent(const ui::Event& event) const { | |
| 77 if ((fields_to_match_ & TYPE) && event.type() != event_type_) | |
| 78 return false; | |
| 79 int flags = event.flags() & ~ignore_event_flags_; | |
| 80 if ((fields_to_match_ & FLAGS) && flags != event_flags_) | |
| 81 return false; | |
| 82 if (fields_to_match_ & KEYBOARD_CODE) { | |
| 83 if (!event.IsKeyEvent()) | |
| 84 return false; | |
| 85 if (keyboard_code_ != event.AsKeyEvent()->GetConflatedWindowsKeyCode()) | |
| 86 return false; | |
| 87 } | |
| 88 if (fields_to_match_ & POINTER_KIND) { | |
| 89 if (!event.IsPointerEvent() || | |
| 90 pointer_type_ != event.AsPointerEvent()->pointer_details().pointer_type) | |
| 91 return false; | |
| 92 } | |
| 93 if (fields_to_match_ & POINTER_LOCATION) { | |
| 94 // TODO(sad): The tricky part here is to make sure the same coord-space is | |
| 95 // used for the location-region and the event-location. | |
| 96 NOTIMPLEMENTED(); | |
| 97 return false; | |
| 98 } | |
| 99 return true; | |
| 100 } | |
| 101 | |
| 102 bool EventMatcher::Equals(const EventMatcher& other) const { | |
| 103 return fields_to_match_ == other.fields_to_match_ && | |
| 104 event_type_ == other.event_type_ && | |
| 105 event_flags_ == other.event_flags_ && | |
| 106 ignore_event_flags_ == other.ignore_event_flags_ && | |
| 107 keyboard_code_ == other.keyboard_code_ && | |
| 108 pointer_type_ == other.pointer_type_ && | |
| 109 pointer_region_ == other.pointer_region_; | |
| 110 } | |
| 111 | |
| 112 } // namespace ws | |
| 113 } // namespace mus | |
| OLD | NEW |