Acest articol reprezintă o metodă de a sistematiza calculul poziției la care va fi afișată informația contextuală relativă la un eveniment sau punct de origine. Putem include în categoria informației contextuale:
- meniuri contextuale care apar în urma unui rightclick;
- pop-up-uri descriptive care însoțesc anumite obiecte grafice;
- marker-e pentru evidențierea unor resurse / locații pe o hartă.
Mai jos sunt descrise constante care pot fi definite de programator, variabile care depind de utilizator și o abstractizare a dimensiunilor implicate, scopul fiind găsirea unei formule de calcul pentru poziția la care vom afișa informația adițională (xM, yM); cazul standard este cel al unui meniu, de unde și indicele M.
HW și WW sunt dimensiunile ferestrei în care rulează aplicația. Aceste dimensiuni depind de obicei de sistemul de operare și de acțiunile precedente ale utilizatorului.
WBL, WBR, WBT și WBB sunt dimensiunile unor buffer-e între care se va afișa informația. Aceste buffer-e sunt necesare pentru a ajuta utilizatorul să distingă meniul cu ușurință, dar nu sunt obligatorii; valorile pot fi și zero. Dimensiunile nu pot fi negative; dacă acest lucru ar fi permis, informația contextuală pe care vrem să o desenăm ar putea apărea parțial sau complet în afara ferestrei. Aceste valori sunt la latitudinea programatorului.
E(x, y) este punctul (și coordonatele) evenimentului care declanșează apariția informației contextuale (de exemplu, rightclick într-un punct). Poziția punctului (ca și evenimentele din interfața grafică în general) depind în întregime de utilizator.
Coordonatele X0 și Y0 reprezintă poziția informației față de punctul în care a avut loc evenimentul E(x, y) - acestea sunt și ele niște buffer-e care pot fi setate de programator, depinzând de structura informației contextuale; de multe ori acestea sunt zero. De exemplu, un rightclick într-o pagină web în Chrome va desena meniul exact la poziția evenimentului. În alte cazuri va exista un buffer în urma unei decizii de design: de exemplu un rightclick pe o iconiță din taskbar în Windows 8 va afișa un meniu la o distanță relativ mare de taskbar.
WM și HM sunt dimensiunile informației / ferestrei contextuale. Acestea sunt și ele la latitudinea programatorului. Fereastra contextuală ar putea conține nu numai text sau un meniu ci chiar și resurse grafice (de exemplu, un marker care apare deasupra unei locații în Google Maps).
Prin calcule succesive simple se poate arăta că poziția informației astfel încât să respecte cerințele și convențiile de mai sus este:
xM = min(max(WBL, x - X0), WW - WBR - WM)
yM = y - Y0 - HM, dacă y > HW - HBB - HM - Y0
yM = y + Y0, dacă y ≤ HW - HBB - HM - Y0
Observații
- y > HW - HBB - HM - Y0 este condiția care ne spune dacă evenimentul grafic (rightclick-ul de exemplu) s-a petrecut prea jos pentru ca informația să poată fi desenată sub el și aceasta să și încapă pe ecran;
- min este utilizat în funcția de calcul pentru xM pentru a ne asigura că informația nu depășește marginea din dreapta a ecranului, iar max, similar, pentru marginea din stânga;
- xM este o funcție continuă, pe când yM nu; discrepanța apare din cauza convenției (generalizată de mult timp) că informația adițională se afișează deasupra sau sub evenimentul / punctul descris, rezultând într-o încărcare a dimensiunii verticale care trebuie corectată în anumite cazuri limită.
Posibilă extindere a conceptului
Atunci când peste un mediu bidensional dinamic sunt suprapuse informații contextuale (e.g. Augmented Reality, tracking pe hartă a unor resurse în mișcare etc.) apare o provocare adițională de a evita variații bruște și numeroase ale valorilor xM și yM mai ales în cazul în care există mai multe seturi de informații care sunt în pericol să se suprapună.