forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
EventForwards.h
301 lines (234 loc) · 8.38 KB
/
EventForwards.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_EventForwards_h__
#define mozilla_EventForwards_h__
#include <stdint.h>
#include "nsStringFwd.h"
#include "nsTArray.h"
class nsCommandParams;
/**
* XXX Following enums should be in BasicEvents.h. However, currently, it's
* impossible to use foward delearation for enum.
*/
/**
* Return status for event processors.
*/
enum nsEventStatus {
// The event is ignored, do default processing
nsEventStatus_eIgnore,
// The event is consumed, don't do default processing
nsEventStatus_eConsumeNoDefault,
// The event is consumed, but do default processing
nsEventStatus_eConsumeDoDefault,
// Value is not for use, only for serialization
nsEventStatus_eSentinel
};
namespace mozilla {
enum class CanBubble { eYes, eNo };
enum class Cancelable { eYes, eNo };
enum class ChromeOnlyDispatch { eYes, eNo };
enum class Trusted { eYes, eNo };
enum class Composed { eYes, eNo, eDefault };
/**
* Event messages
*/
typedef uint16_t EventMessageType;
enum EventMessage : EventMessageType {
#define NS_EVENT_MESSAGE(aMessage) aMessage,
#define NS_EVENT_MESSAGE_FIRST_LAST(aMessage, aFirst, aLast) \
aMessage##First = aFirst, aMessage##Last = aLast,
#include "mozilla/EventMessageList.h"
#undef NS_EVENT_MESSAGE
#undef NS_EVENT_MESSAGE_FIRST_LAST
// For preventing bustage due to "," after the last item.
eEventMessage_MaxValue
};
const char* ToChar(EventMessage aEventMessage);
/**
* Event class IDs
*/
typedef uint8_t EventClassIDType;
enum EventClassID : EventClassIDType {
// The event class name will be:
// eBasicEventClass for WidgetEvent
// eFooEventClass for WidgetFooEvent or InternalFooEvent
#define NS_ROOT_EVENT_CLASS(aPrefix, aName) eBasic##aName##Class
#define NS_EVENT_CLASS(aPrefix, aName) , e##aName##Class
#include "mozilla/EventClassList.h"
#undef NS_EVENT_CLASS
#undef NS_ROOT_EVENT_CLASS
};
const char* ToChar(EventClassID aEventClassID);
typedef uint16_t Modifiers;
#define NS_DEFINE_KEYNAME(aCPPName, aDOMKeyName) KEY_NAME_INDEX_##aCPPName,
typedef uint16_t KeyNameIndexType;
enum KeyNameIndex : KeyNameIndexType {
#include "mozilla/KeyNameList.h"
// If a DOM keyboard event is synthesized by script, this is used. Then,
// specified key name should be stored and use it as .key value.
KEY_NAME_INDEX_USE_STRING
};
#undef NS_DEFINE_KEYNAME
const nsCString ToString(KeyNameIndex aKeyNameIndex);
#define NS_DEFINE_PHYSICAL_KEY_CODE_NAME(aCPPName, aDOMCodeName) \
CODE_NAME_INDEX_##aCPPName,
typedef uint8_t CodeNameIndexType;
enum CodeNameIndex : CodeNameIndexType {
#include "mozilla/PhysicalKeyCodeNameList.h"
// If a DOM keyboard event is synthesized by script, this is used. Then,
// specified code name should be stored and use it as .code value.
CODE_NAME_INDEX_USE_STRING
};
#undef NS_DEFINE_PHYSICAL_KEY_CODE_NAME
const nsCString ToString(CodeNameIndex aCodeNameIndex);
#define NS_DEFINE_INPUTTYPE(aCPPName, aDOMName) e##aCPPName,
typedef uint8_t EditorInputTypeType;
enum class EditorInputType : EditorInputTypeType {
#include "mozilla/InputTypeList.h"
// If a DOM input event is synthesized by script, this is used. Then,
// specified input type should be stored as string and use it as .inputType
// value.
eUnknown,
};
#undef NS_DEFINE_INPUTTYPE
inline bool ExposesClipboardDataOrDataTransfer(EditorInputType aInputType) {
switch (aInputType) {
case EditorInputType::eInsertFromPaste:
case EditorInputType::eInsertFromPasteAsQuotation:
return true;
default:
return false;
}
}
/**
* IsDataAvailableOnTextEditor() returns true if aInputType on TextEditor
* should have non-null InputEvent.data value.
*/
inline bool IsDataAvailableOnTextEditor(EditorInputType aInputType) {
switch (aInputType) {
case EditorInputType::eInsertText:
case EditorInputType::eInsertCompositionText:
case EditorInputType::eInsertFromComposition: // Only level 2
case EditorInputType::eInsertFromPaste:
case EditorInputType::eInsertFromPasteAsQuotation:
case EditorInputType::eInsertTranspose:
case EditorInputType::eInsertFromDrop:
case EditorInputType::eInsertReplacementText:
case EditorInputType::eInsertFromYank:
case EditorInputType::eFormatSetBlockTextDirection:
case EditorInputType::eFormatSetInlineTextDirection:
return true;
default:
return false;
}
}
/**
* IsDataAvailableOnHTMLEditor() returns true if aInputType on HTMLEditor
* should have non-null InputEvent.data value.
*/
inline bool IsDataAvailableOnHTMLEditor(EditorInputType aInputType) {
switch (aInputType) {
case EditorInputType::eInsertText:
case EditorInputType::eInsertCompositionText:
case EditorInputType::eInsertFromComposition: // Only level 2
case EditorInputType::eFormatSetBlockTextDirection:
case EditorInputType::eFormatSetInlineTextDirection:
case EditorInputType::eInsertLink:
case EditorInputType::eFormatBackColor:
case EditorInputType::eFormatFontColor:
case EditorInputType::eFormatFontName:
return true;
default:
return false;
}
}
/**
* IsDataTransferAvailableOnHTMLEditor() returns true if aInputType on
* HTMLEditor should have non-null InputEvent.dataTransfer value.
*/
inline bool IsDataTransferAvailableOnHTMLEditor(EditorInputType aInputType) {
switch (aInputType) {
case EditorInputType::eInsertFromPaste:
case EditorInputType::eInsertFromPasteAsQuotation:
case EditorInputType::eInsertFromDrop:
case EditorInputType::eInsertTranspose:
case EditorInputType::eInsertReplacementText:
case EditorInputType::eInsertFromYank:
return true;
default:
return false;
}
}
#define NS_DEFINE_COMMAND(aName, aCommandStr) , aName
#define NS_DEFINE_COMMAND_WITH_PARAM(aName, aCommandStr, aParam) , aName
#define NS_DEFINE_COMMAND_NO_EXEC_COMMAND(aName) , aName
typedef uint8_t CommandInt;
enum class Command : CommandInt {
DoNothing
#include "mozilla/CommandList.h"
};
#undef NS_DEFINE_COMMAND
#undef NS_DEFINE_COMMAND_WITH_PARAM
#undef NS_DEFINE_COMMAND_NO_EXEC_COMMAND
const char* ToChar(Command aCommand);
/**
* Return a command value for aCommandName.
* XXX: Is there a better place to put `Command` related methods instead of
* global scope in `mozilla` namespace?
*
* @param aCommandName Should be a XUL command name like "cmd_bold"
* (case sensitive).
* @param aCommandparams Additional parameter value of aCommandName.
* Can be nullptr, but if aCommandName requires
* additional parameter and sets this to nullptr,
* will return Command::DoNothing with warning.
*/
Command GetInternalCommand(const char* aCommandName,
const nsCommandParams* aCommandParams = nullptr);
} // namespace mozilla
/**
* All header files should include this header instead of *Events.h.
*/
namespace mozilla {
#define NS_EVENT_CLASS(aPrefix, aName) class aPrefix##aName;
#define NS_ROOT_EVENT_CLASS(aPrefix, aName) NS_EVENT_CLASS(aPrefix, aName)
#include "mozilla/EventClassList.h"
#undef NS_EVENT_CLASS
#undef NS_ROOT_EVENT_CLASS
// BasicEvents.h
struct BaseEventFlags;
struct EventFlags;
class WidgetEventTime;
class NativeEventData;
// TextEvents.h
enum class AccessKeyType;
struct AlternativeCharCode;
struct ShortcutKeyCandidate;
typedef nsTArray<ShortcutKeyCandidate> ShortcutKeyCandidateArray;
typedef AutoTArray<ShortcutKeyCandidate, 10> AutoShortcutKeyCandidateArray;
// TextRange.h
typedef uint8_t RawTextRangeType;
enum class TextRangeType : RawTextRangeType;
struct TextRangeStyle;
struct TextRange;
class EditCommands;
class TextRangeArray;
// FontRange.h
struct FontRange;
enum MouseButton { eNotPressed = -1, eLeft = 0, eMiddle = 1, eRight = 2 };
enum MouseButtonsFlag {
eNoButtons = 0x00,
eLeftFlag = 0x01,
eRightFlag = 0x02,
eMiddleFlag = 0x04,
// typicall, "back" button being left side of 5-button
// mice, see "buttons" attribute document of DOM3 Events.
e4thFlag = 0x08,
// typicall, "forward" button being right side of 5-button
// mice, see "buttons" attribute document of DOM3 Events.
e5thFlag = 0x10
};
} // namespace mozilla
#endif // mozilla_EventForwards_h__