03 srgp - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 srgp - ulaz.pdf2 srgp -...

29
Računarska grafika SRGP - ulaz

Upload: others

Post on 04-Jan-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

Računarska grafika

SRGP - ulaz

Page 2: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz2

Obrada osnovnih interakcija

� Tema: kako pisati interaktivne programe koji komuniciraju sa korisnikom preko miša i tastature

– generalna uputstva za pisanje interaktivnih programa– osnovni pojam logičkih (apstraktnih) ulaznih uređaja– režimi obrade podataka koji potiču od ulaznih uređaja– funkcije SRGP koji se bave obradom interakcija

� Ljudski faktori - važni koliko i funkcionalna kompletnost i korektnost:– stil interakcije (izgled i osećaj, look and feel)– lakoća učenja i korišćenja - intuitivnost

� Uputstva:– obezbediti jednostavne i konzistentne sekvence interakcije– ne preopteretiti korisnika sa previše opcija i stilova– pokazati jasno raspoložive opcije u svakom stanju interakcije– obezbediti odgovarajuću povratnu spregu prema korisniku– omogućiti korisniku elegantan oporavak od grešaka

Page 3: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz3

Realizacija u putstava

� Jednostavnost i konzistentnost– mora se napraviti kompromis između funkcionalnosti i jednostavnosti

� ponekad je bolje žrtvovati neku mogućnost, nego previše iskomplikovati program– do svake funkcionalnosti se mora stizati u par koraka– konzistentnost sekvenci akcija doprinosi intuitivnom korišćenju programa

� Mera u broju opcija i stilova– često korišćene opcije moraju biti mnogo pristupačnije od retko korišćenih– važno je dobro odabrati podrazumevane opcije i stilove

� Prikaz raspoloživih opcija – o(ne)mogućeno stanje dugmadi i stavki menija

� Povratna sprega se obezbeđuje kroz – isticanje izabrane opcije iz menija

(posebo bojenje, uokvirivanje ili neki drugi poseban efekat)– eho manipulacije ulaznim uređajem

(eho unesenog znaka, kurzor koji prati pokret miša) � Oporavak od greške kroz cancel i undo/redo mogućnosti

Page 4: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz4

Tipovi ulaznih ure đaja

� Glavni cilj u projektovanju grafičkih paketa je nezavisnost od uređaja– za grafički izlaz

� SRGP specificira primitive u terminima apstraktnog koordinatnog sistema� tako oslobađa aplikaciju potrebe da postavlja individualne piksele u video memoriji

– za grafički ulaz � SRGP podržava skup logičkih uređaja� tako oslobađa aplikaciju bavljenja detaljima fizičkih ulaznih uređaja

� Logički uređaji koje podržava SRGP su:– Lokator – uređaj za definisanje

� koordinata pokazane tačke na ekranu� stanja jednog ili više pridruženih tastera

– Tastatura – uređaj za definisanje ulaza znakovnih niski

� SRGP mapira logičke u raspoložive fizičke uređaje – npr. lokator --> miš, džojstik, grafički tablet, ...

� Analogno mapiranje u OS: – fizički uređaji (monitor, disk, ...) se apstrahuju logičkim datotekama

Page 5: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz5

Ulazni u ređaji u drugim paketima

� SRGP podržava samo po jedan lokator i jednu tastaturu, dok GKS i PHIGS dozvoljavaju više

� GKS i PHIGS podržavaju i druge tipove uređaja:– Uređaji poteza (stroke)

� vraćaju poliliniju definisanu pozicijama kurzora unetih lokatorom– Uređaji izbora (choice)

� apstrahuju funkcionalnu tastaturu i vraćaju ključni identifikator– Valuatori (valuator)

� apstrahuju klizače i kontrolnu obrtnu dugmad i vraćaju realan broj– Selektori (pick)

� apstrahuju ukazivačke uređaje sa tasterom za selekciju (npr. miš) i vraćaju identifikaciju selektovanog logičkog entiteta

� Drugi paketi (npr. QuickDraw ili Xlib) ostavljaju aplikaciji znatno veću zavisnost od uređaja

Page 6: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz6

Uzorkovanje ili obrada prekida

� Postoji više osnovnih tehnika za prijem podataka sa ulaznih uređaja� Uzorkovanje (sampling, polling)

