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 #include <cstdint>
10 #include <memory>
11 #include <string>
12 #include "fcitx-utils/key.h"
13 #include "fcitx-utils/keysym.h"
14 #include "fcitx-utils/macros.h"
15 
16 namespace fcitx {
17 
19 public:
20  VirtualKeyboardEventPrivate(bool isRelease, int time)
21  : isRelease_(isRelease), time_(time) {}
22 
23  Key key_;
24  bool isRelease_ = false;
25  int time_ = 0;
26  uint64_t userAction_ = 0;
27  std::string text_;
28  bool isLongPress_ = false;
29  float x_ = 0.0F, y_ = 0.0F;
30 };
31 
32 Event::~Event() {}
33 
34 KeyEventBase::KeyEventBase(EventType type, InputContext *context, Key rawKey,
35  bool isRelease, int time)
36  : InputContextEvent(context, type), key_(rawKey.normalize()),
37  origKey_(rawKey), rawKey_(rawKey), isRelease_(isRelease), time_(time) {}
38 
39 VirtualKeyboardEvent::VirtualKeyboardEvent(InputContext *context,
40  bool isRelease, int time)
41  : InputContextEvent(context, EventType::InputContextVirtualKeyboardEvent),
42  d_ptr(std::make_unique<VirtualKeyboardEventPrivate>(isRelease, time)) {}
43 
44 FCITX_DEFINE_DEFAULT_DTOR(VirtualKeyboardEvent);
45 
46 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, Key, key, setKey);
47 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, uint64_t, userAction,
48  setUserAction);
49 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, std::string, text, setText);
50 FCITX_DEFINE_PROPERTY_PRIVATE(VirtualKeyboardEvent, bool, isLongPress,
51  setLongPress);
52 FCITX_DEFINE_READ_ONLY_PROPERTY_PRIVATE(VirtualKeyboardEvent, float, x);
53 FCITX_DEFINE_READ_ONLY_PROPERTY_PRIVATE(VirtualKeyboardEvent, float, y);
54 FCITX_DEFINE_READ_ONLY_PROPERTY_PRIVATE(VirtualKeyboardEvent, int, time);
55 
56 void VirtualKeyboardEvent::setPosition(float x, float y) {
57  FCITX_D();
58  d->x_ = x;
59  d->y_ = y;
60 }
61 
62 std::unique_ptr<KeyEvent> fcitx::VirtualKeyboardEvent::toKeyEvent() const {
63  FCITX_D();
64  if (!d->key_.isValid()) {
65  return nullptr;
66  }
67 
68  Key key{d->key_.sym(), d->key_.states() | KeyState::Virtual,
69  d->key_.code()};
70  return std::make_unique<KeyEvent>(inputContext(), key, d->isRelease_,
71  time());
72 }
73 
74 } // namespace fcitx
Describe a Key in fcitx.
Definition: key.h:41
EventType
Type of input method events.
Definition: event.h:65
Definition: action.cpp:17
Key sym related types.
An input context represents a client of Fcitx.
Definition: inputcontext.h:47
Class to represent a key.
Key normalize() const
Normalize a key, usually used when key is from frontend.
Definition: key.cpp:495