Grafické prostředí Red/View

1. Záměry a cíle

Systém Red/View (View engine) je grafický systém jazyka Red. Jeho cíle lze shrnout do těchto bodů:

  • Minimální, datově orientované API

  • Virtuální strom objektů (strom piškotů) jako programovací rozhraní

  • Okamžitá (realtime) nebo odložená synchronizace mezi virtuálním stromem a zobrazovacím systémem

  • Vytvoření jednoduše podporované dvoucestné vazby (two-way binding)

  • Schopnost mít různé backendy pro různé platformy

  • Podpora OS a uživatelských sad widgetů

  • Malé provozní nároky

Virtuální strom se skládá z piškotů. Každý piškot koresponduje s příslušnou zobrazenou grafickou komponentou dvojcestným propojením.

2. Piškoty

Piškoty (tvář neboli face) jsou klony výchozího objektu face!. Pole piškotu se nazývá facet.

Seznam existujících facetů:

Facet Datatype Mandatory? Applicability Description

type

word!

yes

all

Typ grafického prvku (viz dole).

offset

pair!

yes

all

Odsazení od top-left rohu rodiče.

size

pair!

yes

all

Velikost piškotu (face).

text

string!

no

all

Text popisku, zobrazený v piškotu.

image

image!

no

some

Obraz na pozadí piškotu.

color

word! tuple! issue!

no

some

Barva pozadí piškotu uvedená slovem nebo ve formátu R.G.B či R.G.B.A.

menu

block!

no

all

Lišta nabídky (menu) nebo kontextuální nabídka.

data

any-type!

no

all

Data o piškotu.

enabled?

logic!

yes

all

Povolit nebo nepovolit na piškotu vstupní události.

visible?

logic!

yes

all

Zobrazit nebo skrýt piškot (face).

selected

integer!

no

some

Index aktuálně vybraného elementu seznamu, případně vybraného textu nebo zaměřeného (focused) piškotu u oken.

flags

block!, word!

no

some

Seznam speciálních klíčových slov, měnících zobrazení nebo chování piškotu.

options

block!

no

some

Další vlastnosti piškotu ve formátu [name: value].

parent

object!

no

all

Odkaz na rodičovský piškot (pokud existuje).

pane

block!

no

some

Seznam dětí (child faces), zobrazených uvnitř piškotu.

state

block

no

all

Informace o interním stavu piškotu (používané pouze prostředím View engine).

rate

integer!, time!

no

all

Časovač piškotu. Celé číslo udává frekvenci, time nastavuje trvání a none činnost končí.

edge

object!

no

all

(reserved for future use)

para

object!

no

all

Odkaz na objekt para pro pozicování textu.

font

object!

no

all

Nastavení atributů fontu (styl, velikost, barva, zarovnání a jiné).

actors

object!

no

all

Uživatelsky vytvořené ovladače událostí.

extra

any-type!

no

all

Uživatelská data připojená k piškotu (free usage).

draw

block!

no

all

Seznam příkazů Draw, jež mají být provedeny v piškotu.

Seznam globálně použitelný flagů pro facet flags:

Flag Description

all-over

Poslat všechny události typu over do piškotu.

Ostatní specifické flagy piškotů jsou dokumentovány v příslušných sekcích.

Note
  • Nepovinné facety mohou být nastaveny na none.

  • Velikosti offset a size se určují v pixelech;

  • offset a size lze někdy před zobrazením nastavit na none. Systém View se postará o jejich nastavení (jako u panelů v typu tab-panel).

  • Pořadí zobrazení (odzadu dopředu): color, image, text, draw.

Nový piškot (face) se vytvoří klonováním objektu face! object a zadáním alespoň platného názvu typu.

