Bałagan (oprogramowanie) - Clutter (software)

Nieład
Pierwotny autor (autorzy) Emmanuele Bassi, OpenedHand Ltd
Deweloper(zy) Projekt GNOME
Pierwsze wydanie 22 czerwca 2006 ; 15 lat temu ( 2006-06-22 )
Wersja stabilna
1.26.4 / 9 marca 2020 ; 15 miesięcy temu ( 2020-03-09 )
Wersja zapoznawcza
1.25.6 / 18 lutego 2016 ; 5 lat temu ( 2016-02-18 )
Magazyn Edytuj to na Wikidata
Napisane w do
System operacyjny Linux , BSD , OS X , Microsoft Windows
Rodzaj Biblioteka grafik
Licencja Mniejsza Powszechna Licencja Publiczna GNU
Stronie internetowej GNOME/projekty/bałagan

Clutter to biblioteka graficzna oparta na GObject do tworzenia interfejsów użytkownika z akceleracją sprzętową. Clutter to biblioteka „interaktywna kanwa” oparta na OpenGL i nie zawiera żadnych graficznych elementów sterujących . Do renderowania opiera się na OpenGL (1.4+) lub OpenGL ES (1.1 lub 2.0). Obsługuje również odtwarzanie multimediów przy użyciu GStreamera i renderowanie grafiki 2D przy użyciu Cairo .

Autorem bałaganu jest OpenedHand Ltd , obecnie część Intela . Clutter to darmowe oprogramowanie typu open source , podlegające wymogom licencji GNU Lesser General Public License (LGPL), wersja 2.1.

Przyjęcie

Popularne programy, które przyjmują Clutter to GNOME Videos (aka Totem), GNOME Shell , Pitivi , Cinnamon Desktop i GNOME Ease .

MX to zestaw narzędzi widget na podstawie bałagan pierwotnie zaprojektowany dla graficznego powłoce z Moblin / MeeGo netbook , ale przekształciła się niezależnym projektem.

Zestawy narzędzi widgetów Netbook Toolkit (nbtk) i Mx są oparte na Clutter. Często Clutter jest postrzegany jako analogiczny do GTK, ale jest to niedokładne. Tylko Clutter razem z Mx lub Nbtk może dorównać zasięgowi GTK. Jest to również powód, dla którego Clutter jest używany razem z GTK.

Clutter obsługuje gesty wielodotykowe .

GTK Scene Graph Kit (GSK) został pierwotnie wydany jako część GTK+ 3.90 w marcu 2017 roku i jest przeznaczony dla aplikacji opartych na GTK, które chcą zastąpić Clutter w swoim interfejsie użytkownika.

Architektura oprogramowania

GDK zawiera back-endy dla X11 , Wayland , Broadway ( HTTP ), Quartz i GDI i polega na Cairo do renderowania. Jego nowy SceneGraph ( GSK ) jest w toku, można użyć programu SceneGraph firmy Clutter .
Przykład użycia Clutter w systemach opartych na systemie Linux

Clutter to płótno oparte na grafice scen działające w trybie zachowanym . Każdy obiekt na scenie jest zwykle powierzchnią 2D wewnątrz przestrzeni 3D.

Clutter abstrahuje natywne środowisko okienkowe za backendem, który jest również odpowiedzialny za tworzenie głównego kontenera dla grafu sceny; ten kontener najwyższego poziomu nazywa się sceną . Przedmioty na scenie nazywane są aktorami .

Zamiast operować na macierzach, jak to robi OpenGL , programista Clutter zmienia właściwości każdego aktora. Clutter zauważy zmiany i odpowiednio wyrenderuje scenę.

Clutter jest obecnie rozwijany przez OpenedHand, aby zapewnić bogate wizualnie graficzne interfejsy użytkownika na komputerach stacjonarnych i wbudowanym sprzęcie. Głównym celem są aplikacje przypominające centra multimedialne, interfejsy użytkownika dla małych urządzeń i interfejs API do rysowania bazowego dla zestawów narzędzi interfejsu użytkownika opartych na GL i GL/ES. Clutter używa Pango do renderowania tekstu (ze specjalnym rendererem GL/GLES) i GdkPixbuf do ładowania obrazów do tekstur GL. Interakcja z innymi bibliotekami platformy GNOME odbywa się za pomocą wielu bibliotek integracyjnych, np.: clutter-gst (GStreamer), clutter-gtk (do osadzenia sceny w aplikacji GTK), clutter-cairo (do używania cairo do rysowania tekstury). Jego API i ABI są stabilne w mikro wydaniach, ale mogą zepsuć API podczas mniejszych wydań — dopóki nie osiągnie 1.0, wtedy API i ABI będą stabilne do następnego wydania głównego.

ClutterAktor

ClutterActor jest podstawowym elementem grafu sceny Clutter, zawiera pozycję, rozmiar i przekształcenia węzła w grafie.

  • ClutterActor może odbierać i obsługiwać zdarzenia urządzenia wejściowego, na przykład zdarzenia wskaźnika i zdarzenia kluczowe.
  • Animacja to podstawowa koncepcja nowoczesnych interfejsów użytkownika; Bałagan zapewnia kompletne i wydajne ramy animacji, które automatycznie nastolatków stan aktora bez konieczności bezpośredniego, klatka po manipulacji ramki z kodu aplikacji.

