• Nenhum resultado encontrado

Entrada de Dados e Interacção (Cap 3)

N/A
N/A
Protected

Academic year: 2021

Share "Entrada de Dados e Interacção (Cap 3)"

Copied!
12
0
0

Texto

(1)

1

Entrada de Dados e

Interacção (3)

Instituto Superior Técnico,

2006/2007

2

©2006, CG&M/IST e Figuras Addison Wesley

Sumário

Modelo de Entrada de Dados

Introdução ao Modelo de Acontecimentos Sistemas de Janelas

Acontecimentos associados a Janelas Encaminhamento de acontecimentos Comunicação entre widgets Entrada de Dados no OpenGL

3

©2006, CG&M/IST e Figuras Addison Wesley

Introdução

Antes das aplicações interactivas de

manipulação directa

Arquitecturas de interacção eram muito simples Programas sequenciais

Interpretadores linha de comandos (DOS, UNIX)

Programa controla e pede entradas

Utilizadores esperam pelo programa Utilizadores introduzem informação

4

©2006, CG&M/IST e Figuras Addison Wesley

Programas Sequenciais

Arquitectura

Loop (forever)

Programa lê linha de texto Programa analisa entrada Programa avalia o resultado Possivelmente gera saídas End (loop)

Problema: Como modelar múltiplas acções dos utilizadores?

Por exemplo editor gráfico?

5

©2006, CG&M/IST e Figuras Addison Wesley

Programas Sequenciais (cont.)

Geralmente conduz a muitos modos

muitas variáveis de estado

Exemplos de modos

Programas de pintura (linha, bucket-fill, rectângulo, etc) Modos de comando e edição do vi

Problemas com os modos ?

6

©2006, CG&M/IST e Figuras Addison Wesley

Programas Sequenciais (cont.)

Problemas com modos?

Demasiados modos confundem utilizadores Provocam erros (modo errado)

Como alternar entre modos?

Indicação clara sobre modo corrente

Precisamos de um modelo mais sofisticado para simplificar programação de Sistemas Interactivos

(2)

7

©2006, CG&M/IST e Figuras Addison Wesley

Modelo de Entrada de Dados

Unidades Lógicas de Entrada de Dados (Choice, Locator, etc.)

Modos de Entrada de Dados (a pedido (request), acontecimentos (event), etc.)

8

©2006, CG&M/IST e Figuras Addison Wesley

Unidades Lógicas

String (rato...)

Locator (teclado...)

Pick (teclado...)

Choice (widgets...)

Valuator (sliders...)

Stroke (Rubber banding)

9

©2006, CG&M/IST e Figuras Addison Wesley

Processos

Medida:

Qual a tecla premida? Gatilho (Trigger)

Quando a informação é disparada?

Para onde é enviada? Programa? Outro processo? Lista de acontecimentos?

10

©2006, CG&M/IST e Figuras Addison Wesley

Modo de Funcionamento

Request

11

©2006, CG&M/IST e Figuras Addison Wesley

Modo de Funcionamento

Sample

12

©2006, CG&M/IST e Figuras Addison Wesley

Modo de Funcionamento

(3)

13

©2006, CG&M/IST e Figuras Addison Wesley

Unidade Lógica de Selecção

(Picking)

Seleccionar um objecto que está desenhado

no ecrã

Como usando as antigas canetas ópticas?

Como usando um pipeline (só um sentido)?

Usar dois pipelines, um de saída e um de

entrada?

14

©2006, CG&M/IST e Figuras Addison Wesley

Soluções Possíveis

Identificar cada objecto e:

Definir uma pequena região de recorte -> hit list Usar caixas envolventes alinhadas com os eixos Usar um buffer adicional e associar uma cor diferente a cada objecto. Ler a quadrícula com as coordenadas fornecidas pelo rato...

15

©2006, CG&M/IST e Figuras Addison Wesley

Selecção em OpenGL

Suportados vários modos de “desenho”

GL_RENDER – valor por omissão

GL_FEEDBACK – lista de primitivas processadas mas não desenhadas

GL_SELECTION – cada primitiva dentro do volume de visualização gera uma entrada num stack de selecções (name stack)

16

©2006, CG&M/IST e Figuras Addison Wesley

Funcionamento

Usa-se o stack para introduzir os nomes

associados a um conjunto de primitivas

Dentro da função de retorno associada ao

rato, antes de desenhar introduz-se um nome

no stack:

glPushName (GLuint name)

Altera-se o Viewport

Recebe-se os nomes atribuídos aos objectos

