## ClutterImage ClutterImage — Image data content |

## Synopsis

    struct              ClutterImage;
    struct              ClutterImageClass;
    #define             CLUTTER_IMAGE_ERROR
    enum                ClutterImageError;
    ClutterContent *    clutter_image_new                   (void);
    gboolean            clutter_image_set_data              (ClutterImage *image,
                                                             const guint8 *data,
                                                             CoglPixelFormat pixel_format,
                                                             guint width,
                                                             guint height,
                                                             guint row_stride,
                                                             GError **error);
    gboolean            clutter_image_set_area              (ClutterImage *image,
                                                             const guint8 *data,
                                                             CoglPixelFormat pixel_format,
                                                             const cairo_rectangle_int_t *rect,
                                                             guint row_stride,
                                                             GError **error);
    CoglTexture *       clutter_image_get_texture           (ClutterImage *image);

## Description

ClutterImage is a ClutterContent implementation that displays image data.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    #include <stdlib.h>
    #include <gmodule.h>
    #include <gdk-pixbuf/gdk-pixbuf.h>
    #include <clutter/clutter.h>

    static const struct {
      ClutterContentGravity gravity;
      const char *name;
    } gravities[] = {
      { CLUTTER_CONTENT_GRAVITY_TOP_LEFT, "Top Left" },
      { CLUTTER_CONTENT_GRAVITY_TOP, "Top" },
      { CLUTTER_CONTENT_GRAVITY_TOP_RIGHT, "Top Right" },

      { CLUTTER_CONTENT_GRAVITY_LEFT, "Left" },
      { CLUTTER_CONTENT_GRAVITY_CENTER, "Center" },
      { CLUTTER_CONTENT_GRAVITY_RIGHT, "Right" },

      { CLUTTER_CONTENT_GRAVITY_BOTTOM_LEFT, "Bottom Left" },
      { CLUTTER_CONTENT_GRAVITY_BOTTOM, "Bottom" },
      { CLUTTER_CONTENT_GRAVITY_BOTTOM_RIGHT, "Bottom Right" },

      { CLUTTER_CONTENT_GRAVITY_RESIZE_FILL, "Resize Fill" },
      { CLUTTER_CONTENT_GRAVITY_RESIZE_ASPECT, "Resize Aspect" },
    };

    static int n_gravities = G_N_ELEMENTS (gravities);
    static int cur_gravity = 0;

    static void
    on_clicked (ClutterClickAction *action,
                ClutterActor       *actor,
                ClutterText        *label)
    {
      gchar *str;

      clutter_actor_save_easing_state (actor);
      clutter_actor_set_content_gravity (actor, gravities[cur_gravity].gravity);
      clutter_actor_restore_easing_state (actor);

      str = g_strconcat ("Content gravity: ", gravities[cur_gravity].name, NULL);
      clutter_text_set_text (label, str);
      g_free (str);

      cur_gravity += 1;

      if (cur_gravity >= n_gravities)
        cur_gravity = 0;
    }

    G_MODULE_EXPORT const char *
    test_image_box_describe (void)
    {
      return "A test with image content.";
    }

    G_MODULE_EXPORT int
    test_image_box_main (int argc, char *argv[])
    {
      ClutterActor *stage, *box, *text;
      ClutterContent *image;
      ClutterAction *action;
      GdkPixbuf *pixbuf;
      gchar *str;

      if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
        return EXIT_FAILURE;

      stage = clutter_stage_new ();
      clutter_actor_set_name (stage, "Stage");
      clutter_stage_set_title (CLUTTER_STAGE (stage), "Content Box");
      clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);
      g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
      clutter_actor_show (stage);

      box = clutter_actor_new ();
      clutter_actor_set_name (box, "Image");
      clutter_actor_set_margin_top (box, 12);
      clutter_actor_set_margin_right (box, 12);
      clutter_actor_set_margin_bottom (box, 12);
      clutter_actor_set_margin_left (box, 12);
      clutter_actor_add_constraint (box, clutter_bind_constraint_new (stage, CLUTTER_BIND_SIZE, 0.0));
      clutter_actor_add_child (stage, box);

      pixbuf = gdk_pixbuf_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL);
      image = clutter_image_new ();
      clutter_image_set_data (CLUTTER_IMAGE (image),
                              gdk_pixbuf_get_pixels (pixbuf),
                              gdk_pixbuf_get_has_alpha (pixbuf)
                                ? COGL_PIXEL_FORMAT_RGBA_8888
                                : COGL_PIXEL_FORMAT_RGB_888,
                              gdk_pixbuf_get_width (pixbuf),
                              gdk_pixbuf_get_height (pixbuf),
                              gdk_pixbuf_get_rowstride (pixbuf),
                              NULL);
      g_object_unref (pixbuf);

      clutter_actor_set_content_scaling_filters (box,
                                                 CLUTTER_SCALING_FILTER_TRILINEAR,
                                                 CLUTTER_SCALING_FILTER_LINEAR);
      clutter_actor_set_content_gravity (box, gravities[n_gravities - 1].gravity);
      clutter_actor_set_content (box, image);
      g_object_unref (image);

      str = g_strconcat ("Content gravity: ",
                         gravities[n_gravities - 1].name,
                         NULL);

      text = clutter_text_new ();
      clutter_text_set_text (CLUTTER_TEXT (text), str);
      clutter_actor_add_constraint (text, clutter_align_constraint_new (stage, CLUTTER_ALIGN_BOTH, 0.5));
      clutter_actor_add_child (stage, text);

      g_free (str);

      action = clutter_click_action_new ();
      g_signal_connect (action, "clicked", G_CALLBACK (on_clicked), text);
      clutter_actor_set_reactive (box, TRUE);
      clutter_actor_add_action (box, action);

      clutter_main ();

      return EXIT_SUCCESS;
    }

