24G_DEFINE_TYPE(FlDisplayMonitor, fl_display_monitor, G_TYPE_OBJECT)
36 for (
int i = 0;
i < n_monitors;
i++) {
41 g_hash_table_lookup(
self->display_ids_by_monitor, monitor));
42 if (display_id == 0) {
43 display_id =
self->next_display_id;
45 GINT_TO_POINTER(display_id));
46 self->next_display_id++;
49 GdkRectangle geometry;
56 display->
width = geometry.width;
57 display->
height = geometry.height;
69 g_hash_table_remove(
self->display_ids_by_monitor, monitor);
74 FlDisplayMonitor*
self = FL_DISPLAY_MONITOR(
object);
76 g_weak_ref_clear(&
self->engine);
77 g_clear_object(&
self->display);
78 g_clear_pointer(&
self->display_ids_by_monitor, g_hash_table_unref);
80 G_OBJECT_CLASS(fl_display_monitor_parent_class)->dispose(
object);
84 GObjectClass* object_class = G_OBJECT_CLASS(klass);
89 self->display_ids_by_monitor = g_hash_table_new_full(
90 g_direct_hash, g_direct_equal, g_object_unref,
nullptr);
91 self->next_display_id = 1;
95 GdkDisplay* display) {
96 FlDisplayMonitor*
self =
97 FL_DISPLAY_MONITOR(g_object_new(fl_display_monitor_get_type(),
nullptr));
99 self->display = GDK_DISPLAY(g_object_ref(display));
104 g_return_if_fail(FL_IS_DISPLAY_MONITOR(
self));
106 g_signal_connect_object(
self->display,
"monitor-added",
109 g_signal_connect_object(
self->display,
"monitor-removed",
116 GdkMonitor* monitor) {
117 g_return_val_if_fail(FL_IS_DISPLAY_MONITOR(
self), 0);
118 return GPOINTER_TO_INT(
119 g_hash_table_lookup(
self->display_ids_by_monitor, monitor));
uint64_t FlutterEngineDisplayId
G_DEFINE_TYPE(FlBasicMessageChannelResponseHandle, fl_basic_message_channel_response_handle, G_TYPE_OBJECT) static void fl_basic_message_channel_response_handle_dispose(GObject *object)
g_autoptr(GMutexLocker) locker
void fl_display_monitor_start(FlDisplayMonitor *self)
static void monitor_added_cb(FlDisplayMonitor *self, GdkMonitor *monitor)
static void fl_display_monitor_dispose(GObject *object)
static void notify_display_update(FlDisplayMonitor *self)
static void monitor_removed_cb(FlDisplayMonitor *self, GdkMonitor *monitor)
FlDisplayMonitor * fl_display_monitor_new(FlEngine *engine, GdkDisplay *display)
static void fl_display_monitor_init(FlDisplayMonitor *self)
FlutterEngineDisplayId fl_display_monitor_get_display_id(FlDisplayMonitor *self, GdkMonitor *monitor)
static void fl_display_monitor_class_init(FlDisplayMonitorClass *klass)
void fl_engine_notify_display_update(FlEngine *self, const FlutterEngineDisplay *displays, size_t displays_length)
g_hash_table_insert(self->handlers, g_strdup(channel), handler_new(handler, user_data, destroy_notify))
int gdk_monitor_get_scale_factor(GdkMonitor *monitor)
int gdk_display_get_n_monitors(GdkDisplay *display)
int gdk_monitor_get_refresh_rate(GdkMonitor *monitor)
GdkMonitor * gdk_display_get_monitor(GdkDisplay *display, int n)
void gdk_monitor_get_geometry(GdkMonitor *monitor, GdkRectangle *geometry)
FlutterEngineDisplayId next_display_id
GHashTable * display_ids_by_monitor
size_t height
The height of the display, in physical pixels.
double device_pixel_ratio
size_t struct_size
The size of this struct. Must be sizeof(FlutterEngineDisplay).
size_t width
The width of the display, in physical pixels.
FlutterEngineDisplayId display_id