[Résolu] Impression multipage : rectForPage appelée une seule fois...
Mick
Membre
Bonjour à tous,
J'ai une view multipage à imprimer. J'avais implémenté pour Tiger et cela fonctionnait bien (code joint), mais depuis que j'ai investt dans un magnifique macbook pro avec snowleopard, seule la première page est imprimée à l'identique autant de fois qu'il y a de page. j'ai donc par exemple 4 pages identiques...
l'array lesTableaux contient des NSAttributedString construite avec des textTable.
Au débug, je m'aprerçois que la méthode rectForPage n'est appelée qu'une fois bien qu'il y ait plusieurs pages...
Quelqu'un voit un soucis ?....
J'ai une view multipage à imprimer. J'avais implémenté pour Tiger et cela fonctionnait bien (code joint), mais depuis que j'ai investt dans un magnifique macbook pro avec snowleopard, seule la première page est imprimée à l'identique autant de fois qu'il y a de page. j'ai donc par exemple 4 pages identiques...
l'array lesTableaux contient des NSAttributedString construite avec des textTable.
Au débug, je m'aprerçois que la méthode rectForPage n'est appelée qu'une fois bien qu'il y ait plusieurs pages...
Quelqu'un voit un soucis ?....
<br />@implementation TextViewCompetencesParEleves<br />- (id) initWithFrame:(NSRect)frame {<br /> self = [super initWithFrame:frame];<br /> if (self != nil) {<br /> lesTableaux=[[NSArray alloc] init];<br /> }<br /> return self;<br />}<br /><br />- (void) dealloc {<br /> [lesTableaux release];<br /> [super dealloc];<br />}<br /><br />- (void)setLesTableaux:(NSArray *)unTableau {<br /> if(unTableau!=lesTableaux) {<br /> [lesTableaux release];<br /> lesTableaux=[unTableau copy];<br /> }<br />}<br /><br />- (void)setNbreDePage:(int)pages {<br /> nbreDePage=pages;<br />}<br />- (void)setNbreDeTableauxParPage:(int)nbreTabl {<br /> nbreTableauxParPage=nbreTabl;<br />}<br />- (void)drawRect:(NSRect)rect {<br /> <br /> NSArray *lesSub=[self subviews];<br /> NSEnumerator *enumView=[lesSub objectEnumerator];<br /> id uneVue;<br /> while (uneVue=[enumView nextObject]) {<br /> [uneVue removeFromSuperview];<br /> }<br /> int i=(pageEnCours-1)*nbreTableauxParPage;<br /> NSMutableAttributedString *uneString;<br /> NSTextView *uneView;<br /> if([lesTableaux count]==0) return;<br /> uneString=[lesTableaux objectAtIndex:0];<br /> NSRect rectDUneString=[uneString boundingRectWithSize:NSZeroSize<br /> options:NSStringDrawingUsesLineFragmentOrigin];<br /> while (i<nbreTableauxParPage*pageEnCours && i<[lesTableaux count]) {<br /> uneString=[lesTableaux objectAtIndex:i];<br /> NSRect leRectADrawer=NSMakeRect(0.0,NSHeight(rectDUneString)*(i-(pageEnCours-1)*nbreTableauxParPage),NSWidth(rectDUneString),NSHeight(rectDUneString));<br /> uneView=[[NSTextView alloc] initWithFrame:leRectADrawer];<br /> [[uneView textStorage] setAttributedString:uneString];<br /> [self addSubview:uneView];<br /> [uneView release];<br /> i++;<br /> }<br />}<br /><br />- (BOOL)isFlipped {<br /> return YES;<br />}<br /><br />- (BOOL)knowsPageRange:(NSRangePointer)range {<br /> range->location=1;<br /> range->length=nbreDePage;<br /> return YES;<br />}<br /><br />- (NSRect)rectForPage:(int)page {<br /> pageEnCours=page;<br /> return [self bounds];<br />}<br /><br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En fait rectForPage est bien appelée, mais comme je retourne le même rectangle, et bien drawRect n'est pas appelé. J'ai beau mettre un setNeedsDisplayInRect dans la méthode rectForPage, rien n'y fait. Le système n'appelle pas drawRect car il croit qu'il n'a pas besoin de retracer la vue.
Comment le forcer à retracer la vue pour chaque page ? (encore un automatisme d'optimisation ... qui nous pompe l'air ! sur Tiger, drawRect était appelée même si le rectangle n'est pas déclaré "sale". C'est comme -ci la vue était "bufferisée"
Merci tout de même !
[size=8pt](et il arrive parfois que je trouve la réponse à mes questions au moment où j'écris la question sur le forum...)[/size]
Faut croire qu'on est très peu à y avoir recours ?
encore une légende urbaine.
Oui mais si on exploite pas les arbres, on n'en fera plus pousser ... :P
Et SVP amis silviculteurs, ne plantez pas des Douglas, les cèpes aiment pas du tout le Douglas, pas glop pas glop le Douglas