Clutter (programvara) - Clutter (software)

Röran
Originalförfattare Emmanuele Bassi, OpenedHand Ltd.
Utvecklare GNOME-projektet
Första utgåvan 22 juni 2006 ; 15 år sedan ( 2006-06-22 )
Stabil frisättning
1.26.4 / 9 mars 2020 ; För 15 månader sedan ( 2020-03-09 )
Förhandsgranska release
1.25.6 / 18 februari 2016 ; 5 år sedan ( 2016-02-18 )
Förvar Redigera detta på Wikidata
Skrivet i C
Operativ system Linux , BSD , OS X , Microsoft Windows
Typ Grafikbibliotek
Licens GNU Lesser General Public License
Hemsida GNOME / Projekt / röran

Clutter är ett GObject- baserat grafikbibliotek för att skapa hårdvaruaccelererade användargränssnitt. Clutter är ett OpenGL- baserat "interaktiv canvas" -bibliotek och innehåller inga grafiska kontrollelement . Det är beroende av OpenGL (1.4+) eller OpenGL ES (1.1 eller 2.0) för rendering. Den stöder också medieuppspelning med GStreamer och 2D-grafikåtergivning med Kairo .

Clutter författades av OpenedHand Ltd , nu en del av Intel . Clutter är gratis programvara med öppen källkod , enligt kraven i GNU Lesser General Public License (LGPL), version 2.1.

Adoption

Populära program som använder Clutter är GNOME-videor (aka Totem), GNOME Shell , Pitivi , Cinnamon Desktop och GNOME Ease .

Mx är en widgetverktygssats baserad på Clutter som ursprungligen designades för det grafiska skaletMoblin / MeeGo netbook , men utvecklades till ett oberoende projekt.

Widgetverktygen Netbook Toolkit (nbtk) och Mx är baserade på Clutter. Ofta ses Clutter analogt med GTK men detta är felaktigt. Endast Clutter tillsammans med Mx eller Nbtk kan matcha GTK: s omfattning. Detta är också anledningen till att Clutter används tillsammans med GTK.

Clutter stöder gester med flera tryck .

GTK Scene Graph Kit (GSK) släpptes ursprungligen som en del av GTK + 3.90 i mars 2017 och är avsett för GTK-baserade applikationer som vill ersätta Clutter för deras användargränssnitt.

Programvaruarkitektur

GDK innehåller bakändar till X11 , Wayland , Broadway ( HTTP ), kvarts och GDI och förlitar sig på Kairo för återgivningen. Dess nya SceneGraph ( GSK ) pågår, Clutter 's SceneGraph kan användas.
Exempel på röranvändning i Linux-baserade system

Clutter är en scengrafbaserad duk som fungerar i bibehållet läge . Varje objekt på scenen är vanligtvis en 2D-yta i ett 3D-utrymme.

Clutter abstraherar den inbyggda fönstermiljön bakom en backend, som också är ansvarig för att skapa huvudbehållaren för scengrafen; denna toppnivå behållare kallas scenen . Objekt på scenen kallas skådespelare .

Istället för att fungera på matriser, liksom OpenGL , ändrar Clutter-utvecklaren egenskaper för varje skådespelare. Clutter kommer då att märka förändringarna och göra scenen därefter.

Clutter utvecklas för närvarande av OpenedHand för att tillhandahålla visuellt rika grafiska användargränssnitt på stationär och inbäddad hårdvara. Huvudmålet är mediacenterliknande applikationer, små enheter UI och basritnings-API för GL- och GL / ES-baserade UI-verktygslådor. Clutter använder Pango för textåtergivning (med en speciell GL / GLES-renderare) och GdkPixbuf för att ladda bilder till GL-strukturer. Interaktion med andra GNOME-plattformsbibliotek sker genom flera integrationsbibliotek, t.ex. clutter-gst (GStreamer), clutter-gtk (för att bädda in scenen i en GTK-applikation), clutter-cairo (för att använda kairo för att rita in i en struktur). Det är API och ABI hålls stabilt i mikroutgåvor, men kan bryta API under mindre utgåvor - tills det når 1.0, då kommer det att vara API och ABI stabilt fram till nästa större utgåva.

ClutterActor

ClutterActor är grundelementet i Clutter's scengraf, det inkapslar positionen, storleken och transformationerna för en nod i diagrammet.

  • En ClutterActor kan ta emot och hantera inmatningsenhetshändelser, till exempel pekarehändelser och viktiga händelser.
  • Animering är ett kärnkoncept för moderna användargränssnitt; Clutter tillhandahåller ett komplett och kraftfullt animeringsramverk som automatiskt fördjupar skådespelarens tillstånd utan att det krävs direkt, ram för ram-manipulation från din applikationskod.

Stödda plattformar

Clutter är utvecklat för X Window System med GLX samt Wayland med EGL . Clutter kan också använda frambuffern . Från och med release 0.6 har integrerat stöd för Mac OS X lagts till. En inbyggd Microsoft Windows- backend stöds eftersom 0,8-versionen och Windows-förkompilerade DLL - filer är tillgängliga, men det är möjligt att bygga den senaste DLL-filen för Windows med MinGW och Bash-skal för Windows.

Sedan version 1.19.4 från juni 2014 beror Clutter's evdev-inputbackendlibinput 0.4.0.

Programmeringsspråkbindningar

Clutter implementeras med C-programmeringsspråket med en design baserad på GObject- objektsystemet . Bindningar är tillgängliga på följande språk:

Integrationsbibliotek