e processa a informação

17

©2006, CG&M/IST e Figuras Addison Wesley

Modelo de Acontecimentos

Modelo desenvolvido para suportar criação de Interfaces de Manipulação directa

Programa espera pelo utilizador (controlo externo)

Interface Gráfica comunica:

Com outras aplicações Com o sistema de janelas

Entre os vários elementos que a constituem Com o código que implementa funcionalidade

18

©2006, CG&M/IST e Figuras Addison Wesley

Modelo de Acontecimentos

(cont)

Comunicação realizada via Acontecimentos Um acontecimento é qualquer coisa de interessante que ocorre no sistema

Botão do rato premido, Objecto arrastado, Teclado accionado, etc.

Acontecimentos têm:

Tipo de acontecimento

Posição do cursor ou tecla + modificador Janela à qual se destina o acontecimento

(4)

19

©2006, CG&M/IST e Figuras Addison Wesley

Modelo de Acontecimentos

Todos os acontecimentos gerados vão para

uma lista de acontecimentos

Fornecida pelo sistema operativo

Assegura que os acontecimentos são tratados pela ordem que acontecem

20

©2006, CG&M/IST e Figuras Addison Wesley

Acontecimentos de alto nível

Barra enrolamento Cx fechar Barra título Pasta Controlo tamanho 21

©2006, CG&M/IST e Figuras Addison Wesley

Questões Tratamento Acontecimentos

Divisão entre Aplicação e Sistema de Janelas Tipos de Acontecimentos que uma janela pode receber

Decomposição da IU em objectos de interacção (widgets / controlos)

Distribuição de acontecimentos pelos objectos de Interacção

Modelos de comunicação entre objectos

22

©2006, CG&M/IST e Figuras Addison Wesley

Sistemas de Janelas

Várias Aplicações simultâneas

Separação de funções para evitar o caos

Infra-estrutura para suportar serviços comuns Dois aspectos principais:

Serviços de software para aplicações Criar & organizar janelas

Realizar interacção nas janelas Gestor de janelas

Controla tamanho e colocação de janelas

23

©2006, CG&M/IST e Figuras Addison Wesley

Sistema de Janelas

Divide o ecrã em áreas independentes

Programador escreve código para essas áreas ou reutiliza (Widgets)

Áreas são compostos numa estrutura em árvore para fazer uma aplicação

Sistema de Janelas é responsável por gerir os acontecimentos

24

©2006, CG&M/IST e Figuras Addison Wesley

Árvore de Interactores

Decompor objectos interactivos em árvore

Objectos interactivos também designados por “widgets” Rectângulos aninhados

Utilizada para distribuir acontecimentos

Acontecimentos despachados (enviados) para rotinas nos widgets

Estas rotinas (event handlers) processam o acontecimento

Variedade de métodos de encaminhamento

(5)

25

©2006, CG&M/IST e Figuras Addison Wesley

Ex. Árvore de Interactores

Janela “D:\ ipm-slides0203”

Janela Interior Menu Bar

barra localização

barra desenr. vertical área de conteúdo pasta “antigas” pasta “cartoons” … controlo tamanho Status Bar … Ecrã 26

©2006, CG&M/IST e Figuras Addison Wesley

Ex. Árvore de Interactores

Ecrã

Janela Exterior [amarelo] Resultados [rosa]

Texto resultado Janela Interior [verde]

Teclado [verdeEscuro] Botão – Botão + Botão 0 Botão = 7 8 9 4 5 6 0 + -1 2 3 = 93.54 ENT 27

©2006, CG&M/IST e Figuras Addison Wesley

Widgets / Controlos

Objectos interactivos reutilizáveis Tratam determinados acontecimentos

Dizem em que acontecimentos estão interessados

A fila de acontecimentos envia-os para o widget correcto

Mudam de aparência

ex. Button up / Button down

Button RadioButton RadioButton TextArea ComboBox CheckBox ComboBox Button Button 28

©2006, CG&M/IST e Figuras Addison Wesley

Sistemas de janelas em rede

X-Window e NeWS, Network Windows System, concebidos para aplicações que podem correr remotamente

Usam modelo cliente-servidor

Servidor X Software std sistema Cliente Software aplicação Rede Utilizador 29

©2006, CG&M/IST e Figuras Addison Wesley

X-Window

Notem a inversão da terminologia

Utilizador está no “servidor” e não no “cliente”

Servidor X-Windows

Interpreta comandos X e envia acontecimentos Determina que janela recebe acontecimentos Envia através da rede para cliente correspondente