– program pita za tekuću vrednost uređaja (meru) i nastavlja– komunikacija je sinhrona sa glavnim programom– vrši se bez obzira da li se vrednost uređaja promenila od poslednjeg čitanja– skupo je – troši se vreme u petlji uposlenog čeknja na promenu stanja uređaja

� Obrada prekida (interrupt handling) – programer obezbeđuje prekidnu proceduru za obradu događaja– komunikacija se izvršava asinhrono u odnosu na glavni program– aplikacija omogući uređaje za ulaz i nastavi normalnu obradu sve do prekida– pri prekidu se kontrola privremeno prenosi na prekidnu proceduru– mehanizam je suviše niskog nivoa apstrakcije za programiranje interakcije

� Obrada događaja (event handling)– viši nivo apstrakcije koji u pozadini ima obradu prekida– jednostavan model za programiranje interakcije korisnika sa računarom

Page 7: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz7

Režim obrade doga đaja

� Grafički sistemi ne nude direktnu kontrolu nad obradom prekida, već viši nivo apstrakcije – obradu događaja:

– paket u pozadini nadgleda uređaje i smešta informacije u red događaja(što može biti realizovano kroz tehniku prekida)

– aplikacija proverava red događaja i obrađuje ih po redosledu događanja� kada postoji događaj u redu,

aplikacija može da ga preuzme i događaj se tada izbacuje iz reda� ako događaja nema u redu,

aplikacija može da specificira da li i koliko želi da čeka na događaj � čekanje blokira aplikaciju, ne troši se uzaludno procesorsko vreme

� Režim obrade događaja zamenjuje uzorkovanje mnogo efikasnijom tehnikom čekanja na događaje u blokiranom stanju

� Za svaki ulazni uređaj i režim rada – zna se korisnička akcija koja je okidački događaj (kada se događaj smešta u red)– na primer: pritisak proizvoljnog ili samo [Enter] tastera za uređaj tastature

Page 8: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz8

Model obrade doga đaja

� Program koji obrađuje događaje koristeći SRGP:inicijalizuj, uklju čuju ći generisanje po četne slike;aktiviraj interaktivne ure đaje u režimu doga đaja;while (korisnik nije zatražio kraj){ /* glavna petl ja */

čekaj na doga đaj koji okida korisnik na ulaznom ure đaju; switch (ure đaj koji je prouzrokovao doga đaj) {

case DEVICE_1: prikupi vrednosti sa DEVICE_1, obradi ih i odgovori; break;

case DEVICE_2: prikupi vrednosti sa DEVICE_2, obradi ih i odgovori; break;

...}

}

� Korak dalje – objektni model delegirane obrade događaja (java.awt)– programer ne brine o petlji čekanja na događaje– programer samo piše metode za obradu događaja u klasama osluškivača

Page 9: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz9

Prednosti i mane obrad e događaja

� Na višeprocesnim platformama prednost režima obrade događaja je velika– osim u kratkim intervalima nakon korisnikove intervencije

program čeka i ne troši CPU cikluse

� "Kucanje unapred" koje se često primenjuje kod standardnih U/I jedinica,ovde nije poželjno

– efekti su teško predvidivi ukoliko se ne dozvoli aplikaciji da restaurira prikaz iz modela pre sledeće akcije korisnika

Page 10: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz10

SRGP - režim uzorkovanja

� Procedura za aktiviranje ili deaktiviranje uređajatypedef enum {NO_DEVICE, LOCATOR, KEYBOARD} InputDe vice;

typedef enum {INACTIVE, SAMPLE, EVENT} InputMode;

void SRGP_setInputMode( InputDevice inputDevice,

InputMode inputMode);

� Postavljanje lokatora u režim uzorkovanja:SRGP_setInputMode(LOCATOR, SAMPLE);

� Oba uređaja su na početku u režimu INACTIVE

� Tastatura se skoro uvek koristi u režimu događaja, iako i ona može da radi u režimu uzorkovanja

Page 11: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz11

Mera lokatora

� Lokator je apstrakcija miša ili drugog pokazivačkog uređaja koja vraća:– poziciju kurzora kao par koordinata na ekranu (x,y) – position– id tastera koji je poslednji menjao stanje – buttonOfMostRecentTransition

(na osnovu ove informacije aplikacija zna koji taster je prouzrokovao događaj)– vektor stanja tastera (više tastera može biti simultano pritisnuto) – buttonChord

