Após a fase da
documentação de nosso editor gráfico, partimos para
implementação do mesmo. Decidimos usar a biblioteca do GTK
para tal propósito. Criamos a janela principal, os menus, botões,
área de desenho e conectamos os sinais para eventos.
Figura 1: Mostra o projeto visual atual do editor gráfico 2D.
Feito isso, fizemos a criação das primitivas usando o próprio GTK. Nos deparamos com o primeiro problema: Quando fomos fazer as funcionalidades de edição (deletar, transladar, redimensionar, ... ), necessitamos da tarefa de seleção, a qual não foi possível realizar com GTK. Migramos para OpenGL, no qual usamos a seu mecanismo de seleção fornecido pela rotina Pick (usamos região 4x4). Tivemos que refazer a criação das primitivas usando funções de OpenGL. Criamos uma lista de prioridades para armazenar os objetos criados (nome, tipo e pontos de controle). Tal lista é usada nas operações sobre arquivos (salvar, abrir e novo). Para comunicação entre GTK e OpenGL usa-se as funções do tipo:
gtk_gl_ ...
Figura 2: Criação de objetos.
Um detalhe a ser comentado:
o sistema de referências do OpenGL tem a origem no canto esquerdo
inferior, com o eixo y na vertical apontando para cima. E o GTK tem a origem
no esquerdo superior com eixo y apontando para baixo. Realizamos as funções
de edição sem problema nenhum. As alterações
no objeto selecionado são realizadas nos pontos de controle na lista
. Vale comentar que a rotação do retângulo, neste momento
tivemos de abandonar o uso de apenas dois pontos de controle, passando
para quatro, devido a construção do mesmo, no primeiro caso,
usar os lados paralelos aos eixos. Uma forma diferente poderia ser feita
usando dois pontos de controle e um ângulo de uma das diagonais com
um dos lados.
Figura 3: Mostra os diferentes
estilos de desenho, objeto rotacionado e um objeto selecionado para redimensionamento.
Aspectos Positivos e Negativos
Para um primeiro trabalho de desenvolvimento
de um editor gráfico 2D, consideramos satisfatório o desempenho
alcançado. Nós conseguimos cumprir com as especificações
planejadas no início (exceto imprimir), acrescentando a funcionalidade
de rotação durante o desenvolvimento. É um editor
simples que pode ser aprimorado, acrescentando diversas fontes de cores
e larguras de linhas. Também a opção de preenchimento
de área.
Conclusão das Especificações
Como dito acima não foi implementada a tarefa de impressão, porém foi acrescentada a tarefa de rotação.
1.-Ler o capítulo 10 da referência 3 e o capítulo
4 da referência 1 e responda:
a) Qual é a diferença e a semelhança entre
um sistema de gerenciamento de janelas e sistema operacional?
O sistema de gerenciamento de janelas e o sistema operacional se assemelham
no tocante a gerenciar recursos, porém, diferem nos recursos
que os mesmos gerenciam. O sistema de gerenciamento de janelas aloca os
recursos de área de tela para vários programas que precisam
usar a tela, e então dá uma assistência de gerenciamento
dessas áreas da tela tal que os programas não interfere nos
outros.
Também aloca os recursos de dispositivos de interação
para programas que requerem entrada do usuário, e então
encaminha o fluxo de informação dos dispositivos para a fila
de eventos do programa para o qual a entrada é destinada.
O sistema operacional aloca memória e executa os processamentos
, esses são os recursos que ele gerencia. Como o sistema de gerenciamento
de janela está sobre o topo do sistema operacional, então
o mesmo utiliza as capacidades do sistema operacional.
b) O que você entende por um sistema de janelas de arquitetura
cliente/servidor? Quais sâo as três principais variantes?
Sabemos que o sistema de gerenciamento de janela está dividido
em duas partes importantes:
-Gerenciamento de janela;
-Sistema de janela.
No modelo de arquitetura cliente/servidor, os aplicativos e o gerenciador de janela são vistos, pelo sistema de janela, como programas clientes, sendo o mesmo o servidor. Com isto, não é necessário que o usuário e os programas clientes estejam na mesma máquina do servidor (sistema de janela), criando assim uma rede de trabalho. Também podemos ter mais de um gerenciador de janela sobre o mesmo sistema de janela.
Variantes:
- Interpreta comandos da rede e envia eventos interativos sobre a mesma.
(Por exemplo: X windows).
- Envio de comando (código) que realiza a exibição
completa. (Por exemplo: News).
- Gera, empacota e envia o objeto. ( Por exemplo: Java).
c) O que são eventos/mensagens em um sistema de janela?
Eventos são os veículos de comunicação
primária num programa interativo. Quando um usuário interage
com um dispositvo de entrada, estas ações são transformadas
em eventos de software, que são transformadas em eventos de software,
que são logo distribuidos para a fila da janela apropriada. Em alguns
sistemas tais eventos são chamados de mensagens.
d) O que você entende por despacho (despatching) e processamento
(hanrdling) de eventos?
Despacho de eventos é o encaminhamento do evento, isto é,
a distribução do mesmo para a fila de eventos associados
a respectiva janela. Para identificar a janela associada ao evento, é
usado a hierarquia de árvore. O algoritmo usado em geral é
selecionar a janela de mais alto nível na hierarquia da árvore.
O processamento de evento é a execução ou realização
do mesmo, utilizando para isso uma rotina desenvolvida na aplicação
do sistema de janela. Essas rotinas são chamadas de Callback. Em
geral esse processamento é feito de maneira assíncrona.
e) Cite três sistemas de janelas.
X Window System, News e MS Windows.
2.-Resolver os exercicios 10.1, 10.3, 10.10 do livro do Foley.
10.1)Estude as interfaces usuário para dois sistemas de janelas
diferentes. Classifique cada uma com respeito as questões de projeto
discutido na seção 9.3.
A seção 9.3 analiza as seguintes características:
(a)Ser consistente.
(b)Fornece Feedback.
(c)Minimiza possibilidades de erros.
(d)Fornece recuperação de erro.
(e)Acomoda múltiplos níveis de habilidades.
(f)Minimiza a memorização.
Gerenciadores de janelas:
OpenWindow- Oferece dois tipos de interface usuário com diálogo
linha (ex.
Cmdtool, shelltool e xterm) e menu/ícone (ex. File manager,
waste,etc.).
(a) Possui consistência. Um exemplo disso é quando deletamos um arquivo, a interface permite recuperar arquivo por arraste deste da lixeira (waste) ao diretório desejado.
(b) Fornece algumas formas de feedback, como:
-A nível de hardware, emite sons em operações
não corretas.
-A nível sequencial, quando selecionado o objeto ou menu ou
ícone os mesmo são destacados.
-A nível funcional, para indicar que um processo está
rodando, aparece no cursor um relógio. Também aparece textos
na borda inferior indicando algumas modificações.
(c) Minimiza as possibilidades de erro: Desabilita comandos que não podem ser usados, para evitar o erro.
(d) Fornece recuperação de erro, por exemplo, recuperar um arquivo deletado por engano é possível arrastando o arquivo da janela waste ao diretório onde originalmente pertencia.
(e) A interface acomoda múltiplos níveis de habilidades, por exemplo: linhas de comando, menu e ícones.
(f) Minimiza a memorização, por exemplo: a janela do filemanager oferece muitas operações apresentadas no menu ou em ícone. Também nas janelas de comandos estam disponível um help que auxilia com respeito ao que determinado comando faz, os parâmetros que este usa, etc.
CDEC (Commom Destop Environment)
(a) Consistência: apresenta a mesma consistência que no gerenciador anterior.
(b) feedback:
- A nível de Hardware, emite mensagem textual e som quando uma
operação é ilegal.
- A nível sequencial, quando selecionado o objeto ou menu ou
ícone os mesmos são destacados.
- A nível funcional, para indicar que um processo está
rodando, aparece um relógio (ampulheta) e pode também, em
alguns casos aparecer um indicador luminoso.
(c) Minimiza as possibilidades de erro: Desabilita comandos que não
podem ser usados, para evitar o erro.
(d) Tem recuperação de erro no mesmo caso do gerenciador
anterior.
(e) Acomoda múltiplos níveis de habilidades, idêntico
ao gerenciador anterior.
(f) Minimiza a memorização, oferecendo uma variedade
maior de comandos do que o openwindows, operados através de ícones
e menus. Por linhas de comandos é idêntico ao gerenciador
anterior.
10.3-Estude três sistemas de gerenciamento de janelas para
determinar quando estas:
(a) Têm hierarquia de janela
(b) Implementam um modelo cliente/servidor e, isto for possível,
quando a implentação permite ao servidor e cliente ser distribuidos
na rede.
(c) Fornecem despacho de eventos de entrada de estado-real ou ouvinte,
ou alguma combinação destas.
(d) Integra o pacote de subrotina gráficas com o sistema de
gerenciamento de janela.
Respostas: Os sistemas de gerenciamento escolhidos são:
X windows, Ms Windows 95/98, Windows NT.
(a) Os três têm hierarquia de janela e usam a hierarquia
de árvore.
(b) O sistema X windows e windows NT , implementam o modelo cliente/servidor
e permitem ao servidor e cliente serem distribuídos numa rede. O
sistema Ms Windows 95/98 não implementa o modelo cliente/servidor.
(c) O X windows com o gerenciador de janela openwindows é um
sistema de gerenciamento de janela de despacho de evento de entrada de
estado-real. O X windows com o gerenciador de janela Motif é um
sistema de gerenciamento de janela de despacho de evento de entrada ouvinte.
(d) O X possui uma série de mecanismos para geração
de formas geométricas simples, por exemplo:
- Pontos são desenhados usando a função xDrawPoint(display,d,gc,x,y);
- Vários pontos podem ser criados de uma só vez com a
função xDrawPoints(display,d,gc,points,npointes,mode);
- Linhas são desenhadas com a função xDrawLine(display,d,gc,x1,y1,x2,y2);
- Várias linhas podem ser desenhadas de uma só vez com
a função xDrawLines(display,d,pc,points,npoints,mode).
- Arcos (círculos e elipses), um ou vários de uma só
vez, são desenhados com as
funções xDrawArc(display,d,gc,x,y,width,height,angle1,angle2)
e xDrawArcs(display,d,gc,arcs,narcs), respectivamente;
- Retângulos são desenhados um ou vários de uma
só vez, com as funções
xDrawRectangle(display,d,gc,x,y,width,height) e xDrawRectangles(display,d,gc,retangles,n
rectangle) respectivamente;
- Polígonos são desenhados, com xDrawlines.
- As funções xFillArc, xFillArcs, xFillPolygon, xFillRectangle
e
xFillRectangles permitem desenhar as mesmas formas geométricas
mencionadas anteriormente, mas preenchidas com uma cor ou padrão
de pontos.
O Windows NT e Windows 95/98 também possui mecanismos para a geração de formas geométricas simples.
10.10-Estude cuidadosamente um sistema de gerenciamento de janela
que inclui um sistema de janela de política-livre. Examine vários
gerenciadores de janela para determinar se eles podem ser implementados
com o sistema de janela. Por exemplo, alguns sistemas de janelas fornece
bordas em torno da janela para barra de rolamento, um cabeçalho
(título) e talvez botões de seleção. Para o
sistema de janela ser completamente de política livre, você
deve ser capaz de especificar separadamente a largura das bordas sobre
os 4 lados da janela.
O sistema de gerenciamento de janela X Windows é um sistema
de política livre, cujo sistema de janela suporta os gerenciadores
de janela OpenWindows, Motif, FVWM e CDEC (commom Destop Environment).
Analisamos os gerenciadores de janela FVWM e o OpenWindows
e verificamos que os mesmos permitem fazer modificações nas
configurações das janelas.