Fonte incorrecte dans NSView
Bonjour à tous,
J'ai quelques misères avec NSView lorsque je veux écrire une chaà®ne de caractères.
La photo jointe montre l'éditeur de code d'XDev. A coté du texte, une vue affiche soit
le numéro de la ligne soit le point d'arrêt. Le problème est que la fonte de caractère
employée pour écrire le numéro de ligne est incorrecte.
J'effectue l'appel suivant dans drawRect de la sous classe NSView:
lineNumber est une NSString contenant le numéro de la ligne.
Le dernier argument est obtenu de la manière suivante. On dispose d'un objet NSFont, font.
La trace indique bien Monaco 10, ce qui est conforme.
J'ai essayé de forcer à l'aide des instructions suivantes:
sans résultat !
Si quelqu'un a déjà eû le problème, as-t-il trouvé une solution ?
Par avance merci de votre aide.
J'ai quelques misères avec NSView lorsque je veux écrire une chaà®ne de caractères.
La photo jointe montre l'éditeur de code d'XDev. A coté du texte, une vue affiche soit
le numéro de la ligne soit le point d'arrêt. Le problème est que la fonte de caractère
employée pour écrire le numéro de ligne est incorrecte.
J'effectue l'appel suivant dans drawRect de la sous classe NSView:
lineNumber = [NSString stringWithFormat:@"%d",i];<br />...<br />[lineNumber drawInRect:theFrame withAttributes:attributes];
lineNumber est une NSString contenant le numéro de la ligne.
Le dernier argument est obtenu de la manière suivante. On dispose d'un objet NSFont, font.
attributes = [[font fontDescriptor] fontAttributes];
La trace indique bien Monaco 10, ce qui est conforme.
J'ai essayé de forcer à l'aide des instructions suivantes:
-(void)drawRect:(NSRect)frame<br />{<br /> ...<br /> [NSGraphicsContext saveGraphicsState]; <br /> font = [[_codeEditor helper] textFont]; <br /> [font set]; <br /> ...<br /> [NSGraphicsContext restoreGraphicsState];<br />} /* drawRect */<br />
sans résultat !
Si quelqu'un a déjà eû le problème, as-t-il trouvé une solution ?
Par avance merci de votre aide.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
La méthode drawInRect:withAttributes: de NSString est mal employée.
Le 2nd argument withAttributes: attend un dictionnaire (NSDictionary) contenant les différents attributs à appliquer au texte lors de son dessin.
Toi, tu y passes directement l'objet NSFont, ce qui n'est pas permis.
Change ton code par :
Je ne passe pas l'objet font mais bien le dictionnaire descriptif de la fonte sous la forme d'un NSDictionary.
attributes = [[font fontDescriptor] fontAttributes];
Il n'y a pas d'erreur à ce sujet. La trace m'indique:
2008-07-15 09:44:36.803 XDev[640] attributes = {
NSFontFamilyAttribute = Monaco;
NSFontNameAttribute = Monaco;
NSFontSizeAttribute = 10;
}
Ce qui est conforme.
Merci de ton aide.
Quelqu'un a-t-il une idée de la solution ?
Peu importe ce que renvoie fontAttributes...
Les attributs stylés d'une chaà®ne sont :
1. stockées dans un NSDictionary,
2. avec des clés normalisées.
Il faut une clé de nom NSFontAttributeName et dont l'objet associé est un onglet NSFont pour modifier la police. C'est écrit noir sur blanc dans la doc, donc inutile de tergiverser.
Où se trouve la clé NSFontAttributeName dans le dictionnaire que renvoie fontAttributes ?
@NSFontAttributeName ou plus simplement NSFontAttributeName
C'est quand même un piège vicieux que fontAttributes aient les noms de clés inverses !
@No
La clé dont tu parles est applicable aux objets NSAttributedString et non pas aux NSString ! Je travaille avec la doc de Panther.
J'ai essayé ton code, il ne fonctionne pas.
- (void)drawRect:(NSRect)rect {
NSRect frame=NSMakeRect(20.,20.,100.,100.);
NSString * theString=[NSString stringWithFormat:@%d,11];
NSFont * font =[NSFont systemFontOfSize:24.];
NSMutableDictionary * atts=[NSMutableDictionary dictionaryWithCapacity:2];
[atts setObject:font forKey:NSFontAttributeName];
[atts setObject:[NSColor redColor] forKey:NSForegroundColorAttributeName];
NSLog(@%@",atts);
[theString drawInRect:frame withAttributes:atts];
}
NSFontAttributeName vaut la chaà®ne @NSFont
Effectivement, il vaut mieux toujours utiliser les noms des constantes que leurs valeurs.
Tu viens une deuxième fois à mon secours ! Je te remercie. La solution fontionne correctement.
A une prochaine fois ... et merci encore.