ClutterImage is available since Clutter 1.10.

## Details

### struct ClutterImage

    struct ClutterImage {
    };

The ClutterImage structure contains private data and should only be accessed using the provided API.

Since 1.10

### struct ClutterImageClass

    struct ClutterImageClass {
    };

The ClutterImageClass structure contains private data.

Since 1.10

### CLUTTER_IMAGE_ERROR

    #define CLUTTER_IMAGE_ERROR             (clutter_image_error_quark ())

Error domain for the ClutterImageError enumeration.

Since 1.10

### enum ClutterImageError

    typedef enum {
      CLUTTER_IMAGE_ERROR_INVALID_DATA
    } ClutterImageError;

Error enumeration for ClutterImage.

`CLUTTER_IMAGE_ERROR_INVALID_DATA` | Invalid data passed to the `clutter_image_set_data()` function.

Since 1.10

### clutter_image_new ()

    ClutterContent *    clutter_image_new                   (void);

Creates a new ClutterImage instance.

Returns : | the newly created ClutterImage instance. Use `g_object_unref()` when done. [transfer full]

Since 1.10

### clutter_image_set_data ()

    gboolean            clutter_image_set_data              (ClutterImage *image,
                                                             const guint8 *data,
                                                             CoglPixelFormat pixel_format,
                                                             guint width,
                                                             guint height,
                                                             guint row_stride,
                                                             GError **error);

Sets the image data to be display by `image`.

If the image data was successfully loaded, the `image` will be invalidated.

In case of error, the `error` value will be set, and this function will return `FALSE`.

The image data is copied in texture memory.

`image` : | a ClutterImage
`data` : | the image data, as an array of bytes. [array]
`pixel_format` : | the Cogl pixel format of the image data
`width` : | the width of the image data
`height` : | the height of the image data
`row_stride` : | the length of each row inside `data`
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` if the image data was successfully loaded, and `FALSE` otherwise.

Since 1.10

### clutter_image_set_area ()

    gboolean            clutter_image_set_area              (ClutterImage *image,
                                                             const guint8 *data,
                                                             CoglPixelFormat pixel_format,
                                                             const cairo_rectangle_int_t *rect,
                                                             guint row_stride,
                                                             GError **error);

Sets the image data to be display by `image`, using `rect` to indicate the position and size of the image data to be set.

If the `image` does not have any image data set when this function is called, a new texture will be created with the size of the width and height of the rectangle, i.e. calling this function on a newly created ClutterImage will be the equivalent of calling `clutter_image_set_data()`.

If the image data was successfully loaded, the `image` will be invalidated.

In case of error, the `error` value will be set, and this function will return `FALSE`.

The image data is copied in texture memory.

`image` : | a ClutterImage
`data` : | the image data, as an array of bytes. [array]
`pixel_format` : | the Cogl pixel format of the image data
`rect` : | a rectangle indicating the area that should be set
`row_stride` : | the length of each row inside `data`
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` if the image data was successfully loaded, and `FALSE` otherwise.

Since 1.10

### clutter_image_get_texture ()

    CoglTexture *       clutter_image_get_texture           (ClutterImage *image);

Retrieves a pointer to the Cogl texture used by `image`.

If you change the contents of the returned Cogl texture you will need to manually invalidate the `image` with `clutter_content_invalidate()` in order to update the actors using `image` as their content.

`image` : | a ClutterImage
Returns : | a pointer to the Cogl texture, or `NULL`. [transfer none]

Since 1.10

Stability Level: Unstable