1010 (G_TYPE_CHECK_INSTANCE_CAST((obj), screen_retriever_plugin_get_type(), \
1111 ScreenRetrieverPlugin))
1212
13- struct _ScreenRetrieverPlugin
14- {
13+ struct _ScreenRetrieverPlugin {
1514 GObject parent_instance;
16- FlPluginRegistrar * registrar;
15+ FlPluginRegistrar* registrar;
1716};
1817
19- G_DEFINE_TYPE (ScreenRetrieverPlugin, screen_retriever_plugin, g_object_get_type())
18+ G_DEFINE_TYPE (ScreenRetrieverPlugin,
19+ screen_retriever_plugin,
20+ g_object_get_type ())
2021
2122// Gets the window being controlled.
22- GtkWindow *get_window(ScreenRetrieverPlugin *self)
23- {
24- FlView *view = fl_plugin_registrar_get_view (self->registrar );
23+ GtkWindow* get_window(ScreenRetrieverPlugin* self) {
24+ FlView* view = fl_plugin_registrar_get_view (self->registrar );
2525 if (view == nullptr )
2626 return nullptr ;
2727
2828 return GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
2929}
3030
31- FlValue *monitor_to_flvalue (GdkMonitor *monitor)
32- {
31+ FlValue* monitor_to_flvalue (GdkMonitor* monitor) {
3332 GdkRectangle frame;
3433 gdk_monitor_get_geometry (monitor, &frame);
3534
3635 auto size = fl_value_new_map ();
3736 fl_value_set_string_take (size, " width" , fl_value_new_float (frame.width ));
3837 fl_value_set_string_take (size, " height" , fl_value_new_float (frame.height ));
3938
40- const char *name = gdk_monitor_get_model (monitor);
39+ GdkRectangle workarea_rect;
40+ gdk_monitor_get_workarea (monitor, &workarea_rect);
41+
42+ // printf("x: %d y: %%d", workarea_rect.x, workarea_rect.y);
43+
44+ auto visible_size = fl_value_new_map ();
45+ fl_value_set_string_take (visible_size, " width" ,
46+ fl_value_new_float (workarea_rect.width ));
47+ fl_value_set_string_take (visible_size, " height" ,
48+ fl_value_new_float (workarea_rect.height ));
49+
50+ auto visible_position = fl_value_new_map ();
51+ fl_value_set_string_take (visible_position, " x" ,
52+ fl_value_new_float (workarea_rect.x ));
53+ fl_value_set_string_take (visible_position, " y" ,
54+ fl_value_new_float (workarea_rect.y ));
55+
56+ const char * name = gdk_monitor_get_model (monitor);
4157 gint scale_factor = gdk_monitor_get_scale_factor (monitor);
4258
4359 g_autoptr (FlValue) value = fl_value_new_map ();
4460 fl_value_set_string_take (value, " id" , fl_value_new_float (0 ));
4561 fl_value_set_string_take (value, " name" , fl_value_new_string (name));
4662 fl_value_set_take (value, fl_value_new_string (" size" ), size);
47- fl_value_set_string_take (value, " scaleFactor" , fl_value_new_float (scale_factor));
63+ fl_value_set_take (value, fl_value_new_string (" visibleSize" ), visible_size);
64+ fl_value_set_take (value, fl_value_new_string (" visiblePosition" ),
65+ visible_position);
66+ fl_value_set_string_take (value, " scaleFactor" ,
67+ fl_value_new_float (scale_factor));
4868
4969 return fl_value_ref (value);
5070}
5171
52- static FlMethodResponse *get_cursor_screen_point (ScreenRetrieverPlugin *self,
53- FlValue *args)
54- {
55- GdkDisplay *display = gdk_display_get_default ();
56- GdkSeat *seat = gdk_display_get_default_seat (display);
57- GdkDevice *pointer = gdk_seat_get_pointer (seat);
72+ static FlMethodResponse* get_cursor_screen_point (ScreenRetrieverPlugin* self,
73+ FlValue* args) {
74+ GdkDisplay* display = gdk_display_get_default ();
75+ GdkSeat* seat = gdk_display_get_default_seat (display);
76+ GdkDevice* pointer = gdk_seat_get_pointer (seat);
5877
5978 int x, y;
6079 gdk_device_get_position (pointer, NULL , &x, &y);
@@ -66,28 +85,24 @@ static FlMethodResponse *get_cursor_screen_point(ScreenRetrieverPlugin *self,
6685 return FL_METHOD_RESPONSE (fl_method_success_response_new (result_data));
6786}
6887
69- static FlMethodResponse *get_primary_display (ScreenRetrieverPlugin *self,
70- FlValue *args)
71- {
72- GdkDisplay *display = gdk_display_get_default ();
73- GdkMonitor *monitor = gdk_display_get_primary_monitor (display);
88+ static FlMethodResponse* get_primary_display (ScreenRetrieverPlugin* self,
89+ FlValue* args) {
90+ GdkDisplay* display = gdk_display_get_default ();
91+ GdkMonitor* monitor = gdk_display_get_primary_monitor (display);
7492
7593 g_autoptr (FlValue) result_data = monitor_to_flvalue (monitor);
7694
7795 return FL_METHOD_RESPONSE (fl_method_success_response_new (result_data));
7896}
7997
80- static FlMethodResponse *get_all_displays (ScreenRetrieverPlugin *self,
81- FlValue *args)
82- {
83-
98+ static FlMethodResponse* get_all_displays (ScreenRetrieverPlugin* self,
99+ FlValue* args) {
84100 auto displays = fl_value_new_list ();
85101
86- GdkDisplay * display = gdk_display_get_default ();
102+ GdkDisplay* display = gdk_display_get_default ();
87103 gint n_monitors = gdk_display_get_n_monitors (display);
88- for (gint i = 0 ; i < n_monitors; i++)
89- {
90- GdkMonitor *monitor = gdk_display_get_monitor (display, i);
104+ for (gint i = 0 ; i < n_monitors; i++) {
105+ GdkMonitor* monitor = gdk_display_get_monitor (display, i);
91106 fl_value_append_take (displays, monitor_to_flvalue (monitor));
92107 }
93108
@@ -99,67 +114,56 @@ static FlMethodResponse *get_all_displays(ScreenRetrieverPlugin *self,
99114
100115// Called when a method call is received from Flutter.
101116static void screen_retriever_plugin_handle_method_call (
102- ScreenRetrieverPlugin *self,
103- FlMethodCall *method_call)
104- {
117+ ScreenRetrieverPlugin* self,
118+ FlMethodCall* method_call) {
105119 g_autoptr (FlMethodResponse) response = nullptr ;
106120
107- const gchar *method = fl_method_call_get_name (method_call);
108- FlValue *args = fl_method_call_get_args (method_call);
109- if (strcmp (method, " getCursorScreenPoint" ) == 0 )
110- {
121+ const gchar* method = fl_method_call_get_name (method_call);
122+ FlValue* args = fl_method_call_get_args (method_call);
123+ if (strcmp (method, " getCursorScreenPoint" ) == 0 ) {
111124 response = get_cursor_screen_point (self, args);
112- }
113- else if (strcmp (method, " getPrimaryDisplay" ) == 0 )
114- {
125+ } else if (strcmp (method, " getPrimaryDisplay" ) == 0 ) {
115126 response = get_primary_display (self, args);
116- }
117- else if (strcmp (method, " getAllDisplays" ) == 0 )
118- {
127+ } else if (strcmp (method, " getAllDisplays" ) == 0 ) {
119128 response = get_all_displays (self, args);
120- }
121- else
122- {
129+ } else {
123130 response = FL_METHOD_RESPONSE (fl_method_not_implemented_response_new ());
124131 }
125132
126133 fl_method_call_respond (method_call, response, nullptr );
127134}
128135
129- static void screen_retriever_plugin_dispose (GObject *object)
130- {
136+ static void screen_retriever_plugin_dispose (GObject* object) {
131137 G_OBJECT_CLASS (screen_retriever_plugin_parent_class)->dispose (object);
132138}
133139
134- static void screen_retriever_plugin_class_init (ScreenRetrieverPluginClass *klass)
135- {
140+ static void screen_retriever_plugin_class_init (
141+ ScreenRetrieverPluginClass* klass) {
136142 G_OBJECT_CLASS (klass)->dispose = screen_retriever_plugin_dispose;
137143}
138144
139- static void screen_retriever_plugin_init (ScreenRetrieverPlugin * self) {}
145+ static void screen_retriever_plugin_init (ScreenRetrieverPlugin* self) {}
140146
141- static void method_call_cb (FlMethodChannel *channel, FlMethodCall *method_call ,
142- gpointer user_data)
143- {
144- ScreenRetrieverPlugin * plugin = SCREEN_RETRIEVER_PLUGIN (user_data);
147+ static void method_call_cb (FlMethodChannel* channel ,
148+ FlMethodCall* method_call,
149+ gpointer user_data) {
150+ ScreenRetrieverPlugin* plugin = SCREEN_RETRIEVER_PLUGIN (user_data);
145151 screen_retriever_plugin_handle_method_call (plugin, method_call);
146152}
147153
148- void screen_retriever_plugin_register_with_registrar (FlPluginRegistrar *registrar)
149- {
150- ScreenRetrieverPlugin * plugin = SCREEN_RETRIEVER_PLUGIN (
154+ void screen_retriever_plugin_register_with_registrar (
155+ FlPluginRegistrar* registrar) {
156+ ScreenRetrieverPlugin* plugin = SCREEN_RETRIEVER_PLUGIN (
151157 g_object_new (screen_retriever_plugin_get_type (), nullptr ));
152158
153159 plugin->registrar = FL_PLUGIN_REGISTRAR (g_object_ref (registrar));
154160
155161 g_autoptr (FlStandardMethodCodec) codec = fl_standard_method_codec_new ();
156162 g_autoptr (FlMethodChannel) channel =
157163 fl_method_channel_new (fl_plugin_registrar_get_messenger (registrar),
158- " screen_retriever" ,
159- FL_METHOD_CODEC (codec));
160- fl_method_channel_set_method_call_handler (channel, method_call_cb,
161- g_object_ref (plugin),
162- g_object_unref);
164+ " screen_retriever" , FL_METHOD_CODEC (codec));
165+ fl_method_channel_set_method_call_handler (
166+ channel, method_call_cb, g_object_ref (plugin), g_object_unref);
163167
164168 g_object_unref (plugin);
165169}
0 commit comments