Cliente X

Software de interface X (Xlib)

Combina dados gerados pelas rotinas Xlib em pacotes para transmitir ao servidor

30

©2006, CG&M/IST e Figuras Addison Wesley

X-Window

Problemas de Interacção?

Largura de banda em bits por segundo

Latência de rede = tempo de transferir e processar dados Utilizador Latência (tempo) Larg. banda (bps) Servidor X Software std sistema Cliente Software aplicação Rede

(6)

31

©2006, CG&M/IST e Figuras Addison Wesley

Acontecimentos de Entrada

Botões de localizador (rato / caneta)

Premido / libertado (Down / Up)

modificadores (teclas “shift”, “control”, “Alt”, etc.) duplo click

X não tem este aplicações simulam

Acontecimentos de deslocamento

Permitem desenhar com rato/caneta Arrastar objectos com rato

Acontecimentos de entrada/saída

e.g., se entra / sai de uma região / botão

32

©2006, CG&M/IST e Figuras Addison Wesley

Acontecimentos (cont.)

Teclado

transforma códigos de tecla em ASCII/Latin 1 KeyDown, KeyUp

Acontecimentos específicos de janelas

criação / destruição iconificar / restaurar seleccionar / desseleccionar odificar tamanho redesenhar 33

©2006, CG&M/IST e Figuras Addison Wesley

Ciclo de Acontecimentos

Como são processados os acontecimentos? Event loop Inicialização While (continuar) { obtém acontecimento A Processa acontecimento A }

A substância do programa reside no código que processa os acontecimentos

34

©2006, CG&M/IST e Figuras Addison Wesley

Processar acontecimentos

