blob: 0718ec6bd4a11bc1d9d9e6a0581c2ee413f72bbf [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef InputEvent_h
#define InputEvent_h
#include "core/clipboard/DataTransfer.h"
#include "core/dom/Range.h"
#include "core/dom/StaticRange.h"
#include "core/events/InputEventInit.h"
#include "core/events/UIEvent.h"
namespace blink {
class InputEvent final : public UIEvent {
DEFINE_WRAPPERTYPEINFO();
public:
static InputEvent* Create(const AtomicString& type,
const InputEventInit& initializer) {
return new InputEvent(type, initializer);
}
// https://w3c.github.io/input-events/#h-interface-inputevent-attributes
enum class InputType {
kNone,
// Insertion.
kInsertText,
kInsertLineBreak,
kInsertParagraph,
kInsertOrderedList,
kInsertUnorderedList,
kInsertHorizontalRule,
kInsertFromPaste,
kInsertFromDrop,
kInsertFromYank,
kInsertTranspose,
kInsertReplacementText,
kInsertCompositionText,
// Deletion.
kDeleteWordBackward,
kDeleteWordForward,
kDeleteSoftLineBackward,
kDeleteSoftLineForward,
kDeleteHardLineBackward,
kDeleteHardLineForward,
kDeleteContentBackward,
kDeleteContentForward,
kDeleteByCut,
kDeleteByDrag,
// History.
kHistoryUndo,
kHistoryRedo,
// Formatting.
kFormatBold,
kFormatItalic,
kFormatUnderline,
kFormatStrikeThrough,
kFormatSuperscript,
kFormatSubscript,
kFormatJustifyCenter,
kFormatJustifyFull,
kFormatJustifyRight,
kFormatJustifyLeft,
kFormatIndent,
kFormatOutdent,
kFormatRemove,
kFormatSetBlockTextDirection,
// Add new input types immediately above this line.
kNumberOfInputTypes,
};
enum EventCancelable : bool {
kNotCancelable = false,
kIsCancelable = true,
};
enum EventIsComposing : bool {
kNotComposing = false,
kIsComposing = true,
};
static InputEvent* CreateBeforeInput(InputType,
const String& data,
EventCancelable,
EventIsComposing,
const StaticRangeVector*);
static InputEvent* CreateBeforeInput(InputType,
DataTransfer*,
EventCancelable,
EventIsComposing,
const StaticRangeVector*);
static InputEvent* CreateInput(InputType,
const String& data,
EventIsComposing,
const StaticRangeVector*);
String inputType() const;
const String& data() const { return data_; }
DataTransfer* dataTransfer() const { return data_transfer_.Get(); }
bool isComposing() const { return is_composing_; }
// Returns a copy of target ranges during event dispatch, and returns an empty
// vector after dispatch.
StaticRangeVector getTargetRanges() const;
bool IsInputEvent() const override;
DispatchEventResult DispatchEvent(EventDispatcher&) override;
virtual void Trace(blink::Visitor*);
private:
InputEvent(const AtomicString&, const InputEventInit&);
InputType input_type_;
String data_;
Member<DataTransfer> data_transfer_;
bool is_composing_;
// We have to stored |Range| internally and only expose |StaticRange|, please
// see comments in |dispatchEvent()|.
RangeVector ranges_;
};
DEFINE_EVENT_TYPE_CASTS(InputEvent);
} // namespace blink
#endif // InputEvent_h