Transcript
Page 1: FLTK Summer Course - Part V - Fifth Impact

1 de 15INTRODUÇÃO AO FAST LIGHT TOOLKIT - FLTK

The Fast Light ToolKit

Curso de Verão – Instituto de Computação & CA ComputaçãoMichel Alves dos Santos - UFALBolsista do Centro de Pesquisa em Matemática Computacional

5º Impacto

Page 2: FLTK Summer Course - Part V - Fifth Impact

2 de 15ADICIONANDO E EXTENDENDO WIDGETS

Compondo e Extendendo Widgets

[Exemplo de hierarquia de classes do pacote FLTK]

Page 3: FLTK Summer Course - Part V - Fifth Impact

3 de 15

Novos widgets são criados através de herança ou subclassing de widgets já existentes no FLTK.

Tipicamente usasse a classe Fl_Widget para controles simples e Fl_Group para widgets compostos.

Subclassing

[Exemplo de alguns widgets simples e compostos pertencentes ao pacote fltk]

SUBCLASSING

Page 4: FLTK Summer Course - Part V - Fifth Impact

4 de 15

Widget Methods

MÉTODOS COMUNS A MAIORIA DOS WIDGETS DO FLTK

Cada classe de widget dentro do FLTK provê um conjunto de métodos que manipula o estado/valor das propriedades dos objetos derivados dessas classes.

– widget->position(x, y)– widget->resize(x, y, width, height)– widget->size(width, height)– widget->color(color) (ex: FL_BLUE)– widget->labelcolor(color)– widget->when(event)– widget->callback(static_function, data)

Page 5: FLTK Summer Course - Part V - Fifth Impact

5 de 15CONSTRUINDO UMA SUBCLASSE DE FL_WIDGET

Subclasses de Fl_Widget

Nossas classes podem descender diretamente de Fl_Widget ou de qualquer classe derivada [subclasse] da mesma. Fl_Widget possui 4 métodos virtuais que podem ser sobrepostos se necessário [draw, handle, resize e ~Fl_Widget].

MyClass(int x, int y, int w, int h, const char *label = 0); Construtor padrão :

MyClass::MyClass(int x, int y, int w, int h, const char *label) : Fl_Widget(x, y, w, h, label){ // do initialization stuff... };

Invocando o construtor da classe base :

Page 6: FLTK Summer Course - Part V - Fifth Impact

6 de 15MÉTODOS PROTEGIDOS DE FL_WIDGET

Métodos Protegidos

São providos os seguintes métodos para uso em subclasses.

– Fl_Widget::clear_visible– Fl_Widget::damage– Fl_Widget::draw_box– Fl_Widget::draw_focus– Fl_Widget::draw_label– Fl_Widget::set_flag– Fl_Widget::set_visible– Fl_Widget::test_shortcut– Fl_Widget::type

Page 7: FLTK Summer Course - Part V - Fifth Impact

7 de 15MANIPULANDO 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_*().

Page 8: FLTK Summer Course - Part V - Fifth Impact

8 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.

Page 9: FLTK Summer Course - Part V - Fifth Impact

9 de 15

Drawing – Desenhando Widgets

UTILIZAÇÃO DAS PRIMITIVAS DE DESENHO DO FLTK

O desenho em widgets no FLTK é ativado/executado através da chamada ao método virtual Fl_Widget::draw().

São fornecidas várias rotinas de desenho pelo FLTK:

• Pontos fl_point(x, y)• Linhas fl_line(x, y, x1, y1) • Polígonos fl_polygon(x, y, x1, y1, x2, y2)• Elipses fl_arc(x, y, w, h, a1, a2) • Textos fl_draw(text, x, y)• Caixas fl_draw_box(Fl_Boxtype,x,y,w,h,Fl_Color)• Imagens fl_draw_image(uchar *, X, Y, W, H, D, LD)• Overlays fl_overlay_rect(x, y, w, h)

Page 10: FLTK Summer Course - Part V - Fifth Impact

10 de 15

Drawing – Exemplo

UTILIZAÇÃO DAS PRIMITIVAS DE DESENHO DO FLTK - EXEMPLO

#include <FL/Fl.H>#include <FL/Fl_Window.H>#include <FL/fl_draw.H>class Drawing : public Fl_Widget{ void draw() { fl_color(FL_WHITE); fl_arc(140,140,70,0,-360); fl_end_line(); }public: Drawing(int X,int Y,int W,int H) : Fl_Widget(X,Y,W,H) {}};

int main(int argc, char** argv){ Fl_Window window(300,300); Drawing drawing(10,10,280,280); window.end(); window.show(argc,argv); return Fl::run();}

[Exemplo “Drawing” ]

Page 11: FLTK Summer Course - Part V - Fifth Impact

11 de 15

Composição

CONSTRUINDO WIDGETS POR COMPOSIÇÃO

Um widget construído por composição possui um ou mais widgets “filhos”. Para construir um widget por composição devemos “herdar” de Fl_Group.

class MyClass : public Fl_Group{ Fl_Button the_button; Fl_Slider the_slider; //...};

Exemplo de construção por composição :

MyClass::MyClass(int x, int y, int w, int h) : Fl_Group(x, y, w, h), the_button(x + 5, y + 5, 100, 20), the_slider(x, y + 50, w, 20){ //...(you could add dynamically created child widgets here)... end(); // don't forget to do this!}

Page 12: FLTK Summer Course - Part V - Fifth Impact

12 de 15CONSTRUINDO UMA SUBCLASSE DE FL_WINDOW

Subclasses de Fl_Window

Exemplo de criação de widget através de composição. Notem que usamos um Fl_Window, pois o mesmo herda de Fl_Group.

Page 13: FLTK Summer Course - Part V - Fifth Impact

13 de 15DÚVIDAS ?

Dúvidas ?

Page 14: FLTK Summer Course - Part V - Fifth Impact

14 de 15PENSAMENTO DO DIA !

Provérbio Japonês

“No centro de toda ação está oculta a tranquilidade ...”

Page 15: FLTK Summer Course - Part V - Fifth Impact

15 de 15FIM !!!


Top Related