GUI - Rich text
VID DLS rich-text
rich-text é um face que pode exibir texto em itálico, negrito, colorido e com tamanhos de fonte diferentes. Eu acredito que existem duas maneiras de passar os parâmetros para um rich text:
Primeiro método, usando with :
Red[needs: view]
view [
rich-text 150x50 "Little example of rich-text" with [
data: [1x6 italic 8x7 bold 16x2 168.168.168 18 19x9 255.0.0 8]
]
]
Explicando o primeiro método:
;número de caracteres
;posição do carater inicial
;tamanho fonte
;cor tem que ser um tuple
Se você não quiser usar tuples para cores, pode alterar a linha de data para::
data: reduce [1x6 'italic 8x7 'bold 16x2 gray 18 19x9 red 8]
Segundo método, usando function! rtd-layout
rtd-layout retorna uma face em rich text a partir de um código-fonte RTD. Eu acredito que é mais simples, e permite que você use rich-text a partir de fontes externas, mas você deve ler o capítulo de draw antes, e lembre-se de usar compose/deep no view. compose avalia as coisas entre parênteses, e é usado para "trazer" código de Red para o bloco do dialeto view , e é preciso ter um refinamento /deep porque os parênteses são aninhados dentro de colchetes..
Red[needs: view]
myrtf: rtd-layout [i "This " /i b "uses " /b red font 14 "rtd-layout" /font]
view compose/deep [
rich-text 200x50 draw [text 0x0 (myrtf)]
rich-text 200x50 draw [text 20x10 (myrtf)] ;the pair! locates the text
]
Por favor, veja a página de exemplos de rich-text de Toomas Vooglaid. Com a permissão dele, coloquei abaixo alguns. O Toomas também tem um excelente gist com uma variedade de exemplos de Red em vários tópicos.
Red [
Author: "Toomas Vooglaid"
]
view [rich-text 200x50 "Little example of rich-text" with [
data: [1x6 italic 8x10 bold 16x2 168.168.168 19x9 255.0.0 18]]
]
rb: rtd-layout [i "And " /i b "another " /b red font 14 "example" /font]
view compose/deep [rich-text 200x50 draw [text 0x0 (rb)]]
Red [
Purpose: {Relatively simple rich-text demo}
Help: {Enter text. Select some text, choose formatting from contextual menu (alt-click).
Press "View" to see formatting, "Text" to return to text editing, "Clear" to clear formatting.}
]
count-nl: func [face /local text n x][
n: 0 x: face/selected/x
text: copy face/text
while [all [
text: find/tail text #"^/"
x >= index? text
]][
n: n + 1
] n
]
view compose [
src: area wrap with [
menu: ["Italic" italic "Bold" bold "Underline" underline]
]
on-menu [
nls: count-nl face
append rt/data reduce [
as-pair face/selected/x - nls face/selected/y - face/selected/x + 1 event/picked
]
]
at 16x12 rt: rich-text hidden with [
data: copy []
size: src/size - 7x3
line-spacing: 15
]
below
button "View" [
if show-rt: face/text = "View" [rt/text: copy src/text]
face/text: pick ["Text" "View"] rt/visible?: show-rt
]
button "Clear" [clear rt/data]
]
Red [
Purpose: {Relatively simple rich-text demo}
Help: {Select some text in first box, choose formatting from context-menu (alt-click).
"Clear" clears formatting.}
]
count-nl: func [face /local text n x][
n: 0 x: face/selected/x
text: copy face/text
while [all [
text: find/tail text #"^/"
x >= index? text
]][
n: n + 1
] n
]
view compose [
below src: area wrap with [
menu: ["Italic" italic "Bold" bold "Underline" underline]
]
on-menu [
nls: count-nl face
append rt/data reduce [
as-pair face/selected/x - nls face/selected/y - face/selected/x + 1 event/picked
]
]
on-key [rt/text: face/text rt/data: rt/data]
return
pnl: panel white with [
size: src/size
draw: compose [pen silver box 0x0 (size - 1)]
pane: layout/only compose [
at 7x3 rt: rich-text with [
size: src/size - 10x6 data: copy []
]
]
]
button "Clear" [clear rt/data]
]