Kair (grafika) - Cairo (graphics)

Kair
Kair baner 1.svg
Pierwotny autor (autorzy) Keith Packard , Carl Worth
Deweloper(zy) Carl Worth, Behdad Esfahbod
Pierwsze wydanie przed 2003 ; 18 lat temu ( 2003 )
Wersja stabilna 1.17.4 (29 listopada 2020 ; 10 miesięcy temu ) [±] ( 2020-11-29 )
Magazyn cgit .freedesktop .org /cairo
Napisane w C
Rodzaj Biblioteka grafik
Licencja GNU Lesser General Public License w wersji 2.1 (tylko) lub Mozilla Public License 1.1
Strona internetowa www .kairografia .org

Kair (znany jako Kairu ) jest open source biblioteka graficzna , która zapewnia grafiki wektorowej -na, niezależny od urządzenia API dla programistów . Zapewnia prymitywy do dwuwymiarowego rysowania na wielu różnych zapleczach . Cairo używa akceleracji sprzętowej, jeśli jest dostępna.

Architektura oprogramowania

Wiązania językowe

Biblioteka napisana w jednym języku programowania może być używana w innym języku, jeśli napisane są powiązania ; Cairo ma szereg wiązań dla różnych języków, w tym C++ , C# i innych języków CLI , Delphi , Eiffel , Factor , Harbor , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk i kilku innych, takich jak Gambas (Visual Basic jak).

Wiązania zestawu narzędzi

Ponieważ Cairo jest tylko biblioteką rysunków, może być całkiem przydatne zintegrowanie jej z graficznym zestawem narzędzi interfejsu użytkownika.

  • FLTK ma pełną obsługę Cairo (poprzez przełącznik kompilacji "--enable-cairo").
  • GTK zaczęło w 2005 roku, wraz z wersją 2.8, używać Cairo do renderowania większości swoich graficznych elementów sterujących , a od wersji 3.0 całe renderowanie odbywa się za pośrednictwem Cairo.
  • Zespół programistów z Cairo utrzymuje aktualne instrukcje dotyczące renderowania powierzchni do SDL .

Dostępne zaplecza

Cairo wyjście nośnych (w tym rasteryzacja ) na szereg różnych tylnych końców , zwanych „powierzchni” w jego kodu. Wsparcie back-endów obejmuje wyjście do X Window System , przez Xlib i XCB , Win32 GDI , OS X Quartz Compositor , BeOS API, OS/2 , konteksty OpenGL (bezpośrednio i przez glitz), lokalne bufory obrazów, pliki PNG , Pliki PDF , PostScript , DirectFB i SVG .

Istnieją inne zaplecza w rozwoju ukierunkowane na graficzne API OpenVG , Qt , Skia i Direct2D firmy Microsoft .

Rysunek modelu

Model rysunkowy w Kairze

Model rysunkowy w Kairze opiera się na modelu trójwarstwowym.

Każdy proces rysowania odbywa się w trzech krokach:

  1. Najpierw tworzona jest maska, która zawiera jeden lub więcej prymitywów wektorowych lub form, tj. okręgi, kwadraty, czcionki TrueType , krzywe Béziera itp.
  2. Następnie należy zdefiniować źródło, którym może być kolor, gradient kolorów, bitmapa lub jakaś grafika wektorowa, a z pomalowanych części tego źródła wykonuje się wykrojnik za pomocą tak zdefiniowanej maski.
  3. Na koniec wynik jest przesyłany do miejsca docelowego lub powierzchni, która jest dostarczana przez zaplecze dla danych wyjściowych.

Stanowi to zupełnie inne podejście niż w przypadku skalowalnej grafiki wektorowej (SVG), która określa kolor kształtów za pomocą reguł kaskadowych arkuszy stylów (CSS). Podczas gdy Cairo tworzyłby maskę kształtu, następnie tworzył dla niego źródło, a następnie przenosił je na powierzchnię, plik SVG po prostu określałby kształt za pomocą styleatrybutu. To powiedziawszy, modele nie są niezgodne; wiele rendererów SVG używa Cairo do podnoszenia ciężarów.

Przykład

Obraz SVG wygenerowany przez ten przykład

Dość skomplikowaną grafikę " Hello world " można narysować za pomocą Cairo za pomocą zaledwie kilku linijek kodu źródłowego :

#include <cairo-svg.h>
#include <stdio.h>

