O que seria uma interface gráfica sem eles? Neste tutorial ensinarei a colocar ícones na janela (tanto o pequeno quanto o grande). Claro que ícones no FOX não servem apenas para isso, mas como eu só falei da janela principal, é lá que vamos colocá-los.
Um breve histórico
Acrescentar um ícone na interface FOX era bem trabalhoso. Primeiro, era preciso converter a imagem em um vetor (sim, um vetor estilo C) de pixels utilizando um programa chamado reswrap, distribuído junto com o FOX Toolkit. Sua sintaxe era:
reswrap [ options ] [ -o[a] arquivo_de_saida ] arquivos ...
Opções:
Um breve histórico
Acrescentar um ícone na interface FOX era bem trabalhoso. Primeiro, era preciso converter a imagem em um vetor (sim, um vetor estilo C) de pixels utilizando um programa chamado reswrap, distribuído junto com o FOX Toolkit. Sua sintaxe era:
reswrap [ options ] [ -o[a] arquivo_de_saida ] arquivos ...
Opções:
- -o – Cria ou sobrescreve arquivo_de_saida
- -oa – Acrescenta ao arquivo_de_saida
- -e – Gera declaração de referência externa
- -i – Gera um arquivo de cabeçalho
Assim, criavam-se dois arquivos, um icons.h com a declaração dos vetores, e um icons.cpp com o conteúdo deles. Era uma coisa monstruosa.
Todo este trabalho foi aliviado com a chegada de uma classe mágica: FXIconSource. Mas vamos ao código. Vou exibir aqui apenas as modificações relativas ao tutorial anterior.
FoxTutorialMainWindow.h
21 private:
22 void loadIcons();
23
24 void destroyIcons();
25
26 protected:
27 FXIcon *windowIcon;
28 FXIcon *windowMiniIcon;
Discussão
22/24: Métodos para carregar/destruir os ícones. Apenas por motivos de organização, deixando a tarefa centralizada.
27/28: Os dois ícones da janela.
O restante do arquivo permanece igual.
FoxTutorialMainWindow.cpp
18 FoxTutorialMainWindow::FoxTutorialMainWindow(FXApp *a)
19 : FXMainWindow(a, "Tutorial FOX", NULL, NULL, DECOR_ALL, 0, 0, 200, 200) {
20 loadIcons();
21
22 setIcon(windowIcon);
23 setMiniIcon(windowMiniIcon);
24 }
...
32 FoxTutorialMainWindow::~FoxTutorialMainWindow() {
33 destroyIcons();
34 }
35
36 /******************************************************************************/
37
38 void FoxTutorialMainWindow::loadIcons() {
39 FXIconSource iconSource(getApp());
40
41 windowIcon = iconSource.loadIconFile("icons/folders.gif");
42 windowMiniIcon = iconSource.loadScaledIconFile("icons/folders.gif", 16);
43 }
44
45 void FoxTutorialMainWindow::destroyIcons() {
46 delete windowIcon;
47 delete windowMiniIcon;
48 }
Discussão
20: Carrega os ícones. Descrição do método mais adiante.
22/23: Configura os ícones para a janela.
33: Ícones podem ser compartilhados (utilizados por mais de um widget por vez), portanto devem ser destruídos manualmente.
38-43: Nosso método para carregar os ícones.
39: Cria um objeto da classe FXIconSource. Apesar do nome, serve também para carregar imagens. Mas vamos com calma.
Cada ícone deve saber quem é sua aplicação, portanto o IconSource já deve vir com essa informação. Serve para que eles sejam criados junto com a aplicação.
41: Carrega um ícone do arquivo, retornando um ponteiro para o ícone.
42: Idem, mas além de carregar, escala o ícone para que nenhuma de suas dimensões exceda o valor estabelecido (no caso, 16 pixels).
45-48: Nosso destrutor.
Conforme dito acima, precisamos destruir manualmente nossos ícones. delete é o suficiente para isso.
Resultado
Considerações finais
Por que GIF?
Apenas dois motivos: é suportado nativamente pelo FOX Toolkit e suporta transparência. Mas nada impede de usar outros formatos.
Créditos
- Destaque de sintaxe provido por Code2HTML, v. 0.9.1
- On Stage Icon Set
Nenhum comentário:
Postar um comentário