Como colocar imagem no fundo de um GtkWindow
Explicação
Existem varias formas de estilizar uma aplicação, porem algumas aplicações precisam de muito mais, como por exemplo um jogo, que precisa de menus e outras coisas. De qualquer forma, colocar uma imagem no fundo de um formulário pode ter varias utilidades. Uma maneira facil de fazer isso, é utilizar um sinal que e emitido todo vez que a janela é pintada. Isso mesmo, existe um sinal para isso, e ele é o expose_event. Com ele, seu callback é chamado toda vez que a janela aparecer ou for "pintada" novamente.
Imagem
Solução
Conectar a janela ao evento expose_event.
No callback, adicionar o pixbuf da imagem no style do GdkWindow da janela.
Exemplo
// Classe de testes
class Teste
{
// Vetor que armazena todos os widgets da interface
public $widgets = array();
// Construtor da classe
public function __construct()
{
// Cria a janela
$this->widgets['frmTeste'] = new GtkWindow();
$this->widgets['frmTeste']->set_size_request(200, 200);
// Configura para não ser redimensionavel
$this->widgets['frmTeste']->set_resizable(FALSE);
// Mostra a janela
$this->widgets['frmTeste']->add(new GtkFixed());
$this->widgets['frmTeste']->show_all();
// Conecta o destroy
$this->widgets['frmTeste']->connect_simple(
"destroy",
array("Gtk", "main_quit")
);
// Conecta o sinal de exposição
$this->widgets['frmTeste']->connect(
"expose_event",
array($this, "frmTeste_onPrint")
);
}
// onPrint do frmTeste
public function frmTeste_onPrint($widget, $event)
{
$pixbuf = GdkPixbuf::new_from_file("fundo.jpg");
$widget->window->draw_pixbuf(
$widget->style->bg_gc[Gtk::STATE_NORMAL],
$pixbuf,
0,
0,
0,
0
);
return TRUE;
}
}
// Inicia a aplicação
$teste = new Teste();
gtk::main();
Referências
http://gtk.php.net/manual/en/gdk.gdkdrawable.method.draw_pixbuf.php
