Como mudar o cursor do mouse
Solução
Existe uma classe Gdk chamada GdkCursor para manipulação de cursores. Nela é passada um parâmetro indicando qual o cursor.
Existem constantes indicando o cursor à ser utilizado. (ver nas referências)
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 o container
$fixed = new GtkFixed();
// Cria o eventbox
$this->widgets['evtTeste'] = new GtkEventBox();
$this->widgets['evtTeste']->set_size_request(100, 50);
$fixed->put($this->widgets['evtTeste'], 8, 8);
// Adiciona todos os eventos ao eventbox
$this->widgets['evtTeste']->set_events(Gdk::ALL_EVENTS_MASK);
// Cria a janela
$this->widgets['frmTeste'] = new GtkWindow();
$this->widgets['frmTeste']->set_size_request(116, 66);
$this->widgets['frmTeste']->set_resizable(FALSE);
$this->widgets['frmTeste']->set_title("Teste");
$this->widgets['frmTeste']->add($fixed);
$this->widgets['frmTeste']->set_position(GTK::WIN_POS_CENTER);
$this->widgets['frmTeste']->show_all();
// Conecta os eventos do eventbox
$this->widgets['evtTeste']->connect(
"event",
array($this, "evtTeste_onevents")
);
// Conecta o mouse move do label
$this->widgets['frmTeste']->connect_simple(
"destroy",
array("Gtk", "main_quit")
);
}
// Callback dos eventos do EventBox
public function evtTeste_onevents($widget, $event)
{
// Verifica o evento ocorrido
switch($event->type)
{
// Move move in
case 10:
$cursor = new GdkCursor(Gdk::MAN);
$widget->window->set_cursor($cursor);
break;
}
}
}
// Classe de testes
class Teste
{
// Vetor que armazena todos os widgets da interface
public $widgets = array();
// Construtor da classe
public function __construct()
{
// Cria o container
$fixed = new GtkFixed();
// Cria o eventbox
$this->widgets['evtTeste'] = new GtkEventBox();
$this->widgets['evtTeste']->set_size_request(100, 50);
$fixed->put($this->widgets['evtTeste'], 8, 8);
// Adiciona todos os eventos ao eventbox
$this->widgets['evtTeste']->set_events(Gdk::ALL_EVENTS_MASK);
// Cria a janela
$this->widgets['frmTeste'] = new GtkWindow();
$this->widgets['frmTeste']->set_size_request(116, 66);
$this->widgets['frmTeste']->set_resizable(FALSE);
$this->widgets['frmTeste']->set_title("Teste");
$this->widgets['frmTeste']->add($fixed);
$this->widgets['frmTeste']->set_position(GTK::WIN_POS_CENTER);
$this->widgets['frmTeste']->show_all();
// Conecta os eventos do eventbox
$this->widgets['evtTeste']->connect(
"event",
array($this, "evtTeste_onevents")
);
// Conecta o mouse move do label
$this->widgets['frmTeste']->connect_simple(
"destroy",
array("Gtk", "main_quit")
);
}
// Callback dos eventos do EventBox
public function evtTeste_onevents($widget, $event)
{
// Verifica o evento ocorrido
switch($event->type)
{
// Move move in
case 10:
$cursor = new GdkCursor(Gdk::MAN);
$widget->window->set_cursor($cursor);
break;
}
}
}
// Inicia a aplicação
$teste = new Teste();
gtk::main();
Explicação
É utilizada a classe para a construção do ícone. Após o ícone estar criado, setamos o mesmo no GdkWindow do widget.
Referências
http://gtk.php.net/manual/en/gdk.gdkcursor.php
http://gtk.php.net/manual/en/gdk.enum.cursor.php