int main(int argc, char **argv) {
    cairo_surface_t *surface = cairo_svg_surface_create("Cairo_example.svg", 100.0, 100.0);
    cairo_t *cr = cairo_create(surface);

    /* Draw the squares in the background */
    for (int x=0; x<10; x++)
       for (int y=0; y<10; y++)
           cairo_rectangle(cr, x*10.0, y*10.0, 5, 5);

    cairo_pattern_t *pattern = cairo_pattern_create_radial(50, 50, 5, 50, 50, 50);
    cairo_pattern_add_color_stop_rgb(pattern, 0, 0.75, 0.15, 0.99);
    cairo_pattern_add_color_stop_rgb(pattern, 0.9, 1, 1, 1);

    cairo_set_source(cr, pattern);
    cairo_fill(cr);

    /* Writing in the foreground */
    cairo_set_font_size (cr, 15);
    cairo_select_font_face (cr, "Georgia", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
    cairo_set_source_rgb (cr, 0, 0, 0);

    cairo_move_to(cr, 10, 25);
    cairo_show_text(cr, "Hallo");

    cairo_move_to(cr, 10, 75);
    cairo_show_text(cr, "Wikipedia!");

    cairo_destroy(cr);
    cairo_surface_destroy(surface);
}

Godne uwagi użycie

Kair jest popularny w społeczności open source, ponieważ zapewnia wieloplatformową obsługę zaawansowanego rysowania 2D.

  • GTK , począwszy od 2005 roku z wersją 2.8, używa Cairo do renderowania większości swoich graficznych elementów sterujących . Od wersji 3 GTK całe renderowanie odbywa się za pomocą Cairo.
    • Program o nazwie gtk-vector-screenshot znajdujący się w Debianie pozwala na wykonywanie wektorowych (SVG, PDF lub PostScript) zrzutów ekranu aplikacji GTK 3.
  • Projekt Mono , w tym Moonlight , używa Cairo od bardzo wczesnej koncepcji do zasilania zaplecza swoich przestrzeni nazw GDI+ (libgdiplus) i System.Drawing .
  • Projekt Mozilla wykorzystał Cairo w swoim silniku układu Gecko , używanym do renderowania graficznego wyjścia produktów Mozilli. Gecko 1.8, silnik układu dla Mozilla Firefox 2.0 i SeaMonkey 1.0, używał Cairo do renderowania treści SVG i <canvas> . Gecko 1.9, wydanie Gecko, które służy jako podstawa Firefoksa 3 , wykorzystuje Cairo jako zaplecze graficzne do renderowania zarówno zawartości strony internetowej, jak i interfejsu użytkownika (lub "chrome").
  • WebKit ramy używa Cairo dla wszystkich renderowania w GTK oraz EFL portów. Dodano również wsparcie dla treści SVG i <canvas> przy użyciu Cairo.
  • Poppler biblioteka korzysta z Kairu do renderowania dokumentów PDF. Cairo umożliwia rysowanie wygładzonych grafik wektorowych i obiektów przezroczystych.
  • Aplikacja do grafiki wektorowej Inkscape używa biblioteki Cairo do wyświetlania w trybie konturowym, a także do eksportu plików PDF i PostScript od wersji 0.46.
  • MorphOS 2.5 zawiera implementację biblioteki współdzielonej Cairo, która była dostępna jako samodzielne wydanie dla wcześniejszych wersji MorphOS.
  • AmigaOS 4.1 obsługuje w swojej domyślnej instalacji współdzieloną bibliotekę obiektów Cairo (libcairo.so).
  • FontForge domyślnie włączył renderowanie w Kairze w połowie października 2008 roku.
  • R może drukować wykresy w formatach PDF , PostScript i SVG przy użyciu Cairo, jeśli jest dostępny.
  • Gnuplot 4.4 używa teraz Cairo do renderowania plików PDF i PNG .
  • Przeglądarka internetowa na PlayStation 3 korzysta z Cairo od czasu aktualizacji oprogramowania systemowego 4.10.
  • Synfig 0.64 obsługuje teraz opcjonalne renderowanie Cairo.
  • Wykresy na żądanie danych szeregów czasowych w Graphite .
  • Silnik widżetów Konfabulator/Yahoo używa Cairo do uzyskania identycznych wyników dla Win32 i Quartz na Mac OS/X .
  • SolvedSpace , bezpłatne i otwarte oprogramowanie CAD 2D i 3D .

Historia

Keith Packard i Carl Worth założyli projekt Cairo do użytku w X Window System . Pierwotnie (przynajmniej do 2003 r.) nazywał się Xr lub Xr/Xc . Nazwa została zmieniona, aby podkreślić ideę wieloplatformowej biblioteki dostępu do serwera wyświetlania , niezwiązanej z X Window System . Nazwa Kair wywodzi się od oryginalnej nazwy Xr , interpretowanej jako greckie litery chi i rho .

Zobacz też

Bibliografia

Zewnętrzne linki