setMovableByWindowBackground: et NSControl
fouf
Membre
Je voudrais vous signaler ce comportement (que je trouve pour le moins étrange soit dit en passant) concernant setMovableByWindowBackground:.
Voila, quand on met une sous-classe (directe) de NSView en fond d'une fenêtre (la vue la plus "basse") et que l'on met movableByWindowBackground à YES pour la fenêtre qui contient cette vue, pas de problèmes, ca marche du tonnerre, on peut bouger la fenêtre en faisant un cliquer-glisser sur la vue.
Par contre si cette sous-classe est une sous-classe de NSControl, j'ai comme l'impression que cela ne marche plus du tout (mais alors là , plus du tout du tout) : la fenêtre reçoit bien les événements (mouseDragged: mouseDown: mouseUp:) mais ne bouge pas, même lorsque l'on à surcharger les méthodes mouse... dans la sous-classe.
S'il y a des gens qui savent pourquoi, je serais heureux de connaà®tre l'explication
Voila, quand on met une sous-classe (directe) de NSView en fond d'une fenêtre (la vue la plus "basse") et que l'on met movableByWindowBackground à YES pour la fenêtre qui contient cette vue, pas de problèmes, ca marche du tonnerre, on peut bouger la fenêtre en faisant un cliquer-glisser sur la vue.
Par contre si cette sous-classe est une sous-classe de NSControl, j'ai comme l'impression que cela ne marche plus du tout (mais alors là , plus du tout du tout) : la fenêtre reçoit bien les événements (mouseDragged: mouseDown: mouseUp:) mais ne bouge pas, même lorsque l'on à surcharger les méthodes mouse... dans la sous-classe.
S'il y a des gens qui savent pourquoi, je serais heureux de connaà®tre l'explication
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En l'occurrence, c'était pour faire un glisseur circulaire qui devrait donc laisser passer tous les NSEvent qui ne pointent pas sur le curseur ou sur la barre du glisseur. J'avais donc aussi penser à surcharger hitTest: mais, que dalle que couic, ça ne marche pas.
C'est pas grave, j'ai trouvé une "parade" : intégrer directement le slider dans la vue et ca marche très bien
-(BOOL) mouseDownCanMoveWindow
Ah, ca j'avais pas vu.
Cependant, ca ne répond qu'à moitié au problème sachant qu'il faut quand même que mouseDown: soit appelé dans la sous-classe
Ou alors, on récupère la position du pointeur avec [NSEvent mouseLocation] et on avise ...
J'essaye ca de suite
[edit]
mouseDownCanMoveWindow est appelée au début de l'exécution et pas à chaque clique, pas possible donc de moduler la réponse.
Ensuite, si on retourne YES, on recevra bien mouseDown: mais ni mouseDragged: ni mouseUp: si on fait l'appel à super dans mouseDown:. Donc, je ne fais pas l'appel à super, mais on va tout de même bouger la fenêtre pendant que l'on fait le cliquer-glisser, ce qui n'est vraiment vraiment pas terrible. Le seul moyen de faire fonctionner correctement le glisseur est de coller la fenêtre quelque part pour qu'elle ne bouge plus (en haut de l'écran).