Skip to content

Commit 0e7e75f

Browse files
committed
[linux] Add visiblePosition, visibleSize fields to Display model
1 parent 25a907c commit 0e7e75f

1 file changed

Lines changed: 67 additions & 63 deletions

File tree

linux/screen_retriever_plugin.cc

Lines changed: 67 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,51 +10,70 @@
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.
101116
static 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

Comments
 (0)