Incompatibilité entre setAllowsNonContiguousLayout et drawInsertionPointInRect ?
FGH
Membre
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:
Voici le contenu du fichier que j'ai ajouté à TextEdit, qui est une simplification du code de Bean:
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...
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 <Cocoa/Cocoa.h><br /><br />@implementation NSTextView ( Extensions )<br /><br />- (void) drawInsertionPointInRect: (NSRect)rect color: (NSColor *)color turnedOn: (BOOL)flag<br />{<br /> static NSRect oldRect;<br /> <br /> { flag = YES; }<br /> <br /> //make sure old non-blinking cursor gets erased properly (it wont if no display is needed)<br /> if (!NSEqualRects(oldRect, rect))<br /> [self setNeedsDisplayInRect:oldRect];<br /> <br /> //save rect for next time<br /> 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...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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.