Affichage de texte

olivier555olivier555 Membre
20:44 modifié dans API AppKit #1
Bonjour!
Alors voilà  j'ai un petit problème. En fait, je dessine un trait horizontal dans ma NSImage (elle même ensuite affichée dans une NSView) de la manière suivante :
<br />[path moveToPoint:NSMakePoint(X - 3, Y)];<br />[path lineToPoint:NSMakePoint(round(X + 3, Y)];<br />[path stroke];<br />


Ca c'est bon. Ensuite, j'affiche du texte par dessus :
<br />[[[NSString alloc] initWithFormat:@&quot;%@&quot;, txt] drawAtPoint:NSMakePoint(X, Y) withAttributes:dict];<br />


Le dictionnaire a les attributs suivants :
<br />[NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@&quot;Arial&quot; size:11],NSFontAttributeName,[NSColor blackColor], NSForegroundColorAttributeName, nil];<br />


Et donc le problème c'est que le trait, affiché AVANT le texte, recouvre le texte (le trait est blanc et le texte noir), et moi évidemment je souhaite l'inverse! Vous avez une idée?? Merci!

Réponses

  • cbrandtcbrandt Membre
    20:44 modifié #2
    dessiner d'abord le texte et ensuite le trait ?
  • Eddy58Eddy58 Membre
    mars 2005 modifié #3
    Et tu dessines bien ça dans la méthode drawRect de ta NSView ? ???
    Tu as un code dans ce genre là  normalement, auquel cas je ne comprend pas pourquoi le sens de tracé est inversé...?:
    [tt]
    -(void)drawRect:(NSRect)rect
    {
    float X=100;
    float Y=100;

    NSBezierPath *path=[NSBezierPath bezierPath];
    [path moveToPoint:NSMakePoint(X - 3, Y)];
    [path lineToPoint:NSMakePoint(round(X + 3, Y)];
    [path stroke];

    [[[NSString alloc] initWithFormat:@%@", txt] drawAtPoint:NSMakePoint(X, Y) withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@Arial size:11],NSFontAttributeName,[NSColor blackColor], NSForegroundColorAttributeName, nil]];
    }
    [/tt]
  • olivier555olivier555 Membre
    20:44 modifié #4
    cbrandt > Oué j'ai essayer d'inverser l'ordre mais le résultat est le même!!
    Sinon je dessine d'abord dans une image (type NSImage) puis j'affiche cette image avec drawRect. En fait tout marche nikel sauf ça!! j'ai même essayé de changer la valeur alpha de la couleur (noir) du texte mais ya rien qui marche!!!! :crackboom:-
  • Eddy58Eddy58 Membre
    20:44 modifié #5
    D'abord je ne comprend pas comment tu peux dessiner directement dans NSImage ? ???
    Et si tu dessines directement dans drawRect ça fait quoi ?
  • olivier555olivier555 Membre
    20:44 modifié #6
    Bah pour dessiner dans une NSImage c'est simple :

    <br />[image lockFocus];<br />fonctions de dessins<br />[image unlockFocus];<br />
    


    Sinon je vais essayer de dessiner dans drawRect mais je ne pense pas pouvoir l'exploiter : les fonctions de dessin sont trop complexes (beaucoup de classes et de méthodes utilisées) et je fais un portage Mac depuis un logiciel Delphi, je ne suis donc pas totalement libre au niveau de l'architecture...
  • Eddy58Eddy58 Membre
    20:44 modifié #7
    Ha ok je comprend mieux, mais j'ai plus l'habitude de dessiner dans les views, je trouve ça plus propre...De toute façon, le faites de tracer directement dans ton image n'apporte pas plus de fonctions que de tracer directement dans une view, tu crois pas ? En tout cas je trouve bizarre cette histoire de tracé inversé....:)
  • olivier555olivier555 Membre
    20:44 modifié #8
    Oui, je suis d'accord avec toi, mais si je dessine dans une image c'est parce que je réalise un logiciel qui crée et affiche une grande image. Je décompose donc cette grande image en bandes, genre bande[0], bande[1] etc... pour pas surcharger la mémoire vidéo. Je dessine mes bandes, puis je les affiche. C'est clair que je préfèrerai tracer directement dans ma view.
  • olivier555olivier555 Membre
    20:44 modifié #9
    Pour votre gouverne, après moult essais, j'ai finalement decidé de tracer des rectangles avec bezierPathWithRect de NSBezierPath à  la place des traits. Et là  ça marche! Je comprends vraiment la logique...
Connectez-vous ou Inscrivez-vous pour répondre.