Página Inicial > Gtk/Gdk, GtkWindow > Como colocar imagem no fundo de um GtkWindow

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

<?php
   // 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

Categories: Gtk/Gdk, GtkWindow Tags:
  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.