typedef struct{point position;int buttonOfMostRecentTransition;enum {UP,DOWN}buttonChord[MAX_BUTTON_COUNT]; /*typ.1 -3*/

} locatorMeasure;

� Ako je lokator postavljen u režim uzorkovanja, može se očitavati pomoću:SRGP_sampleLocator(locatorMeasure *measure);

Page 12: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz12

Primer uzorkovanja (1)

� Prototipska aplikacija sa uzorkovanjem– crtanje traga pravougaone “četkice” dok se drži pritisnuto dugme lokatora

� Dve petlje– u prvoj se samo uzorkuje lokator

� dok se ne pritisne taster– u drugoj se crta popunjeni pravougaonik na tekućoj poziciji lokatora

� dok se pritisnuti taster ne otpusti

� Nedostatak:– gustina crtanih pravougaonika zavisi od brzine pomeranja lokatora

Page 13: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz13

Primer uzorkovanja (2)

SRGP_setInputMode(LOCATOR,SAMPLE);/* uzorkovanje dok se taster ne pritisne */do {

SRGP_sampleLocator(&locMeasure);} while (locMeasure.buttonChord[0]==UP);/* petlja crtanja */do {

rect = SRGP_defRectangle(locMeasure.position.x – halfBrushWidth,locMeasure.position.y – halfBrushHeight,locMeasure.position.x + halfBrushWidth,locMeasure.position.y + halfBrushHeight);

SRGP_fillRectangle(rect);SRGP_sampleLocator(&locMeasure);

} while (locMeasure.buttonChord[0]==DOWN);

Page 14: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz14

SRGP - režim obrade doga đaja

� Prethodni primer režima uzorkovanja pokazuje da se CPU vreme neracionalno troši

� Problem u višeprocesnim sistemima

� Druga petlja je bila potrebna – da bi se znala aktuelna pozicija kurzora na kojoj se crta pravougaonik

� Prva petlja nije potrebna – u njoj se samo čeka na događaj kojim započinje crtanje

� Režim obrade događaja se može koristiti kada se čeka na događaj– barem u prvoj petlji, mada može i u drugoj

Page 15: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz15

Čekanje na doga đaj

� U svakom trenutku nakon aktiviranja uređaja u režimu događaja program može da ispita red događaja ulazeći u stanje čekanja:

InputDevice SRGP_waitEvent(int maxWaitTime);� Kontrola se vraća odmah ako red nije prazan,

inače se čeka maxWaitTime (u jedinicama )� Negativna vrednost maxWaitTime (konstanta INDEFINITE )

predstavlja beskonačno čekanje� Nula označava trenutni povratak bez obzira da li je red prazan � Funkcija vraća

– identitet uređaja koji je prouzrokovao događaj na početku reda– vrednost NO_DEVICEako je isteklo vreme čekanja, a red ostao prazan

� Nakon detekcije uređaja koji je uzrokovao događaj, potrebno je odrediti njegov tip

Page 16: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz16

Uređaj tastature

� Okidački događaj zavisi od režima obrade u kojem se nalazi uređaj tastature

� Režim EDIT:– koristi se kada aplikacija treba da dobija znakovne niske– korisnik unosi i edituje niske (koristeći Backspace),

a tek Return (Enter) taster izaziva događaj– svi kontrolni tasteri, izuzev Backspace i Return, se ignorišu– postoji eho, a pozicija kurzora ukazuje na mesto sledećeg karaktera– Backspace pomera kurzor jednu poziciju unazad i briše karakter

� Režim RAW:– koristi se kada aplikacija dobija pojedinačne znakove– svaki pritisak na taster generiše događaj– nema razlike između kontrolnih i drugih znakova - svi se isporučuju aplikaciji– nema eha

Page 17: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz17

Upravljanje režimom tastature

� Funkcija za postavljanje režima tastature:typedef enum {EDIT, RAW} KeyboardMode;void SRGP_setKeyboardProcessingMode(

KeyboardMode keyboardMode);� Kada SRGP_waitEvent vrati rezultat KEYBOARD,

aplikacija dobija meru pozivom:void SRGP_getKeyboard(char *measure,

int measureSize);� U režimu EDIT, mera je znakovna niska� U režimu RAW, mera je tačno jedan znak

Page 18: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz18

Primer rada u EDIT režimu

