SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
1 de 15
INTRODUÇÃO AO FAST LIGHT TOOLKIT - FLTK
The Fast Light ToolKit
Curso de Verão – Instituto de Computação & CA Computação
Michel Alves dos Santos - UFAL
Bolsista do Centro de Pesquisa em Matemática Computacional
6º Impacto
2 de 15
MODELO DE PROCESSAMENTO DE EVENTOS
Processamento de Eventos
Aplicações FLTK são baseadas em um modelo simples de
processamento de eventos.
Ações de usuário (keystrokes, mouse clicks, etc) causam eventos que
são enviados a janela ativa
Idle, timer e file events são disparados internamente
Aplicações FLTK devem “escutar” ativamente eventos de
processamento oriundos da fila de eventos
Fl::check() - checa se existem eventos na fila
Fl::wait() - espera pelo aparecimento de um evento
Fl::run() - estabelece o processamento de um evento
3 de 15
Processamento de Eventos - Exemplo
UTILIZANDO O RELÓGIO DO SISTEMA PARA EXECUÇÃO DE FUNÇÕES PERIÓDICAS
#include <iostream>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
/*Declaração de namespace para uso das funções de iostream*/
using namespace std;
/*Contador para número de vezes que passou pelo evento ...*/
int Contador = 0;
void MyCallback(void*)
{
cout << "TICK : " << ++Contador << " " << endl;
Fl::repeat_timeout(1.0, MyCallback);
}
/**
* Função principal do programa.
*/
int main(int argc, char* argv[])
{
Fl_Window win(300,150,"Timer Event ...");
win.show();
Fl::add_timeout(1.0, MyCallback);
return(Fl::run());
}
[Manipulando o timeout de eventos]
4 de 15
FLTK Callbacks e Eventos
COMO RESPONDER A EVENTOS DENTRO DO FLTK – USO DE CALLBACKS
Callbacks ligam funções a eventos.
widget->when(event): determina para qual evento uma
função callback será executada. Exemplos:
• widget->when(FL_WHEN_ENTER_KEY)
• widget->when(FL_WHEN_RELEASE)
widget->callback(mycallback,data): estabelece que
função será chamada e que dados serão passados no
momento em que ocorrer um determinado evento.
• Funções callback devem ser estáticas [ static ]
• Funções callback fornecem um ponteiro Fl_Widget [que
aponta para o widget que foi modificado] e um ponteiro do tipo void
5 de 15
Eventos
TIPOS DE EVENTO DO FLTK
Eventos são passados como argumento para o método
virtual Fl_Widget::handle(int). Exemplos :
• Eventos de Mouse : FL_PUSH, FL_RELEASE, FL_MOVE, …
• Eventos de Foco : FL_FOCUS, FL_LEAVE, ...
• Eventos de Teclado : FL_KEYDOWN, FL_KEYUP, ...
Tipos de evento e conteúdo são avaliados via métodos
Fl::event_*(). Exemplos:
• Fl::event_button()
• Fl::event_x()
• Fl::event_key()
6 de 15
Mouse Events
EVENTOS TIPICAMENTE RELACIONADOS AO MOUSE
FL_PUSH: Quando o botão do mouse está pressionado e o
ponteiro continua sobre o widget;
• FL_DRAG: Quando o mouse é movido, sendo que um de seus
botões continua pressionado [ou em estado FL_PUSH];
• FL_RELEASE: Quando o botão do mouse é liberado;
• FL_MOVE: Quando o ponteiro do mouse é movido sem que
nenhum de seus botões esteja pressionado;
• FL_MOUSEWHEEL: Quando o usuário interage com o botão
“scroller” do mouse.
7 de 15
Focus Events
EVENTOS TIPICAMENTE RELACIONADOS AO GANHO OU PERDA DE FOCO
FL_ENTER: Ocorre quando o mouse é movido para o ponto
ou as coordenadas nas quais se encontra um determinado
widget;
FL_LEAVE: Ocorre quando o mouse é movido para fora de
um determinado widget;
• FL_FOCUS: Indica que um determinado widget possui o foco
de ações advindas do teclado, ou seja, nesse momento o
widget pode receber eventos do tipo FL_KEYDOWN, FL_KEYUP e
FL_UNFOCUS;
• FL_UNFOCUS: Ocorre quando um widget perde o foco para
outro ou quando a janela ativa perde o foco;
8 de 15
Keyboard Events
EVENTOS TIPICAMENTE RELACIONADOS AO TECLADO
• FL_KEYDOWN: Ocorre quando uma tecla é pressionada,
porém o evento se passa realmente quando a tecla está em
estado “DOWN” depois disso, se essa tecla continua
pressionada o evento FL_SHORTCUT é “constantemente
testado”;
• FL_KEYUP: Ocorre quando a tecla que anteriormente estava
em estado FL_KEYDOWN é liberada;
• FL_SHORTCUT: Tenta atender aos pedidos de execução de
atalhos via teclado. Se Fl::focus() retornar zero ou ignorar
eventos do tipo FL_KEYBOARD então o FLTK tentará enviar o
evento para todo o widget que poder, até que um deles retorne
algo diferente de zero;
9 de 15
Widget Events
EVENTOS TIPICAMENTE RELACIONADOS AOS COMPOENTES EM GERAL
FL_DEACTIVATE: Ocorre quando um widget ou o seu
“conteiner” é desativado. Widgets nessa situação não podem
receber o foco;
FL_ACTIVATE: Ocorre quando um widget ou o seu
“conteiner” é ativado;
• FL_HIDE: Ocorre quando um widget é “escondido”, ou seja,
quando não pode ser visualizado;
• FL_SHOW: Ocorre quando um widget está visível ou
novamente ganha visibilidade ou ainda quando sua janela-
mestre é restaurada [ganha novamente visibilidade].
10 de 15
Fl::event_*() methods
FUNÇÕES INLINE PARA TRATAMENTO DE EVENTOS
FLTK mantêm informações sobre eventos recentes em
estruturas e variáveis estáticas [static]. Informações que
são válidas dentro dos métodos handle(int) e callback().
Essas funções são todas inline, portanto pequenas e
muito rápidas:
Fl::event_button [FL_LEFT_MOUSE, FL_MIDDLE_MOUSE e FL_RIGHT_MOUSE]
Fl::event_clicks [verifica a existência de um “double click”]
Fl::event_is_click [verifica se ocorreu mesmo um click]
Fl::event_key [FL_Button + n, FL_Tab e as demais teclas ...]
Fl::event_x [retorna a posição x do mouse]
Fl::event_y [retorna a posição y do mouse]
entre outras ...
11 de 15
MANIPULANDO EVENTOS
Manipulando Eventos
• Mudar o estado de um widget;
• Executar Fl_Widget::redraw() se algum widget precisa ser reexibido;
• Executar Fl_Widget::damage(n) se algum widget precisa ser atualizado;
• Executar Fl_Widget::do_callback() se um callback pode ser gerado;
• Executar Fl_Widget::handle(int) para widgets filhos;
O método virtual int Fl_Widget::handle(int event) é chamado
para manipular cada evento passado a um widget. Como
consequência disso ele pode :
Eventos são identificados por argumentos inteiros
[FL_PUSH, FL_RELEASE, FL_MOVE, FL_FOCUS, FL_LEAVE] e tipos de
evento e conteúdo são avaliados via métodos Fl::event_*().
12 de 15
Exemplo de Manipulação de Eventos
MANIPULANDO EVENTOS - EXEMPLO
Este é um simples exemplo
de manipulação de eventos
através do método virtual int
Fl_Widget::handle(int event).
Podemos notar que os únicos
eventos tratados são : PUSH,
RELEASE e SHORTCUT. Os
demais eventos são
redirecionados ao método
manipulador original.
Nesse exemplo quando a tecla ’x’ é
pressionada o callback padrão
associado ao widget é executado.
13 de 15
DÚVIDAS ?
Dúvidas ?
14 de 15
PENSAMENTO DO DIA !
Henry W. Longfellow (1807-1882), poeta americano.
“Gasta-se menos tempo fazendo a coisa certa,
do que explicando por que a fizemos errado.”
15 de 15
FIM !!!

