|
|
@ -108,7 +108,7 @@ struct drm_output { |
|
|
|
|
|
|
|
|
|
|
|
struct gbm_surface *surface; |
|
|
|
struct gbm_surface *surface; |
|
|
|
struct gbm_bo *cursor_bo[2]; |
|
|
|
struct gbm_bo *cursor_bo[2]; |
|
|
|
int current_cursor, cursor_free; |
|
|
|
int current_cursor, cursor_free, cursor_x, cursor_y; |
|
|
|
EGLSurface egl_surface; |
|
|
|
EGLSurface egl_surface; |
|
|
|
struct drm_fb *current, *next; |
|
|
|
struct drm_fb *current, *next; |
|
|
|
struct backlight *backlight; |
|
|
|
struct backlight *backlight; |
|
|
@ -675,7 +675,7 @@ drm_output_set_cursor(struct weston_output *output_base, |
|
|
|
struct gbm_bo *bo; |
|
|
|
struct gbm_bo *bo; |
|
|
|
uint32_t buf[64 * 64]; |
|
|
|
uint32_t buf[64 * 64]; |
|
|
|
unsigned char *s; |
|
|
|
unsigned char *s; |
|
|
|
int i; |
|
|
|
int i, x, y; |
|
|
|
|
|
|
|
|
|
|
|
if (!output->cursor_free) |
|
|
|
if (!output->cursor_free) |
|
|
|
return; |
|
|
|
return; |
|
|
@ -702,12 +702,16 @@ drm_output_set_cursor(struct weston_output *output_base, |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (drmModeMoveCursor(c->drm.fd, output->crtc_id, |
|
|
|
x = es->geometry.x - output->base.x; |
|
|
|
es->geometry.x - output->base.x, |
|
|
|
y = es->geometry.y - output->base.y; |
|
|
|
es->geometry.y - output->base.y)) { |
|
|
|
if (output->cursor_x != x || output->cursor_y != y) { |
|
|
|
|
|
|
|
if (drmModeMoveCursor(c->drm.fd, output->crtc_id, x, y)) { |
|
|
|
weston_log("failed to move cursor: %m\n"); |
|
|
|
weston_log("failed to move cursor: %m\n"); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
output->cursor_x = x; |
|
|
|
|
|
|
|
output->cursor_y = y; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
es->plane = WESTON_PLANE_DRM_CURSOR; |
|
|
|
es->plane = WESTON_PLANE_DRM_CURSOR; |
|
|
|
output->cursor_free = 0; |
|
|
|
output->cursor_free = 0; |
|
|
|