window.c: Add primitive support for animated cursors

This just adds an entry point to set a specific frame of an animated cursor.
This commit is contained in:
Kristian Høgsberg 2012-06-04 23:37:42 -04:00
parent f33984edea
commit 7cee19778a
2 changed files with 19 additions and 5 deletions

View File

@ -2275,20 +2275,22 @@ static const struct wl_data_device_listener data_device_listener = {
}; };
void void
input_set_pointer_image(struct input *input, int pointer) input_set_pointer_image_index(struct input *input, int pointer, int index)
{ {
struct wl_buffer *buffer; struct wl_buffer *buffer;
struct wl_cursor *cursor; struct wl_cursor *cursor;
struct wl_cursor_image *image; struct wl_cursor_image *image;
if (pointer == input->current_cursor)
return;
cursor = input->display->cursors[pointer]; cursor = input->display->cursors[pointer];
if (!cursor) if (!cursor)
return; return;
image = cursor->images[0]; if (index >= (int) cursor->image_count) {
fprintf(stderr, "cursor index out of range\n");
return;
}
image = cursor->images[index];
buffer = wl_cursor_image_get_buffer(image); buffer = wl_cursor_image_get_buffer(image);
if (!buffer) if (!buffer)
return; return;
@ -2298,6 +2300,15 @@ input_set_pointer_image(struct input *input, int pointer)
buffer, image->hotspot_x, image->hotspot_y); buffer, image->hotspot_x, image->hotspot_y);
} }
void
input_set_pointer_image(struct input *input, int pointer)
{
if (pointer == input->current_cursor)
return;
input_set_pointer_image_index(input, pointer, 0);
}
struct wl_data_device * struct wl_data_device *
input_get_data_device(struct input *input) input_get_data_device(struct input *input)
{ {

View File

@ -367,6 +367,9 @@ frame_create(struct window *window, void *data);
void void
input_set_pointer_image(struct input *input, int pointer); input_set_pointer_image(struct input *input, int pointer);
void
input_set_pointer_image_index(struct input *input, int pointer, int index);
void void
input_get_position(struct input *input, int32_t *x, int32_t *y); input_get_position(struct input *input, int32_t *x, int32_t *y);