PHP-GTK: Criando Aplicações Gráficas com PHP Adianti Framework para PHP PHP Programando com Orientação a Objetos Criando Relatórios com PHP


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[phpgtk] Re: Selecionar parte de imagem



Sim, seria o ideal, mas isso em cÃdigo, vou te falar, fica enorme, e muito confuso, ja fiz isso, segue uma parte, sà para mover o GtkEventbox

vai ser meio dificil entender o cÃdigo auehauhe, mas Åo para voce ter idÃia


// Coloca o objeto na janela
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['fixed']->put(
ÂÂÂ ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['object'],
ÂÂÂ ÂÂÂ ÂÂÂ 0,
ÂÂÂ ÂÂÂ ÂÂÂ 0
ÂÂÂ ÂÂÂ );
ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ // Cria a mascara do objeto
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox'] = new GtkEventBox();
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox']->set_size_request(
ÂÂÂ ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['object']->faProperties['Width'],
ÂÂÂ ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['object']->faProperties['Height']
ÂÂÂ ÂÂÂ );
ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ $pixbuf = GdkPixbuf::new_from_file("images/front.png");
ÂÂÂ ÂÂÂ $pixbuf1 = $pixbuf->add_alpha(255, 255, 255);
ÂÂÂ ÂÂÂ list($pixmap, $mask) = $pixbuf1->render_pixmap_and_mask(255);
ÂÂÂ ÂÂÂ $style = $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox']->get_style();
ÂÂÂ ÂÂÂ $style = $style->copy();
ÂÂÂ ÂÂÂ $style->bg_pixmap[Gtk::STATE_NORMAL] = $pixmap;
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox']->set_style($style);
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox']->set_visible_window(FALSE);
ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ // Coloca a mascara na janela em cima do objeto
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['fixed']->put(
ÂÂÂ ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox'],
ÂÂÂ ÂÂÂ ÂÂÂ $event->x,
ÂÂÂ ÂÂÂ ÂÂÂ $event->y
ÂÂÂ ÂÂÂ );
ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ // Conecta a mascara aos eventos
ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]['eventbox']->connect(
ÂÂÂ ÂÂÂ ÂÂÂ 'event',Â
ÂÂÂ ÂÂÂ ÂÂÂ array($this, 'interfaceWidgets_events'),Â
ÂÂÂ ÂÂÂ ÂÂÂ $windowName,Â
ÂÂÂ ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['childs'][$childCount]
ÂÂÂ ÂÂÂ );

//-----------------------------------------------------------

