Obs.: Um pouco atrazado, pois já publiquei estas versões a um bom tempo, mas:
Uma nova versão dos bindings do GTK+2.0 para Lua (lgui) e do cairo (ldraw) estão disponíveis para download.
Alguns screenshoots:
Mais um blog dedicado a programação e software livre.
Obs.: Um pouco atrazado, pois já publiquei estas versões a um bom tempo, mas:
Uma nova versão dos bindings do GTK+2.0 para Lua (lgui) e do cairo (ldraw) estão disponíveis para download.
Alguns screenshoots:
Voltei de férias! Estes três dias pós-férias foram bem produtivos. Fiz um “gerador” que organiza as funções do lgui de maneira a tornar a sintaxe orientada a objeto:
Exemplo:
require(“lguiOO”)
local w = lgui.Window.new()
w:set(“title”, “Olá mundo OO!”, “window-position”, lgui.WIN_POS_CENTER)
w:connect(“delete-event”, lgui.gtkQuit)
w:showAll()
lgui.gtkMain()
Também fiz bindings do cairo, que podem ser utilizados sozinhos ou integrados ao lgui (só as funções básicas foram feitas até agora, tá bem no início).
(Atenção: Post antigo, houvera mudanças significativas no projeto).
A um tempo atrás, comecei a criar um binding do GTK para Lua. Atualmente, ele cobre 90% do que é realmente usado, e é compacto e simples (<60kbs, compilado como um módulo). Compilado e testado com GTK 2.12, para Linux e MS-Windows.
O código fonte já está no CVS. (não existe mais, ver http://oproj.tuxfamily.org)
-> Exemplo de uso:
#! /usr/bin/env lua
require(“lgui”)
lgui.export()
local window = windowNew()
local hbox = hboxNew(true, 5)
local b1, b2 = buttonNewFromStock(“gtk-ok”), buttonNewFromStock(“gtk-cancel”)
containerAdd(hbox, b1, b2)
containerAdd(window, hbox)
set(window, “title”, “Hello World”, “window-position”, WIN_POS_CENTER)
connect(window, “delete-event”, gtkQuit)
connect(b1, “clicked”, print, “Button 1 clicked!”)
widgetShowAll(window)
gtkMain()
-> Resultado:
Ontem, as três da madrugada, bootei no meu recém gravado live CD do primeiro milestone do projeto Indiana, do OpenSolaris, que pretende atrair mais usuários para o sistema.
Eu só brinquei com ele por alguns minutos. Algumas características:
- Utiliza o GNOME 2.20.1 como ambiente desktop;
- Aparentemente como uma boa RAM;
- Nimbus é muito bonito =). Não é o default, mas pelo próprio gerenciador de temas do GNOME dá pra selecioná-lo;
- Não vem com Java pré-instalado?
Algumas SSs:
Terminei de montar os pacotes do lua-gtk (bindings do gtk para Lua) e suas dependências. Deu um trabalho danado, pois muita coisa teve que ser mudada para se tornar compilável com os pacotes do Arch.
Os 4 já estão no AUR (as outras dependências já foram empacotadas por outros):
- bitlib (manipulação de bits em Lua)
- cmph (biblioteca de hashing escrita em C) *
- lua-expat (bindings do expat para Lua)
- lua-gtk (enfim!)
* Nota.: Apesar de estar empacotado, não configurei o lua-gtk para utilizá-lo. Quando eu tiver mais tempo eu tento novamente!
Lembrando que o lua-gtk ainda está em estado alfa, e possui alguns bugs (a versão atual, a 0.6, é considerada pelo desenvolvedor como uma versão de desenvolvimento, equanto que a versão 0.5 já se encontra compilada para Linux e Windows no site do projeto no luaforge.org )
Este tutorial procura mostrar um exemplo básico de como utilizar a ferramenta SWIG para criar módulos de Lua em C / C++ (presume-se que o leitor já tem uma implementação de Lua instalada, como o Lua oficial ou o LuaJIT.)
1º Passo – Instalação do Swig
A maioria das distribuições Linux possui o Swig no seu repositório. No Arch Linux não é diferente =). Para outras distribuições que não tenham empacotado ele, ou para outros sistemas operacionais (sim, windows também é suportado), é possível baixar o código fonte do site oficial e compilar.
2º Passo – Criação de um arquivo de exemplo
Crie um arquivo chamado exemplo.c, e coloque o seguinte conteúdo nele:
#include <stdio.h>
void olaMundo()
{
printf(“C diz: Olá Mundo!!\n”);
}
3º Passo – Criação de um arquivo de interface para o SWIG
Crie um arquivo chamado exemplo.i, e coloque o seguinte conteúdo nele:
%module exemplo
%{
extern void olaMundo();
%}
extern void olaMundo();
4º Passo – Criação do wrapper
Rode o SWIG para gerar o wrapper. Exemplo:
$ swig -lua exemplo.i (paraC++, utilize a flag -c++ em conjunto com as demais)
5º Passo – Compilação do Módulo
Este passo depende muito da sua plataforma, portanto pode variar. Neste tutorial, está sendo utilizado o GCC 4.2.2 rodando no Arch Linux.
$ gcc -c exemplo.c
$ gcc -c exemplo_wrap.c
$ gcc -shared exemplo.o exemplo_wrap.o -o exemplo.so
6º Passo – Testando o módulo
Crie um arquivo chamado teste.lua, e coloque o seguinte conteúdo nele:
require(“exemplo”)
print(“Lua diz: Tá aí C?”)
exemplo.olaMundo()
print(“Lua diz: Legal!!”)
Rode ele, e veja se funcionou
$ lua teste.lua
Simples não? O SWIG é uma ferramenta muito poderosa. Já utilizei ele em conjunto com Java, Python, e, atualmente, com Lua.
Edit.: Agora existem pacotes no repositório “community”, um pacman -Ss compiz mostra os nomes dos pacotes relacionados.
A versão 0.6.0 do Compiz Fusion saiu a pouco tempo, e está mais “polida” do que o release público anterior (0.5.2).
Disponibilizei os pacotes compilados para Athlons (k8) no seguinte link.:
http://download.tuxfamily.org/oproj/compizfusion
Lembrando que o Compiz 0.6.0 se encontra no repositório oficial (# pacman -S compiz-fusion instala três pacotes.: compiz-core, e decoradores de janela para gtk e kde).