gdk: Add gdk_cursor_hash() and gdk_cursor_equal()

This is so GDK backends can put cursors into hash tables and avoid
duplicates.
This commit is contained in:
Benjamin Otte 2017-11-03 03:08:04 +01:00
parent 6b2ea46a5f
commit 428547e14f
2 changed files with 50 additions and 0 deletions

View File

@ -235,6 +235,52 @@ gdk_cursor_init (GdkCursor *cursor)
{
}
guint
gdk_cursor_hash (gconstpointer pointer)
{
const GdkCursor *cursor = pointer;
guint hash;
if (cursor->fallback)
hash = gdk_cursor_hash (cursor->fallback) << 16;
else
hash = 0;
if (cursor->name)
hash ^= g_str_hash (cursor->name);
else if (cursor->texture)
hash ^= g_direct_hash (cursor->texture);
hash ^= (cursor->hotspot_x << 8) | cursor->hotspot_y;
return hash;
}
gboolean
gdk_cursor_equal (gconstpointer a,
gconstpointer b)
{
const GdkCursor *ca = a;
const GdkCursor *cb = b;
if ((ca->fallback != NULL) != (cb->fallback != NULL))
return FALSE;
if (ca->fallback != NULL && !gdk_cursor_equal (ca->fallback, cb->fallback))
return FALSE;
if (g_strcmp0 (ca->name, cb->name) != 0)
return FALSE;
if (ca->texture != cb->texture)
return FALSE;
if (ca->hotspot_x != cb->hotspot_x ||
ca->hotspot_y != cb->hotspot_y)
return FALSE;
return TRUE;
}
/**
* gdk_cursor_new_from_name:
* @display: the #GdkDisplay for which the cursor will be created

View File

@ -52,6 +52,10 @@ struct _GdkCursorClass
GObjectClass parent_class;
};
guint gdk_cursor_hash (gconstpointer pointer);
gboolean gdk_cursor_equal (gconstpointer a,
gconstpointer b);
G_END_DECLS
#endif /* __GDK_CURSOR_PRIVATE_H__ */