Incompatibilité entre setAllowsNonContiguousLayout et drawInsertionPointInRect ?

FGHFGH Membre
16:53 modifié dans API AppKit #1
Bonjour à  tous,

En copiant du code open source du traitement de texte Bean, j'ai réussi à  empêcher dans TextEdit le clignotement du curseur. Mais j'ai rencontré un bug: quand mon curseur est situé à  la fin d'une ligne, et si cette ligne n'est pas la dernière du fichier, lorsque j'efface des caractères, juste en dessous, à  gauche, apparaà®t un artefact, un petit curseur clignotant qui n'a rien à  voir avec le "vrai" et qui me fait désagréablement des clins d'oe“il... J'ai découvert que ce bug disparaissait si je remplaçais YES par NO dans la ligne:

[layoutMgr setAllowsNonContiguousLayout:YES];


Voici le contenu du fichier que j'ai ajouté à  TextEdit, qui est une simplification du code de Bean:

<br />#import &lt;Cocoa/Cocoa.h&gt;<br /><br />@implementation NSTextView ( Extensions )<br /><br />- (void) drawInsertionPointInRect: (NSRect)rect color: (NSColor *)color turnedOn: (BOOL)flag<br />{<br />&nbsp; &nbsp; static NSRect oldRect;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; { flag = YES; }<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; //make sure old non-blinking cursor gets erased properly (it wont if no display is needed)<br />&nbsp; &nbsp; if (!NSEqualRects(oldRect, rect))<br />&nbsp; &nbsp; &nbsp; &nbsp; [self setNeedsDisplayInRect:oldRect];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; //save rect for next time<br />&nbsp; &nbsp; oldRect = rect;<br />}<br /><br />@end


Ma question est donc: comment rendre compatibles, si possible, la mise en page non-contiguë (qui accélère grandement l'ouverture des gros fichiers) et la fonction ci-dessus.

Je précise que dans Bean, la mise en page non-contiguë n'est pas activée, et qui si je l'active, le même bug advient.

Merci de votre aide!

Franck

PS: ma configuration: macbook air rev 2, Snow Leopard, XCode 3.2
PS2: comme vous l'aurez sûrement deviné, je ne suis pas du tout programmeur, même amateur...

Réponses

  • Philippe49Philippe49 Membre
    16:53 modifié #2
    Bienvenu sur le site !

    Un effet de bord dans le graphisme ? Essaie de remplacer
                  [self setNeedsDisplayInRect:oldRect];
    par
                  int dX=20,dY=20;
                  [self setNeedsDisplayInRect:NSOffsetRect(oldRect,dX,dY)]; 
    et si cela fonctionne, tente de diminuer les valeurs de l'offset.
  • FGHFGH Membre
    16:53 modifié #3
    ça marche! Merci beaucoup. J'ai diminué l'offset à  1... sans rien comprendre à  ce que je fais!
Connectez-vous ou Inscrivez-vous pour répondre.