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

Captura_de_tela-background.php

Solução

Conectar a janela ao evento expose_event.
No callback, adicionar o pixbuf da imagem no style do GdkWindow da janela.

Exemplo

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