Chromium Code Reviews| 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 |