Ce référentiel définit une méthode de création et de déploiement de polices pour une utilisation avec des pilotes d'affichage Micropython. Un utilitaire PC rend les fichiers de police standard de l'industrie en tant que bitmap sous la forme de Python Sourcecode. Un module MicropyThon permet à ces fichiers d'être affichés sur des périphériques avec des pilotes d'appareils appropriés. Il s'agit notamment des écrans OLED à l'aide de la puce SSD1306 et du pilote de périphérique officiel. Des pilotes compatibles pour une variété de technologies d'affichage sont disponibles dans le cadre du référentiel Nano-Gui.
Les plates-formes Micropython ont généralement une RAM limitée, mais un stockage plus abondant sous forme de mémoire flash. Les fichiers de police ont tendance à être relativement importants. La technique conventionnelle de rendu des chaînes à un appareil implique le chargement de la police entière en RAM. C'est rapide mais intensif de RAM. L'alternative de stockage de la police en tant que fichier d'accès aléatoire et de chargement des glyphes individuels dans RAM à la demande est trop lente pour des performances raisonnables sur la plupart des dispositifs d'affichage.
Cette alternative implémente une police en tant que fichier source Python, les données étant déclarées sous forme d'objets bytes . Un tel fichier peut être gelé comme bytecode: cela implique la construction du firmware à partir de la source avec le fichier Python dans un répertoire spécifique. Sur l'importation, très peu de RAM est utilisé, mais les données sont accessibles rapidement. Notez que l'utilisation de bytecode gelé est entièrement facultative: les fichiers de police peuvent être importés de la manière normale si l'utilisation de la RAM n'est pas un problème.
Le fichier résultant est utilisable avec deux variétés de pilotes d'appareils d'affichage:
framebuffer officielle.Cela comprend quatre composants, des liens vers les documents ci-dessous:
Writer . Cet utilitaire de ligne de commande est écrit dans Python 3 et s'exécute sur un PC. Pour convertir une police évolutive en Python, l'utilitaire prend d'entrée un fichier de police dans la forme ttf ou otf avec une hauteur dans les pixels et publie un fichier source Python contenant la police en tant que bitmap. Le rendu de pas fixe et variable est pris en charge. La conception a les objectifs suivants:
Le premier est réalisé en fournissant des arguments spécifiques au matériel à l'utilitaire. Ceux-ci définissent la cartographie horizontale ou verticale et l'ordre de bit pour les données de police.
Le second est réalisé en utilisant Freetype et les liaisons Freetype Python. Son utilisation est documentée ici. Cela détaille également les mesures de l'utilisation de la RAM lors de l'importation de polices stockées sous forme de bytecode gelé.
La conversion de fichiers ttf ou otf évolutifs fonctionne mieux par programme pour les polices plus grandes. Pour les petites polices, il est préférable d'utiliser des fichiers de police bitmappés à la main. Ceux-ci sont maintenant pris en charge: les fichiers de police bdf ou pcf peuvent être convertis en source Python dans le même format que les fichiers provenant de polices évolutives. Voir aussi MicroPyEzFonts qui comprend des petites polices compatibles (en examples/fonts ).
Le coup de vites n'est pas pris en charge. Les polices sont un bit par pixel. Les affichages de couleur sont pris en charge par la classe CWriter qui ajoute des informations de couleur au stade de rendu. Cela suppose que tous les pixels d'un personnage sont colorés de manière identique.
Par défaut, l'utilitaire font_to_py.py produit le jeu de caractères ASCII de chr(32) à chr(126) inclus. Les options de ligne de commande permettent au jeu de caractères d'être modifié pour inclure des caractères Unicode arbitraires. Des ensembles alternatifs peuvent être spécifiés, par exemple pour les langues non anglophones. Un support efficace est désormais fourni pour les jeux de caractères clairsemés.
Un fichier de police est importé de la manière habituelle, par exemple, import font14 . Les fichiers de police Python contiennent les fonctions suivantes. Ces valeurs de retour définies par les arguments qui ont été fournis à font_to_py.py :
height retourne la hauteur en pixels.
max_width renvoie la largeur maximale d'un glyphe en pixels.
décalage baseline du haut du glyphe à la ligne de base.
hmap revient True si la police est mappée horizontalement.
Renvoie reverse True si l'inversion de bits a été spécifiée.
monospaced revient True si le rendu monospacé était spécifié.
min_ch renvoie la valeur ordinale du caractère le plus bas du fichier.
max_ch renvoie la valeur ordinale du caractère le plus élevé du fichier.
Les glyphes sont retournés avec la fonction get_ch . Son argument est un caractère Unicode et il renvoie les valeurs suivantes:
memoryview contenant les octets de glyphe. L'utilitaire font_to_py.py permet de spécifier un glyphe par défaut (généralement ? ). S'il est appelé avec un caractère indéfini, ce glyphe sera retourné.
Les fonctions min_ch et max_ch sont principalement pertinentes pour les jeux de caractères contigus.
Tout le code est publié sous la licence MIT.