setMovableByWindowBackground: et NSControl

fouffouf Membre
22:03 modifié dans API AppKit #1
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  >:)

Réponses

  • schlumschlum Membre
    22:03 modifié #2
    T'as appelé les "super" dans tes méthodes surchargées ?
  • fouffouf Membre
    22:03 modifié #3
    Oui. Enfin, sauf quand ma sous-classe de NSControl doit "avoir la main" sur les événements.
    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
  • schlumschlum Membre
    22:03 modifié #4
    Même quand elle doit avoir la main, il faut appeler le super...
  • mpergandmpergand Membre
    22:03 modifié #5
    :)

    -(BOOL) mouseDownCanMoveWindow
  • fouffouf Membre
    mai 2009 modifié #6
    dans 1241296480:

    :)

    -(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


    mouseDownCanMoveWindow
    Returns YES if the receiver does not need to handle a mouse down and can pass it through to superviews; NO if it needs to handle the mouse down.


    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).
Connectez-vous ou Inscrivez-vous pour répondre.