Weitere ähnliche Inhalte

Andere mochten auch

Presentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogsPresentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogs
Manolo Garcìa
 
Presentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogsPresentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogs
Manolo Garcìa
 
Oficios
OficiosOficios
Oficios
xaaloo
 
El famòs truc de la moneda
El famòs truc de la monedaEl famòs truc de la moneda
El famòs truc de la moneda
cinqueb25
 
Llista provisional d'inscrits ve'12
Llista provisional d'inscrits ve'12Llista provisional d'inscrits ve'12
Llista provisional d'inscrits ve'12
Anam
 

Andere mochten auch (20)

.
..
.
 
Chayoscli
ChayoscliChayoscli
Chayoscli
 
A garza real
A garza realA garza real
A garza real
 
Extra d biolo
Extra d bioloExtra d biolo
Extra d biolo
 
Imagenes digitales
Imagenes digitalesImagenes digitales
Imagenes digitales
 
Goya Maristes la Immaculada
Goya Maristes la ImmaculadaGoya Maristes la Immaculada
Goya Maristes la Immaculada
 
Promoviatges smp
Promoviatges smpPromoviatges smp
Promoviatges smp
 
Seventhweek
SeventhweekSeventhweek
Seventhweek
 
Presentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogsPresentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogs
 