� Brisanje niza fajlova čija se imena unose preko tastature– posle unetog imena fajla potrebno je pritisnuti EnterSRGP_setInputMode(KEYBOARD,EVENT);SRGP_setKeyboardProcessingMode(EDIT);pt = SRGP_defPoint(100,100);SRGP_text(pt, "Navedite jedan ili vise fajlova (jed an

po redu) za brisanje; prazan red za izlazak");/* glavna petlja za dogadjaje */do {

device=SRGP_waitEvent(INDEFINITE);SRGP_getKeyboard(measure, measureSize);if (*measure != NULL) DeleteFile(measure);

} while (*measure != NULL);

Page 19: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz19

Lokatorski ure đaj

� Događaj sa lokatora je pritiskanje ili otpuštanje tastera� Kada SRGP_waitEvent vrati rezultat LOCATOR,

aplikacija dobija meru pozivom:void SRGP_getLocator(locatorMeasure *measure);

� Program saopštava SRGP koji tasteri lokatora generišu događaj pozivom:void SRGP_setLocatorButtonMask(int activeButtons);

Page 20: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz20

Primer

� Korisnik specificira tačke u kojima se postavljaju markeri, dok ne klikne na "Quit" dugme:

const int BUTTON=0, QUIT_MASK=0x1; /* dugme 1 */crtanje na ekranu dugmeta Quit;SRGP_setLocatorButtonMask(QUIT_MASK);SRGP_setInputMode(LOCATOR,EVENT);terminate = FALSE;while (!terminate){

device=SRGP_waitEvent(INDEFINITE);SRGP_getLocator(&measure);if (measure.buttonChord[BUTTON]==DOWN){

if (pickedQuitButton(measure.position)) terminate=T RUE;else SRGP_marker(measure.position);

} // pickedQuitButton() poredi merenu poziciju } // sa granicama pravougaonika ekranskog tastera Qu it

Page 21: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz21

Čekanje na više doga đaja (1)

� SRGP smešta u red čekanja događaje po hronološkom redosledu� Aplikacija uzima najraniji događaj iz reda čekanja

i određuje koji je uređaj prouzrokovao događaj� Primer:

– pritiskom na dugme lokatora 1 (npr. levi taster miša) postavlja se marker– pritiskom na dugme lokatora 3 ili dugmeta na tastaturi "Q" ili "q" – kraj)const int PLACE_BUTTON=0, PLACE_MASK=0x1,

QUIT_BUTTON=2, QUIT_MASK=0x4;generisanje početnog izgleda ekrana;SRGP_setInputMode(KEYBOARD,EVENT);SRGP_setKeyboardProcessingMode(EDIT);SRGP_setInputMode(LOCATOR,EVENT);SRGP_setLocatorButtonMask(PLACE_MASK | QUIT_MASK);

Page 22: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz22

Čekanje na više doga đaja (2)

terminate = FALSE;while (!terminate){

device=SRGP_waitEvent(INDEFINITE);switch(device) {

case KEYBOARD:SRGP_getKeyboard(keyMeasure, 2);terminate= (keyMeasure[0]=='q')||

(keyMeasure[0]=='Q');break;

Page 23: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz23

Čekanje na više doga đaja (3)

case LOCATOR:SRGP_getLocator(&locMeasure);switch (locMeasure.buttonOfMostRecentTransition){

case PLACE_BUTTON:if ((locMeasure.buttonChord[PLACE_BUTTON]== DOWN)

&& inDrawingArea(locMeasure.position))SRGP_marker(locMeasure.position);

break;case QUIT_BUTTON:

terminate=TRUE; break;} /* button switch */

} /* device switch */} /* while */

Page 24: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz24

Pik-korelacija za obradu interakcija

� Kada korisnik pritisne taster lokatora – aplikacija mora tačno da odredi koji je objekat selektovan

� Ovo određivanje se naziva pik-korelacijom (pick correlation)� Većina objekata za selektovanje na ekranu

su pravougaonici paralelni osama (tasteri, meni-stavke)� Paket GEOM

– sadrži uslužne funkcije za aritmetiku koordinata– distribuira se uz SRGP

� Funkcija GEOM_pointInRect(point, rectangle) iz paketa GEOM– određuje da li tačka leži u datom pravougaoniku

� Pri kreiranju objekata aplikacija dodeljuje ID objektima koji kasnije vraća procedura pik-korelacije

� Primer: tipična aplikacija za slikanje – meni-traka (menu bar) na vrhu ekrana i radna površina (drawing area) ispod

