Clutter (biblioteca)

Clutter (biblioteca)
Clutter
Desarrollador
Intel Corporation
http://www.clutter-project.org/
Información general
Última versión estable 1.8.0[1]
19 de septiembre de 2011; hace 48 días (2011-09-19)
Género Biblioteca Gráfica en OpenGL
Programado en C
Sistema operativo X11, Darwin Win32
Licencia LGPL
Estado actual En desarrollo
En español No. 

Clutter es una biblioteca gráfica para la creación de interfaces de usuario aceleradas por hardware, escrito en C y de código abierto. Se basa en OpenGL (1.4+) o OpenGL ES (1.1 o 2.0) para la representación de gráficos, puede ser compilado en diferentes plataformas (X11, Darwin y Win32) y tiene enlaces a varios lenguajes de programación (incluidos Mono, Perl, Python, Ruby, Vala y C++ ). También soporta la reproducción de contenidos multimedia usando GStreamer, y de procesamiento de gráficos en 2D usando Cairo.[2]

Clutter fue creado por OpenedHand Ltd, que ahora es parte de Intel y está licenciado bajo LGPL 2.1, Clutter es Software Libre y de Código Abierto.

Contenido

Lenguajes de programación

Clutter está escrito en el C con un diseño basado en GObject. Existen enlaces para los siguientes lenguajes de programación:

Plataformas

Clutter se desarrolla en el sistema de ventanas X utilizando la extensión GLX.[3] También se busca facilitar su uso en sistemas empotrados, ya sea usando X o la memoria de video nativa. A partir de la versión 0.6, tiene soporte nativo para Mac OS X.[4] Una implementación nativa para Microsoft Windows es soportada desde la versión 0.8.[5]

Diseño

Clutter funciona como un escenario lleno de objetos ocultos e interactivos. Cada objeto en el escenario es (normalmente) una superficie 2D dentro de un espacio 3D.

En resumen, Clutter es un entorno de ventanas tras un backend de OpenGL, que es también responsable de crear el contenedor principal de la escena gráfica, este contenedor de nivel superior se conoce como stage (escenario). Los elementos en el escenario se llaman actors (actores).

En lugar de operar sobre matrices, así como OpenGL, Clutter interactúa con las propiedades de cada actor. Cada vez que se realizan estos cambios, Clutter se dará cuenta y hará los cambios a la escena en consecuencia.

Ejemplo

En este ejemplo se agregará un label(etiqueta) en el escenario.

ClutterActor *stage = clutter_stage_get_default ();
Esta declaración recuperará el escenario por defecto, que contendrá todos los actores en la escena.
ClutterActor *label = clutter_text_new_with_text ("Sans 32px", "¡Hola, mundo!");
clutter_container_add_actor (CLUTTER_CONTAINER (stage), label);
Estas declaraciones crearán un nueva etiqueta, con la fuente Sans 32 píxeles de alto, y con el texto "¡Hola, mundo!", y lo colocará en el escenario.
float x, y;
 
x = (clutter_actor_get_width (stage) - clutter_actor_get_width (label)) / 2;
y = (clutter_actor_get_height (stage) - clutter_actor_get_height (label)) / 2;
clutter_actor_set_position (label, x, y);
Estas declaraciones colocan una etiqueta en el centro del escenario, teniendo en cuenta los tamaños del escenario y la etiqueta.
clutter_actor_show (stage);
Esta declaración muestra el escenario. Todos los actores en clutter son visibles a menos que se declaren explícitamente ocultos, a excepción de la escena, así mostrando la escena, automáticamente todos sus hijos se hacen visibles.

Animación

Clutter realiza animaciones implícitas en cada elemento del lienzo, mediante objetos especiales llamados behaviours(comportamientos): cada comportamiento se puede aplicar a múltiples actores y múltiples comportamientos pueden ser implementados en el mismo actor. Los comportamientos manejan animaciones implícitamente: el desarrollador especifica los estados inicial y final, el tiempo (o número de fotogramas) necesarios para completar la animación, la función de tiempo que se utiliza (lineal, de onda sinusoidal, exponencial, etc), y el comportamiento se hará cargo de la interpolación. Clutter proporciona una clase base genérica para que los desarrolladores implementen comportamientos personalizados, y varias clases simples con propiedades sencillas, como transparencia, posición en el eje Z (profundidad), posición, rotación, etc.

Desde Clutter 1.0, también es posible crear fácilmente y de una sola vez animaciones utilizando la clase ClutterAnimation y la función clutter_actor_animate(). La función clutter_actor_animate(), anima las propiedades de un actor, entre su estado actual y el estado final especificado.

Ejemplo

En este ejemplo se escalará el tamaño de la etiqueta en un factor de 2, en 2 segundos, utilizando una función de tiempo lineal y su comportamiento:

ClutterTimeline *timeline = clutter_timeline_new (2000);
ClutterAlpha *alpha = clutter_alpha_new_full (timeline, CLUTTER_LINEAR);
ClutterBehaviour *behaviour = clutter_behaviour_scale_new (alpha,
                                                           1.0, 1.0, /* Factor inicial de la escala */
                                                           2.0, 2.0  /* Factor final de la escala */ );