Presentation2
Presentation2Presentation2
Presentation2
 
Arachne FInal 2
Arachne FInal 2Arachne FInal 2
Arachne FInal 2
 
Presentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogsPresentacion del video tutorialde como crear blogs
Presentacion del video tutorialde como crear blogs
 
Usuarios mas activos de las redes sociales
Usuarios mas activos de las redes socialesUsuarios mas activos de las redes sociales
Usuarios mas activos de las redes sociales
 
Oficios
OficiosOficios
Oficios
 
Livro p de pai
Livro p de paiLivro p de pai
Livro p de pai
 
Excel
ExcelExcel
Excel
 
El famòs truc de la moneda
El famòs truc de la monedaEl famòs truc de la moneda
El famòs truc de la moneda
 
Llista provisional d'inscrits ve'12
Llista provisional d'inscrits ve'12Llista provisional d'inscrits ve'12
Llista provisional d'inscrits ve'12
 
Programa al fomento de la energia renovable (FIDE)
Programa al fomento de la energia renovable (FIDE)Programa al fomento de la energia renovable (FIDE)
Programa al fomento de la energia renovable (FIDE)
 
Trabajo de tic
Trabajo de ticTrabajo de tic
Trabajo de tic
 

Mehr von Michel Alves

Mehr von Michel Alves (20)

Texture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU UseTexture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU Use
 
Intelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color PalettesIntelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color Palettes
 
A Framework for Harmonic Color Measures
A Framework for Harmonic Color MeasuresA Framework for Harmonic Color Measures
A Framework for Harmonic Color Measures
 
Effectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment IndexesEffectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment Indexes
 
Introduction to Kernel Functions
Introduction to Kernel FunctionsIntroduction to Kernel Functions
Introduction to Kernel Functions
 
About Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV SpaceAbout Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV Space
 
Color Harmonization - Results
Color Harmonization - ResultsColor Harmonization - Results
Color Harmonization - Results
 
Wave Simulation Using Perlin Noise
Wave Simulation Using Perlin NoiseWave Simulation Using Perlin Noise
Wave Simulation Using Perlin Noise
 
Similarity Maps Using SSIM Index
Similarity Maps Using SSIM IndexSimilarity Maps Using SSIM Index
Similarity Maps Using SSIM Index
 
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color HarmonizationQualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
 
TMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsTMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and Reports
 
Month Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJMonth Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJ
 
Color Palettes in R
Color Palettes in RColor Palettes in R
Color Palettes in R
 
Sigmoid Curve Erf
Sigmoid Curve ErfSigmoid Curve Erf
Sigmoid Curve Erf
 
Hue Wheel Prototype
Hue Wheel PrototypeHue Wheel Prototype
Hue Wheel Prototype
 
Cosine Curve
Cosine CurveCosine Curve
Cosine Curve
 
Triangle Mesh Plot
Triangle Mesh PlotTriangle Mesh Plot
Triangle Mesh Plot
 
Triangle Plot
Triangle PlotTriangle Plot
Triangle Plot
 
Capacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video SlidesCapacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video Slides
 
Capacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function CatalogCapacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function Catalog
 

Kürzlich hochgeladen

A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
andrenespoli3
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 

Kürzlich hochgeladen (20)

TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAO PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 

FLTK Summer Course - Part VI - Sixth Impact

  • 1. 1 de 15 INTRODUÇÃO AO FAST LIGHT TOOLKIT - FLTK The Fast Light ToolKit Curso de Verão – Instituto de Computação & CA Computação Michel Alves dos Santos - UFAL Bolsista do Centro de Pesquisa em Matemática Computacional 6º Impacto
  • 2. 2 de 15 MODELO DE PROCESSAMENTO DE EVENTOS Processamento de Eventos Aplicações FLTK são baseadas em um modelo simples de processamento de eventos. Ações de usuário (keystrokes, mouse clicks, etc) causam eventos que são enviados a janela ativa Idle, timer e file events são disparados internamente Aplicações FLTK devem “escutar” ativamente eventos de processamento oriundos da fila de eventos Fl::check() - checa se existem eventos na fila Fl::wait() - espera pelo aparecimento de um evento Fl::run() - estabelece o processamento de um evento
  • 3. 3 de 15 Processamento de Eventos - Exemplo UTILIZANDO O RELÓGIO DO SISTEMA PARA EXECUÇÃO DE FUNÇÕES PERIÓDICAS #include <iostream> #include <FL/Fl.H> #include <FL/Fl_Window.H> /*Declaração de namespace para uso das funções de iostream*/ using namespace std; /*Contador para número de vezes que passou pelo evento ...*/ int Contador = 0; void MyCallback(void*) { cout << "TICK : " << ++Contador << " " << endl; Fl::repeat_timeout(1.0, MyCallback); } /** * Função principal do programa. */ int main(int argc, char* argv[]) { Fl_Window win(300,150,"Timer Event ..."); win.show(); Fl::add_timeout(1.0, MyCallback); return(Fl::run()); } [Manipulando o timeout de eventos]
  • 4. 4 de 15 FLTK Callbacks e Eventos COMO RESPONDER A EVENTOS DENTRO DO FLTK – USO DE CALLBACKS Callbacks ligam funções a eventos. widget->when(event): determina para qual evento uma função callback será executada. Exemplos: • widget->when(FL_WHEN_ENTER_KEY) • widget->when(FL_WHEN_RELEASE) widget->callback(mycallback,data): estabelece que função será chamada e que dados serão passados no momento em que ocorrer um determinado evento. • Funções callback devem ser estáticas [ static ] • Funções callback fornecem um ponteiro Fl_Widget [que aponta para o widget que foi modificado] e um ponteiro do tipo void
  • 5. 5 de 15 Eventos TIPOS DE EVENTO DO FLTK Eventos são passados como argumento para o método virtual Fl_Widget::handle(int). Exemplos : • Eventos de Mouse : FL_PUSH, FL_RELEASE, FL_MOVE, … • Eventos de Foco : FL_FOCUS, FL_LEAVE, ... • Eventos de Teclado : FL_KEYDOWN, FL_KEYUP, ... Tipos de evento e conteúdo são avaliados via métodos Fl::event_*(). Exemplos: • Fl::event_button() • Fl::event_x() • Fl::event_key()
  • 6. 6 de 15 Mouse Events EVENTOS TIPICAMENTE RELACIONADOS AO MOUSE FL_PUSH: Quando o botão do mouse está pressionado e o ponteiro continua sobre o widget; • FL_DRAG: Quando o mouse é movido, sendo que um de seus botões continua pressionado [ou em estado FL_PUSH]; • FL_RELEASE: Quando o botão do mouse é liberado; • FL_MOVE: Quando o ponteiro do mouse é movido sem que nenhum de seus botões esteja pressionado; • FL_MOUSEWHEEL: Quando o usuário interage com o botão “scroller” do mouse.
  • 7. 7 de 15 Focus Events EVENTOS TIPICAMENTE RELACIONADOS AO GANHO OU PERDA DE FOCO FL_ENTER: Ocorre quando o mouse é movido para o ponto ou as coordenadas nas quais se encontra um determinado widget; FL_LEAVE: Ocorre quando o mouse é movido para fora de um determinado widget; • FL_FOCUS: Indica que um determinado widget possui o foco de ações advindas do teclado, ou seja, nesse momento o widget pode receber eventos do tipo FL_KEYDOWN, FL_KEYUP e FL_UNFOCUS; • FL_UNFOCUS: Ocorre quando um widget perde o foco para outro ou quando a janela ativa perde o foco;
  • 8. 8 de 15 Keyboard Events EVENTOS TIPICAMENTE RELACIONADOS AO TECLADO • FL_KEYDOWN: Ocorre quando uma tecla é pressionada, porém o evento se passa realmente quando a tecla está em estado “DOWN” depois disso, se essa tecla continua pressionada o evento FL_SHORTCUT é “constantemente testado”; • FL_KEYUP: Ocorre quando a tecla que anteriormente estava em estado FL_KEYDOWN é liberada; • FL_SHORTCUT: Tenta atender aos pedidos de execução de atalhos via teclado. Se Fl::focus() retornar zero ou ignorar eventos do tipo FL_KEYBOARD então o FLTK tentará enviar o evento para todo o widget que poder, até que um deles retorne algo diferente de zero;
  • 9. 9 de 15 Widget Events EVENTOS TIPICAMENTE RELACIONADOS AOS COMPOENTES EM GERAL FL_DEACTIVATE: Ocorre quando um widget ou o seu “conteiner” é desativado. Widgets nessa situação não podem receber o foco; FL_ACTIVATE: Ocorre quando um widget ou o seu “conteiner” é ativado; • FL_HIDE: Ocorre quando um widget é “escondido”, ou seja, quando não pode ser visualizado; • FL_SHOW: Ocorre quando um widget está visível ou novamente ganha visibilidade ou ainda quando sua janela- mestre é restaurada [ganha novamente visibilidade].
  • 10. 10 de 15 Fl::event_*() methods FUNÇÕES INLINE PARA TRATAMENTO DE EVENTOS FLTK mantêm informações sobre eventos recentes em estruturas e variáveis estáticas [static]. Informações que são válidas dentro dos métodos handle(int) e callback(). Essas funções são todas inline, portanto pequenas e muito rápidas: Fl::event_button [FL_LEFT_MOUSE, FL_MIDDLE_MOUSE e FL_RIGHT_MOUSE] Fl::event_clicks [verifica a existência de um “double click”] Fl::event_is_click [verifica se ocorreu mesmo um click] Fl::event_key [FL_Button + n, FL_Tab e as demais teclas ...] Fl::event_x [retorna a posição x do mouse] Fl::event_y [retorna a posição y do mouse] entre outras ...
  • 11. 11 de 15 MANIPULANDO EVENTOS Manipulando Eventos • Mudar o estado de um widget; • Executar Fl_Widget::redraw() se algum widget precisa ser reexibido; • Executar Fl_Widget::damage(n) se algum widget precisa ser atualizado; • Executar Fl_Widget::do_callback() se um callback pode ser gerado; • Executar Fl_Widget::handle(int) para widgets filhos; O método virtual int Fl_Widget::handle(int event) é chamado para manipular cada evento passado a um widget. Como consequência disso ele pode : Eventos são identificados por argumentos inteiros [FL_PUSH, FL_RELEASE, FL_MOVE, FL_FOCUS, FL_LEAVE] e tipos de evento e conteúdo são avaliados via métodos Fl::event_*().
  • 12. 12 de 15 Exemplo de Manipulação de Eventos MANIPULANDO EVENTOS - EXEMPLO Este é um simples exemplo de manipulação de eventos através do método virtual int Fl_Widget::handle(int event). Podemos notar que os únicos eventos tratados são : PUSH, RELEASE e SHORTCUT. Os demais eventos são redirecionados ao método manipulador original. Nesse exemplo quando a tecla ’x’ é pressionada o callback padrão associado ao widget é executado.
  • 13. 13 de 15 DÚVIDAS ? Dúvidas ?
  • 14. 14 de 15 PENSAMENTO DO DIA ! Henry W. Longfellow (1807-1882), poeta americano. “Gasta-se menos tempo fazendo a coisa certa, do que explicando por que a fizemos errado.”