GRUPO 3
Vânio Fragoso de Melo
José Antonio Luján Minchola
Mercedes Rocio Gonzales Marquez

Histórico


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.