l'argument DTEXT_RIGHT ne semble pas fonctionner correctement dans dtext_opt() #13

Closed
opened 2020-09-23 17:11:39 +02:00 by Kirafi · 9 comments
dtext_opt(127, 8, C_BLACK, C_NONE, DTEXT_RIGHT, DTEXT_TOP, "niveau max");

Ce code est censé m'afficher "niveau max" complètement collé à droite de l'écran. Or il l'affiche à 5 pixels.

Ma police d'écriture a des caractères de 3 pixels de large.

image

EDIT : Le nombre de pixels vides qui s'ajoutent à droite n'a pas l'air d'être fixe.

``` dtext_opt(127, 8, C_BLACK, C_NONE, DTEXT_RIGHT, DTEXT_TOP, "niveau max"); ``` Ce code est censé m'afficher "niveau max" complètement collé à droite de l'écran. Or il l'affiche à 5 pixels. Ma police d'écriture a des caractères de 3 pixels de large. ![image](https://gitea.planet-casio.com/attachments/1fe8f6af-d759-47ad-a774-dab7a50da47a) EDIT : Le nombre de pixels vides qui s'ajoutent à droite n'a pas l'air d'être fixe.
Owner

C'est un problème de dsize() qui compte une quantité fixe (PROP_SPACING, ici 5) pour chaque espace au lieu de la longueur du caractère espace ou une quantité spécifiée par la police. Faire ça proprement est sur la TODO list, mais je n'avais pas réalisé que ça poserait ce problème.

La quantité d'espacement en trop doit être proportionnelle au nombre d'espaces dans le chaîne.

C'est un problème de `dsize()` qui compte une quantité fixe (`PROP_SPACING`, ici 5) pour chaque espace au lieu de la longueur du caractère espace ou une quantité spécifiée par la police. Faire ça proprement est [sur la TODO list](https://gitea.planet-casio.com/Lephenixnoir/gint/src/branch/master/src/render/topti.c#L6), mais je n'avais pas réalisé que ça poserait ce problème. La quantité d'espacement en trop doit être proportionnelle au nombre d'espaces dans le chaîne.
Owner

Le commit ci-dessus doit corriger le problème. Si tu as un moment pour tester, voici la procédure de mise à jour (comme il y a des changements dans le fxSDK, c'est un peu plus long) :

  • Dans le dossier du fxSDK : git pull puis make install (réinstalle fxconv)
  • Dans le dossier de gint, sur dev : git pull puis make -B install (réinstalle gint en forçant la reconversion des polices)

Ensuite tu peux recompiler ton projet (make -B là aussi pour forcer à relinker avec gint).

Si tu utilises une police proportionnelle (proportional: true), la largeur de l'espace (ASCII 0x20) sert à déterminer l'espacement des mots, donc assure-toi de le marquer explicitement. Il y a un exemple dans la police Graph 90+E par défaut.

Le commit ci-dessus doit corriger le problème. Si tu as un moment pour tester, voici la procédure de mise à jour (comme il y a des changements dans le fxSDK, c'est un peu plus long) : * Dans le dossier du fxSDK : `git pull` puis `make install` (réinstalle fxconv) * Dans le dossier de gint, sur `dev` : `git pull` puis `make -B install` (réinstalle gint en forçant la reconversion des polices) Ensuite tu peux recompiler ton projet (`make -B` là aussi pour forcer à relinker avec gint). Si tu utilises une police proportionnelle (`proportional: true`), la largeur de l'espace (ASCII 0x20) sert à déterminer l'espacement des mots, donc assure-toi de le marquer explicitement. Il y a un exemple dans [la police Graph 90+E par défaut](https://gitea.planet-casio.com/Lephenixnoir/gint/src/branch/dev/src/font8x9.png).
Author

Okay je vais test ce soir, as-tu gardé les corrections de l'issue #12 avec ?

Car là j'utilise encore l'ancienne branche dev que tu avais fait pour l'occasion.

Okay je vais test ce soir, as-tu gardé les corrections de l'issue #12 avec ? Car là j'utilise encore l'ancienne branche dev que tu avais fait pour l'occasion.
Owner

La branche dev n'est pas pour l'occasion, c'est une branche permanente du dépôt où se trouve les commits destinés à paraître dans la prochaine version. Tu peux juste rester dessus.

Quant à la compatibilité fx-9860G SDK, il reste des problèmes non triviaux à rechercher donc rien de nouveau par rapport à ce qui a déjà été annoncé précédemment (à savoir ça marche globalement mais de façon limitée).

La branche dev n'est pas pour l'occasion, c'est une branche permanente du dépôt où se trouve les commits destinés à paraître dans la prochaine version. Tu peux juste rester dessus. Quant à la compatibilité fx-9860G SDK, il reste des problèmes non triviaux à rechercher donc rien de nouveau par rapport à ce qui a déjà été annoncé précédemment (à savoir ça marche globalement mais de façon limitée).
Author

Okay très bien je pull ce soir.

Ah oui pas de soucis pour moi c'était réglé, j'avais commenté en disant que ce qui manquait n'était pas utile voir incohérent (moteur de gris) pour tester sur SDK.

Okay très bien je pull ce soir. Ah oui pas de soucis pour moi c'était réglé, j'avais commenté en disant que ce qui manquait n'était pas utile voir incohérent (moteur de gris) pour tester sur SDK.
Author

Okay ça a l'air de fonctionner ! Comment je fais si je veux mettre un espacement de 2 pixels par mots par exemple ?

Okay ça a l'air de fonctionner ! Comment je fais si je veux mettre un espacement de 2 pixels par mots par exemple ?
Owner

Si tu utilises une police à chasse fixe (sans proportional: true), la taille de l'espace est fixée à la taille d'un caractère (et du coup l'espace total est cette taille plus deux fois l'espacement inter-caractères).

Si tu veux modifier ça, il faut utiliser une police proportionnelle (proportional: true dans ton project.cfg... tu t'en doutes). Dans une police proportionnelle, les caractères sont à largeur variable. Lors de la conversion, s'il reste du blanc à droite ou à gauche de la cellule d'un caractère, ce blanc est supprimé.

Tu peux cependant forcer l'apparition de blanc en dessinant des pixels gris clair. Ce que ça fait c'est que ça évite que la largeur soit réduite, tout en restant transparent à l'affichage. Tu peux voir de tels pixels devant le 1 et le 2 de la police par défaut Graph 90+E, dans ce cas pour s'assurer que tous les chiffres aient la même largeur.

Pour contrôler la largeur de l'espace, tire un trait gris clair dans la cellule de l'espace avec la largeur qui t'arrange. Si tu veux que 2 pixels d'espacement, laisse la cellule entièrement blanche puisque que l'espacement inter-caractère est déjà de 1 pixel de chaque côté. ^^

Si tu utilises une police à chasse fixe (sans `proportional: true`), la taille de l'espace est fixée à la taille d'un caractère (et du coup l'espace total est cette taille plus deux fois l'espacement inter-caractères). Si tu veux modifier ça, il faut utiliser une police proportionnelle (`proportional: true` dans ton `project.cfg`... tu t'en doutes). Dans une police proportionnelle, les caractères sont à largeur variable. Lors de la conversion, s'il reste du blanc à droite ou à gauche de la cellule d'un caractère, ce blanc est supprimé. Tu peux cependant forcer l'apparition de blanc en dessinant des pixels gris clair. Ce que ça fait c'est que ça évite que la largeur soit réduite, tout en restant transparent à l'affichage. Tu peux voir de tels pixels devant le 1 et le 2 de la [police par défaut Graph 90+E](https://gitea.planet-casio.com/Lephenixnoir/gint/src/branch/dev/src/font8x9.png), dans ce cas pour s'assurer que tous les chiffres aient la même largeur. Pour contrôler la largeur de l'espace, tire un trait gris clair dans la cellule de l'espace avec la largeur qui t'arrange. Si tu veux que 2 pixels d'espacement, laisse la cellule entièrement blanche puisque que l'espacement inter-caractère est déjà de 1 pixel de chaque côté. ^^
Author

Aaah d'accord, je pensais que c'était l'inverse, pour moi proportionnal: true ça sonne comme chasse fixe justement.

Okay pour les pixel gris clair je comprend mieux merci !

Aaah d'accord, je pensais que c'était l'inverse, pour moi `proportionnal: true` ça sonne comme chasse fixe justement. Okay pour les pixel gris clair je comprend mieux merci !
Owner

Alright, puisque ça marche je peux fermer cette issue. ^^

Alright, puisque ça marche je peux fermer cette issue. ^^
Sign in to join this conversation.
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Lephenixnoir/gint#13
No description provided.