[PATCH wayland] cursor: add wl_cursor_frame_and_duration
Derek Foreman
derekf at osg.samsung.com
Tue Mar 3 13:24:13 PST 2015
It's useful to know how long the current cursor frame should be displayed
so we can wait that long to change it.
Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
In a follow up weston patch I use this to let toytoolkit set the cursor
with a timerfd instead of using a frame callback.
cursor/wayland-cursor.c | 29 ++++++++++++++++++++++++++---
cursor/wayland-cursor.h | 4 ++++
2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/cursor/wayland-cursor.c b/cursor/wayland-cursor.c
index dba3b51..d5c8221 100644
--- a/cursor/wayland-cursor.c
+++ b/cursor/wayland-cursor.c
@@ -458,22 +458,28 @@ wl_cursor_theme_get_cursor(struct wl_cursor_theme *theme,
}
/** Find the frame for a given elapsed time in a cursor animation
+ * as well as the time left until next cursor change.
*
* \param cursor The cursor
- * \param time Elapsed time since the beginning of the animation
+ * \param time Elapsed time in ms since the beginning of the animation
+ * \param duration pointer to uint32_t to store time left for this image
*
* \return The index of the image that should be displayed for the
* given time in the cursor animation.
*/
WL_EXPORT int
-wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time)
+wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time,
+ uint32_t *duration)
{
struct cursor *cursor = (struct cursor *) _cursor;
uint32_t t;
int i;
- if (cursor->cursor.image_count == 1)
+ if (cursor->cursor.image_count == 1) {
+ if (*duration)
+ duration = 0;
return 0;
+ }
i = 0;
t = time % cursor->total_delay;
@@ -481,5 +487,22 @@ wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time)
while (t - cursor->cursor.images[i]->delay < t)
t -= cursor->cursor.images[i++]->delay;
+ if (duration)
+ *duration = cursor->cursor.images[i]->delay - t;
+
return i;
}
+
+/** Find the frame for a given elapsed time in a cursor animation
+ *
+ * \param cursor The cursor
+ * \param time Elapsed time in ms since the beginning of the animation
+ *
+ * \return The index of the image that should be displayed for the
+ * given time in the cursor animation.
+ */
+WL_EXPORT int
+wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time)
+{
+ return wl_cursor_frame_and_duration(_cursor, time, NULL);
+}
diff --git a/cursor/wayland-cursor.h b/cursor/wayland-cursor.h
index c7548ae..c3884a0 100644
--- a/cursor/wayland-cursor.h
+++ b/cursor/wayland-cursor.h
@@ -63,6 +63,10 @@ wl_cursor_image_get_buffer(struct wl_cursor_image *image);
int
wl_cursor_frame(struct wl_cursor *cursor, uint32_t time);
+int
+wl_cursor_frame_and_duration(struct wl_cursor *cursor, uint32_t time,
+ uint32_t *duration);
+
#ifdef __cplusplus
}
#endif
--
2.1.4
More information about the wayland-devel
mailing list