Flutter Engine
 
Loading...
Searching...
No Matches
fl_key_event.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
7struct _FlKeyEvent {
9
10 // Time in milliseconds.
11 guint32 time;
12
13 // True if is a press event, otherwise a release event.
14 gboolean is_press;
15
16 // Hardware keycode.
17 guint16 keycode;
18
19 // Keyval.
20 guint keyval;
21
22 // Modifier state.
23 GdkModifierType state;
24
25 // Keyboard group.
26 guint8 group;
27
28 // The original event.
29 GdkEvent* origin;
30};
31
32G_DEFINE_TYPE(FlKeyEvent, fl_key_event, G_TYPE_OBJECT)
33
34FlKeyEvent* fl_key_event_new(guint32 time,
35 gboolean is_press,
36 guint16 keycode,
37 guint keyval,
38 GdkModifierType state,
39 guint8 group) {
40 FlKeyEvent* self =
41 FL_KEY_EVENT(g_object_new(fl_key_event_get_type(), nullptr));
42
43 self->time = time;
44 self->is_press = is_press;
45 self->keycode = keycode;
46 self->keyval = keyval;
47 self->state = state;
48 self->group = group;
49
50 return self;
51}
52
53FlKeyEvent* fl_key_event_new_from_gdk_event(GdkEvent* event) {
54 FlKeyEvent* self =
55 FL_KEY_EVENT(g_object_new(fl_key_event_get_type(), nullptr));
56
57 GdkEventType type = gdk_event_get_event_type(event);
58 g_return_val_if_fail(type == GDK_KEY_PRESS || type == GDK_KEY_RELEASE,
59 nullptr);
60
61 guint16 keycode = 0;
62 gdk_event_get_keycode(event, &keycode);
63 guint keyval = 0;
64 gdk_event_get_keyval(event, &keyval);
65 GdkModifierType state = static_cast<GdkModifierType>(0);
66 gdk_event_get_state(event, &state);
67
68 self->time = gdk_event_get_time(event);
69 self->is_press = type == GDK_KEY_PRESS;
70 self->keycode = keycode;
71 self->keyval = keyval;
72 self->state = state;
73 self->group = event->key.group;
74 self->origin = event;
75
76 return self;
77}
78
79guint32 fl_key_event_get_time(FlKeyEvent* self) {
80 g_return_val_if_fail(FL_IS_KEY_EVENT(self), 0);
81 return self->time;
82}
83
84gboolean fl_key_event_get_is_press(FlKeyEvent* self) {
85 g_return_val_if_fail(FL_IS_KEY_EVENT(self), FALSE);
86 return self->is_press;
87}
88
89guint16 fl_key_event_get_keycode(FlKeyEvent* self) {
90 g_return_val_if_fail(FL_IS_KEY_EVENT(self), 0);
91 return self->keycode;
92}
93
94guint fl_key_event_get_keyval(FlKeyEvent* self) {
95 g_return_val_if_fail(FL_IS_KEY_EVENT(self), 0);
96 return self->keyval;
97}
98
99GdkModifierType fl_key_event_get_state(FlKeyEvent* self) {
100 g_return_val_if_fail(FL_IS_KEY_EVENT(self), static_cast<GdkModifierType>(0));
101 return self->state;
102}
103
104guint8 fl_key_event_get_group(FlKeyEvent* self) {
105 g_return_val_if_fail(FL_IS_KEY_EVENT(self), 0);
106 return self->group;
107}
108
109GdkEvent* fl_key_event_get_origin(FlKeyEvent* self) {
110 g_return_val_if_fail(FL_IS_KEY_EVENT(self), nullptr);
111 return self->origin;
112}
113
114static void fl_key_event_dispose(GObject* object) {
115 FlKeyEvent* self = FL_KEY_EVENT(object);
116
117 g_clear_pointer(&self->origin, gdk_event_free);
118
119 G_OBJECT_CLASS(fl_key_event_parent_class)->dispose(object);
120}
121
122static void fl_key_event_class_init(FlKeyEventClass* klass) {
123 G_OBJECT_CLASS(klass)->dispose = fl_key_event_dispose;
124}
125
126static void fl_key_event_init(FlKeyEvent* self) {}
GLenum type
G_DEFINE_TYPE(FlBasicMessageChannelResponseHandle, fl_basic_message_channel_response_handle, G_TYPE_OBJECT) static void fl_basic_message_channel_response_handle_dispose(GObject *object)
guint16 fl_key_event_get_keycode(FlKeyEvent *self)
gboolean fl_key_event_get_is_press(FlKeyEvent *self)
GdkEvent * fl_key_event_get_origin(FlKeyEvent *self)
GdkModifierType fl_key_event_get_state(FlKeyEvent *self)
static void fl_key_event_class_init(FlKeyEventClass *klass)
static void fl_key_event_init(FlKeyEvent *self)
FlKeyEvent * fl_key_event_new_from_gdk_event(GdkEvent *event)
guint8 fl_key_event_get_group(FlKeyEvent *self)
static void fl_key_event_dispose(GObject *object)
FlKeyEvent * fl_key_event_new(guint32 time, gboolean is_press, guint16 keycode, guint keyval, GdkModifierType state, guint8 group)
guint fl_key_event_get_keyval(FlKeyEvent *self)
guint32 fl_key_event_get_time(FlKeyEvent *self)
gboolean is_press
GObject parent_instance
GdkEvent * origin
GdkModifierType state
guint16 keycode