OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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 "core/events/InputEvent.h" | 5 #include "core/events/InputEvent.h" |
6 | 6 |
7 #include "core/dom/Range.h" | 7 #include "core/dom/Range.h" |
8 #include "core/events/EventDispatcher.h" | 8 #include "core/events/EventDispatcher.h" |
9 #include "public/platform/WebEditingCommandType.h" | 9 #include "public/platform/WebEditingCommandType.h" |
10 | 10 |
11 namespace blink { | 11 namespace blink { |
12 | 12 |
13 namespace { | 13 namespace { |
14 | 14 |
15 const struct { | 15 const struct { |
16 InputEvent::InputType inputType; | 16 InputEvent::InputType inputType; |
17 const char* stringName; | 17 const char* stringName; |
18 } kInputTypeStringNameMap[] = { | 18 } kInputTypeStringNameMap[] = { |
19 {InputEvent::InputType::None, ""}, | 19 { InputEvent::InputType::None, "" }, |
20 {InputEvent::InputType::InsertText, "insertText"}, | 20 { InputEvent::InputType::InsertText, "insertText" }, |
21 {InputEvent::InputType::ReplaceContent, "replaceContent"}, | 21 { InputEvent::InputType::ReplaceContent, "replaceContent" }, |
22 {InputEvent::InputType::DeleteContent, "deleteContent"}, | 22 { InputEvent::InputType::DeleteContent, "deleteContent" }, |
23 {InputEvent::InputType::DeleteComposedCharacter, "deleteComposedCharacter"}, | 23 { InputEvent::InputType::DeleteComposedCharacter, "deleteComposedCharacter" }, |
24 {InputEvent::InputType::Undo, "undo"}, | 24 { InputEvent::InputType::Undo, "undo" }, |
25 {InputEvent::InputType::Redo, "redo"}, | 25 { InputEvent::InputType::Redo, "redo" }, |
26 { InputEvent::InputType::Bold, "bold" }, | |
26 }; | 27 }; |
27 | 28 |
28 static_assert(arraysize(kInputTypeStringNameMap) == static_cast<size_t>(InputEve nt::InputType::NumberOfInputTypes), | 29 static_assert(arraysize(kInputTypeStringNameMap) == static_cast<size_t>(InputEve nt::InputType::NumberOfInputTypes), |
29 "must handle all InputEvent::InputType"); | 30 "must handle all InputEvent::InputType"); |
30 | 31 |
31 String convertInputTypeToString(InputEvent::InputType inputType) | 32 String convertInputTypeToString(InputEvent::InputType inputType) |
32 { | 33 { |
33 const auto& it = std::begin(kInputTypeStringNameMap) + static_cast<size_t>(i nputType); | 34 const auto& it = std::begin(kInputTypeStringNameMap) + static_cast<size_t>(i nputType); |
34 if (it >= std::begin(kInputTypeStringNameMap) && it < std::end(kInputTypeStr ingNameMap)) | 35 if (it >= std::begin(kInputTypeStringNameMap) && it < std::end(kInputTypeStr ingNameMap)) |
35 return AtomicString(it->stringName); | 36 return AtomicString(it->stringName); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
78 // See InputEvent::InputEvent() for the second conversion. | 79 // See InputEvent::InputEvent() for the second conversion. |
79 inputEventInit.setInputType(convertInputTypeToString(inputType)); | 80 inputEventInit.setInputType(convertInputTypeToString(inputType)); |
80 inputEventInit.setData(data); | 81 inputEventInit.setData(data); |
81 inputEventInit.setIsComposing(isComposing == IsComposing); | 82 inputEventInit.setIsComposing(isComposing == IsComposing); |
82 if (ranges) | 83 if (ranges) |
83 inputEventInit.setRanges(*ranges); | 84 inputEventInit.setRanges(*ranges); |
84 | 85 |
85 return InputEvent::create(EventTypeNames::beforeinput, inputEventInit); | 86 return InputEvent::create(EventTypeNames::beforeinput, inputEventInit); |
86 } | 87 } |
87 | 88 |
89 /* static */ | |
90 InputEvent* InputEvent::createInput(InputType inputType, const String& data, Eve ntIsComposing isComposing, const RangeVector* ranges) | |
91 { | |
92 InputEventInit inputEventInit; | |
93 | |
94 inputEventInit.setBubbles(true); | |
95 inputEventInit.setCancelable(false); | |
96 // TODO(ojan): We should find a way to prevent conversion like String->enum- >String just in order to use initializer. | |
tkent
2016/06/22 06:53:21
why ojan?
chongz
2016/06/23 00:32:06
This is the similar issue as in |InputEvent::creat
| |
97 // See InputEvent::InputEvent() for the second conversion. | |
98 inputEventInit.setInputType(convertInputTypeToString(inputType)); | |
99 inputEventInit.setData(data); | |
100 inputEventInit.setIsComposing(isComposing == IsComposing); | |
101 if (ranges) | |
102 inputEventInit.setRanges(*ranges); | |
103 | |
104 return InputEvent::create(EventTypeNames::input, inputEventInit); | |
105 } | |
106 | |
88 String InputEvent::inputType() const | 107 String InputEvent::inputType() const |
89 { | 108 { |
90 return convertInputTypeToString(m_inputType); | 109 return convertInputTypeToString(m_inputType); |
91 } | 110 } |
92 | 111 |
93 StaticRangeVector InputEvent::getRanges() const | 112 StaticRangeVector InputEvent::getRanges() const |
94 { | 113 { |
95 StaticRangeVector staticRanges; | 114 StaticRangeVector staticRanges; |
96 for (const auto& range : m_ranges) | 115 for (const auto& range : m_ranges) |
97 staticRanges.append(StaticRange::create(range->ownerDocument(), range->s tartContainer(), range->startOffset(), range->endContainer(), range->endOffset() )); | 116 staticRanges.append(StaticRange::create(range->ownerDocument(), range->s tartContainer(), range->startOffset(), range->endContainer(), range->endOffset() )); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 // 3. We don't want authors to hold live |Range| indefinitely by holding | InputEvent|, so we | 162 // 3. We don't want authors to hold live |Range| indefinitely by holding | InputEvent|, so we |
144 // clear them after dispatch. | 163 // clear them after dispatch. |
145 // Authors should explicitly call |getRanges()|->|toRange()| if they want to keep a copy of |Range|. | 164 // Authors should explicitly call |getRanges()|->|toRange()| if they want to keep a copy of |Range|. |
146 // See Editing TF meeting notes: | 165 // See Editing TF meeting notes: |
147 // https://docs.google.com/document/d/1hCj6QX77NYIVY0RWrMHT1Yra6t8_Qu8PopaWL G0AM58/edit?usp=sharing | 166 // https://docs.google.com/document/d/1hCj6QX77NYIVY0RWrMHT1Yra6t8_Qu8PopaWL G0AM58/edit?usp=sharing |
148 event().m_ranges.clear(); | 167 event().m_ranges.clear(); |
149 return result; | 168 return result; |
150 } | 169 } |
151 | 170 |
152 } // namespace blink | 171 } // namespace blink |
OLD | NEW |