Despacha (acontecimento A) {

switch (A.window) { ...

case TECLA- CINCO: if (A.type == left- down){

quant = 5 + 10*quant; display (quant); last- op = NUMBER; } ... 7 8 9 4 5 6 0 + -1 2 3 = 0 ENT Prime tecla ‘5’ 35

©2006, CG&M/IST e Figuras Addison Wesley

Processar acontecimentos

Despacha (acontecimento A) {

switch (A.window) { ...

case TECLA- DOIS:

if (A.type == left- down) { quant = 2 + 10*quant; display (quant); last- op = NUMBER; } ... 7 8 9 4 5 6 0 + -1 2 3 = 5 ENT Prime tecla ‘2’ 36

©2006, CG&M/IST e Figuras Addison Wesley

Processar acontecimentos

Despacha (acontecimento A) {

switch (A.window) { ...

case TECLA- MAIS : if (A.type == left- down){

push (quant); quant = 0; last- op = COM; } ... 7 8 9 4 5 6 0 + -1 2 3 = 52 ENT Prime tecla ‘+’

(7)

37

©2006, CG&M/IST e Figuras Addison Wesley

Processar acontecimentos

Despacha (acontecimento A) {

switch (A.window) { ...

case TECLA_SEIS:

if (A.type == left- down) { quant = 6 + 10*quant; display (quant); last- op = NUMBER; } ... 7 8 9 4 5 6 0 + -1 2 3 = 0 ENT Prime tecla ‘6’ 38

©2006, CG&M/IST e Figuras Addison Wesley

Processar acontecimentos

Despacha (acontecimento A) {

switch (A.window) { ...

case TECLA- ENTER: if (A.type == left- down){

if (last- op == NUMBER) push (quant); result = pop() + pop(); push (result); display (result); quant = 0; last- op = COM; } 7 8 9 4 5 6 0 + -1 2 3 = 6 ENT

Prime tecla ‘enter’

39

©2006, CG&M/IST e Figuras Addison Wesley

Processar acontecimentos

7 8 9 4 5 6 0 + -1 2 3 = 58 ENT 40

©2006, CG&M/IST e Figuras Addison Wesley

Filtragem de Acontecimentos

Podem usar máscaras para seleccionar acontecimentos desejados

ex., filtrar movimentos localizador num formulário

Só recebe acontecimentos de entrada e saída (nos campos)

onEnter/onExit (javascript)

JavaScript filtra automaticamente acontecimentos de arrasto

Ignora todos os outros acontecimentos, não desperdiçando recursos

41

©2006, CG&M/IST e Figuras Addison Wesley

Processamento de

Acontecimentos

Se utilizador desenrola texto o sistema DEVE:

Encaminhar acontecimentos do rato para barra de enrolamento

Actualizar representação barra durante o arrasto

Notificar a janela de texto que precisa de desenrolar-se para parecer que o texto se deslocou

42

©2006, CG&M/IST e Figuras Addison Wesley

Encaminhar Acontecimentos

Modelo baseado na árvore de interactores

Algoritmo selecciona região mais abaixo e mais à frente na árvore de interactores (que está “debaixo do acontecimento”)

Barra de desenrolamento ou conteúdo da janela e não a janela exterior

(mais baixo na hierarquia)

Barra de desenrolamento e não conteúdo (mais à frente) Cada janela processa apenas os seus acontecimentos Conhecido como bottom-first event dispatch

(8)

43

©2006, CG&M/IST e Figuras Addison Wesley

Encaminhar Acontecimentos

Alternativa de encaminhamento

Top-down event dispatch

Acontecimentos enviados para janela de topo, mais à frente

Esta encaminha-os para uma ou mais descendentes...

44

©2006, CG&M/IST e Figuras Addison Wesley

Comunicação entre Widgets

Como comunicam e interactuam os Widgets

entre si?

e.g., se a barra de enrolamento se desloca, o texto correspondente deve deslocar-se

45

©2006, CG&M/IST e Figuras Addison Wesley

Comunicação entre Widgets

Usando Pseudo-acontecimentos

Pseudo – não correspondem a entradas “reais”, mas sim geradas

Criam novos acontecimentos para comunicação entre widgets

Envia pseudo-acontecimento para widget apropriado

46

©2006, CG&M/IST e Figuras Addison Wesley

Comunicação entre Widgets

Acesso directo a “irmãos”

Indicar janela irmã como propriedade (Tk) Especificar irmã no código (subArctic, AWT)

Notificar pai

Cada widget tem identificador único

Notificam pai widget sobre alterações ocorridas Pai efectua a acção apropriada

47

©2006, CG&M/IST e Figuras Addison Wesley

Modelo de Acontecimentos

Baseado em Funções de Retorno

Ao fazer o dispach de cada tipo de

acontecimento, tem que o programar

explicitamente

Existência de um conjunto de case

Definição de Funções de tratamento de tipos

de acontecimento (funções de retorno

Mecanismo de Subscrição

48

©2006, CG&M/IST e Figuras Addison Wesley

Funcionamento do MainLoop

Ciclo infinito até ocorrer o acontecimento de

terminar operação.

Passos do ciclo:

Verifica se existe algum acontecimento na fila respectiva

Para cada acontecimento que é lido o GLUT executa a respectiva função de retorno, caso exista.

A função de retorno é executada e o controlo volta ao início do ciclo

(9)

49

©2006, CG&M/IST e Figuras Addison Wesley

Funções de Retorno

Assume que os tipos de acontecimentos

estão pré-definidos

Assume que existem alguns tipos de Widgets

Especializado para tipos específicos de

aplicações

Função específica para terminar a execução

da aplicação

50

©2006, CG&M/IST e Figuras Addison Wesley

Tipos de Acontecimentos em

OpenGL

Janela de ecrã: Redesenho,

Redimensionamento, etc.

Rato: pressionar num botão, libertar um

botão, mover o rato, etc.

Teclado: pressionar ou libertar uma tecla

Idle: O que deve ser efectuado quando não a

fila de acontecimentos está vazia

51

©2006, CG&M/IST e Figuras Addison Wesley

Funções de Retorno no GLUT

Define-se um comportamento a ser

executado para cada tipo de acontecimento,

(exp: acontecimento disparado pelo rato):

glutMouseFunc (mouse);

void mouse (int button, int state, int x, int y);

Quando o acontecimento ocorre a função (é

executada

52

©2006, CG&M/IST e Figuras Addison Wesley

Disparo efectuado pelo rato

Botão – Qual o botão que efectuou o disparo

Estado – Qual a situação do botão (se

premido ou libertado)

Posição em que se encontrava o rato, em

coordenadas da janela de ecrã ... (origem no

canto superior esquerdo)

53

©2006, CG&M/IST e Figuras Addison Wesley

Coordenadas

Inverter o valor da coordenada Y, isto é, o

valor correcto de y corresponde à altura da

janela diminuído do valor de Y recebido

Necessário conhecer a altura da janela do

ecrã, a qual pode ser alterada ao longo da

execução do programa

Sempre que é efectuado o redesenho do

conteúdo da janela é obtida a altura da janela

do ecrã

54

©2006, CG&M/IST e Figuras Addison Wesley

Saída do Ciclo de Execução

void mouse (int button, int state, int x, int y)

{

if (button == GLUT_LEFT_BUTTON &&

state == GLUT_DOWN)

exit (0);

}

(10)

55

©2006, CG&M/IST e Figuras Addison Wesley

A função de retorno de

Desenho

A função display é executada sempre

que o conteúdo de uma janela tem que

ser reparado, isto é, quando a janela do

ecrã:

é aberta, pela primeira vez

é exposta pelo facto de uma janela que a

ocultava ter deixado de o fazer

56

©2006, CG&M/IST e Figuras Addison Wesley

Funções de Retorno do GLUT

Tipos de Acontecimentos do GLUT suportados

pelos vários Sistemas Operativos (Windows,

X, Macintosh):

glutDisplayFunc OK glutMouseFunc OK glutIdleFunc OK glutKeyboardFunc OK… glutReshapeFunc glutMotionFunc glutPassiveMotionFunc 57

©2006, CG&M/IST e Figuras Addison Wesley

Funções de Motion

Pode obter-se as coordenadas Relativas do

rato, à medida que ele é movido.

Se um botão estiver premido é executada a

função de retorno:

glutMotionFunc

Se não estiver:

glutPassiveMotionFunc

58

©2006, CG&M/IST e Figuras Addison Wesley

Widgets em OpenGL

GLUT suporta popup menus podendo ser

criada uma hierarquia de menus (lembrar

exemplos de interactivos mostrado nas aulas

Aproximação muito simples:

Criação de um menu

Introdução de cada item de menu ou de um sub-menu

Definição da função de retorno Ligar a um botão do rato (popup)

59

©2006, CG&M/IST e Figuras Addison Wesley

Exemplo

glutCreateMenu (demo_menu); glutAddMenuEntry (“quit”, 1);

glutAddMenuEntry (“increase square size”, 2); glutAddMenuEntry (“decrease square size”, 3); glutAttachMenu (GLUT_RIGHT_BUTTON); void demo_menu (int id)

{ switch (id) {case 1: exit (0);

break; ...

60

©2006, CG&M/IST e Figuras Addison Wesley

Hierarquia de Menus

sub_menu = glutCreateMenu (size_menu); glutAddMenuEntry (“increase square size”, 2); ...

glutCreateMenu (top_menu); glutAddMenuEntry (“quit”, 1); ...

glutAddSubMenu (“Resize”, sub_menu), glutAttachMenu (GLUT_RIGHT_BUTTON);

(11)

61

©2006, CG&M/IST e Figuras Addison Wesley

Árvore de Janelas de ecrã

Podem criar-se várias janelas e sub-janelas

de ecrã:

Id = glutCreateWindow (“segunda janela”); ...

glutSetWindow (id);

Podem ter funções de retorno

específicas (janela de ecrã faz parte do

Estado do OpenGL...).

62

©2006, CG&M/IST e Figuras Addison Wesley

Resumo

Modelo de Entrada de Dados Modo de Funcionamento Sistemas de Gestão de Janelas

Malha principal de acontecimentos serve para Encaminhar (despachar) acontecimentos Árvores de interacção

Encaminhar acontecimentos Duas abordagens principais

+ Abaixo e + à frente / top-down

Comunicação entre Widgets Entrada de Dados no OpenGL

(12)

Referências

Documentos relacionados

dimensionais em curso, aqueles que trabalham para a LIBERTAÇÃO deste Mundo, não através de uma qualquer “vontade”, não através de uma qualquer Ilusão, não através de

No caso de formação de fumos metálicos ou poeiras oriundas do processo de fundição, solda ou corte, pode causar os seguintes efeitos: irritação aos olhos com

Apesar de o mercado acionário brasileiro ter se tornado mais importante para a economia brasileira, sobretudo entre o período de 2002 para 2005 (Tabela 3), sua repre- sentatividade

No caso de uma apresentação de Artigo em formato Áudio, o arquivo deverá ser enviado em CD por correio postal para:.. Comitê Editorial INFEIES - RM

Essa publicação (Figura 6) destaca a “grande ameaça” que está por trás do pânico moral: a destruição da família nuclear (pai, mãe e filhos).Em seguida o pastor

(2011) em estudo que avaliou a qualidade da dieta em indivíduos exposto e não exposto a um programa de reeducação alimentar mostrou que pessoas com

Doentes UMDR Serviço de psicologia 26 julho 11h - Promover competências comunicacionais - Promover competências de relacionamento interpessoal - Promover, no

1 (uma) parcela R$ 120,00 Auxílio Moradia Destinado, exclusivamente, aos estudantes de cursos presenciais em situação de vulnerabilidade social, com matrícula e