Fcitx
event.cpp
1 /*
2  * SPDX-FileCopyrightText: 2016-2016 CSSlayer <wengxt@gmail.com>
3  *
4  * SPDX-License-Identifier: LGPL-2.1-or-later
5  *
6  */
7 
8 #include "event.h"
9 
10 namespace fcitx {
11 
13 public:
14  VirtualKeyboardEventPrivate(bool isRelease, int time)
15  : isRelease_(isRelease), time_(time) {}
16 
17  Key key_;
18  bool isRelease_ = false;
19  int time_ = 0;
20  uint64_t userAction_ = 0;
21  std::string text_;
22  bool isLongPress_ = false;
23  float x_ = 0.0f, y_ = 0.0f;
24 };
25 
26 Event::~Event() {}
27 
28 KeyEventBase::KeyEventBase(EventType type, InputContext *context, Key rawKey,
29  bool isRelease, int time)
30  : InputContextEvent(context, type), key_(rawKey.normalize()),
31  origKey_(rawKey), rawKey_(rawKey), isRelease_(isRelease), time_(time) {}
32 
33 VirtualKeyboardEvent::VirtualKeyboardEvent(InputContext *context,
34  bool isRelease, int time)
35  : InputContextEvent(context, EventType::InputContextVirtualKeyboardEvent),
36  d_ptr(std::make_unique<VirtualKeyboardEventPrivate>(isRelease, time)) {}
37 
38 FCITX_DEFINE_DEFAULT_DTOR(VirtualKeyboardEvent);
39 
40 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, Key, key, setKey);
41 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, uint64_t, userAction,
42  setUserAction);
43 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, std::string, text, setText);
44 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, bool, isLongPress,
45  setLongPress);
46 FCITX_DEFINE_READ_ONLY_PROPERTY_PRIVATE(VirtualKeyboardEvent, float, x);
47 FCITX_DEFINE_READ_ONLY_PROPERTY_PRIVATE(VirtualKeyboardEvent, float, y);
48 FCITX_DEFINE_READ_ONLY_PROPERTY_PRIVATE(VirtualKeyboardEvent, int, time);
49 
50 void VirtualKeyboardEvent::setPosition(float x, float y) {
51  FCITX_D();
52  d->x_ = x;
53  d->y_ = y;
54 }
55 
56 std::unique_ptr<KeyEvent> fcitx::VirtualKeyboardEvent::toKeyEvent() const {
57  FCITX_D();
58  if (!d->key_.isValid()) {
59  return nullptr;
60  }
61 
62  Key key{d->key_.sym(), d->key_.states() | KeyState::Virtual,
63  d->key_.code()};
64  return std::make_unique<KeyEvent>(inputContext(), key, d->isRelease_,
65  time());
66 }
67 
68 } // namespace fcitx
Describe a Key in fcitx.
Definition: key.h:40
EventType
Type of input method events.
Definition: event.h:60
Definition: action.cpp:12
An input context represents a client of Fcitx.
Definition: inputcontext.h:45
Key normalize() const
Normalize a key, usually used when key is from frontend.
Definition: key.cpp:471