diff --git a/src/backends/meta-cursor.c b/src/backends/meta-cursor.c
index be501a813..ffbbd2f40 100644
--- a/src/backends/meta-cursor.c
+++ b/src/backends/meta-cursor.c
@@ -44,7 +44,7 @@ enum {
static guint signals[LAST_SIGNAL];
-struct _MetaCursorSprite
+typedef struct _MetaCursorSpritePrivate
{
GObject parent;
@@ -59,9 +59,9 @@ struct _MetaCursorSprite
int theme_scale;
gboolean theme_dirty;
-};
+} MetaCursorSpritePrivate;
-G_DEFINE_TYPE (MetaCursorSprite, meta_cursor_sprite, G_TYPE_OBJECT)
+G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorSprite, meta_cursor_sprite, G_TYPE_OBJECT)
static const char *
translate_meta_cursor (MetaCursor cursor)
@@ -130,6 +130,8 @@ static void
meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *sprite,
XcursorImage *xc_image)
{
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
MetaBackend *backend = meta_get_backend ();
MetaCursorRenderer *renderer = meta_backend_get_cursor_renderer (backend);
uint width, height, rowstride;
@@ -139,7 +141,7 @@ meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *sprite,
CoglTexture2D *texture;
CoglError *error = NULL;
- g_assert (sprite->texture == NULL);
+ g_assert (priv->texture == NULL);
width = xc_image->width;
height = xc_image->height;
@@ -178,42 +180,53 @@ meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *sprite,
static XcursorImage *
meta_cursor_sprite_get_current_frame_image (MetaCursorSprite *sprite)
{
- return sprite->xcursor_images->images[sprite->current_frame];
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ return priv->xcursor_images->images[priv->current_frame];
}
void
meta_cursor_sprite_tick_frame (MetaCursorSprite *sprite)
{
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
XcursorImage *image;
if (!meta_cursor_sprite_is_animated (sprite))
return;
- sprite->current_frame++;
+ priv->current_frame++;
- if (sprite->current_frame >= sprite->xcursor_images->nimage)
- sprite->current_frame = 0;
+ if (priv->current_frame >= priv->xcursor_images->nimage)
+ priv->current_frame = 0;
image = meta_cursor_sprite_get_current_frame_image (sprite);
- g_clear_pointer (&sprite->texture, cogl_object_unref);
+ g_clear_pointer (&priv->texture, cogl_object_unref);
meta_cursor_sprite_load_from_xcursor_image (sprite, image);
}
guint
meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *sprite)
{
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
if (!meta_cursor_sprite_is_animated (sprite))
return 0;
- return sprite->xcursor_images->images[sprite->current_frame]->delay;
+ return priv->xcursor_images->images[priv->current_frame]->delay;
}
gboolean
meta_cursor_sprite_is_animated (MetaCursorSprite *sprite)
{
- return (sprite->xcursor_images &&
- sprite->xcursor_images->nimage > 1);
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ return (priv->xcursor_images &&
+ priv->xcursor_images->nimage > 1);
}
MetaCursorSprite *
@@ -225,23 +238,25 @@ meta_cursor_sprite_new (void)
static void
meta_cursor_sprite_load_from_theme (MetaCursorSprite *sprite)
{
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
XcursorImage *image;
- g_assert (sprite->cursor != META_CURSOR_NONE);
+ g_assert (priv->cursor != META_CURSOR_NONE);
- sprite->theme_dirty = FALSE;
+ priv->theme_dirty = FALSE;
/* We might be reloading with a different scale. If so clear the old data. */
- if (sprite->xcursor_images)
+ if (priv->xcursor_images)
{
- g_clear_pointer (&sprite->texture, cogl_object_unref);
- XcursorImagesDestroy (sprite->xcursor_images);
+ g_clear_pointer (&priv->texture, cogl_object_unref);
+ XcursorImagesDestroy (priv->xcursor_images);
}
- sprite->current_frame = 0;
- sprite->xcursor_images = load_cursor_on_client (sprite->cursor,
- sprite->theme_scale);
- if (!sprite->xcursor_images)
+ priv->current_frame = 0;
+ priv->xcursor_images = load_cursor_on_client (priv->cursor,
+ priv->theme_scale);
+ if (!priv->xcursor_images)
meta_fatal ("Could not find cursor. Perhaps set XCURSOR_PATH?");
image = meta_cursor_sprite_get_current_frame_image (sprite);
@@ -252,11 +267,13 @@ MetaCursorSprite *
meta_cursor_sprite_from_theme (MetaCursor cursor)
{
MetaCursorSprite *sprite;
+ MetaCursorSpritePrivate *priv;
sprite = meta_cursor_sprite_new ();
+ priv = meta_cursor_sprite_get_instance_private (sprite);
- sprite->cursor = cursor;
- sprite->theme_dirty = TRUE;
+ priv->cursor = cursor;
+ priv->theme_dirty = TRUE;
return sprite;
}
@@ -267,16 +284,19 @@ meta_cursor_sprite_set_texture (MetaCursorSprite *sprite,
int hot_x,
int hot_y)
{
- if (sprite->texture == COGL_TEXTURE_2D (texture) &&
- sprite->hot_x == hot_x &&
- sprite->hot_y == hot_y)
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ if (priv->texture == COGL_TEXTURE_2D (texture) &&
+ priv->hot_x == hot_x &&
+ priv->hot_y == hot_y)
return;
- g_clear_pointer (&sprite->texture, cogl_object_unref);
+ g_clear_pointer (&priv->texture, cogl_object_unref);
if (texture)
- sprite->texture = cogl_object_ref (texture);
- sprite->hot_x = hot_x;
- sprite->hot_y = hot_y;
+ priv->texture = cogl_object_ref (texture);
+ priv->hot_x = hot_x;
+ priv->hot_y = hot_y;
g_signal_emit (sprite, signals[TEXTURE_CHANGED], 0);
}
@@ -285,28 +305,40 @@ void
meta_cursor_sprite_set_texture_scale (MetaCursorSprite *sprite,
float scale)
{
- sprite->texture_scale = scale;
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ priv->texture_scale = scale;
}
void
meta_cursor_sprite_set_theme_scale (MetaCursorSprite *sprite,
int theme_scale)
{
- if (sprite->theme_scale != theme_scale)
- sprite->theme_dirty = TRUE;
- sprite->theme_scale = theme_scale;
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ if (priv->theme_scale != theme_scale)
+ priv->theme_dirty = TRUE;
+ priv->theme_scale = theme_scale;
}
CoglTexture *
meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *sprite)
{
- return COGL_TEXTURE (sprite->texture);
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ return COGL_TEXTURE (priv->texture);
}
MetaCursor
meta_cursor_sprite_get_meta_cursor (MetaCursorSprite *sprite)
{
- return sprite->cursor;
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ return priv->cursor;
}
void
@@ -314,14 +346,20 @@ meta_cursor_sprite_get_hotspot (MetaCursorSprite *sprite,
int *hot_x,
int *hot_y)
{
- *hot_x = sprite->hot_x;
- *hot_y = sprite->hot_y;
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ *hot_x = priv->hot_x;
+ *hot_y = priv->hot_y;
}
float
meta_cursor_sprite_get_texture_scale (MetaCursorSprite *sprite)
{
- return sprite->texture_scale;
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ return priv->texture_scale;
}
void
@@ -335,25 +373,33 @@ meta_cursor_sprite_prepare_at (MetaCursorSprite *sprite,
void
meta_cursor_sprite_realize_texture (MetaCursorSprite *sprite)
{
- if (sprite->theme_dirty)
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ if (priv->theme_dirty)
meta_cursor_sprite_load_from_theme (sprite);
}
static void
meta_cursor_sprite_init (MetaCursorSprite *sprite)
{
- sprite->texture_scale = 1.0f;
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
+
+ priv->texture_scale = 1.0f;
}
static void
meta_cursor_sprite_finalize (GObject *object)
{
MetaCursorSprite *sprite = META_CURSOR_SPRITE (object);
+ MetaCursorSpritePrivate *priv =
+ meta_cursor_sprite_get_instance_private (sprite);
- if (sprite->xcursor_images)
- XcursorImagesDestroy (sprite->xcursor_images);
+ if (priv->xcursor_images)
+ XcursorImagesDestroy (priv->xcursor_images);
- g_clear_pointer (&sprite->texture, cogl_object_unref);
+ g_clear_pointer (&priv->texture, cogl_object_unref);
G_OBJECT_CLASS (meta_cursor_sprite_parent_class)->finalize (object);
}
diff --git a/src/backends/meta-cursor.h b/src/backends/meta-cursor.h
index 888713a22..1342a39ab 100644
--- a/src/backends/meta-cursor.h
+++ b/src/backends/meta-cursor.h
@@ -25,13 +25,16 @@
#include
#include
-typedef struct _MetaCursorSprite MetaCursorSprite;
+struct _MetaCursorSpriteClass
+{
+ GObjectClass parent_class;
+};
#define META_TYPE_CURSOR_SPRITE (meta_cursor_sprite_get_type ())
-G_DECLARE_FINAL_TYPE (MetaCursorSprite,
- meta_cursor_sprite,
- META, CURSOR_SPRITE,
- GObject);
+G_DECLARE_DERIVABLE_TYPE (MetaCursorSprite,
+ meta_cursor_sprite,
+ META, CURSOR_SPRITE,
+ GObject)
MetaCursorSprite * meta_cursor_sprite_new (void);