Clutter kan integreras med andra bibliotek och verktygssatser, till exempel:

  • GTK- applikationer kan bädda in Clutter-steg med en speciell widget.
  • Clutter-applikationer kan bädda in GTK-widgetar med hjälp av funktionen "klientsidor" sedan GTK + 2.18.
  • Clutter-applikationer kan använda GStreamer för att spela upp videor direkt till en Clutter texture-skådespelare.
  • Clutter-applikationer kan använda Kairo för att rita på en struktur.
  • API för videoacceleration

Exempel

Detta exempel lägger till en etikett på scenen (skriven i C ).

// Retrieve the default stage, which will contain all the actors on the scene.
ClutterActor *stage = clutter_stage_get_default ();

// Create a new label, using the Sans font 32 pixels high, and with the "Hello, world" text,
// and will place it into the stage.
ClutterActor *label = clutter_text_new_with_text ("Sans 32px", "Hello, world");
clutter_container_add_actor (CLUTTER_CONTAINER (stage), label);

// Position the label at the center of the stage, taking into account the stage and the label size.
float x = (clutter_actor_get_width (stage) - clutter_actor_get_width (label)) / 2;
float y = (clutter_actor_get_height (stage) - clutter_actor_get_height (label)) / 2;
clutter_actor_set_position (label, x, y);

// Show the stage. All actors in Clutter are visible unless explicitly hidden, except for the stage;
// thus showing the stage will
// automatically display all of its visible children.
clutter_actor_show (stage);

Gränssnittsbyggare

Clutter kan bygga användargränssnitt med en specialiserad JSON- dialekt. Hela scendiagrammet definieras med JSON-typer och byggs under körning genom ClutterScript-klassen.

Exempel

Denna definition skapar huvudfönstret och placerar en etikett med texten Hello, world! innuti.

{
    "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": "Hello, world!",
        "color": "black",
        "font-name": "Sans 48px"
    }],
    "signals": [{
        "name": "destroy",
        "handler": "clutter_main_quit"
    }]
}

Definitionen kan sparas i en fil eller som en sträng och laddas med:

ClutterScript *script = clutter_script_new ();
GError *error = NULL;
clutter_script_load_from_data (script, description, -1, &error);
if (error)
{
    g_warning ("Unable to load UI description: %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));
}

Animering

Clutter tillåter implicita animationer av varje objekt på duken med hjälp av speciella objekt som kallas beteenden : varje beteende kan tillämpas på flera aktörer och flera beteenden kan komponeras på samma aktör. Beteenden hanterar animationer implicit: utvecklaren anger de initiala och slutliga tillstånden, tiden (eller antalet bildrutor) som behövs för att slutföra animeringen, funktionen för tiden som ska användas (linjär, sinusvåg, exponential etc.) och beteendet kommer att ta hand om avståndet. Röran ger en generisk bas klass för utvecklare att implementera anpassade beteenden, och olika enkla klasser som hanterar enkla egenskaper, som opacitet, läge på Z-axeln (djup), positionen längs en bana, rotation etc.

Sedan Clutter 1.0 är det också möjligt att skapa enkla, engångsanimationer med ClutterAnimation-klassen och clutter_actor_animate () -funktionen. Funktionen clutter_actor_animate () animerar en skådespelares egenskaper mellan deras nuvarande tillstånd och det angivna slutliga tillståndet.

Exempel

Detta exempel skalar etiketten från dess storlek till en faktor 2 på 2 sekunder med en linjär funktion av tid och beteenden:

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, /* initial scaling factors */
                                                           2.0, 2.0  /* final scaling factors */ );
clutter_behaviour_apply (behaviour, label);
Dessa uttalanden skapar en tidslinje med en varaktighet på 2 sekunder. en alfa, som binder tidslinjen till ett linjärt lättnadsläge; ett beteende, som kommer att skala varje aktör som den tillämpas på mellan faktor 1.0 och faktor 2.0 (både horisontellt och vertikalt). Slutligen tillämpar det beteendet på en skådespelare.

Motsvarande kod som använder det implicita animations-API: et är:

clutter_actor_animate (label,          /* the actor to animate */
                       CLUTTER_LINEAR, /* the easing mode */
                       2000,           /* the duration of the animation */
                       "scale-x", 2.0, /* final horizontal scaling factor */
                       "scale-y", 2.0, /* final vertical scaling factor */
                       NULL);
Detta uttalande skapar ett implicit ClutterAnimation-objekt som animerar de tillhandahållna GObject-egenskaperna mellan deras nuvarande värde och det angivna slutvärdet.

COGL

Cogl är ett litet programvara med öppen källkod som använder 3D-grafikhårdvara för att rita vackra bilder. API: et avviker från plattformens maskinstil för OpenGL och är utformat för att göra det enkelt att skriva ortogonala komponenter som kan renderas utan att trampa på varandras tår. Cogl stöder för närvarande OpenGL ES 1.1 / 2.0 och OpenGL> 1.3 (eller 1.2 om du har tillägget GL_ARB_multitexture), och att ha Gallium3D- eller D3D-backend är alternativ för framtiden.

libchamplain

libchamplain är ett C-bibliotek som tillhandahåller en ClutterActor för att visa kartor. Det ger också en GTK-widget för att visa kartor i GTK-applikationer. libchamplain är uppkallad efter Samuel de Champlain , en fransk navigatör, utforskare och kartograf.

Se även

  • Core Animation - datavisualiserings-API som används av Mac OS X 10.5 och senare
  • Qt Quick - ett liknande applikationsramverk baserat på Qt och QML

Referenser

externa länkar