Skip to content

Commit d170148

Browse files
committed
fix analysis issues
1 parent c643e7f commit d170148

23 files changed

+995
-931
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ target_include_directories(flutterpi_module PUBLIC
172172
${CMAKE_SOURCE_DIR}/src
173173
${CMAKE_BINARY_DIR}
174174
${CMAKE_SOURCE_DIR}/third_party/mesa3d/include
175+
${CMAKE_SOURCE_DIR}/third_party/klib/include
175176
${CMAKE_SOURCE_DIR}/third_party/flutter_embedder_header/include
176177
)
177178

CMakePresets.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
"BUILD_GSTREAMER_AUDIO_PLAYER_PLUGIN": true,
1818
"TRY_BUILD_GSTREAMER_AUDIO_PLAYER_PLUGIN": false,
1919
"BUILD_SENTRY_PLUGIN": true,
20+
"ENABLE_VULKAN": true,
21+
"TRY_ENABLE_VULKAN": false,
2022
"ENABLE_SESSION_SWITCHING": true,
2123
"ENABLE_TESTS": false
2224
}

src/compositor_ng.c

Lines changed: 66 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include <semaphore.h>
2121

2222
#include <flutter_embedder.h>
23+
#include <klib/khash.h>
24+
#include <klib/kvec.h>
2325
#include <mesa3d/dynarray.h>
2426
#include <systemd/sd-event.h>
2527

@@ -38,10 +40,8 @@
3840
#include "tracer.h"
3941
#include "user_input.h"
4042
#include "util/collection.h"
41-
#include "util/dynarray.h"
4243
#include "util/event_loop.h"
4344
#include "util/khash_uint32.h"
44-
#include "util/kvec.h"
4545
#include "util/logging.h"
4646
#include "util/refcounting.h"
4747
#include "window.h"
@@ -308,7 +308,12 @@ double display_get_device_pixel_ratio(const struct display *display) {
308308
}
309309

310310
const char *display_get_connector_id(const struct display *display) {
311+
PRAGMA_DIAGNOSTIC_PUSH
312+
PRAGMA_DIAGNOSTIC_IGNORED("-Wpedantic")
313+
311314
return CONTAINER_OF(display, struct connector, display)->name;
315+
316+
PRAGMA_DIAGNOSTIC_POP
312317
}
313318

