window.c: Add primitive support for animated cursors
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 5 Jun 2012 03:37:42 +0000 (23:37 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 5 Jun 2012 03:39:04 +0000 (23:39 -0400)
This just adds an entry point to set a specific frame of an animated cursor.

clients/window.c
clients/window.h

index 314e5e9..6b36c84 100644 (file)
@@ -2275,20 +2275,22 @@ static const struct wl_data_device_listener data_device_listener = {
 };
 
 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_cursor *cursor;
        struct wl_cursor_image *image;
 
-       if (pointer == input->current_cursor)
-               return;
-
        cursor = input->display->cursors[pointer];
        if (!cursor)
                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);
        if (!buffer)
                return;
@@ -2298,6 +2300,15 @@ input_set_pointer_image(struct input *input, int pointer)
                          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 *
 input_get_data_device(struct input *input)
 {
index 56ca3ea..2521964 100644 (file)
@@ -368,6 +368,9 @@ void
 input_set_pointer_image(struct input *input, int pointer);
 
 void
+input_set_pointer_image_index(struct input *input, int pointer, int index);
+
+void
 input_get_position(struct input *input, int32_t *x, int32_t *y);
 
 #define MOD_SHIFT_MASK         0x01