Déjà la version 0.2 d'ALFonts !
Et oui, la version 0.2 d'ALFonts est déjà là . Par rapport au programme présenté il y a quelques jours ... pas grand chose. J'ai amélioré légèrement le code (le DataBinding WPF, ça roxxe !), j'ai rajouté des éléments de configuration pour les plugins, et j'ai même rajouté une documentation (merci doxygen) à la dll de création des plugins. Enfin, l'interface est passée en anglais ... en attendant une version multi-langue (pour tester un composant).
Si ALFonts vous intéresse, je suppose que la gestion par plugins doit y être pour quelque chose. Pour cela, la suite de ce billet va vous expliquer comment en réaliser un.
Création de plugins
Un plugin pour ALFonts est une dll .NET, c'est-à -dire développée en C#, VB.NET, ou autre langage CLR. Le plugin lui-même correspond à une classe de la DLL, qui aura implémenté l'interface ALFonts.IActionPlugin :
public interface IActionPlugin
{
void Action(GraphicFont graphicFont);
string Label { get; }
string ActionLabel { get; }
}
La classe est assez simple, et propose deux libellés et une fonction d'action. Label est ce qui sera affiché dans le combo de sélection du plugin, et ActionLabel ce qui sera affiché sur le bouton quand le plugin sera sélectionné.
La fonction d'action est lancée quand le bouton est cliqué. Un objet de type GraphicFont est fourni en paramètres. GraphicFont est une classe présente dans la dll de création des plugins. Les informations fournies par la fenêtre (Police, Style, Taille, plage de caractères) sont stockées dans l'objet, et de nombreuses propriétés sont disponibles. La documentation vous les présente en détail.
La configuration du GraphicFont peut se faire directement dans votre code de plugin (à l'aide des propriétés), mais vous pouvez aussi afficher une fenêtre de configuration pour laisser l'utilisateur décider de la génération du bitmap. Pour utiliser cette fenêtre, votre projet de DLL doit ajouter les références suivantes : PresentationCore, PresentationFramework, WindowsBase. Le code suivant vous permettra d'utiliser cette fenêtre :
public void Action(GraphicFont graphicFont)
{
winConfigGraphicFont winConfig = new winConfigGraphicFont(graphicFont);
winConfig.ShowDialog();
GraphicFont finalFont = winConfig.GraphicFont;
// ---
}
finalFont contient alors la configuration choisie par l'utilisateur. Il reste encore à générer le fichier bitmap. Pour cela, on dispose de la fonction SaveToFile. Elle nécessite un nom de fichier, ainsi que le format de l'image à générer. Le système de plugins ne propose pas de fonctions pour demander le nom du fichier à créer à l'utilisateur. Vous pouvez choisir de le générer en fonction de la police choisie, ou écrire votre procédure permettant d'afficher une fenêtre de sélection de fichier.
public void Action(GraphicFont graphicFont)
{
// ---
finalFont.SaveToFile(sFileName, System.Drawing.Imaging.ImageFormat.Png);
// ---
}
Le fichier image est généré, mais il vous faut peut-être rajouter un fichier de configuration, voire modifier le fichier généré (rajouter des points délimitant chaque caractère, rajouter un effet, ...). Si vous pouvez le coder en .NET, vous pouvez l'intégrer au plugin. Pour vous aider, deux listes sont disponibles après l'appel à SaveToFile : GraphicFont.Characters et GraphicFont.CharactersLocations. La première liste est la liste des char générés dans le fichier bitmap, la seconde une liste de System.Drawing.Rectangle représentant chaque emplacement des caractères générés. Les deux listes se reflètent (l'élément x d'une liste correspond à l'élément x de l'autre).
Avec ces informations, vous devriez pouvoir créer votre plugin. Sachez qu'une DLL peut posséder plusieurs classes implémentant IActionPlugin, et ainsi proposer "plusieurs" plugins dans un seul fichier. Pour vous aider dans la création, n'hésitez pas à vous inspirer des projets SimpleXML et GuliXNAPlugin présents dans l'archive des sources.
J'essaierai de conserver IActionPlugin le plus simple possible, pour conserver une compatibilité maximum. Les modifications futures porteront plus sur l'interface du programme, et les options de génération.
Si vous créez vos plugins, n'hésitez pas à me les communiquer pour que je les rajoute à la liste. Une page dédiée au programme verra bientôt le jour, avec liste des plugins et documentation.
Les fichiers correspondants à cet article ont été perdus lors d'une migration. Si malgré tout vous êtes à la recherche de ces fichiers, placez un commentaire ici bas et j'essaierai de remettre la main dessus.