Blame examples/image-content.c

Packit 31ecd5
#include <stdlib.h>
Packit 31ecd5
#include <gdk-pixbuf/gdk-pixbuf.h>
Packit 31ecd5
#include <clutter/clutter.h>
Packit 31ecd5
Packit 31ecd5
static const struct {
Packit 31ecd5
  ClutterContentGravity gravity;
Packit 31ecd5
  const char *name;
Packit 31ecd5
} gravities[] = {
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_TOP_LEFT, "Top Left" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_TOP, "Top" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_TOP_RIGHT, "Top Right" },
Packit 31ecd5
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_LEFT, "Left" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_CENTER, "Center" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_RIGHT, "Right" },
Packit 31ecd5
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_BOTTOM_LEFT, "Bottom Left" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_BOTTOM, "Bottom" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_BOTTOM_RIGHT, "Bottom Right" },
Packit 31ecd5
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_RESIZE_FILL, "Resize Fill" },
Packit 31ecd5
  { CLUTTER_CONTENT_GRAVITY_RESIZE_ASPECT, "Resize Aspect" },
Packit 31ecd5
};
Packit 31ecd5
Packit 31ecd5
static int n_gravities = G_N_ELEMENTS (gravities);
Packit 31ecd5
static int cur_gravity = 0;
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
on_tap (ClutterTapAction *action,
Packit 31ecd5
        ClutterActor     *actor,
Packit 31ecd5
        ClutterText      *label)
Packit 31ecd5
{
Packit 31ecd5
  gchar *str;
Packit 31ecd5
Packit 31ecd5
  clutter_actor_save_easing_state (actor);
Packit 31ecd5
  clutter_actor_set_content_gravity (actor, gravities[cur_gravity].gravity);
Packit 31ecd5
  clutter_actor_restore_easing_state (actor);
Packit 31ecd5
Packit 31ecd5
  str = g_strconcat ("Content gravity: ", gravities[cur_gravity].name, NULL);
Packit 31ecd5
  clutter_text_set_text (label, str);
Packit 31ecd5
  g_free (str);
Packit 31ecd5
Packit 31ecd5
  cur_gravity += 1;
Packit 31ecd5
Packit 31ecd5
  if (cur_gravity >= n_gravities)
Packit 31ecd5
    cur_gravity = 0;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
int
Packit 31ecd5
main (int argc, char *argv[])
Packit 31ecd5
{
Packit 31ecd5
  ClutterActor *stage, *text;
Packit 31ecd5
  ClutterContent *image;
Packit 31ecd5
  ClutterAction *action;
Packit 31ecd5
  GdkPixbuf *pixbuf;
Packit 31ecd5
  gchar *str;
Packit 31ecd5
Packit 31ecd5
  if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
Packit 31ecd5
    return EXIT_FAILURE;
Packit 31ecd5
Packit 31ecd5
  stage = clutter_stage_new ();
Packit 31ecd5
  clutter_actor_set_name (stage, "Stage");
Packit 31ecd5
  clutter_stage_set_title (CLUTTER_STAGE (stage), "Content Box");
Packit 31ecd5
  clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);
Packit 31ecd5
  g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
Packit 31ecd5
  clutter_actor_set_margin_top (stage, 12);
Packit 31ecd5
  clutter_actor_set_margin_right (stage, 12);
Packit 31ecd5
  clutter_actor_set_margin_bottom (stage, 12);
Packit 31ecd5
  clutter_actor_set_margin_left (stage, 12);
Packit 31ecd5
  clutter_actor_show (stage);
Packit 31ecd5
Packit 31ecd5
  pixbuf = gdk_pixbuf_new_from_file ("redhand.png", NULL);
Packit 31ecd5
  image = clutter_image_new ();
Packit 31ecd5
  clutter_image_set_data (CLUTTER_IMAGE (image),
Packit 31ecd5
                          gdk_pixbuf_get_pixels (pixbuf),
Packit 31ecd5
                          gdk_pixbuf_get_has_alpha (pixbuf)
Packit 31ecd5
                            ? COGL_PIXEL_FORMAT_RGBA_8888
Packit 31ecd5
                            : COGL_PIXEL_FORMAT_RGB_888,
Packit 31ecd5
                          gdk_pixbuf_get_width (pixbuf),
Packit 31ecd5
                          gdk_pixbuf_get_height (pixbuf),
Packit 31ecd5
                          gdk_pixbuf_get_rowstride (pixbuf),
Packit 31ecd5
                          NULL);
Packit 31ecd5
  g_object_unref (pixbuf);
Packit 31ecd5
Packit 31ecd5
  clutter_actor_set_content_scaling_filters (stage,
Packit 31ecd5
                                             CLUTTER_SCALING_FILTER_TRILINEAR,
Packit 31ecd5
                                             CLUTTER_SCALING_FILTER_LINEAR);
Packit 31ecd5
  clutter_actor_set_content_gravity (stage, gravities[n_gravities - 1].gravity);
Packit 31ecd5
  clutter_actor_set_content (stage, image);
Packit 31ecd5
  g_object_unref (image);
Packit 31ecd5
Packit 31ecd5
  str = g_strconcat ("Content gravity: ",
Packit 31ecd5
                     gravities[n_gravities - 1].name,
Packit 31ecd5
                     NULL);
Packit 31ecd5
Packit 31ecd5
  text = clutter_text_new ();
Packit 31ecd5
  clutter_text_set_text (CLUTTER_TEXT (text), str);
Packit 31ecd5
  clutter_actor_add_constraint (text, clutter_align_constraint_new (stage, CLUTTER_ALIGN_BOTH, 0.5));
Packit 31ecd5
  clutter_actor_add_child (stage, text);
Packit 31ecd5
Packit 31ecd5
  g_free (str);
Packit 31ecd5
Packit 31ecd5
  action = clutter_tap_action_new ();
Packit 31ecd5
  g_signal_connect (action, "tap", G_CALLBACK (on_tap), text);
Packit 31ecd5
  clutter_actor_add_action (stage, action);
Packit 31ecd5
Packit 31ecd5
  clutter_main ();
Packit 31ecd5
Packit 31ecd5
  return EXIT_SUCCESS;
Packit 31ecd5
}