aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/drm/drm.c37
-rw-r--r--include/backend/drm/drm.h10
2 files changed, 20 insertions, 27 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 9efff464..28649791 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -850,18 +850,18 @@ static bool drm_connector_set_cursor(struct wlr_output *output,
return false;
}
- if (plane->cursor_hotspot_x != hotspot_x ||
- plane->cursor_hotspot_y != hotspot_y) {
+ if (conn->cursor_hotspot_x != hotspot_x ||
+ conn->cursor_hotspot_y != hotspot_y) {
// Update cursor hotspot
- conn->cursor_x -= hotspot_x - plane->cursor_hotspot_x;
- conn->cursor_y -= hotspot_y - plane->cursor_hotspot_y;
- plane->cursor_hotspot_x = hotspot_x;
- plane->cursor_hotspot_y = hotspot_y;
+ conn->cursor_x -= hotspot_x - conn->cursor_hotspot_x;
+ conn->cursor_y -= hotspot_y - conn->cursor_hotspot_y;
+ conn->cursor_hotspot_x = hotspot_x;
+ conn->cursor_hotspot_y = hotspot_y;
wlr_output_update_needs_frame(output);
}
- plane->cursor_enabled = false;
+ conn->cursor_enabled = false;
if (buffer != NULL) {
if ((uint64_t)buffer->width != drm->cursor_width ||
(uint64_t)buffer->height != drm->cursor_height) {
@@ -900,9 +900,9 @@ static bool drm_connector_set_cursor(struct wlr_output *output,
return false;
}
- plane->cursor_enabled = true;
- plane->cursor_width = buffer->width;
- plane->cursor_height = buffer->height;
+ conn->cursor_enabled = true;
+ conn->cursor_width = buffer->width;
+ conn->cursor_height = buffer->height;
}
wlr_output_update_needs_frame(output);
@@ -929,8 +929,8 @@ static bool drm_connector_move_cursor(struct wlr_output *output,
wlr_output_transform_invert(output->transform);
wlr_box_transform(&box, &box, transform, width, height);
- box.x -= plane->cursor_hotspot_x;
- box.y -= plane->cursor_hotspot_y;
+ box.x -= conn->cursor_hotspot_x;
+ box.y -= conn->cursor_hotspot_y;
conn->cursor_x = box.x;
conn->cursor_y = box.y;
@@ -940,14 +940,11 @@ static bool drm_connector_move_cursor(struct wlr_output *output,
}
bool drm_connector_is_cursor_visible(struct wlr_drm_connector *conn) {
- assert(conn->crtc != NULL && conn->crtc->cursor != NULL);
- struct wlr_drm_plane *plane = conn->crtc->cursor;
-
- return plane->cursor_enabled &&
+ return conn->cursor_enabled &&
conn->cursor_x < conn->output.width &&
conn->cursor_y < conn->output.height &&
- conn->cursor_x + plane->cursor_width >= 0 &&
- conn->cursor_y + plane->cursor_height >= 0;
+ conn->cursor_x + conn->cursor_width >= 0 &&
+ conn->cursor_y + conn->cursor_height >= 0;
}
static void dealloc_crtc(struct wlr_drm_connector *conn);
@@ -1095,10 +1092,8 @@ static void dealloc_crtc(struct wlr_drm_connector *conn) {
drm_plane_finish_surface(conn->crtc->primary);
drm_plane_finish_surface(conn->crtc->cursor);
- if (conn->crtc->cursor != NULL) {
- conn->crtc->cursor->cursor_enabled = false;
- }
+ conn->cursor_enabled = false;
conn->crtc = NULL;
}
diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h
index d742fdd1..378e9d20 100644
--- a/include/backend/drm/drm.h
+++ b/include/backend/drm/drm.h
@@ -34,11 +34,6 @@ struct wlr_drm_plane {
struct wlr_drm_format_set formats;
- // Only used by cursor plane
- bool cursor_enabled;
- int cursor_width, cursor_height;
- int cursor_hotspot_x, cursor_hotspot_y;
-
union wlr_drm_plane_props props;
};
@@ -123,7 +118,10 @@ struct wlr_drm_connector {
union wlr_drm_connector_props props;
- int32_t cursor_x, cursor_y;
+ bool cursor_enabled;
+ int cursor_x, cursor_y;
+ int cursor_width, cursor_height;
+ int cursor_hotspot_x, cursor_hotspot_y;
drmModeCrtc *old_crtc;