button: make face! [type: 'button]

Měnit pole type není u deklarovaného piškotu dovoleno.

2.1. Aspekt options

Aspekt options obsahuje volitelné parametry, kterými se zadává specifické chování:

Option Description

drag‑on

Can be one of: 'down, 'mid-down, 'alt-down, 'aux-down. Used for enabling a drag’n drop operation.

offset

Odsazení okna od levého horního rohu obrazovky v px ve formátu pair!.

size

Velikos okna v pixelech ve formátu pair!.

3. Objekt Font

Objekty fontů jsou klony šablony font!. Na jeden font se může odkazovat více piškotů, čímž je umožněno centrální řízení skupiny piškotů.

Field Datatype Mandatory? Popis

name

string!

no

Platný název fontu, instalovaného v OS.

size

integer!

no

Velikost fontu v bodech (points).

style

word!, block!

no

Styl nebo blok stylů.

angle

integer!

yes

Sklon textu ve stupních (default is 0).

color

tuple!

yes

Barva fontu ve formátu R.G.B nebo R.G.B.A.

anti-alias?

logic!, word!

no

Režim vyhlazení (active/inactive or special mode).

shadow

(reserved)

no

(reserved for future use)

state

block!

no

Informace o interním stavu piškotu (používané pouze prostředím View.

parent

block!

no

Interní odkaz na rodičovský piškot (používané pouze prostředím View).

Note
  • Nepovinné facety mohou byt nastaveny na hodnotu none.

  • Pole angle zatím nepracuje jak má.

  • V budoucnu se hodnoty všech polí mají stát nepovinné.

Dostupné styly fontů:

  • bold

  • italic

  • underline

  • strike

Dostupné režimy vyhlazení:

  • active/inactive (anti-alias?: yes/no)

  • ClearType mode (anti-alias?: 'ClearType)

4. Objekt Para

Objekty para jsou klony šablony para!. Na jeden objekt para se může odkazovat více piškotů, což umožňuje ovládat vlastnosti para z jednoho místa pro celou skupinu piškotů.

Field Datatype Description

origin

(reserved)

(reserved for future use)

padding

(reserved)

(reserved for future use)

scroll

(reserved)

(reserved for future use)

align

word!

Nastavení horizontálního přiřazení textu: left, center, right.

v-align

(reserved)

Nastavení vertikálního přiřazení textu: top, middle, bottom.

wrap?

logic!

Umožnit/znemožnit zarovnání (wrapping) textu v piškotu.

parent

block!

Interní odkaz na rodičovský piškot (used by View engine only).

Note
  • Všechna pole objektu para mohou být nastavena na hodnotu none.

5. Strom piškotů

Piškoty jsou organizovány do stromu, který vyjadřuje hierarchii jejich vztahů v zobrazení. Vztahy u stromu jsou odvozeny z:

  • facetu pane: výpis jednoho či více dětí piškotu v bloku.

  • facetu parent: odkaz na rodičovský piškot.

Pořadí piškotů v bloku pane je důležité - odvozuje se z něj zetové uspořádání grafických objektů (piškot v čele seznamu pane je zobrazen jako poslední, piškot na konci seznamu je zobrazen nad všemi ostatními).

Kořenem stromu piškotů je piškot screen. Piškot screen může zobrazit pouze piškoty window z bloku ve svém poli pane.

Aby mohl být kterýkoli piškot zobrazen na obrazovce, musí být spojen s piškotem screen přímo (pro okna) nebo nepřímo (přes piškot window pro jiné typy piškotů).

Face tree

6. Typy piškotů

6.1. Base

Piškot typu base je nejzákladnějším a nejvšestrannějším typem piškotů. Implicitně zobrazí pouze pozadí barvy 128.128.128.

Facet Popis

type

base

image

Lze určit hodnotu typu image!, kanál alfa je podporován.

color

Lze určit barvu pozadí, kanál alfa je podporován.

text

Uvnitř piškotu lze zobrazit libovolný text.

draw

Transparentnost je plně podporována pro primitiva systému Draw.

Note
  • Úplná skladba následujících facetů je podporována a zobrazována v uvedeném pořadí: color, image, text, draw.

  • Průhlednost lze zařídit u facetů color, image, text a draw určením hodnoty kanálu alfa v entici R.G.B.A, kde A = 0 indikuje úplnou neprůhlednost a A = 255 indikuje úplnou průhlednost.

Tento typ piškotu může být použit pro zavedení libovolné grafické komponenty.


6.2. Text

Typ text tvoří statický popisek.

Facet Popis

type

'text

text

Text popisku.

data

Hodnota, zobrazená jako text.

options

Podporovaná pole: default.

Facet data je synchronizován v reálném čase s facetem text s použitím následujících pravidel:

  • při změně facetu text je facet data nastaven na načítanou (load) hodnotu text nebo none nebo na options/default, je-li určeno

  • při změně facetu data je facet text nastaven na utvářenou (form) hodnotu facetu data

Facet options přijímá následující vlastnosti:

  • default: může být nastaven na libovolnou hodnotu, bude použit facetem data, vrací-li konverze facetu text hodnotu none, stejně jako u nenačítatelných řetězců.


6.3. Button

Tento typ piškotu představuje jednoduché tlačítko.

Facet Popis

type

'button

text

Popisek tlačítka.

image

Uvnitř tlačítka se zobrazí obrázek. Lze kombinovat s textem..

Typ události Ovladač Popis

click

on-click

Spustí se při poklepu na tlačítko.

6.4. Check

Tento typ představuje zatržítko s volitelným popiskem na levé či právé straně.

Facet Popis

type

'check

text

Text popisku.

para

Pole align určuje, zda je text zobrazen na levé nebo pravé straně.

data

true: zatrženo, false: nezatrženo (default).

Event type Ovladač Popis

change

on-change

Spustí se změnou stavu zatržení uživatelem.

6.5. Radio

Tento typ představuje výběrové tlačítko s popiskem na levé či pravé straně. Ve skupině tlačítek na jednom panelu může být zvoleno pouze jedno tlačítko.

Facet Popis

type

'radio

text

Text popisku.

para

Pole align určuje, zda je text zobrazen na levé (left) nebo pravé (right) straně.

data

true: vybráno, false: nevybráno (implicitní).

Event type Ovladač Popis

change

on-change

Spustí se změnou stavu po akci uživatele.

6.6. Field

Tento typ představuje jednořádkové vstupní pole.

Facet Popis

type

'field

text

Vkládaný text, hodnota read/write.

data

Hodnota, zobrazená jako text.

selected

Vybraný text (pair! none!).

options

Podporovaná pole: default.

flags

Zapnout či vypnout některé speciální vlastnosti polí (block!).

Vybraný (selected) piškot řídí zvýraznění textu (read/write). Hodnota typu pair! označuje první a poslední vybraný znak. Hodnota none indikuje, že v poli není vybrán žádný text.

Podporované flagy:

  • no-border: odstraní dekoraci okraje, vytvořenou výchozím frameworkem GUI.

Facet data je synchronizován v reálném čase s facetem text s použitím následujících pravidel:

  • při změně facetu text je facet data nastaven na načítanou hodnotu text nebo none nebo na options/default, je-li určeno

  • při změně facetu data je facet text nastaven na utvářenou hodnotu data

Facet options přijímá následující vlastnosti:

  • default: může být nastaven na libovolnou hodnotu, bude použit facetem data, vrací-li konverze facetu text hodnotu none, stejně jako u nenačítatelných řetězců.

Typ události Ovladač Popis

enter

on-enter

Vyskytne se při každém stisku klávesnice Enter v poli.

change

on-change

Vyskytne se při každém vložení hodnoty do pole.

select

on-select

Vyskytne se při každém výběru textu myší nebo klávesnicí.

key

on-key

Vyskytne se při každém stisku libovolné klávesnice v poli.

6.7. Area

Tento typ představuje víceřádkové vstupní pole.

Facet Popis

type

'area

text

Zadávaný text, hodnota read/write.

selected

Vybraný text (pair! none!)

flags

Zapnout či vypnout některé speciální vlastnosti (block!).

Aspekt selected řídí zvýraznění textu (read/write). Hodnota typu pair! označuje první a poslední vybraný znak. Hodnota none indikuje, že v poli není vybrán žádný text.

Podporované flagy:

  • no-border: odstraní dekoraci okraje, vytvořenou výchozím frameworkem GUI.

Note
  • Může se objevit svislá posuvná lišta, jestliže oblast (area) nepojme všechny řádky textu (v budoucnu bude možné kontrolovat volbou flags).

Event type Ovladač Popis

change

on-change

Vyskytne se při každém vložení hodnoty do oblasti.

select

on-select

Vyskytne se po každém výběru textu myší nebo klávesnicí.

key

on-key

Vyskytne se v dané oblasti při každém stisku klávesy.


6.8. Text-list

Tento typ představuje svislý seznam textových řetězců, zobrazený v pevném rámečku. Automaticky se objeví vertikální posuvník, jestliže se všechny řádky nevejdou do rámečku.

Facet Popis

type

'text-list

data

Seznam zobrazovaných řetězců (block! hash!).

selected

Index vybraného řetězce nebo hodnota none, není-li žádný vybrán (read/write).

Event type Ovladač Popis

select

on-select

Vyskytne se při výběru položky seznamu. Facet selected odkazuje na index starší vybrané položky.

change

on-change

Vyskytne se po události select. Facet selected odkazuje na index nově vybrané položky.

Note
  • počet viditelných položek zatím nemůže být určen uživatelem.

6.9. Drop-list

Tento typ představuje vertikální seznam textových řetězců, zobrazený ve svinutelném rámečku. Automaticky se objeví svislý posuvník, přesahuje-li obsah velikost rámečku.

Facet Popis

type

'drop-list

data

Seznam zobrazovaných řetězců (block! hash!).

selected

Index vybraného řetězce nebo hodnota none, není-li žádný vybrán (read/write).

Facet data přijímá libovolné hodnoty, avšak pouze hodnoty typu string jsou zařazeny do seznamu a zobrazeny. Neřetězcové hodnoty lze použít pro vytvoření asociativní řady (array) v níž řetězce slouží jako klíče. Facet selected je celočíselný index, počínající jedničkou, indikující pozici vybraného řetězce v seznamu, nikoliv ve facetu data.

Event type Ovladač Popis

select

on-select

Vyskytne se při výběru položky v seznamu. Facet selected odkazuje na index starší vybrané položky.

change

on-change

Vyskytne se po události select. Facet selected odkazuje na index nově vybrané položky.

Note
  • počet viditelných položek zatím nemůže být určen uživatelem.

6.10. Drop-down

Tento typ představuje editovatelné pole s vertikálním seznamem zobrazeným ve svinovacím rámečku. Automaticky se objeví svislý posuvník, překračuje-li obsah velikost rámečku.

Facet Popis

type

'drop-down

data

Seznam zobrazovaných řetězců (block! hash!).

selected

Index vybraného řetězce nebo hodnota none, není-li žádný vybrán (read/write).

Facet data přijímá libovolné hodnoty avšak pouze hodnoty typu string jsou zařazeny do seznamu a zobrazeny. Neřetězcové hodnoty lze použít pro vytvoření asociativní řady, v níž řetězce slouží jako klíče. Facet selected je celočíselný index, počínající jedničkou, indikující pozici vybraného řetězce v seznamu.

Event type Ovladač Popis

select

on-select

Vyskytne se při výběru položky v seznamu. Facet selected odkazuje na index starší vybrané položky.

change

on-change

Vyskytne se po události select. Facet selected odkazuje na index nově vybrané položky.

Note
  • počet viditelných položek zatím nemůže být určen uživatelem

6.11. Progress

Tento typ představuje horizontální nebo vertikální průběhovou lištu.

Facet Popis

type

'progress

data

Hodnota, představující průběh postupu (hodnota percent! nebo float!).

Note
  • Je-li pro zobrazení průběhu ve facetu data použita hodnota typu float, musí být v rozsahu od 0.0 do 1.0.

6.12. Slider

Tento typ představuje kurzor, posuvný podél horizontální nebo vertikální osy.

Facet Popis

type

'slider

data

Hodnota, představující pozici kurzoru (percent! nebo float!).

Note
  • Je-li pro zobrazení průběhu ve facetu data použita hodnota typu float, musí být v rozsahu od 0.0 do 1.0.

6.13. Camera

Tento typ se používá k zobrazení "video camera feed".

Facet Popis

type

'camera

data

Seznam názvů kamer jako blok řetězců.

selected

Vybraný název kamery ze seznamu data, s použitím celočíselného indexu. Nastaveno-li na none, není "camera feed" povolen.

Note
  • Facet data je implicitně nastaven na none. Během prvního volání je připraven seznam kamer k zobrazení v piškotu kamery.

  • Je možné zachytit obsah piškotu kamery s použitím to-image na piškotu.

6.14. Panel

Panel je kontejner pro další piškoty.

Facet Popis

type

'panel

pane

Blok dětských piškotů. Pořadí v bloku určuje jejich zetové pořadí při zobrazení.

Note
  • Souřadnice pro offset (odsazení) dětí jsou vztaženy k levému hornímu rohu rodiče.

  • Piškoty dětí jsou vloženy do rámečku (frame) panelu.


6.15. Tab-panel

Tab-panel je seznam karet (panelů), z nichž pouze jedna může být v daném okamžiku viditelná. Seznam názvů těchto karet je zobrazen jako "tabs" a používá se k přepínání mezi kartami.

Facet Popis

type

'tab-panel

data

Blok názvů karet (hodnoty string).

pane

Seznam panelů, odpovídající seznamu karet (block!).

selected

Index vybraného panelu nebo hodnota none (integer!, read/write).

Event type Ovladač Popis

change

on-change

Vyskytne se při výběru nové karty. Facet event/picked obsahuje index nově vybrané karty. Vlastnost selected je aktualizována ihned po této události.

Note
  • K řádnému zobrazení panelu s kartami je zapotřebí aby facety data i pane byly řádně vyplněny.

  • Obsahuje-li facet pane víc panelů než zadaných karet, budou ignorovány.

  • Při přidávání či odebírání karty musí být odpovídající panel rovněž přidán či odebrán v/ze seznamu pane.

6.16. Window

Reprezentuje okno, zobrazené na monitoru počítače.

Facet Popis

type

'window

text

Název okna (string!).

offset

Odsazení okna od levého horního rohu obrazovky, nezahrnujíce v to dekoraci rámečku okna (pair!).

size

Velikost okna bez dekorací rámečku (pair!).

flags

Zapíná či vypíná některé speciální vlastnosti okna (block!).

menu

Zobrazí nabídkovou lištu v okně (block!).

pane

Seznam piškotů, zobrazených uvnitř okna (block!).

selected

Výběr piškotu, jež se stane nositelem zaměření (object!).

Podporované flagy:

  • modal: učiní okno modálním, zneplatňujíce všechna předtím otevřená okna

  • resize: umožní změnu velikosti okna (implicitní je pevná velikost, nikoliv měnitelná).

  • no-title: nezobrazovat název okna

  • no-border: odebrat dekorace rámečku okna

  • no-min: odebrat tlačítko 'minimalizovat' z přesuvné lišty okna

  • no-max: odebrat tlačítko 'maximalizovat' z přesuvné lišty okna

  • no-buttons: odebrat všechna tlačítka z přesuvné lišty okna

  • popup: alternativní menší dekorace rámečku (jen u Windows).

Note
  • Použití klíčového slova popup na počátku bloku se specifikacemi menu vynutí implicitně kontextuální menu v okně namísto nabídkové lišty.

6.17. Screen

Představuje grafickou zobrazovací jednotku, připojenou k počítači (obvykle monitor).

Facet Popis

type

'screen

size

Velikost zobrazení monitoru v pixelech. Nastaveno při startu prostředím View engine (pair!).

pane

Seznam zobrazovaných oken na monitoru (block!).

Všechny zobrazené piškoty oken musí být dětmi piškotu screen.

6.18. Group-box

Group-box je kontejner pro jiné piškoty s viditelným rámečkem. Tento dočasný formát bude odebrán až bude k dispozici podpora pro facet `edge`.

Facet Popis

type

'group-box

pane

Blok s dětskými piškoty. Pořadí v bloku určuje zetové pořadí (z-order) při zobrazení.

Note
  • Souřadnice odsazení (offset) dětí jsou relativní k levému hornímu rohu group-boxu.

  • Dětské piškoty jsou připojeny do rámečku group-boxu.

7. Životní cyklus piškotu

  1. Vytvořte piškot pomocí prototypu face!.

  2. Vložte piškot do stromu piškotů spojeného s piškotem screen.

  3. Piškot zobrazíte na monitoru příkazem show.

    1. v tomto okamžiku jsou přiděleny systémové zdroje

    2. blok face/state je nastaven.

  4. Odebráním piškotu z panelu (pane) jej odeberete ze zobrazení.

  5. Vymizí-li odkazy na piškot, postará se garbage collector o uvolnění obsazených zdrojů.

Note
  • U aplikací, hladových na zdroje, lze použít funkci free pro manuální uvolnění systémových zdrojů.

8. Aspekty

Pole piškotu zvané facet (aspekt) určuje jeho různé vlastnosti.

Seznam vytvořených aspektů:

Facet Datatype Povinné? Použití Popis

type

word!

yes

all

Interně používané pro ověření, že je objekt strukturován jako piškot.

offset

pair!

yes

all

Odsazení od piškotu rodiče vlevo nahoře.

size

pair!

yes

all

Velikost piškotu.

text

string!

no

all

Text, zobrazený v piškotu. Atributy textu jsou určeny facety font a para.

image

image!

no

some

Obraz na pozadí piškotu.

color

tuple!

no

some

Barva pozadí piškotu ve formátu R.G.B nebo R.G.B.A.

menu

block!

no

all

Lišta nabídky (menu) nebo kontextuálního menu.

data

any-type!

no

all

Data o stavu piškotu a další relevantní informace.

enable?

logic!

yes

all

Umožnit nebo znemožnit události vstupu v piškotu.

visible?

logic!

yes

all

Zobrazit či skrýt piškot.

selected

integer!

no

some

Index aktuálně vybraného elementu seznamu.

flags

block!, word!

no

some

Seznam speciálních klíčových slov, měnících zobrazení nebo chování piškotu.

options

block!

no

some

Další vlastnosti piškotu ve formátu [name: value].

parent

object!

no

all

Odkaz na rodičovský piškot (pokud existuje).

pane

block!

no

some

Seznam dětí (child faces), zobrazených uvnitř piškotu.

state

block!

no

all

Informace o interním stavu piškotu (používané pouze prostředím View engine).

rate

integer! time!

no

all

Časovač piškotu. Celé číslo udává frekvenci, time nastavuje trvání a none činnost končí.

edge

object!

no

all

(vyhrazeno pro budoucí použití)

para

object!

no

all

Nastavení úpravy textu - počátek, okraje, odsazení, tabulátor, rolování textu a další.

font

object!

no

all

Nastavení atributů fontu (style, velikost, barva, zarovnání, a jiné) pro piškot.

actors

object!

no

all

Uživatelsky vytvořené ovladače událostí.

extra

any-type!

no

all

Volitelná uživatelská data připojená k piškotu.

draw

block!

no

all

Seznam příkazů Draw, jež mají být provedeny v piškotu.

Seznam globálně použitelných flagů pro facet flags:

Flag Popis

all-over

Poslat všechny události over do piškotu.

Ostatní specifické flagy piškotů jsou dokumentovány v příslušných sekcích.

Poznámky:

  • Nepovinné facety mohou být nastaveny na none.

  • offset a size se uvádějí v pixelech obrazovky

  • offset a size mohou být někdy před zobrazením nastaveny na none; View engine zajistí nastavení těchto hodnot (jako u panelů v typu tab-panel).

  • Pořadí zobrazení (odzadu dopředu): color, image, text, draw.

Možnosti facetu options:

Facet options obsahuje nastavitelné volby, používané pro specifické chování:

Option Popis

drag‑on

Možnými volbami jsou: 'down, 'mid-down, 'alt-down, 'aux-down. Používá se pro operace drag’n drop.

9. Facet font

Font je facet typu object!, obsahující atributy textu v piškotu. Při editaci tohoto facetu je nutné použít jeho kopii:

font: make font! [field: value ...]

Na jeden font může odkazovat jeden či více piškotů, umožňujíc tak kontrolu vlastností skupiny piškotů z jediného místa.

Pole Dat. typ Povinné? Popis

name

string!

no

Platný název fontu, instalovaného v OS.

size

integer!

no

Velikost fontu v bodech (points).

style

word!, block!

no

Styl nebo blok stylů.

angle

integer!

yes

Sklon textu ve stupních (default is 0).

color

tuple!

yes

Barva fontu ve formátu R.G.B nebo R.G.B.A.

anti-alias?

logic!, word!

no

Režim vyhlazení (anti-aliasing mode - active/inactive nebo special).

shadow

(reserved

no

(vyhrazeno pro budoucí použití)

state

block!

no

Informace o interním stavu piškotu (používané pouze prostředím View).

parent

block!

no

Interní odkaz na rodičovský piškot (používané pouze prostředím View).

Note
  • Nepovinné facety mohou byt nastaveny na hodnotu none.

  • pole angle zatím nepracuje jak má.

  • V budoucnu se hodnoty všech polí mají stát nepovinné.

Nabízené styly fontů:

  • bold

  • italic

  • underline

  • strike

Nabízené režimy vyhlazení:

  • active/inactive (anti-alias?: yes/no)

  • ClearType mode (anti-alias?: 'ClearType)

10. Facet para

Para (zkratka od paragraph, neboli odstavec) je aspekt (facet) typu object!, obsahující atributy textového odstavce. Při editaci tohoto aspektu je nutné použít jeho kopii:

para: make para! [field: value ...]

Na jeden objekt para může odkazovat jeden či více piškotů, umožňujíc tak kontrolu vlastností skupiny piškotů z jediného místa.

Pole Datový typ Popis

origin

(reserved)

(vyhraženo pro budoucí použití)

padding

(reserved)

(vyhraženo pro budoucí použití)

scroll

(reserved)

(vyhraženo pro budoucí použití)

align

word!

Nastavení horizontálního přiřazení textu: left, center, right.

v-align

(reserved)

Nastavení vertikálního přiřazení textu: top, middle, bottom.

wrap?

logic!

Umožnit/znemožnit zarovnání (wrapping) textu v piškotu.

parent

block!

Interní odkaz na rodičovský piškot (používané pouze prostředím View).

Note
  • Všechna pole objektu para mohou být nastavena na hodnotu none.

11. Funkce SHOW

Syntaxe

show <face>

<face>: klon objektu face! nebo blok objektů face nebo názvů (s použitím hodnot typu word!).

Popis

Tato funkce se používá pro aktualizaci piškotu nebo seznamu piškotů na monitoru. Řádně zobrazen může být ten piškot, na který odkazuje strom piškotů, spojený s piškotem screen. Při prvním volání jsou přiřazeny systémové zdroje, je nastaven facet state a grafický komponent je zobrazen na monitoru. Následná volání budou na monitoru reflektovat jakoukoliv změnu piškotu. Je-li definován facet pane, bude funkce show rekurzivně aplikována i na piškoty dětí.

Aspekt state

Následující informace je uváděna jen pro úplnost, při normálním používání by aspekt state neměl být používán. Lze jej ovšem použít, když uživatel volá OS API přímo nebo když je zapotřebí změnit chování View engine.

Position/Field Popis

1 (handle)

Na operačním systému závislý ovladač pro grafický objekt (integer!).

2 (changes)

'Bit flags array' označení, který facet byl změněn od posledního volání fce show (integer!).

3 (deferred)

Seznam odložených změn od posledního volání funkce show, kdy aktualizace v reálném čase jsou vypnuty (block!, none!).

4 (drag-offset)

Uchovává výchozí pozici kurzoru myši při vstupu do režimu vlečení piškotu (pair!, none!).

Note
  • After a call to show, changes field is reset to 0 and deferred field block is cleared.

  • A handle! datatype will be used in the future for opaque OS handles.

12. Aktualizace zobrazení

View engine má dva různé režimy pro aktualizaci zobrazení po úpravě stromu piškotů:

  • Aktualizace v reálném čase: jakákoli změna piškotu je okamžitě zobrazena v monitoru.

  • Odložená aktualizace: žádné změny nejsou přeneseny na monitor, dokud se pro piškot nebo pro jeho rodiče nezavolá funkce show.

Přechod mezi těmito dvěma režimy je řízen slovem system/view/auto-sync? : je-li nastaveno na yes, realizuje se aktualizace v reálném čase (implicitní nastavení), je-li nastaveno na no, View engine odloží všechny aktualizace.

Motivací pro implicitně nastavenou aktualizaci v reálném čase jsou:

  • Jednodušší a kratší zdrojový kód, neboť není zapotřebí volat show po každé změně piškotu.

  • Menší penzum k pamatování pro začátečníky.

  • Postačující pro jednoduché či prototypové aplikace.

  • Zjednodušuje experimentování z konzoly.

Odložená aktualizace realizuje mnoho změn na monitoru zároveň, což vede ke snížení zádrhelů a je rychlejší.

Note
  • Prostředí Rebol/View podporuje pouze režim odložené aktualizace.

13. Dvojsměrné propojení

Piškoty se při svém propojení s řadami (series), použitými ve facetech, opírají o vlastnický systém Redu. Jakákoli změna v některém z facetu je piškotem detekována a vyřízena ve shodě s aktuálně nastaveným režimem aktualizace ( realtime or deferred).

Na druhé straně změny, provedené v zobrazených grafických objektech, jsou okamžitě reflektovány v odpovídajících facetech. Například, zápis do piškotu field reflektuje vstup do facetu text v živém režimu.

Toto dvojsměrné propojení zjednodušuje programování interakce s grafickými objekty bez potřeby jakéhokoliv specifického API. Zcela postačí úprava facetů s použitím akcí pro řady (series).

Příklad:

view [
    list: text-list data ["John" "Bob" "Alice"]
    button "Add" [append list/data "Sue"]
    button "Change" [lowercase list/data/1]
]

14. Události

14.1. Názvy událostí

Jméno Typ vstupu Příčina

down

mouse

Left mouse button pressed.

up

mouse

Left mouse button released.

mid‑down

mouse

Middle mouse button pressed.

mid‑up

mouse

Middle mouse button released.

alt‑down

mouse

Right mouse button pressed.

alt‑up

mouse

Right mouse button released.

aux‑down

mouse

Auxiliary mouse button pressed.

aux‑up

mouse

Auxiliary mouse button released.

drag‑start

mouse

A face dragging starts.

drag

mouse

A face is being dragged.

drop

mouse

A dragged face has been dropped.

click

mouse

Left mouse click (button widgets only).

dbl‑click

mouse

Left mouse double-click.

over

mouse

Kurzor myši přechází přes piškot. Tato událost vzniká jednou, když kurzor vstupuje na piškot a jednou, když jej opouští. Pokud facet flags obsahuje flag all-over, jsou rovněž produkovány všechny mezilehlé události

move

mouse

A window has moved.

resize

mouse

A window has been resized.

moving

mouse

A window is being moved.

resizing

mouse

A window is being resized.

wheel

mouse

The mouse wheel is being moved.

zoom

touch

A zooming gesture (pinching) has been recognized.

pan

touch

A panning gesture (sweeping) has been recognized.

rotate

touch

A rotating gesture (sweeping) has been recognized.

two‑tap

touch

A double tapping gesture has been recognized.

press‑tap

touch

A press-and-tap gesture has been recognized.

key‑down

keyboard

A key is pressed down.

key

keyboard

Byl zadán znak nebo stisknuta speciální klávesa (kromě control, shift a nabídkové klávesy).

key‑up

keyboard

A pressed key is released.

enter

keyboard

Enter key is pressed down.

focus

any

A face just got the focus.

unfocus

any

A face just lost the focus.

select

any

A selection is made in a face with multiple choices.

change

any

Vyskytla se změna v piškotu, přijímající vstup uživatele (text nebo výběr ze seznamu).

menu

any

A menu entry is picked.

close

any

A window is closing.

time

timer

Proběhla prodleva, nastavená facetem rate piškotu.

Note
  • Dotekové (touch) události nejsou realizovatelné ve Windows XP.

  • Jedna či více pohybových událostí vždy předchází událost move.

  • Jedna či více událostí měnících rozměr vždy předchází událost resize.

14.2. Datový typ Event!

Hodnota události je opaktní objekt, obsahující všechny informace o dané události. K polím události se přistupuje pomocí cesty (path notation).

Field Returned value

type

Typ události (word!).

face

Piškot, ve kterém došlo k události (object!).

window

Piškot okna, ve kterém došlo k události (object!).

offset

Odsazení kurzoru myši od piškotu při vzniku události (pair!). Pro události gest se vracejí souřadnice středu.

key

Stisknutá klávesa (char!, word!).

picked

Nová položka, vybraná v piškotu (integer!, percent!). Pro událost wheel vrací počet kroků rotace. Pozitivní hodnota indikuje pootočení kolečka vpřed, od uživatele; negativní hodnota indikuje pootočení kolečka zpět, směrem k uživateli. Pro událost menu se vrací odpovídající ID nabídky. (word!) U zoomovacího gesta se vrací procentní hodnota představující relativní zvětšení/zmenšení. U jiných gest je tato hodnota prozatím závislá na systému (Windows: allArguments, pole z GESTUREINFO)

flags

Vrací seznam s jedním či více flagy (viz list níže) (block!).

away?

Vrací true, opouští-li kurzor hranice piškotu (logic!). Platí pouze při aktivní události over.

down?

Vrací true při stisknutí levého tlačítka myši (logic!).

mid-down?

Vrací true při stisknutí prostředního tlačítka myši (logic!).

alt-down?

Vrací true při stisknutí pravého tlačítka myši (logic!).

ctrl?

Vrací true při stisku klávesy CTRL (logic!).

shift?

Vrací true při stisku klávesy SHIFT (logic!).

Seznam možných flagů z event/flags:

  • away

  • down

  • mid-down

  • alt-down

  • aux-down

  • control

  • shift

[NOTE] Všechna pole (kromě type) jsou pouze pro čtení. Nastavení pole type je používáno pouze interně prostředím View.

Zde je seznam specielních kláves, vracených jako slova polem event/key:

  • page-up

  • page-down

  • end

  • home

  • left

  • up

  • right

  • down

  • insert

  • delete

  • F1

  • F2

  • F3

  • F4

  • F5

  • F6

  • F7

  • F8

  • F9

  • F10

  • F11

  • F12

Následující názvy kláves mohou být vráceny polem event/key pouze pro sdělení key-down a key-up:

  • left-control

  • right-control

  • left-shift

  • right-shift

  • left-menu

  • right-menu

14.3. Aktéři

Aktéři (actors) jsou ovládací funkce pro události View engine. Jsou definovány v objektu, vytvořeném volnou formou (nemají prototyp) a odkazuje na ně facet actors . Všichni aktéři mají stejný blok specifikací.

Syntaxe

on-<event>: func [face [object!] event [event!]]

<event> : jakýkoliv platný název události (viz tabulka výše)
face    : piškot, který je příjemcem události
event   : hodnota události.

Kromě událostí GUI je také možné definovat aktéra on-create, který je volán při prvním zobrazení piškotu, ještě před tím, než jsou pro něj alokovány systémové zdroje. Na rozdíl od jiných aktérů má on-create pouze jeden argument a to face.

Vratná hodnota

'stop : opustí smyčku událostí.
'done : zabrání události přetéci do jiného piškotu.

Ostatní vratné hodnoty nemají žádný účinek.

14.4. Tok událostí

Události jsou obvykle generovány pro určitou pozici na obrazovce a jsou přiřazeny k nejbližšímu čelnímu (front) piškotu. Událost ovšem cestuje od jednoho piškotu ke druhému v hierarchii předchůdců ve dvou směrech, obecně známých jako:

  • odchycení (capturing) události: událost postupuje od piškotu window k čelnímu (front) piškotu, kde vznikla. Pro každý piškot je generována událost detect a volán odpovídající ovladač (handler), pokud existuje.

  • probublávání (bubbling) události: událost postupuje od piškotu k rodičovskému oknu. Pro každý piškot je volán lokální ovladač události.

Event flow

Typická cesta toku událostí:

  1. Na tlačítku je generována událost click, zpracovávají se globální ovladače (viz další odstavec).

  2. Začíná etapa odchycení události:

    1. Nejprve se událost dostane k piškotu window, je volán jeho ovladač on-detect.

    2. Poté se událost dostane k piškotu panel, je volán jeho ovladač on-detect.

    3. Nakonec se událost dostane k piškotu button, je volán jeho ovladač on-detect.

  3. Začíná etapa probublávání události:

    1. Nejprve se událost dostane k piškotu button, je volán jeho ovladač on-click.

    2. Poté se událost dostane k piškotu panel, je volán jeho ovladač on-click.

    3. Nakonec se událost dostane k piškotu window a je volán jeho ovladač on-click.

Note
  • Zrušení události se docílí vrácením slova 'done z jakéhokoli ovladače.

  • Odchycení události není implicitně povoleno z kapacitních důvodů. Odchycení povolíte nastavením system/view/capturing?: yes.

14.5. Globální ovladače událostí

Před vstupem do cesty toku událostí je možné zajistit specifické předzpracování použitím takzvaných "globálních ovladačů událostí". Jsou k disposici následující API pro jejich přidání a odebrání.

14.5.1. insert-event-func

Syntaxe

insert-event-func <handler>

<handler> : funkce ovladače nebo blok kódu pro předzpracování události

specifikace funkce ovladače:: func [face [object!] event [event!]]

Vratná hodnota

Nově přidaná funkce ovladače (function!).

Popis

Instaluje funkci globálního ovladače, která umí předzpracovat události před tím, než se dostanou k ovladačům piškotu. Pro každou událost jsou volány všechny globální ovladače, takže kód těla ovladače potřebuje být optimalizován na rychlost a využití paměti. Je-li jako argument poskytnut blok, je konvertován na funkci s použitím konstruktoru function.

Vratná hodnota funkce ovladače:

  • none : událost může být zpracována jinými ovládači (none!).

  • 'done : jiné globální ovladače jsou přeskočeny ale událost je šířena k dětským piškotům (word!).

  • 'stop : opustit smyčku událostí (word!).

Vrací se odkaz na funkci ovladače a ten by měl být uložen, má-li být ovladač později odebrán.

14.5.2. remove-event-func

Syntaxe

remove-event-func <handler>

<handler> : předchozí instalovaná funkce ovladače události

Popis

Zneplatní předchozí instalovaný globální ovladač události jeho odebráním z interniho seznamu.

15. Objekt system/view

Word Popis

screens

Seznam piškotů screen, reprezentujících připojená zobrazení.

event-port

reserved for future use

metrics

reserved for future use

platform

Nízko úrovňový platformní kód prostředí View (includes backend code).

VID

Procesní kód VIDu.

handlers

Seznam globálních ovladačů událostí

reactors

Interní asociativní tabulka pro reaktivní piškoty a jejich akční bloky.

evt-names

Interní tabulka pro konverzi události na název aktéra.

init

Inicializační funkce z View engine; případně může být volána i uživatelem.

awake

Funkce vstupního bodu pro hlavní 'high-level' události.

capturing?

yes = umožňuje etapu odchycení události a generování událostí detect (impicitně no).

auto-sync?

yes = aktualizace piškotů v reálném čase (default), no = odložená aktualizace piškotů.

debug?

yes = výstup verbózních záznamů interních událostí prostředí View (implicitně no).

silent?

yes = nehlásit procestní chyby dialektů VID nebo Draw (implicitně no).

16. Připojení komponenty View

Komponenta View není implicitně připojena při kompilaci. Za účelem jejího připojení musí hlavní skript Redu deklarovat svou závislost v záhlaví použitím pole Needs :

Red [
    Needs: 'View
]

[NOTE] Při použití konzol, automaticky generovaných binárkou red, je komponenta View implicitně připojena na podporujících platformách; pole Needs v záhlaví tedy není požadováno ve skriptech, spouštěných z těchto konzol.

17. Extra funkce

Function Popis

view

Zobrazit na monitoru okno ze stromu poškotů nebo z bloku kódu VID. Zavede smyčku událostí, pokud není použito upřesnění (refinement) /no-wait.

unview

Zruší jedno či více oken.

layout

Přemění blok kódu VID na strom piškotů.

center‑face

Vystředí piškot relativně ke svému rodiči.

dump‑face

Poskytne kompaktní popis stromové struktury piškotů (pro účely ladění).

do‑actor

Vyhodnotí ručně aktéra piškotu.

do‑events

Spustí smyčku událostí (optionally just process pending events and return).

draw

Vykreslí blok dialektu Draw do obrázku.

to‑image

Přemění jakýkoliv vykreslovaný piškot na obrázek.

size‑text

Změří v pixelech velikost textu v piškotu (berouce v úvahu vybraný font).

Bude přidáno:

  • specifikace facetu menu

  • popis datového typu Image!

results matching ""

    No results matching ""