/**
ÂÂÂ Â* Trata os eventos dos componentes ja adicionados (na janela)
ÂÂÂ Â*/
ÂÂÂ public function interfaceWidgets_events($widget, $event, $windowName, $componentObject)
ÂÂÂ {
ÂÂÂ ÂÂÂ static $xpos, $ypos;
ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ switch($event->type)Â
ÂÂÂ ÂÂÂ {
ÂÂÂ ÂÂÂ ÂÂÂ // Mouse Move
ÂÂÂ ÂÂÂ ÂÂÂ case 3:Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ if(($this->componentMoving !== FALSE) and ($widget = $this->componentMoving))
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ {
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $pointer = $this->interfaceWidgets[$windowName]['fixed']->window->get_pointer();
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ // Move o TOP
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ if(($pointer[1] - $ypos) % 8 == 0)
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ {
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->componentMoving['object']->set_value('Top', $pointer[1] - $ypos);
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ }
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ // Move o LEFT
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ if(($pointer[0] - $xpos) % 8 == 0)
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ {
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->componentMoving['object']->set_value('Left', $pointer[0] - $xpos);
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ }
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ // Move mask
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->interfaceWidgets[$windowName]['fixed']->move($this->componentMoving['eventbox'], $pointer[0] - $xpos, $pointer[1] - $ypos);
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ }
ÂÂÂ ÂÂÂ ÂÂÂ break;
ÂÂÂ ÂÂÂ ÂÂÂÂ
ÂÂÂ ÂÂÂ ÂÂÂ // Mouse Down
ÂÂÂ ÂÂÂ ÂÂÂ case 4:Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ /*
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ FIXME - Change cursor icon
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ * /
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $cursor = new GdkCursor(52);
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $widget->window->set_cursor($cursor);
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ */
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->componentMoving = $componentObject;
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $xpos = $event->x;
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $ypos = $event->y;
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ break;

// Mouse Up
ÂÂÂ ÂÂÂ ÂÂÂ case 7:Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ // Put focus on component
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->componentFocus = $componentObject;
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->componentMoving = FALSE;
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ // Load components properties in treeview of properties
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->loadTrvProperties($this->componentFocus['object']->faProperties);
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ // Load components events in treeview of events
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ $this->loadTrvEvents($this->componentFocus['object']->faEvents);ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â
ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂÂ
ÂÂÂ ÂÂÂ ÂÂÂ break;
}

Isso à para mover o objeto e a mascara dentro de um window.

=D
Bixo, as vezes eu me perco nisso tudo `xD

- - -
http://blog.scorninpc.com/
Bruno Pitteli GonÃalves
Desenvolvedor SAP B1 / WEB
scorninpc@gmail.com
+55 018 97958674


2009/6/4 Victor Henrique <vic.henrique@gmail.com>
E a combinaÃÃo das duas coisas nÃo ficaria legal Bruno?

Victor Henrique


2009/6/4 Bruno GonÃalves <scorninpc@gmail.com>

usa um gtkeventbox, com uma a borda preta por exemplo, e fundo transparente.
trata o mousemove dentro dele, quando chegar nas bordas, muda o icone, no mouse down cria um flag "movendo", no mouse move, se tiver flag movendo, muda o tamanho do eventbox conforme posiÃÃo do mouse.

ja fiz isso no fabula, mas ficou tÃo confuso e dificil dar manutenÃÃo, que resolvi colocar um campo, height, e outro width, conforme vai mudando os valores, ele vai mudando o objeto. muito mais facil, e funcional igual, e quando estiver posicionado, vc ja vai ter os valores dentro dos entries, prontinhos pra usar.

- - -
http://blog.scorninpc.com/
Bruno Pitteli GonÃalves
Desenvolvedor SAP B1 / WEB
scorninpc@gmail.com
+55 018 97958674


2009/6/4 Victor Henrique <vic.henrique@gmail.com>

JÃ fiz isso, porÃm em web, utilizando o _javascript_ pra criar a seleÃÃo e depois o gd pro recorte da imagem.

SÃ nÃo estou conseguindo imaginar como criar o retÃngulo de seleÃÃo com o GTK... pensei em criar 2 objetos de imagem sobrepostos, mas ficaria muito dificil por exemplo redimensionar o retangulo de seleÃÃo ou mover ele... tem que pensar em alguma alternativa pra isso...
Victor Henrique


2009/6/4 Maykel <maykelsb@gmail.com>


Pessoal,

 ÂEstamos com um problema onde temos uma imagem carregada, e entÃo Ã
necessÃrio exportar partes dessa imagem exibida. A parte a ser
exportada à selecionada pelo usuÃrio utilizando o mouse, ou seja, o
usuÃrio deve clicar e arrasta criando uma seleÃÃo retangular que serÃ
a parte da imagem a ser exportada.

 ÂAlguÃm jà fez alguma coisa assim, ou poderia dar algumas dicas?

Att.,
Maykel dos Santos Braz













--~--~---------~--~----~------------~-------~--~----~
Grupo PHP-GTK Brasil (http://www.php-gtk.com.br)
Para enviar mensagens, o e-mail à phpgtk@googlegroups.com
Para cancelar a sua inscriÃÃo, o e-mail à phpgtk+unsubscribe@googlegroups.com
Mais opÃÃes na pÃgina do grupo: http://groups.google.com.br/group/phpgtk?hl=pt-BR
-~----------~----~----~----~------~----~------~--~---