[TRUKéASTUCE] utiliser une police intégrée dans le bundle de l'application

BruBru Membre
Il est possible d'intégrer des fichiers de police de caractère dans le répertoire Resources du bundle de l'application cocoa, puis de pouvoir les utiliser en tant qu'objet NSFont.

Ceci permet de livrer une application complète, incluant ses propres polices sans être obligé de les installer dans le système.

Pour utiliser une telle police police, il faut l'activer au lancement de l'appli.
Cette activation se fait en utilisant la fonction ATSFontActivateFromFileSpecification.

Le code suivant, implanté dans le main.m permet d'activer une police LEDBOARD.TTF :
<br />int main(int argc, char *argv&#91;])<br />{<br />&nbsp; &nbsp; NSAutoreleasePool *autoreleasePool;<br />&nbsp; &nbsp; NSURL *url_police;<br />&nbsp; &nbsp; FSRef fsref;<br />&nbsp; &nbsp; FSSpec fsspec;<br /><br />&nbsp; &nbsp; // création de l&#39;autoreleasePool<br />&nbsp; &nbsp; autoreleasePool=[[NSAutoreleasePool alloc] init];<br /><br />&nbsp; &nbsp; // récupération de l&#39;url du chemin de la police à  charger<br />&nbsp; &nbsp; url_police=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@&quot;LEDBOARD&quot; ofType:@&quot;TTF&quot;]];<br /><br />&nbsp; &nbsp; // transformation de l&#39;url en FSRef, puis en FSSPec<br />&nbsp; &nbsp; CFURLGetFSRef((CFURLRef)url_police, &amp;fsref);<br />&nbsp; &nbsp; FSGetCatalogInfo(&amp;fsref, kFSCatInfoNone, NULL, NULL, &amp;fsspec, NULL);<br /><br />&nbsp; &nbsp; // activation de la police dans l&#39;appli<br />&nbsp; &nbsp; ATSFontActivateFromFileSpecification(&amp;fsspec, kATSFontContextLocal, kATSFontFormatUnspecified, NULL, kATSOptionFlagsDefault, NULL);<br /><br />&nbsp; &nbsp; // nettoyage de l&#39;autoreleasePool<br />&nbsp; &nbsp; [autoreleasePool release];<br /><br />&nbsp; &nbsp; return NSApplicationMain(argc,&nbsp; (const char **) argv);<br />}<br />


La police pourra alors être utilisée par un classique :
<br />{<br />&nbsp; &nbsp; NSFont *font;<br /><br />&nbsp; &nbsp; font =[NSFont fontWithName:@&quot;LED-BOARD&quot; size:24];<br />&nbsp; &nbsp; [textField setFont: font];<br />}<br />



Référence :
Apple Type Services for Fonts Reference
NSFont Class Reference
police "led-board"

.

Réponses

  • Paisible.frPaisible.fr Membre
    21:34 modifié #2
    ATTENTION

    ATSFontActivateFromFileSpecification est deprecated dans le SDK 10.5  :-\\
  • NoNo Membre
    21:34 modifié #3
    dans 1227803317:

    ATTENTION
    ATSFontActivateFromFileSpecification est deprecated dans le SDK 10.5  :-\\


    Oui, les fsspec ne sont plus utilisés pour les références fichier et sont remplacés par des fsref.
    Du coup ça simplifie le code ci-dessus.

    <br />{<br />    NSAutoreleasePool *autoreleasePool;<br />    NSURL *url_police;<br />    FSRef fsref;<br /><br />    // création de l&#39;autoreleasePool<br />    autoreleasePool=[[NSAutoreleasePool alloc] init];<br /><br />    // récupération de l&#39;url du chemin de la police à  charger<br />    url_police=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@&quot;LEDBOARD&quot; ofType:@&quot;TTF&quot;]];<br /><br />    // transformation de l&#39;url en FSRef<br />    CFURLGetFSRef((CFURLRef)url_police, &amp;fsref);<br /><br />    // activation de la police dans l&#39;appli<br />    ATSFontActivateFromFileReference(&amp;fsref, kATSFontContextLocal, kATSFontFormatUnspecified, NULL, kATSOptionFlagsDefault, NULL);<br /><br />    // nettoyage de l&#39;autoreleasePool<br />    [autoreleasePool release];<br /><br />    return NSApplicationMain(argc,  (const char **) argv);<br />}
    
Connectez-vous ou Inscrivez-vous pour répondre.