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