Page 25: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz25

Primer

� Funkcija CorrelateMenuBar poziva GEOM_pointInRectza svako zaglavlje u traci menija, da odredi ID izabranog menija

� Funkcija CorrelateDrawingArea mora biti sofističnija, jer ovde objekti mogu biti nepravougaoni, a mogu se i preklapati

void HighLevelInteractionHandler(locatorMeasure loc Measure}{if (GEOM_pointInRect(locMeasure.position, menuBarEx tent)) {

menuID=CorrelateMenuBar(locMeasure.position);if (menuID>0) {

chosenItemIndex=PerformPulldownMenuInteraction(menu ID);if (chosenItemIndex>0)

PerformActionChosenFromMenu(menuID,chosenItemIndex) ;}

} else { /* korisnik je birao objekat u radnoj povrsi ni */

objectID=CorrelateDrawingArea(locMeasure.position);if (objectID>0) ProcessObject(objectID);

}}

Page 26: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz26

Postavljanje atributa i mera ure đaja

� Svaki ulazni uređaj ima vlastiti skup atributa

� Neki utiču na povratnu spregu uređaja prema korisniku

� I atributi ulaznih uređaja se postavljaju modalno, u proizvoljnom trenutku� Meru (vrednost) koju inače vraća ulazni uređaj,

može inicijalno da postavlja aplikacija� Za razliku od atributa ulaznih uređaja,

mera se postavlja na početnu uvek kada se uređaj deaktivira

Page 27: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz27

Eho atributi lokatora

� Programer može da upravlja tipom eha i oblikom kurzora pomoću:typedef enum{NO_ECHO,CURSOR,RUBBER_LINE,RUBBER_RECT} EchoType;void SRGP_setLocatorEchoType(EchoType echoType);

� Podrazumevana početna vrednost je CURSOR� SRGP implementacije podržavaju tabelu oblika kurzora� Primena promene oblika kurzora:

– pri promeni regiona u kojem se nalazi kurzor – za povratnu spregu� Vrednosti eha RUBBER_LINEi RUBBER_RECT

– koriste se za crtanje linije i pravougaonika– sa ovim ehom SRGP crta kontinualno menjanu liniju ili pravougaonik

kako se lokator pomera– linija i pravougaonik se razvlače od početne tačke (sidrišta)

do tekuće pozicije lokatora� Sidrište je atribut koji se postavlja pozivom:

void SRGP_setLocatorEchoRubberAnchor(point position );

Page 28: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz28

Kontrola mere lokatora

� Kada se lokator deaktivira – polje position mere lokatora se resetuje na centar ekrana

� Kada se lokator reaktivira, ako je eho uključen– zapaža se promena pozicije lokatora u odnosu na trenutak pre deaktiviranja

(pojavljuje se CURSORili pokretna tačka RUBBEReha na centru ekrana)� Postavljanje mere lokatora (pozicija lokatora) se postiže pozivom:

void SRGP_setLocatorMeasure(point position); � Ovo se koristi radi efekta kontinuiteta pozicije lokatora:

– pozicija se pamti pre deaktiviranja– pre novog aktiviranja stara pozicija se restaurira

� Postavljanje mere može da se obavi bilo da je lokator aktivan ili ne Postavljanje mere ima neposredni vizuelni efekat, ako je uređaj aktivan

– trenutno se menja eho (npr. pozicija kurzora)

Page 29: 03 SRGP - ulazrti.etf.bg.ac.rs/rti/ri5rg/materijali/predavanja/arhiva/03 SRGP - ulaz.pdf2 SRGP - ulaz 18.03.2015. Obrada osnovnih interakcija Tema: kako pisati interaktivne programe

18.03.2015.SRGP - ulaz29

Atributi tastature i kontrola mera

� Pozicija na kojoj se pojavljuje eho tastature je atribut� Atribut se postavlja pomoću:

void SRGP_setKeyboardEchoOrigin(point origin); � Mera tastature – niska znakova, takođe može da se postavlja

� Podrazumevano je prazna niska� Kada se tastatura deaktivira

– mera tastature se resetuje na praznu nisku� Neprazna početna niska je ponekad pogodna za korisnika

– tada može samo da se pritisne Enter ili da se najpre dotera niska� Mera tastature se postavlja pomoću:

void SRGP_setKeyboardMeasure(char *measure);