1

je voudrai savoir comment c'est foutu le clipping de l'affichage de texte sur nos TI.

J'ai vaguement une idee tres simple.
puisqu'on passe les parametres de la zone d'affichage a la fonction , je peux supposer
que la fonction va s'arreter soit :
- des lors qu'elle depasse la zone graphique specifiee
- avant de depasse la zone graphique specifiee

2

c'est plus compliqué que ça puisqu'un caractère peut être à cheval sur le bord de l'écran... ça suppose donc que les fonctions d'affichage de caractère gèrent aussi le clipping ^^ en gros pour le clipping en y, c'est comme tu le décris, soit c'est dedans et on affiche, soit c'est dehors et on n'affiche pas ; pour le clipping en x, si c'est à l'intérieur, pas de pb on affiche complètement, mais si c'est sur le bord, alors on n'affiche que le mot de poids faible ou le mot de poids fort (et si l'abscisse du bord n'est pas multiple de 16, alors en plus on applique un masque pour ne pas déborder)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

j'y avais aussi penser au debordement, mais je ne voulais pas faire long, histoire de voir les explications.
En ce qui le TIOS, les fonction clippees ne vont d'ont pas afficher plus de caracteres qu'il ne faut meme si la chaine
passe est beacoup plus longue; si j'ai bien compris


Merci

4

oui a priori (enfin sauf si c'est mal programmé et qu'ils appellent DrawClipChar sans tester si ça déborde : dans ce cas-là avec une chaîne de plus de 11000 caractères ça pourrait "revenir" à la position de départ)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

Tu peux regarder les sources de fonctions d'affichage clippées pour voir comment implémenter ça. Bon, la plupart sont en ASM, mais je sais qu'il en existe aussi en C...

Par contre, la distinction entre tes deux suppositions du post ./1 n'a pas vraiment de sens. Une fonction d'affichage clippée fait attention à là où elle affiche. Elle prend donc soin de ne pas afficher là où c'est interdit. Quant à savoir si elle s'arrête avant d'atteindre la limite ou bien au moment où l'atteint, ça revient quasiment au même. Et puis, puor clipper du texte il y a plusieurs implémentations possibles : par exemple, pour chaque caractère on appelle une fonction qui affiche un caractère clippée, ou bien (plus lourd à développer, mais plus rapide à l'exécution) la fonctino d'affichage de chaîne vérifie avant de débuter l'affichage si elle est en dehors de la zone, si c'est le cas elle n'affiche rien, puis dès qu'elle entre dans la zone autorisée elle affiche ses caractères et puis elle s'arrête si jamais elle sort de la zone (c'est plus lourd à développer parce qu'il faut prendre en compte différents cas particuliers [lettres à cheval sur la zone de clipping]).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

6

euh il n'y a pas vraiment de cas particuliers à prendre en compte sur les bords confus (sauf si tu veux distinguer et appeler selon les cas DrawChar/DrawClipChar, mais c'est de la perte de temps) :
while (x<MAX_X) {
  if (x>-MAX_CHAR_WIDTH)
    DrawClip(*p,x);
  x+=Width(*p++);
}



Et si la font est à largeur fixe, on peut faire plus efficace pour les clipping à gauche en rajoutant avant un truc du style
if (x<=-MAX_CHAR_WIDTH)
  p += (int)((unsigned)-x/CHAR_WIDTH);

Mais je vois pas trop ce que tu pourrais avoir envie de rajouter what

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

En fait, je voulais dire qu'on ne peut pas se permettre de procéder comme ceci :
- Attendre d'être dans la fenêtre de clippiing
- Afficher les caractères avec DrawChar
- Si on sort de la fenêtre, quitter.

Il faut faire attention en affichant les caractères dans la fenêtre pour vérifier que ceux-ci ne soient pas à cheval sur la bordure de clipping.
Ou bien appeler DrawClipChar comme dans ton code.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

8

Justement c'est comme cela que j'ai procede dans mon code. j'ai pris un lageur fixe pour la petite font