fltk summer course - part v - fifth impact

Download FLTK Summer Course - Part V - Fifth Impact

Post on 12-Jun-2015

369 views

Category:

Education

2 download

Embed Size (px)

DESCRIPTION

FLTK (pronounced "fulltick") is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL and its built-in GLUT emulation. FLTK is designed to be small and modular enough to be statically linked, but works fine as a shared library. FLTK also includes an excellent UI builder called FLUID that can be used to create applications in minutes. FLTK is provided under the terms of the GNU Library Public License, Version 2 with exceptions that allow for static linking. More informations in http://www.fltk.org.

TRANSCRIPT

  • 1. 1 de 15INTRODUO AO FAST LIGHT TOOLKIT - FLTK The Fast Light ToolKit Curso de Vero Instituto de Computao & CA Computao Michel Alves dos Santos - UFAL Bolsista do Centro de Pesquisa em Matemtica Computacional 5 Impacto

2. 2 de 15ADICIONANDO E EXTENDENDO WIDGETS Compondo e Extendendo Widgets [Exemplo de hierarquia de classes do pacote FLTK] 3. 3 de 15 Novos widgets so criados atravs de herana 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 4. 4 de 15 Widget Methods MTODOS COMUNS A MAIORIA DOS WIDGETS DO FLTK Cada classe de widget dentro do FLTK prov um conjunto de mtodos 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) 5. 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 mtodos virtuais que podem ser sobrepostos se necessrio [draw, handle, resize e ~Fl_Widget]. MyClass(int x, int y, int w, int h, const char *label = 0); Construtor padro : 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 : 6. 6 de 15MTODOS PROTEGIDOS DE FL_WIDGET Mtodos Protegidos So providos os seguintes mtodos 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 7. 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 mtodo virtual int Fl_Widget::handle(int event) chamado para manipular cada evento passado a um widget. Como consequncia disso ele pode : Eventos so identificados por argumentos inteiros [FL_PUSH, FL_RELEASE, FL_MOVE, FL_FOCUS, FL_LEAVE] e tipos de evento e contedo so avaliados via mtodos Fl::event_*(). 8. 8 de 15 Exemplo de Manipulao de Eventos MANIPULANDO EVENTOS - EXEMPLO Este um simples exemplo de manipulao de eventos atravs do mtodo virtual int Fl_Widget::handle(int event). Podemos notar que os nicos eventos tratados so : PUSH, RELEASE e SHORTCUT. Os demais eventos so redirecionados ao mtodo manipulador original. Nesse exemplo quando a tecla x pressionada o callback padro associado ao widget executado. 9. 9 de 15 Drawing Desenhando Widgets UTILIZAO DAS PRIMITIVAS DE DESENHO DO FLTK O desenho em widgets no FLTK ativado/executado atravs da chamada ao mtodo virtual Fl_Widget::draw(). So fornecidas vrias rotinas de desenho pelo FLTK: Pontos fl_point(x, y) Linhas fl_line(x, y, x1, y1) Polgonos 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) 10. 10 de 15 Drawing Exemplo UTILIZAO DAS PRIMITIVAS DE DESENHO DO FLTK - EXEMPLO #include #include #include 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 ] 11. 11 de 15 Composio CONSTRUINDO WIDGETS POR COMPOSIO Um widget construdo por composio possui um ou mais widgets filhos. Para construir um widget por composio devemos herdar de Fl_Group. class MyClass : public Fl_Group { Fl_Button the_button; Fl_Slider the_slider; //... }; Exemplo de construo por composio : 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! } 12. 12 de 15CONSTRUINDO UMA SUBCLASSE DE FL_WINDOW Subclasses de Fl_Window Exemplo de criao de widget atravs de composio. Notem que usamos um Fl_Window, pois o mesmo herda de Fl_Group. 13. 13 de 15DVIDAS ? Dvidas ? 14. 14 de 15PENSAMENTO DO DIA ! Provrbio Japons No centro de toda ao est oculta a tranquilidade ... 15. 15 de 15FIM !!!