Bonjour
Voici ma colle du jour.
Le code suivant est celui d'une vue personnalisée myView qui vire au rouge quand on clique Down dessus, et vire au bleu quand on clique Up dessus.
@interface myView : NSView {
float red, green, blue ;
}
@end
@implementation myView
- (id)initWithFrameNSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRectNSRect)rect {
[[NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1] set];
NSRectFill(rect);
}
- (void)mouseDownNSEvent*)theEvent
{
red = 1 ; blue = 0 ; green = 0 ;
[self setNeedsDisplay:YES];
}
- (void)mouseUpNSEvent*)theEvent
{
red = 0 ; blue = 1 ; green = 0 ;
[self setNeedsDisplay:YES];
}
@end
Voila.
Maintenant sous IB je crée deux vues juxtaposées dans la même fenêtre qui sont des instances de cette classe myView.
Quand je clique Down et Up dans chacune d'elles, elles alternent du rouge au bleu.
Normal jusque la.
Maintenant, je clique down sur la première, je glisse, sans relâcher la souris sur la seconde et je clique Up sur cette dernière. J'avais cru alors que la chose suivante se serait passée : la première devient rouge puis que la seconde devient bleue. Or c'est la première qui redevient bleue.
Le message mouseUp s'adresse donc à la première et non à la seconde, bien que la souris se trouve au dessus de la seconde.
Et là je sèche : comment modifier ce code pour que le message mouseUp s'adresse à la vue dans laquelle se trouve la souris au moment du relâchement, après avoir changé de vue en glissant ?
J'ai potassé les histoires de first responder mais pour l'instant je ne vois pas du tout comment aboutir selon cette voie.
Merci pour vos conseils avisés ?
Voici ma colle du jour.
Le code suivant est celui d'une vue personnalisée myView qui vire au rouge quand on clique Down dessus, et vire au bleu quand on clique Up dessus.
@interface myView : NSView {
float red, green, blue ;
}
@end
@implementation myView
- (id)initWithFrameNSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRectNSRect)rect {
[[NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1] set];
NSRectFill(rect);
}
- (void)mouseDownNSEvent*)theEvent
{
red = 1 ; blue = 0 ; green = 0 ;
[self setNeedsDisplay:YES];
}
- (void)mouseUpNSEvent*)theEvent
{
red = 0 ; blue = 1 ; green = 0 ;
[self setNeedsDisplay:YES];
}
@end
Voila.
Maintenant sous IB je crée deux vues juxtaposées dans la même fenêtre qui sont des instances de cette classe myView.
Quand je clique Down et Up dans chacune d'elles, elles alternent du rouge au bleu.
Normal jusque la.
Maintenant, je clique down sur la première, je glisse, sans relâcher la souris sur la seconde et je clique Up sur cette dernière. J'avais cru alors que la chose suivante se serait passée : la première devient rouge puis que la seconde devient bleue. Or c'est la première qui redevient bleue.
Le message mouseUp s'adresse donc à la première et non à la seconde, bien que la souris se trouve au dessus de la seconde.
Et là je sèche : comment modifier ce code pour que le message mouseUp s'adresse à la vue dans laquelle se trouve la souris au moment du relâchement, après avoir changé de vue en glissant ?
J'ai potassé les histoires de first responder mais pour l'instant je ne vois pas du tout comment aboutir selon cette voie.
Merci pour vos conseils avisés ?