Test 'size-text et 'offset-to-caret
Didec15-Jan-2010/11:11:50+1:00
Ce post est un peu destiné à Shadwolf ou à Steeve pour le problème détecté dans area-tc.

J'ai fait un petit programme pour montrer les résultats de 'size-text et 'offset-to-caret.
Avant de le proposer à Carl, ou de le joindre comme test dans RAMBO, j'aimerais qu'il soit testé par d'autres reboliens, sur des OS variés.

Moi je l'ai testé sous XP. Je constate déjà que 'offset-to-caret donne des valeurs décalées de 2x2 pixels. Pourtant il me semble avoir mie à zéro tous les décalage de paragraphe et de police. Si quelqu'un a une idée !!!

Le programme:
rebol [
	title: "Test 'size-text and 'offset-to-caret functions"
	author "DideC"
]

; initial text to render
txt: "Some text !"

; initial font object
font1: make face/font [size: 20 align: 'left valign: 'top offset: 0x0]

; face used as a model to calculate offsets and text size, with all margin, etc set to 0
ff: make face [font: font1 size: 1000x1000 para: make face/para [origin: 0x0 margin: 0x0]]

; show the 'size-text result as a red box, and all the 'offset-to-caret values as green ticks
show-size-text: has [f sz ofs orig] [
	; we size the text in the box using the text and the font used in the draw block
	sz: size-text f: make ff [font: get box-draw1/font text: txt]
	
	orig: box-draw1/text	; starting offset of the text
	; change the red box size to reflect the size-text result
	change at box-draw2 4 reduce [orig  orig + sz]

	prin ["TEXT:" txt newline "  SIZE-TEXT:" sz newline "  CHAR/OFFSETS: "]

	; draw a green ticks for each caracter offset in the text	
	clear at box-draw3 3
	forall txt [
		ofs: caret-to-offset f txt
		append box-draw3 reduce ['polygon  orig + ofs  orig + ofs + 0x2  orig + ofs + 2x0]
		
		prin rejoin [next mold txt/1 "=" ofs " "]
	]
	print ""	; newline
	
	show b
]

view layout [
	h3 "In red: the 'size-text box, green ticks are 'offset-to-caret results"
	
	; The face where we show the result
	b: box 650x200 black effect [draw [pen white font font1 text 0x0 txt] draw [pen red box 1x1 5x5] draw [pen green]]
	
	; the draws blocks are modified a lot so we make some shortcuts
	do [box-draw1: b/effect/2  box-draw2: b/effect/4  box-draw3: b/effect/6]

	across
	
	; to change the text
	label "Text to show:"
	field with [text: txt] [show-size-text] pad 10
	
	; to change the font size
	label "Font size:"
	rotary 40 "20" "30" "40" "50" "60" "10" [
		set in get box-draw1/font 'size to-integer face/text
		show-size-text
	] pad 10
	
	; to change the font name
	label "Font name:"
	rotary "font-sans-serif" "font-serif" "font-fixed" [
		set in get box-draw1/font 'name get to-word face/text
		show-size-text
	] return
	
	; first rendering
	do [show-size-text]
]
Didec15-Jan-2010/11:26:47+1:00
Bon, j'ai trouvé pour le 2x2 en trop : je n'avais pas fait attention au 'edge par défaut qui a une taille de 2x2.

Donc dans le programme précédent, remplacer la définition de 'ff par la suivante :
; face used as a model to calculate offsets and text size, with all edge, margin, etc set to 0
ff: make face [font: font1 size: 1000x1000 para: make face/para [origin: 0x0 margin: 0x0] edge: make face/edge [size: 0x0]]
JJV16-Jan-2010/14:52:07+1:00
Bonjour Didec;

Testé sous xp (aussi) / View 1.3.2.3.1.
Ca fonctionne

Voila


JJV
ldci18-Jan-2010/9:45:36+1:00
Salut Didier
J'ai testé ton code sous Windows 7 avec rebol 1.3.2, 2.7.6 et 2.7.7: cela fonctionne parfaitement.
Sous Mac OS X 10.6: cela ne marche pas. C'est un bug déjà signalé à Carl. Sous OSX les polices de caractères ne sont pas gérées.
Amitiés
Didec18-Jan-2010/10:19:47+1:00
Merci François.

Sous Linux, personne ?
Didec18-Jan-2010/10:26:37+1:00
Merci François.

Sous Linux, personne ?
ldci18-Jan-2010/11:25:15+1:00
Si Didier
Testé sous Ubuntu 9.04 et rebol 2.7.6:
les calculs semblent corrects, mais la chaine de caractères ne s'affiche pas.
Un problème dans le draw?
b: box 650x200 black effect [draw [pen white font font1 text 0x0 txt] draw [pen red box 1x1 5x5] draw [pen green]]

D'après mes souvenirs, Shad a des problèmes similaires dans son code area-tc sous linux.
A +
shadwolf18-Jan-2010/12:42:21+1:00
le probleme d'affichage du texte sous linux proviens du passage du fichier contenant la police true type en dure dans font/name:

En fait l'example de DideC ne fait pas avancer le smilblik bien qu'il m'aide quand même. L'example de dideC ne traite que l'aspect dessin rendu du texte qui marque convenable sur tout les os windows et linux (cf la page de garde du site viva rebol) Le probleme que j'ai n'est donc pas sur le rendu de texte mais sur l'aspect interactif du dit texte sous linux vista et seven.

Afin de gerer l'aspect interactif de l'édition de texte steeve a réinventé completement un gestionnaire d'evenement et un faux curseur. Afin de conaitre ou prédir la taille du déplacement du faux curseur en pixel on s'appuie sur une astuce proposée par steeve. On utiliser une police de caracter true type de taille fixe et size-text a cahque fois que l'on zoom et au chargement d'un document on passe donc par size-text afin de determiner la taille du déplacement du curseur. Cette taille evidement permet de calculer ou on insert le nouveau texte saisie dans une ligne existante.
evidement si la ligne est vide on ne 'voit" pas le probleme
. Parcontre si la ligne est pleine la on voit que le nouveau texte ne s'insert pas a l'emplacement courant du curseur il se met un peu n'importe ou ... voir se redessine pardessus le reste du texte de la ligne qui existait deja.

Ce probleme apparait avec un code qui marche tres bien sous windows XP. Il est etrange de voir cela ce produire sur les aurtes OS.

En quoi l'example de dideC apporte une aide ?

C'est simple comme je l'ai expliqué notre algorithme de simulation d'interaction s'appui sur un couple bien précis
font de taille fixe et size-text. Hors dans son example didec nous montre comment prédir la taille des caracteres meme pour des fonts pas dont la taille est variable !.
en utilisant caret-to-offset et size-text ainsi qu'une face de test il arrive a déterminé tres précisement l'emplacement des éléments qui oompose le texte.

Et ca c'est totalement nouveau. Donc je vais travailler plus le sujet et voir ce que ca donne. Peut etre une modification de l'algorithm d'interaction dans area-tc en appliquant la méthode dideC parmettra d'avoir un code fonctionnant partout.

(desolé pour la longueure du post, le forum est ultra lent... )
Didec18-Jan-2010/13:19:06+1:00
Merci François.

Le but est justement de montrer ce que donne 'draw et ce que renvoi 'size-text et 'caret-to-offset pour aider Carl dans le débuggage de ces fonctions sous les systèmes non Windows.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2