Cairo é uma biblioteca gráfica de código aberto que fornece uma API independente de dispositivo baseada em gráficos vetoriais para desenvolvedores de software .
Ela fornece primitivas para desenho bidimensional em vários back-ends diferentes . Cairo usa aceleração de hardware quando disponível.
Apesar de ser mais utilizada por programadores C/C++ ela também pode ser aplicada em outras linguagens de programação, tais como: C#, Delphi, Eiffel, Factor, Harbor, Haskell, Julia, Lua , Perl , PHP, Python, Ruby, Rust, Scheme, Smalltalk e vários outros como Gambas (Como o Visual Basic).
Como o Cairo é apenas uma biblioteca de desenhos, pode ser bastante útil integrá-lo a um kit de ferramentas de interface gráfica do usuário, como:
--enable-cairo
”).Tais como:
Existe a biblioteca cairo
para desenvolvimento em C e a cairomm
que pode ser usado com POO para C++, apesar de que ambas funcionam com C++ .
Para instalar ambos pacotes na sua distro/sistema veja de acordo com seu gerenciador de pacotes correspondente:
emerge x11-libs/cairo dev-cpp/cairomm # Gentoo, Funtoo,...
sudo apt-get install -y libcairo2-dev libcairomm-1.0-dev # Debian, Ubuntu, Mint, ...
sudo yum install cairo-devel # Fedora, Red Hat, ...
zypper install cairo-devel cairomm-devel # OpenSUSE
sudo port install cairo cairomm # macOS
sudo pacman -S cairo cairomm # Arch Linux, Artix, Manjaro, ...
Você também pode compilar o código fonte direto do GitLab .
Criando uma imagem com cairo.
nvim main.cpp
. Leia oscomentários no código para uma maior entendimento.
#include <iostream>
#include <cairommconfig.h>
#include <cairomm/context.h>
#include <cairomm/surface.h>
#include <cmath>
int main(){
auto surface =
Cairo::ImageSurface::create(Cairo::Surface::Format::ARGB32, 600, 400);
auto cr = Cairo::Context::create(surface);
cr->save(); // salva o estado do contexto
cr->set_source_rgb(0.86, 0.85, 0.47);
cr->paint(); // preenche a imagem com a cor
cr->restore(); // retornar a cor para preto agora
cr->save();
// desenha uma borda ao redor da imagem
cr->set_line_width(20.0); // faz uma linha mais larga
cr->rectangle(0.0, 0.0, surface->get_width(), surface->get_height());
cr->stroke();
cr->set_source_rgba(0.0, 0.0, 0.0, 0.7);
// desenha um círculo no centro da imagem
cr->arc(surface->get_width() / 2.0, surface->get_height() / 2.0,
surface->get_height() / 4.0, 0.0, 2.0 * M_PI);
cr->stroke();
// desenha uma linha diagonal
cr->move_to(surface->get_width() / 4.0, surface->get_height() / 4.0);
cr->line_to(surface->get_width() * 3.0 / 4.0, surface->get_height() * 3.0 / 4.0);
cr->stroke();
cr->restore();
#ifdef CAIRO_HAS_PNG_FUNCTIONS
std::string filename = "imagem.png";
surface->write_to_png(filename);
std::cout << "O arquivo PNG: '" << filename << "' foi criado com sucesso!\n";
#else
std::cout << "Você deve compilar Cairo com suporte PNG para este exemplo.\n";
#endif
}
Para compilar com o G++ rode:
g++ main.cpp `pkg-config --cflags --libs cairomm-1.16` -std=c++17
Esse código irá criar no diretório que você executá-lo essa imagem:
Você também pode usar o Makefile, CMake, Xmake ou qualquer outra ferramenta do seu toolchain.
Para mais exemplos, clique aqui e aqui.