## ClutterContent ClutterContent — Delegate for painting the content of an actor |

## Synopsis

                        ClutterContent;
    struct              ClutterContentIface;
    gboolean            clutter_content_get_preferred_size  (ClutterContent *content,
                                                             gfloat *width,
                                                             gfloat *height);
    void                clutter_content_invalidate          (ClutterContent *content);

## Object Hierarchy

      GInterface
       +----ClutterContent

## Prerequisites

ClutterContent requires GObject.

## Known Implementations

ClutterContent is implemented by ClutterCanvas.

## Signals

      "attached"                                       : Run First
      "detached"                                       : Run First

## Description

ClutterContent is an interface to implement types responsible for painting the content of a ClutterActor.

Multiple actors can use the same ClutterContent instance, in order to share the resources associated with painting the same content.

ClutterContent is available since Clutter 1.10.

## Details

### ClutterContent

    typedef struct _ClutterContent ClutterContent;

The ClutterContent structure is an opaque type whose members cannot be acccessed directly.

Since 1.10

### struct ClutterContentIface

    struct ClutterContentIface {
      gboolean      (* get_preferred_size)  (ClutterContent   *content,
                                             gfloat           *width,
                                             gfloat           *height);
      void          (* paint_content)       (ClutterContent   *content,
                                             ClutterActor     *actor,
                                             ClutterPaintNode *node);

      void          (* attached)            (ClutterContent   *content,
                                             ClutterActor     *actor);
      void          (* detached)            (ClutterContent   *content,
                                             ClutterActor     *actor);

      void          (* invalidate)          (ClutterContent   *content);
    };

The ClutterContentIface structure contains only private data.

`get_preferred_size` () | virtual function; should be overridden by subclasses of ClutterContent that have a natural size
`paint_content` () | virtual function; called each time the content needs to paint itself
`attached` () | virtual function; called each time a ClutterContent is attached to a ClutterActor.
`detached` () | virtual function; called each time a ClutterContent is detached from a ClutterActor.
`invalidate` () | virtual function; called each time a ClutterContent state is changed.

Since 1.10

### clutter_content_get_preferred_size ()

    gboolean            clutter_content_get_preferred_size  (ClutterContent *content,
                                                             gfloat *width,
                                                             gfloat *height);

Retrieves the natural size of the `content`, if any.

The natural size of a ClutterContent is defined as the size the content would have regardless of the allocation of the actor that is painting it, for instance the size of an image data.

`content` : | a ClutterContent
`width` : | return location for the natural width of the content. [out]
`height` : | return location for the natural height of the content. [out]
Returns : | `TRUE` if the content has a preferred size, and `FALSE` otherwise

Since 1.10

### clutter_content_invalidate ()

    void                clutter_content_invalidate          (ClutterContent *content);

Invalidates a ClutterContent.

This function should be called by ClutterContent implementations when they change the way a the content should be painted regardless of the actor state.

`content` : | a ClutterContent

Since 1.10

## Signal Details

### The `"attached"` signal

    void                user_function                      (ClutterContent *content,
                                                            ClutterActor   *actor,
                                                            gpointer        user_data)      : Run First

This signal is emitted each time a ClutterContent implementation is assigned to a ClutterActor.

`content` : | the object that emitted the signal
`actor` : | a ClutterActor
`user_data` : | user data set when the signal handler was connected.

Since 1.10

### The `"detached"` signal

    void                user_function                      (ClutterContent *content,
                                                            ClutterActor   *actor,
                                                            gpointer        user_data)      : Run First

This signal is emitted each time a ClutterContent implementation is removed from a ClutterActor.

`content` : | the object that emitted the signal
`actor` : | a ClutterActor
`user_data` : | user data set when the signal handler was connected.

Since 1.10