clutter_behaviour_apply (behaviour, label);
Estas declaraciones crearán una línea de tiempo(timeline) con una duración de 2000 milisegundos; alpha, vincula la línea de tiempo mediante un modelo lineal; behaviour, escala a todos los agentes a los que se aplica (en este caso es alpha) entre el factor 1,0 y el factor 2,0 (tanto horizontal como verticalmente). Por último, se aplica behaviour a un actor.

El código equivalente que utiliza la API de animaciones implícita es:

clutter_actor_animate (label,          /* el actor que se animará */
                       CLUTTER_LINEAR, /* modo */
                       2000,           /* duración de la animación */
                       "scale-x", 2.0, /* factor final de escalado horizontal */
                       "scale-y", 2.0, /* factor final de escalado vertical */
                       NULL);
Esta declaración creara un implícitamente un objeto ClutterAnimation, que animará las propiedades GObject siempre entre su valor actual y el valor final especificado.

Construcción de interfaces

Clutter puede construir interfaces de usuario(GUI) usando un dialecto basado en JSON.[6] Los gráficos de la escena completa se definen utilizando los tipos en JSON y luego son construidos en tiempo de ejecución a través de la clase ClutterScript.

Ejemplo

Esta definición va a crear la ventana principal y colocar una etiqueta con el texto ¡Hola, mundo! dentro de él.

 
{
  "id" : "main-stage",
  "type" : "ClutterStage",
  "color" : "white",
  "width" : 800,
  "height" : 600,
  "title" : "Script demo",
  "children" : [
    {
      "id" : "hello-label",
      "type" : "ClutterText",
      "x" : 400,
      "y" : 300,
      "text" : "¡Hola, mundo!",
      "color" : "black",
      "font-name" : "Sans 48px"
    }
  ],
  "signals" : [
    { "name" : "destroy", "handler" : "clutter_main_quit" }
  ]
}

La definición se pueden guardar en un archivo o como una cadena, y se carga con:

ClutterScript *script = clutter_script_new ();
GError *error = NULL;
clutter_script_load_from_data (script, description, -1, &error);
if (error)
  {
    g_warning ("No se puede cargar la descripción de interfaz de usuario: %s", error->message);
    g_error_free (error);
  }
else
  {
    GObject *stage;
 
    clutter_script_connect_signals (script, NULL); /* connect the signal handlers */
    stage = clutter_script_get_object (script, "main-stage"); /* get the "main-stage" object */
    clutter_actor_show (CLUTTER_ACTOR (stage));
  }

Integración con otras bibliotecas

Clutter puede ser integrado con otras bibliotecas y kits de herramientas, por ejemplo:

  • Aplicaciones GTK+ puede integrar una capa Clutter con un widget especial.
  • Clutter puede utilizar GStreamer para reproducir vídeos directamente en un actor.
  • Clutter puede utilizar Cairo para dibujar dentro de una textura.
  • Clutter puede incluir aplicaciones GTK+ directamente dentro de sí.
  • También es compatible con la biblioteca Qt.
  • Puede usarse la biblioteca de físicas Box2D.

Véase también

Referencias

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Поможем написать курсовую

Mira otros diccionarios:

  • Clutter — El término Clutter puede referirse a: Clutter, concepto matemático. Clutter, en teoría de las comunicaciones, antenas y radares, como el ruido provocado por los ecos o reflexiones, en elementos ajenos al sistema (montañas, superficie del mar, etc …   Wikipedia Español

  • A sangre fría (película) — Para otros usos de este término, véase A sangre fría. In Cold Blood Título A sangre fría Ficha técnica Dirección Richard Brooks Producción …   Wikipedia Español

  • Mutter (gestor de ventanas) — Mutter Desarrollador Desarrolladores en GNOME Información general Modelo de desarrollo Software libre Lanzamiento …   Wikipedia Español

  • literature — /lit euhr euh cheuhr, choor , li treuh /, n. 1. writings in which expression and form, in connection with ideas of permanent and universal interest, are characteristic or essential features, as poetry, novels, history, biography, and essays. 2.… …   Universalium

  • Dashiell Hammett — Born Samuel Dashiell Hammett May 27, 1894(1894 05 27) Saint Mary s County, Maryland, United States Died January 10, 1961(1961 01 10) (aged 6 …   Wikipedia

  • Piaggio P.180 Avanti — P180 Avanti Role Executive transport Manufacturer Piaggio Aero First flight …   Wikipedia

  • Gestor de composición de ventanas — KWin mostrando el efecto de cubo de escritorio. En el sistema X Window System, un Gestor de composición de ventanas es un gestor de ventanas y un gestor de composición unificado. La unificación facilita efectos gráficos de composición como los… …   Wikipedia Español

  • GNOME Shell — Entorno de escritorio de GNOME Shell Desarrollador GNOME live …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”