314319
/**
@@ -460,9 +465,9 @@ static void send_window_metrics_events(struct compositor *compositor) {
460465
memset(&event, 0, sizeof event);
461466

462467
event.struct_size = sizeof(FlutterWindowMetricsEvent);
463-
event.width = geo.view_size.x;
464-
event.height = geo.view_size.y;
465-
event.pixel_ratio = geo.device_pixel_ratio;
468+
event.width = (size_t) geo.view_size.x;
469+
event.height = (size_t) geo.view_size.y;
470+
event.pixel_ratio = (double) geo.device_pixel_ratio;
466471
event.left = 0;
467472
event.top = 0;
468473
event.physical_view_inset_top = 0;
@@ -768,7 +773,7 @@ void compositor_set_fl_pointer_event_interface(
768773
}
769774
}
770775

771-
ATTR_PURE double compositor_get_refresh_rate(struct compositor *compositor) {
776+
ATTR_PURE float compositor_get_refresh_rate(struct compositor *compositor) {
772777
return window_get_refresh_rate(compositor->implicit_view_fallback);
773778
}
774779

@@ -941,8 +946,9 @@ static int compositor_push_fl_layers(
941946
/// TODO: Just leave the layer away in this case.
942947
LOG_ERROR("Invalid platform view id %" PRId64 " in flutter layer.\n", fl_layer->platform_view->identifier);
943948

944-
layer->surface =
945-
CAST_SURFACE(dummy_render_surface_new(compositor->tracer, VEC2I(fl_layer->size.width, fl_layer->size.height)));
949+
layer->surface = CAST_SURFACE(
950+
dummy_render_surface_new(compositor->tracer, VEC2I((int) fl_layer->size.width, (int) fl_layer->size.height))
951+
);
946952
}
947953

948954
// The coordinates flutter gives us are a bit buggy, so calculating the right geometry is really a problem on its own
@@ -1126,50 +1132,17 @@ const FlutterCompositor *compositor_get_flutter_compositor(struct compositor *co
11261132
return &compositor->flutter_compositor;
11271133
}
11281134

1129-
void compositor_set_cursor(
1130-
struct compositor *compositor,
1131-
bool has_enabled,
1132-
bool enabled,
1133-
bool has_kind,
1134-
enum pointer_kind kind,
1135-
bool has_delta,
1136-
struct vec2f delta
1137-
) {
1138-
if (!has_enabled && !has_kind && !has_delta) {
1135+
void compositor_set_cursor(struct compositor *compositor, bool has_enabled, bool enabled, bool has_kind, enum pointer_kind kind) {
1136+
if (!has_enabled && !has_kind) {
11391137
return;
11401138
}
11411139

11421140
compositor_lock(compositor);
11431141

1144-
if (has_delta) {
1145-
// move cursor
1146-
compositor->cursor_pos = vec2f_add(compositor->cursor_pos, delta);
1147-
1148-
struct view_geometry viewgeo = window_get_view_geometry(compositor->implicit_view_fallback);
1149-
1150-
if (compositor->cursor_pos.x < 0.0) {
1151-
compositor->cursor_pos.x = 0.0;
1152-
} else if (compositor->cursor_pos.x > viewgeo.view_size.x) {
1153-
compositor->cursor_pos.x = viewgeo.view_size.x;
1154-
}
1155-
1156-
if (compositor->cursor_pos.y < 0.0) {
1157-
compositor->cursor_pos.y = 0.0;
1158-
} else if (compositor->cursor_pos.y > viewgeo.view_size.y) {
1159-
compositor->cursor_pos.y = viewgeo.view_size.y;
1160-
}
1142+
if (compositor->cursor.window) {
1143+
window_set_cursor(compositor->cursor.window, has_enabled, enabled, has_kind, kind, false, VEC2I(0, 0));
11611144
}
11621145

1163-
window_set_cursor(
1164-
compositor->implicit_view_fallback,
1165-
has_enabled,
1166-
enabled,
1167-
has_kind,
1168-
kind,
1169-
has_delta,
1170-
VEC2I((int) round(compositor->cursor_pos.x), (int) round(compositor->cursor_pos.y))
1171-
);
1172-
11731146
compositor_unlock(compositor);
11741147
}
11751148

@@ -1243,18 +1216,20 @@ struct notifier *compositor_get_display_setup_notifier(struct compositor *compos
12431216
}
12441217

12451218
static int64_t determine_window_for_input_device(struct compositor *compositor, struct user_input_device *device) {
1246-
input_device_match_score_t best_score;
1247-
int64_t best_window;
1219+
input_device_match_score_t best_score = -1;
1220+
int64_t best_window = -1;
12481221

1249-
int64_t view_id;
1250-
struct window *window;
1251-
kh_foreach(compositor->views, view_id, window, {
1252-
input_device_match_score_t score = window_match_input_device(window, device);
1253-
if (score > best_score) {
1254-
best_score = score;
1255-
best_window = view_id;
1256-
}
1257-
});
1222+
{
1223+
int64_t view_id;
1224+
struct window *window;
1225+
kh_foreach(compositor->views, view_id, window, {
1226+
input_device_match_score_t score = window_match_input_device(window, device);
1227+
if (score > best_score) {
1228+
best_score = score;
1229+
best_window = view_id;
1230+
}
1231+
});
1232+
}
12581233

12591234
if (best_score >= 0) {
12601235
return best_window;
@@ -1323,7 +1298,7 @@ static FlutterPointerEvent make_fl_pointer_add_event(
13231298
event.signal_kind = kFlutterPointerSignalKindNone;
13241299
event.scroll_delta_x = 0;
13251300
event.scroll_delta_y = 0;
1326-
event.device_kind = kFlutterPointerDeviceKindMouse;
1301+
event.device_kind = device_kind;
13271302
event.buttons = 0;
13281303
event.pan_x = 0.0;
13291304
event.pan_y = 0.0;
@@ -1353,7 +1328,7 @@ static FlutterPointerEvent make_fl_pointer_remove_event(
13531328
event.signal_kind = kFlutterPointerSignalKindNone;
13541329
event.scroll_delta_x = 0;
13551330
event.scroll_delta_y = 0;
1356-
event.device_kind = kFlutterPointerDeviceKindMouse;
1331+
event.device_kind = device_kind;
13571332
event.buttons = 0;
13581333
event.pan_x = 0.0;
13591334
event.pan_y = 0.0;
@@ -1376,7 +1351,7 @@ static FlutterPointerEvent make_fl_mouse_event(
13761351
memset(&event, 0, sizeof event);
13771352

13781353
event.struct_size = sizeof(FlutterPointerEvent);
1379-
event.phase = kRemove;
1354+
event.phase = phase;
13801355
event.timestamp = timestamp;
13811356
event.x = pos_view.x;
13821357
event.y = pos_view.y;
@@ -1395,7 +1370,7 @@ static FlutterPointerEvent make_fl_mouse_event(
13951370
return event;
13961371
}
13971372

1398-
static FlutterPointerEvent make_fl_mouse_scroll_event(
1373+
UNUSED static FlutterPointerEvent make_fl_mouse_scroll_event(
13991374
FlutterPointerPhase phase,
14001375
uint64_t timestamp,
14011376
struct vec2f pos_view,
@@ -1408,7 +1383,7 @@ static FlutterPointerEvent make_fl_mouse_scroll_event(
14081383
memset(&event, 0, sizeof event);
14091384

14101385
event.struct_size = sizeof(FlutterPointerEvent);
1411-
event.phase = kRemove;
1386+
event.phase = phase;
14121387
event.timestamp = timestamp;
14131388
event.x = pos_view.x;
14141389
event.y = pos_view.y;
@@ -1454,7 +1429,7 @@ static void on_device_removed(struct compositor *compositor, struct user_input_d
14541429
user_input_device_set_primary_listener_userdata(device, NULL);
14551430
}
14561431

1457-
static void on_slot_added(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1432+
static void on_slot_added(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
14581433
int64_t view_id = get_view_id_for_input_device(compositor, event->device);
14591434
if (view_id == -1) {
14601435
return;
@@ -1473,7 +1448,7 @@ static void on_slot_added(struct compositor *compositor, struct fl_event_buffer
14731448
emit_fl_event(buffer, fl_event);
14741449
}
14751450

1476-
static void on_slot_removed(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1451+
static void on_slot_removed(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
14771452
int64_t view_id = get_view_id_for_input_device(compositor, event->device);
14781453
if (view_id == -1) {
14791454
return;
@@ -1492,7 +1467,7 @@ static void on_slot_removed(struct compositor *compositor, struct fl_event_buffe
14921467
emit_fl_event(buffer, fl_event);
14931468
}
14941469

1495-
static void on_absolute_pointer_event(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1470+
static void on_absolute_pointer_event(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
14961471
ASSERT(event->pointer.is_absolute);
14971472

14981473
int64_t view_id = get_view_id_for_input_device(compositor, event->device);
@@ -1622,7 +1597,7 @@ static void maybe_enable_cursor_locked(struct compositor *compositor) {
16221597
}
16231598

16241599
static void
1625-
on_relative_pointer_event_locked(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1600+
on_relative_pointer_event_locked(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
16261601
ASSERT(!event->pointer.is_absolute);
16271602

16281603
// If the cursor is not enabled, we need to enable it.
@@ -1718,13 +1693,23 @@ on_relative_pointer_event_locked(struct compositor *compositor, struct fl_event_
17181693
window_unrefp(&current_window);
17191694
}
17201695

1721-
static void on_pointer_scroll_event(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1696+
static void on_pointer_scroll_event(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
1697+
(void) compositor;
1698+
(void) buffer;
1699+
(void) event;
1700+
/// TODO: Implement
1701+
UNIMPLEMENTED();
17221702
}
17231703

1724-
static void on_pointer_button_event(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1704+
static void on_pointer_button_event(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
1705+
(void) compositor;
1706+
(void) buffer;
1707+
(void) event;
1708+
/// TODO: Implement
1709+
UNIMPLEMENTED();
17251710
}
17261711

1727-
static void on_pointer_event(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1712+
static void on_pointer_event(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
17281713
if (event->pointer.is_absolute) {
17291714
on_absolute_pointer_event(compositor, buffer, event);
17301715
} else if (event->pointer.delta.x != 0 || event->pointer.delta.y != 0) {
@@ -1736,7 +1721,7 @@ static void on_pointer_event(struct compositor *compositor, struct fl_event_buff
17361721
}
17371722
}
17381723

1739-
static void on_touch_event(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1724+
static void on_touch_event(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
17401725
int64_t view_id = get_view_id_for_input_device(compositor, event->device);
17411726
if (view_id == -1) {
17421727
return;
@@ -1761,7 +1746,7 @@ static void on_touch_event(struct compositor *compositor, struct fl_event_buffer
17611746
emit_fl_event(buffer, fl_event);
17621747
}
17631748

1764-
static void on_tablet_tool_event(struct compositor *compositor, struct fl_event_buffer *buffer, struct user_input_event *event) {
1749+
static void on_tablet_tool_event(struct compositor *compositor, struct fl_event_buffer *buffer, const struct user_input_event *event) {
17651750
int64_t view_id = get_view_id_for_input_device(compositor, event->device);
17661751
if (view_id == -1) {
17671752
return;
@@ -1775,20 +1760,28 @@ static void on_tablet_tool_event(struct compositor *compositor, struct fl_event_
17751760
fl_event.phase = kMove;
17761761
fl_event.x = event->tablet.position_ndc.x;
17771762
fl_event.y = event->tablet.position_ndc.y;
1778-
fl_event.device = event->device;
1763+
fl_event.device = kFlutterPointerDeviceKindStylus;
17791764
fl_event.view_id = view_id;
17801765

17811766
emit_fl_event(buffer, fl_event);
17821767
}
17831768

17841769
static void on_input(void *userdata, size_t n_events, const struct user_input_event *events) {
1785-
struct fl_event_buffer buffer;
17861770
struct compositor *compositor;
17871771
size_t i;
17881772

17891773
ASSERT_NOT_NULL(userdata);
17901774
compositor = userdata;
17911775

1776+
if (!compositor->has_pointer_event_interface) {
1777+
return;
1778+
}
1779+
1780+
struct fl_event_buffer buffer = {
1781+
.n_events = 0,
1782+
.pointer_event_interface = compositor->pointer_event_interface,
1783+
};
1784+
17921785
for (i = 0; i < n_events; i++) {
17931786
const struct user_input_event *event = events + i;
17941787

@@ -1800,6 +1793,7 @@ static void on_input(void *userdata, size_t n_events, const struct user_input_ev
18001793
case USER_INPUT_TOUCH: on_touch_event(compositor, &buffer, event); break;
18011794
case USER_INPUT_TABLET_TOOL: on_tablet_tool_event(compositor, &buffer, event); break;
18021795
case USER_INPUT_POINTER: on_pointer_event(compositor, &buffer, event); break;
1796+
case USER_INPUT_KEY: UNREACHABLE(); break;
18031797
default: LOG_DEBUG("Unhandled enum user_input_event: %d\n", event->type); break;
18041798
}
18051799
}

src/compositor_ng.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ void compositor_set_fl_pointer_event_interface(
142142

143143
void compositor_get_view_geometry(struct compositor *compositor, struct view_geometry *view_geometry_out);
144144

145-
ATTR_PURE double compositor_get_refresh_rate(struct compositor *compositor);
145+
ATTR_PURE float compositor_get_refresh_rate(struct compositor *compositor);
146146

147147
int compositor_get_next_vblank(struct compositor *compositor, uint64_t *next_vblank_ns_out);
148148

@@ -194,15 +194,7 @@ int compositor_get_event_fd(struct compositor *compositor);
194194

195195
int compositor_on_event_fd_ready(struct compositor *compositor);
196196

197-
void compositor_set_cursor(
198-
struct compositor *compositor,
199-
bool has_enabled,
200-
bool enabled,
201-
bool has_kind,
202-
enum pointer_kind kind,
203-
bool has_delta,
204-
struct vec2f delta
205-
);
197+
void compositor_set_cursor(struct compositor *compositor, bool has_enabled, bool enabled, bool has_kind, enum pointer_kind kind);
206198

207199
enum connector_type {
208200
CONNECTOR_TYPE_VGA,

0 commit comments

Comments
 (0)