J'essaie d'implémenter un sélecteur de couleurs dans mon application Cocoa. (Oui, je connais NSColorPanel Je ne l'aime pas beaucoup Le point de rouler le mien est que je pense que je peux faire mieux.)La sous-classe NSColorWell ne reçoit pas les événements mouseMoved
Voici une photo de l'état actuel de mon sélecteur.
Custom viewness! http://ryanballantyne.name/forumstuff/color-picker-shot.jpg
Les puits entourant la roue de couleurs sont des sous-classes NSColorWell. Ils sont instanciés par programme et ajoutés à la vue roue de couleurs (une sous-classe NSView) en appelant addSubView sur la classe de roue de couleurs.
Je veux faire en sorte que vous puissiez faire glisser les puits de couleur autour de leurs poignées de maintien. Le début de ce voyage fait passer le curseur à une main ouverte lorsque la souris survole les poignées. Malheureusement, I can't use a cursor rect for this because most of my views are rotated. Je dois donc utiliser les événements mouseMoved et faire la détection des hits moi-même.
est ici le code d'événement de souris Je suis en train de faire le travail:
- (void)mouseMoved:(NSEvent*)event
{
NSLog(@"I am over here!\n");
[super mouseMoved:event];
NSPoint eventPoint = [self convertPoint:[event locationInWindow] fromView:nil];
BOOL isInHandle = [grabHandle containsPoint:eventPoint];
if (isInHandle && [NSCursor currentCursor] != [NSCursor openHandCursor]) {
[[NSCursor openHandCursor] push];
}
else if (!isInHandle) [NSCursor pop];
}
- (void)mouseEntered:(NSEvent*)event
{
[[self window] setAcceptsMouseMovedEvents:YES];
}
- (void)mouseExited:(NSEvent*)event
{
[[self window] setAcceptsMouseMovedEvents:NO];
[NSCursor pop];
}
- (BOOL)acceptsFirstResponder
{
return YES;
}
- (BOOL)resignFirstResponder
{
return YES;
}
Je trouve que ma méthode mouseMoved est jamais appelé. Idem pour entrée et sortie. Cependant, quand j'implémente mouseDown, celui est appelé, donc au moins quelques événements m'arrivent, mais pas ceux que je veux.
Des idées? Merci!
Ensuite, non seulement votre sélecteur s'ajoute au panneau de couleurs existant au lieu de jeter ses fonctionnalités, mais vous pouvez même l'exporter en tant que plug-in afin que l'utilisateur puisse utiliser votre sélecteur de couleurs dans n'importe quelle application. –
J'ai pensé à le faire dans les prochaines versions. D'abord, je dois me prouver que mon idée d'un meilleur sélecteur de couleurs va se développer. –