Obsługiwane platformy

Clutter jest opracowywany dla systemu X Window przy użyciu GLX oraz Wayland przy użyciu EGL . Clutter może również korzystać z bufora ramki . W wersji 0.6 dodano natywną obsługę systemu Mac OS X. Natywny backend systemu Microsoft Windows jest obsługiwany od wersji 0.8 i wstępnie skompilowanych bibliotek DLL systemu Windows , jednak możliwe jest zbudowanie najnowszej biblioteki DLL dla systemu Windows z powłoką MinGW i Bash dla systemu Windows.

Od wersji 1.19.4 z czerwca 2014 r. backend wejściowy evdev Cluttera zależy od libinput 0.4.0.

Wiązania języka programowania

Clutter jest zaimplementowany przy użyciu języka programowania C z projektem opartym na systemie obiektowym GObject . Wiązania są dostępne dla tych języków:

Biblioteki integracyjne

Clutter można zintegrować z innymi bibliotekami i zestawami narzędzi, na przykład:

  • Aplikacje GTK mogą osadzać etapy Clutter za pomocą specjalnego widżetu.
  • Aplikacje mające mało miejsca mogą osadzać widżety GTK za pomocą funkcji „okien po stronie klienta” od wersji GTK+ 2.18.
  • Aplikacje Clutter mogą używać GStreamera do odtwarzania wideo bezpośrednio w aktorze tekstury Clutter.
  • Aplikacje z bałaganem mogą używać Kairu do rysowania na teksturze.
  • Interfejs API akceleracji wideo

Przykład

Ten przykład doda etykietę na scenie (napisaną w 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);

Konstruktor interfejsów

Clutter może budować interfejsy użytkownika przy użyciu specjalistycznego dialektu JSON . Cały wykres sceny jest definiowany przy użyciu typów JSON i budowany w czasie wykonywania przez klasę ClutterScript.

Przykład

Ta definicja utworzy główne okno i umieści etykietę z tekstem Hello, world! w środku tego.

{
    "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"
    }]
}

Definicję można zapisać do pliku lub jako ciąg i wczytać za pomocą:

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));
}

Animacja

Bałagan umożliwia niejawne animacje każdego elementu na kanwie przy użyciu specjalnych obiektów zwanych zachowaniami : każde zachowanie można zastosować do wielu aktorów, a wiele zachowań można skomponować na tym samym aktorze. Zachowania obsługują animacje niejawnie: programista określa stan początkowy i końcowy, czas (lub liczbę klatek) potrzebny do ukończenia animacji, funkcję czasu, która ma być użyta (liniowy, sinusoidalny, wykładniczy itp.) oraz zachowanie zajmie się animacją. Clutter zapewnia ogólną klasę bazową dla programistów do implementowania niestandardowych zachowań oraz różne proste klasy obsługujące proste właściwości, takie jak nieprzezroczystość, pozycja na osi Z (głębokość), pozycja wzdłuż ścieżki, obrót itp.

Od wersji Clutter 1.0 możliwe jest również tworzenie prostych, jednorazowych animacji przy użyciu klasy ClutterAnimation i funkcji wygody clutter_actor_animate(). Funkcja clutter_actor_animate() animuje właściwości aktora między ich bieżącym stanem a określonym stanem końcowym.

Przykład

Ten przykład przeskaluje etykietę od jej rozmiaru do współczynnika 2 w ciągu 2 sekund, używając liniowej funkcji czasu i zachowań:

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);
Oświadczenia te stworzą oś czasu o czasie trwania 2 sekundy; alfa, wiążąca oś czasu z liniowym trybem luzowania; zachowanie, które przeskaluje każdego aktora, do którego zostanie zastosowane, od współczynnika 1,0 do współczynnika 2,0 (zarówno w poziomie, jak i w pionie). Na koniec stosuje zachowanie aktora.

Równoważny kod używający niejawnego interfejsu API animacji to:

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);
Ta instrukcja utworzy niejawny obiekt ClutterAnimation, który animuje dostarczone właściwości GObject między ich bieżącą wartością a określoną wartością końcową.

COGL

Cogl to mała biblioteka oprogramowania typu open source do używania sprzętu graficznego 3D do rysowania ładnych obrazów. Interfejs API odbiega od stylu OpenGL w postaci płaskiego automatu stanowego i został zaprojektowany, aby ułatwić pisanie ortogonalnych komponentów, które mogą renderować się bez wchodzenia na siebie nawzajem. Cogl obecnie obsługuje OpenGL ES 1.1/2.0 i OpenGL > 1.3 (lub 1.2, jeśli masz rozszerzenie GL_ARB_multitexture), a posiadanie zaplecza Gallium3D lub D3D to opcje na przyszłość.

libchamplain

libchamplain to biblioteka C zapewniająca ClutterActor do wyświetlania map. Zapewnia również widżet GTK do wyświetlania map w aplikacjach GTK. libchamplain pochodzi od Samuela de Champlain , francuskiego nawigatora, odkrywcy i kartografa.

Zobacz też

  • Core Animation — interfejs API do wizualizacji danych używany w systemie Mac OS X 10.5 i nowszych
  • Qt Quick – podobny framework aplikacji oparty na Qt i QML

Bibliografia

Linki zewnętrzne