Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
mock_gtk.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
5#include <dlfcn.h>
6#include <gdk/gdkwayland.h>
7#include <stdarg.h>
8
10
11using namespace flutter::testing;
12
13G_DECLARE_FINAL_TYPE(FlMockKeymap, fl_mock_keymap, FL, MOCK_KEYMAP, GObject)
14
17};
18
19G_DEFINE_TYPE(FlMockKeymap, fl_mock_keymap, G_TYPE_OBJECT)
20
21static void fl_mock_keymap_class_init(FlMockKeymapClass* klass) {
22 g_signal_new("keys-changed", fl_mock_keymap_get_type(), G_SIGNAL_RUN_LAST, 0,
23 nullptr, nullptr, nullptr, G_TYPE_NONE, 0);
24}
25
26static void fl_mock_keymap_init(FlMockKeymap* self) {}
27
28// Override GdkKeymap
30 return fl_mock_keymap_get_type();
31}
32
33static MockGtk* mock = nullptr;
34
36 thread = g_thread_self();
37 mock = this;
38}
39
41 if (mock == this) {
42 mock = nullptr;
43 }
44}
45
46// Check we are running on the GTK thread.
47static void check_thread() {
48 if (mock != nullptr) {
49 EXPECT_EQ(mock->thread, g_thread_self());
50 }
51}
52
53GdkKeymap* gdk_keymap_get_for_display(GdkDisplay* display) {
55 FlMockKeymap* keymap =
56 FL_MOCK_KEYMAP(g_object_new(fl_mock_keymap_get_type(), nullptr));
57 (void)FL_IS_MOCK_KEYMAP(keymap);
58 return reinterpret_cast<GdkKeymap*>(keymap);
59}
60
61guint gdk_keymap_lookup_key(GdkKeymap* keymap, const GdkKeymapKey* key) {
63 return mock->gdk_keymap_lookup_key(keymap, key);
64}
65
68 return GDK_DISPLAY(g_object_new(gdk_wayland_display_get_type(), nullptr));
69}
70
71void gdk_display_beep(GdkDisplay* display) {
73}
74
77 return 100;
78}
79
82 return 100;
83}
84
87 return 1;
88}
89
90GdkWindowState gdk_window_get_state(GdkWindow* window) {
92 return mock->gdk_window_get_state(window);
93}
94
95GdkDisplay* gdk_window_get_display(GdkWindow* window) {
97 return GDK_DISPLAY(g_object_new(gdk_wayland_display_get_type(), nullptr));
98}
99
100int gdk_display_get_n_monitors(GdkDisplay* display) {
101 check_thread();
102 return 1;
103}
104
105GdkMonitor* gdk_display_get_monitor(GdkDisplay* display, int n) {
106 check_thread();
107 return GDK_MONITOR(g_object_new(gdk_monitor_get_type(), nullptr));
108}
109
110GdkMonitor* gdk_display_get_monitor_at_window(GdkDisplay* display,
111 GdkWindow* window) {
112 check_thread();
113 return nullptr;
114}
115
116void gdk_monitor_get_geometry(GdkMonitor* monitor, GdkRectangle* geometry) {
117 check_thread();
118}
119
120int gdk_monitor_get_refresh_rate(GdkMonitor* monitor) {
121 check_thread();
122 return 60000;
123}
124
125int gdk_monitor_get_scale_factor(GdkMonitor* monitor) {
126 check_thread();
127 return 1;
128}
129
130GdkCursor* gdk_cursor_new_from_name(GdkDisplay* display, const gchar* name) {
131 check_thread();
132 return nullptr;
133}
134
135void gdk_window_set_cursor(GdkWindow* window, GdkCursor* cursor) {
136 check_thread();
137}
138
139GdkGLContext* gdk_window_create_gl_context(GdkWindow* window, GError** error) {
140 check_thread();
141 return nullptr;
142}
143
144void gdk_cairo_set_source_rgba(cairo_t* cr, const GdkRGBA* rgba) {
145 check_thread();
146}
147
148void gdk_gl_context_realize(GdkGLContext* context) {
149 check_thread();
150}
151
152void gdk_gl_context_clear_current(GdkGLContext* context) {
153 check_thread();
154}
155
156void gdk_gl_context_make_current(GdkGLContext* context) {
157 check_thread();
158}
159
160void gdk_cairo_draw_from_gl(cairo_t* cr,
161 GdkWindow* window,
162 int source,
163 int source_type,
164 int buffer_scale,
165 int x,
166 int y,
167 int width,
168 int height) {
169 check_thread();
170}
171
172GtkWidget* gtk_window_new(GtkWindowType type) {
173 check_thread();
174 GtkWindow* window = GTK_WINDOW(g_object_new(gtk_window_get_type(), nullptr));
175 mock->gtk_window_new(window, type);
176 return GTK_WIDGET(window);
177}
178
179void gtk_window_set_default_size(GtkWindow* window, gint width, gint height) {
180 check_thread();
181 mock->gtk_window_set_default_size(window, width, height);
182}
183
184void gtk_window_set_title(GtkWindow* window, const gchar* title) {
185 check_thread();
186 mock->gtk_window_set_title(window, title);
187}
188
190 GtkWidget* widget,
191 GdkGeometry* geometry,
192 GdkWindowHints geometry_mask) {
193 check_thread();
194 mock->gtk_window_set_geometry_hints(window, widget, geometry, geometry_mask);
195}
196
197void gtk_window_resize(GtkWindow* window, gint width, gint height) {
198 check_thread();
199 mock->gtk_window_resize(window, width, height);
200}
201
202void gtk_window_maximize(GtkWindow* window) {
203 check_thread();
204 mock->gtk_window_maximize(window);
205}
206
208 check_thread();
209 mock->gtk_window_unmaximize(window);
210}
211
212gboolean gtk_window_is_maximized(GtkWindow* window) {
213 check_thread();
214 return mock->gtk_window_is_maximized(window);
215}
216
217void gtk_window_iconify(GtkWindow* window) {
218 check_thread();
219 mock->gtk_window_iconify(window);
220}
221
222void gtk_window_deiconify(GtkWindow* window) {
223 check_thread();
224 mock->gtk_window_deiconify(window);
225}
226
227void gtk_widget_add_events(GtkWidget* widget, gint events) {
228 check_thread();
229}
230
231void gtk_widget_class_set_accessible_type(GtkWidget* widget, GType type) {
232 check_thread();
233}
234
235void gtk_widget_get_allocation(GtkWidget* widget, GtkAllocation* allocation) {
236 check_thread();
237 allocation->x = 0;
238 allocation->y = 0;
239 allocation->width = 100;
240 allocation->height = 100;
241}
242
243GdkDisplay* gtk_widget_get_display(GtkWidget* widget) {
244 check_thread();
245 return nullptr;
246}
247
248gint gtk_widget_get_scale_factor(GtkWidget* widget) {
249 check_thread();
250 return 1;
251}
252
253void gtk_widget_realize(GtkWidget* widget) {
254 check_thread();
255}
256
257void gtk_widget_show(GtkWidget* widget) {
258 check_thread();
259}
260
261void gtk_widget_queue_draw(GtkWidget* widget) {
262 check_thread();
263}
264
265void gtk_widget_destroy(GtkWidget* widget) {
266 check_thread();
267 mock->gtk_widget_destroy(widget);
268}
269
270void fl_gtk_widget_destroy(GtkWidget* widget) {
271 check_thread();
272 void (*destroy)(GtkWidget*) = reinterpret_cast<void (*)(GtkWidget*)>(
273 dlsym(RTLD_NEXT, "gtk_widget_destroy"));
274 destroy(widget);
275}
276
277gboolean gtk_widget_translate_coordinates(GtkWidget* src_widget,
278 GtkWidget* dest_widget,
279 gint src_x,
280 gint src_y,
281 gint* dest_x,
282 gint* dest_y) {
283 check_thread();
284 if (mock == nullptr) {
285 *dest_x = src_x;
286 *dest_y = src_y;
287 return TRUE;
288 }
289
290 return mock->gtk_widget_translate_coordinates(src_widget, dest_widget, src_x,
291 src_y, dest_x, dest_y);
292}
293
294GtkWidget* gtk_widget_get_toplevel(GtkWidget* widget) {
295 check_thread();
296 return widget;
297}
298
299GdkWindow* gtk_widget_get_window(GtkWidget* widget) {
300 check_thread();
301 return nullptr;
302}
303
304void gtk_im_context_set_client_window(GtkIMContext* context,
305 GdkWindow* window) {
306 check_thread();
307 if (mock != nullptr) {
308 mock->gtk_im_context_set_client_window(context, window);
309 }
310}
311
312void gtk_im_context_get_preedit_string(GtkIMContext* context,
313 gchar** str,
314 PangoAttrList** attrs,
315 gint* cursor_pos) {
316 check_thread();
317 if (mock != nullptr) {
318 mock->gtk_im_context_get_preedit_string(context, str, attrs, cursor_pos);
319 }
320}
321
322gboolean gtk_im_context_filter_keypress(GtkIMContext* context,
323 GdkEventKey* event) {
324 check_thread();
325 if (mock == nullptr) {
326 return TRUE;
327 }
328
329 return mock->gtk_im_context_filter_keypress(context, event);
330}
331
332void gtk_im_context_focus_in(GtkIMContext* context) {
333 check_thread();
334 if (mock != nullptr) {
335 mock->gtk_im_context_focus_in(context);
336 }
337}
338
339void gtk_im_context_focus_out(GtkIMContext* context) {
340 check_thread();
341 if (mock != nullptr) {
342 mock->gtk_im_context_focus_out(context);
343 }
344}
345
346void gtk_im_context_set_cursor_location(GtkIMContext* context,
347 const GdkRectangle* area) {
348 check_thread();
349 if (mock != nullptr) {
350 mock->gtk_im_context_set_cursor_location(context, area);
351 }
352}
353
354void gtk_im_context_set_surrounding(GtkIMContext* context,
355 const gchar* text,
356 gint len,
357 gint cursor_index) {
358 check_thread();
359 if (mock != nullptr) {
360 mock->gtk_im_context_set_surrounding(context, text, len, cursor_index);
361 }
362}
363
364GtkClipboard* gtk_clipboard_get_default(GdkDisplay* display) {
365 check_thread();
366 return nullptr;
367}
368
369void gtk_clipboard_set_text(GtkClipboard* clipboard,
370 const gchar* text,
371 gint len) {
372 check_thread();
373}
374
375void gtk_clipboard_request_text(GtkClipboard* clipboard,
376 GtkClipboardTextReceivedFunc callback,
377 gpointer user_data) {
378 check_thread();
379}
380
382 AtkState state,
383 gboolean value) {
384 check_thread();
385 if (mock != nullptr) {
386 mock->atk_object_notify_state_change(accessible, state, value);
387 }
388}
389
390void g_object_set(gpointer object, const gchar* first_property_name, ...) {
391 check_thread();
392 if (first_property_name == nullptr) {
393 return;
394 }
395
396 va_list args;
397 va_start(args, first_property_name);
398
399 const gchar* name = first_property_name;
400 while (name != nullptr) {
401 // Extract the value (as gint, works for enums like GtkInputPurpose and
402 // GtkInputHints)
403 gint value = va_arg(args, gint);
404
405 // Check if this is a property we want to mock (input-purpose or
406 // input-hints)
407 if (mock != nullptr && (g_strcmp0(name, "input-purpose") == 0 ||
408 g_strcmp0(name, "input-hints") == 0)) {
409 mock->g_object_set(G_OBJECT(object), name, value);
410 }
411
412 // Get next property name (or nullptr to terminate)
413 name = va_arg(args, gchar*);
414 }
415
416 va_end(args);
417}
GLenum type
int32_t value
int32_t x
GLFWwindow * window
Definition main.cc:60
G_BEGIN_DECLS G_DECLARE_FINAL_TYPE(FlAccessibilityChannel, fl_accessibility_channel, FL, ACCESSIBILITY_CHANNEL, GObject)
FlViewAccessible * accessible
G_DEFINE_TYPE(FlBasicMessageChannelResponseHandle, fl_basic_message_channel_response_handle, G_TYPE_OBJECT) static void fl_basic_message_channel_response_handle_dispose(GObject *object)
return TRUE
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const uint8_t uint32_t uint32_t GError ** error
FlutterDesktopBinaryReply callback
std::u16string text
static MockEpoxy * mock
Definition mock_epoxy.cc:53
GdkDisplay * gdk_display_get_default()
Definition mock_gtk.cc:66
GdkCursor * gdk_cursor_new_from_name(GdkDisplay *display, const gchar *name)
Definition mock_gtk.cc:130
GtkClipboard * gtk_clipboard_get_default(GdkDisplay *display)
Definition mock_gtk.cc:364
void gtk_widget_class_set_accessible_type(GtkWidget *widget, GType type)
Definition mock_gtk.cc:231
void gtk_widget_destroy(GtkWidget *widget)
Definition mock_gtk.cc:265
void gtk_im_context_set_client_window(GtkIMContext *context, GdkWindow *window)
Definition mock_gtk.cc:304
GdkDisplay * gtk_widget_get_display(GtkWidget *widget)
Definition mock_gtk.cc:243
void gdk_window_set_cursor(GdkWindow *window, GdkCursor *cursor)
Definition mock_gtk.cc:135
void gtk_clipboard_request_text(GtkClipboard *clipboard, GtkClipboardTextReceivedFunc callback, gpointer user_data)
Definition mock_gtk.cc:375
void gtk_im_context_focus_in(GtkIMContext *context)
Definition mock_gtk.cc:332
int gdk_monitor_get_scale_factor(GdkMonitor *monitor)
Definition mock_gtk.cc:125
GdkDisplay * gdk_window_get_display(GdkWindow *window)
Definition mock_gtk.cc:95
gboolean gtk_window_is_maximized(GtkWindow *window)
Definition mock_gtk.cc:212
void gtk_widget_queue_draw(GtkWidget *widget)
Definition mock_gtk.cc:261
static void check_thread()
Definition mock_gtk.cc:47
void gtk_im_context_set_cursor_location(GtkIMContext *context, const GdkRectangle *area)
Definition mock_gtk.cc:346
void atk_object_notify_state_change(AtkObject *accessible, AtkState state, gboolean value)
Definition mock_gtk.cc:381
void gtk_widget_show(GtkWidget *widget)
Definition mock_gtk.cc:257
void gdk_cairo_draw_from_gl(cairo_t *cr, GdkWindow *window, int source, int source_type, int buffer_scale, int x, int y, int width, int height)
Definition mock_gtk.cc:160
void gtk_window_resize(GtkWindow *window, gint width, gint height)
Definition mock_gtk.cc:197
void gtk_window_deiconify(GtkWindow *window)
Definition mock_gtk.cc:222
void gdk_gl_context_clear_current(GdkGLContext *context)
Definition mock_gtk.cc:152
guint gdk_keymap_lookup_key(GdkKeymap *keymap, const GdkKeymapKey *key)
Definition mock_gtk.cc:61
GdkMonitor * gdk_display_get_monitor_at_window(GdkDisplay *display, GdkWindow *window)
Definition mock_gtk.cc:110
int gdk_window_get_width(GdkWindow *window)
Definition mock_gtk.cc:75
void gtk_window_maximize(GtkWindow *window)
Definition mock_gtk.cc:202
int gdk_display_get_n_monitors(GdkDisplay *display)
Definition mock_gtk.cc:100
void gtk_widget_get_allocation(GtkWidget *widget, GtkAllocation *allocation)
Definition mock_gtk.cc:235
void gtk_widget_add_events(GtkWidget *widget, gint events)
Definition mock_gtk.cc:227
void gdk_display_beep(GdkDisplay *display)
Definition mock_gtk.cc:71
void gtk_im_context_focus_out(GtkIMContext *context)
Definition mock_gtk.cc:339
void gtk_window_unmaximize(GtkWindow *window)
Definition mock_gtk.cc:207
void gtk_clipboard_set_text(GtkClipboard *clipboard, const gchar *text, gint len)
Definition mock_gtk.cc:369
gint gdk_window_get_scale_factor(GdkWindow *window)
Definition mock_gtk.cc:85
int gdk_monitor_get_refresh_rate(GdkMonitor *monitor)
Definition mock_gtk.cc:120
static void fl_mock_keymap_class_init(FlMockKeymapClass *klass)
Definition mock_gtk.cc:21
void gtk_window_iconify(GtkWindow *window)
Definition mock_gtk.cc:217
GType gdk_keymap_get_type()
Definition mock_gtk.cc:29
GdkMonitor * gdk_display_get_monitor(GdkDisplay *display, int n)
Definition mock_gtk.cc:105
void gtk_window_set_default_size(GtkWindow *window, gint width, gint height)
Definition mock_gtk.cc:179
void gtk_im_context_get_preedit_string(GtkIMContext *context, gchar **str, PangoAttrList **attrs, gint *cursor_pos)
Definition mock_gtk.cc:312
static void fl_mock_keymap_init(FlMockKeymap *self)
Definition mock_gtk.cc:26
GtkWidget * gtk_window_new(GtkWindowType type)
Definition mock_gtk.cc:172
void g_object_set(gpointer object, const gchar *first_property_name,...)
Definition mock_gtk.cc:390
void gdk_gl_context_make_current(GdkGLContext *context)
Definition mock_gtk.cc:156
int gdk_window_get_height(GdkWindow *window)
Definition mock_gtk.cc:80
static MockGtk * mock
Definition mock_gtk.cc:33
GtkWidget * gtk_widget_get_toplevel(GtkWidget *widget)
Definition mock_gtk.cc:294
GdkGLContext * gdk_window_create_gl_context(GdkWindow *window, GError **error)
Definition mock_gtk.cc:139
void fl_gtk_widget_destroy(GtkWidget *widget)
Definition mock_gtk.cc:270
void gdk_gl_context_realize(GdkGLContext *context)
Definition mock_gtk.cc:148
GdkWindow * gtk_widget_get_window(GtkWidget *widget)
Definition mock_gtk.cc:299
void gdk_monitor_get_geometry(GdkMonitor *monitor, GdkRectangle *geometry)
Definition mock_gtk.cc:116
void gtk_im_context_set_surrounding(GtkIMContext *context, const gchar *text, gint len, gint cursor_index)
Definition mock_gtk.cc:354
void gtk_window_set_geometry_hints(GtkWindow *window, GtkWidget *widget, GdkGeometry *geometry, GdkWindowHints geometry_mask)
Definition mock_gtk.cc:189
GdkWindowState gdk_window_get_state(GdkWindow *window)
Definition mock_gtk.cc:90
GdkKeymap * gdk_keymap_get_for_display(GdkDisplay *display)
Definition mock_gtk.cc:53
gboolean gtk_im_context_filter_keypress(GtkIMContext *context, GdkEventKey *event)
Definition mock_gtk.cc:322
void gtk_window_set_title(GtkWindow *window, const gchar *title)
Definition mock_gtk.cc:184
gint gtk_widget_get_scale_factor(GtkWidget *widget)
Definition mock_gtk.cc:248
void gdk_cairo_set_source_rgba(cairo_t *cr, const GdkRGBA *rgba)
Definition mock_gtk.cc:144
void gtk_widget_realize(GtkWidget *widget)
Definition mock_gtk.cc:253
gboolean gtk_widget_translate_coordinates(GtkWidget *src_widget, GtkWidget *dest_widget, gint src_x, gint src_y, gint *dest_x, gint *dest_y)
Definition mock_gtk.cc:277
double y
DEF_SWITCHES_START aot vmservice shared library name
Definition switch_defs.h:27
int32_t height
int32_t width
GObject parent_instance
Definition mock_gtk.cc:16
int_closure destroy